сервером – веб-сервер, а протоколом взаимодействия между ними – веб-протокол Базовый состав • Веб-браузер • Веб-сервер / Сервер приложений • СУБД Определение
Текущий подход: разрабатывать приложения защищенными, а не полагаться на внешние механизмы защиты Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при этом с ума Как правильно защищать приложения
в самом приложении • Legacy • Third-party Необходимый механизм защиты отсутствует или сложно реализуем • Защита от подбора паролей • Управление доступом • Защита от нежелательной автоматизации Необходимо немедленно устранить обнаруженную уязвимость до ее реального устранения в исходном коде А что если …?
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
ввода приложения не определены • Язык моря определен неточно (HTTP) • Островные языки (значения параметров) не определены вообще Язык ввода приложения должен быть регулярным или детерминированным контекстно-свободным WAF и LangSec
Известные – реальные параметры приложения • Неизвестные – приложение «не знает» о таких параметрах • Доверенные – значения параметров устанавливается доверенными субъектами • Недоверенные – значения параметров контролируются недоверенными субъектами Общий подход
генерируются на стороне сервера и не меняются Известные недоверенные параметры – генерируются на стороне клиента, но их язык может быть описан Неизвестные параметры – не могут быть описаны, например, генерируются на стороне клиента с произвольными именами и значениями Источники данных о параметрах • HTTP-ответы • Приложение (SAST, DAST) • Конфигурация Общий подход
известных параметров в разрешимых, как правило, регулярных языках, задаваемых в конфигурации Распознавание неизвестных параметров в языках атак или аномалий Общий подход
Недостаточное (неэффективное) распознавание (insufficient recognition) – распознавание КС-языка с помощью конечного автомата (регулярного выражения) Различие парсеров (Parser differentials) – один и тот же ввод распознается парсерами по-разному Теория формальных языков M. Patterson, S. Bratus, etc. The Seven Turrets of Babel: A Taxonomy of LangSec Errors and How to Expunge Them
• ModSecurity: HMAC Token Protection • F5 Networks ASM: Dynamic Content Value • Citrix NetScaler: Form signature ASP.NET Framework • Event Validation • View State MAC Механизм защиты
Form Signature • Form Signing • Request Signing Терминологически это неверно: подпись подразумевает, что любой желающий может проверить истинность подписи, а в данном случае такая проверка доступна только для владельца секретного ключа Корректный термин – аутентификация сообщения, формы или запроса, механизм аутентификации сообщений – MAC Как правильно?
для различных клиентов Наличие в формах опциональных элементов • Checkbox • Option • Radio Идентификация защищаемых форм в HTTP-ответах Идентификация скрытых элементов форм в HTTP-запросах Ввод данных на стороне клиента Сложности на практике
name="vehicle" value="Bike"> I have a bike<br> <input type="checkbox" name="vehicle" value="Car" checked> I have a car<br> <input type="submit" value="Submit"> </form> </html> </body> POST /demo/ HTTP/1.1 Host: server.com Content-Type: application/x-www-form-urlencoded vehicle=Bike&vehicle=Car
p', h(k, p) Server: h(k, p) = h(k, p') Как использовать этот протокол если значение p формируется в браузере на основе ввода пользователя? Ввод данных на стороне клиента
Проверка наличия токена 4. Для POST-запроса по полученному URL выполняется поиск политики 5. Если политика найдена, то распаковываются данные из токена 6. Проверка опциональных и скрытых полей, если они есть 7. Формирование ABS и его проверка Метод проверки токена
средствами JavaScript • Необходимо различать запросы, отправленные средствами веб-форм от запросов AJAX • Нельзя защитить формы, отправляемые на сервер методом GET Ограничения
Eluding Network Intrusion Detection. Secure Networks, Inc. 1998. Ivan Ristic. Protocol-Level Evasion of Web Application Firewalls. Основные принципы нормализации • Приведение обрабатываемых данных к такому же формату и виду, к каким приведет его защищаемое веб-приложение • Эквивалентный парсинг Нормализация
атак Имеется L – регулярный язык атак, заданный регулярными выражениями R Если входное слово принадлежит языку L, т. е. допускается одним регулярным выражением из R, то входное слово – атака Лексический подход
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
данный подход был адаптирован для обнаружения XSS Реализован в библиотеке libinjection Основные идеи • Выполняется токенизация значения в соответствии с заданной грамматикой в 3-х контекстах • Строится свертка • Последовательность первых пяти токенов ищется в базе сигнатур • База сигнатур строится по популярным векторам атак Лексико-сигнатурный подход
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) Chrome/50.0.2661.102 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 Text=Dancin' like a robot on fire
работе Роберта Хансена и Мередит Паттерсон «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 Введение
парсеров целевых компьютерных систем, для предотвращения уязвимостей типа «parser differentials» • DOMPurify • DOMSanitizer Грамматические • libdetection (Wallarm) • libdejection (PT AF) Виды подходов
построенном дереве разбора s по грамматике G содержится хотя бы одна опасная инструкция • 11111 • alert(1) Базовая идея – с использованием готового парсера построить дерево разбора; если дерево разбора содержит запрещенные узлы-нетерминалы, то исходная строка является инъекцией Характеристики подхода • Возможность использования готовых парсеров • Универсальность • Эвристичность Ленивый метод
типов узлов Для уменьшения числа ложных срабатываний могут быть использованы дополнительные проверки на основе родительских или дочерних узлов Что делать, когда дерево разбора не может быть построено? ""};alert(1);var f={t:" Поиск вредоносного кода
инъекцией в контексте CTX? 1. Построить tokens – список токенов s в CTX 2. Построить дерево разбора для S в CTX 3. Если в дереве есть запрещенные узлы, то S – инъекция 4. Иначе удалить из S следующий токен 5. Если S – непустая строка, то перейти на шаг 2 Метод поиска с левым приведением
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…"
и отдельных параметров • Запрещенные узлы ESTree Реализация дополнительных проверок в модулях Acorn Предустановленные профили защиты Тестирование Минимизация ложных срабатываний
HTML, MathML and SVG" Адрес проекта https://github.com/cure53/DOMPurify Особенности • Точный механизм • Инструмент для разработчиков • Удаление вредоносного и запрещенного кода из HTML / MathML / SVG • Поддерживает механизм хуков DOMPurify
HTML document using DOMParser */ var doc, body; try { doc = new DOMParser().parseFromString(dirty, 'text/html'); } catch (e) {} /* Some browsers throw, some browsers return null for the code above DOMParser with text/html support is only in very recent browsers. See #159 why the check here is extra-thorough */ if (!doc || !doc.documentElement) { doc = implementation.createHTMLDocument(''); body = doc.body; body.parentNode.removeChild(body.parentNode.firstElementChild); body.outerHTML = dirty; } … };
в атаке • SAST • DAST Особенности • Использование механизма правил, а не сигнатур • Возможно использование сложных алгоритмов защиты (CSRF, IDOR) Ryan Barnett. WAF Virtual Patching Challenge Виртуальный патчинг
наличия уязвимости Знать, как есть: доказать наличие этих условий в анализируемом коде защищаемого приложения Устранить хотя бы одно из необходимых условий путем изменения исходного кода защищаемого приложения В. Кочетков. Автоматическая генерация патчей для уязвимого исходного кода Как сгенерировать патч
наличия уязвимости Знать, как есть: доказать наличие этих условий в защищаемом приложении Сделать невозможным выполнение хотя бы одного из необходимых условий путем изменения запросов к защищаемому приложению Как сгенерировать виртуальный патч
найденным уязвимостям создается отчет • Отчет содержит перечень найденных уязвимостей и автоматически сгенерированные эксплойты • По полученным эксплойтам генерируются сигнатуры и итоговые правила виртуальных патчей Метод защиты
разработать защищенное веб-приложение и не сойти с ума? Д. Колегов, А. Реутов. 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