Технологии безопасности

Сайт посвященный вопросам безопасности

Оптимизация и автоматизация тестирования веб-приложений

(adsbygoogle = window.adsbygoogle || []).push({});

В этой статье я расскажу о том, как оптимизировать и автоматизировать процессы тестирования на проникновение с помощью специализированных утилит и их расширений.

Тестирование на проникновение условно можно разделить на два этапа:

автоматизированное тестирование;
ручное тестирование.

Плюсы и минусы автоматизированного тестирования

Плюсы:
При автоматизированном тестировании, как правило, значительно экономится время тестирования, можно покрыть большую площадь веб-приложения за меньшее время.

Большое количество проверок. Автоматизированные системы содержат огромное количество паттернов атак, признаков уязвимостей, и, как правило, расширяемы.

Перебор файлов и папок, подбор паролей — тут, я думаю все понятно и так.

Регламентное сканирование и процедуры инвентаризации — для этих целей автоматизированные системы подходят лучше всего.

Минусы:
False positive срабатывания. Очень часто сканеры руководствуясь формальными признаками выявляют уязвимости, которых нет. Классика жанра — при сканировании Single Page Application сканер получает код ответа 200 на все свои запросы и выводит длинный список уязвимостей, которых на самом деле нет.

Они «очень шумные». При сканировании сайта создается очень много событий в журналах веб-сервера, по которым легко определить атаку.

Нагрузка на веб-сервер. Иногда автоматизированное сканирование может дать ощутимую нагрузку на веб-сервер, что может привести к нестабильной работе веб приложения (хотя этот минус относится к конфигурированию веб-сервера).

Блокирование средствами защиты. Как правило, признаки автоматизированных систем хорошо знакомы разработчикам и они учитывают их при проектировании. Как итог — происходит блокировка (по User Agent, маркерам сканера или частоте запросов).

Не учитывают ошибки логики.

Требуют ручной валидации уязвимостей.

Построение эффективных автоматизированных систем, оптимизированных под веб-приложение

Для того, чтобы автоматизированная система была максимально эффективна, она должна обладать следующими возможностями:

расширение функционала, в том числе с помощью сторонних модулей;
мультиформатность результатов тестирования;
импорт/экспорт результатов тестирования;
стандартизированные результаты тестирования;
возможность сравнения результатов;
возможность интеграции системы в более сложную.

Эти факторы позволят построить систему, отвечающую вашим требованиям и целям.

В качестве примера «готовой системы» могу привести описанную мной ранее Sparta. Для того, чтобы тестирование было максимально эффективным, контролируемым, а также для комфортной валидации уязвимостей необходимо учитывать все компоненты системы, архитектуру тестируемого приложения и связность решений.

Прокачиваем утилиты

В качестве оптимальной основы предлагаю остановится на двух кроссплатформенных системах для тестирования веб-приложений (как в ручном, так и в автоматизированном режиме): OWASP ZAP (free версия) и BurpSuite (free + платная версии).

Самое важное отличие этих систем от классических сканнеров — это принцип работы: сканнер «долбит по сайту» напрямую, выявляя те или иные признаки уязвимостей, зачастую пропуская огромные участки веб-приложения. А Zap и Burp работают в качестве проксирующего механизма, позволяющего добавить все области сайта (как встроенным «пауками», так и при ручном серфинге приложения). Также, важной особенностью является возможность «на лету» разбирать каждый запрос.

Огромным плюсом этих приложений является возможность расширения с помощью плагинов/компонентов:

магазин приложений (готовые решения);
интеграция сторонних модулей (вне магазина приложений);
написание собственных (кастомизированных под конкретный проект).

В качестве примера приложения предлагаю рассмотреть уязвимое веб-приложение со следующими характеристиками:

известная CMS;
поддержка плагинов/компонентов;
содержит уязвимости (в том числе OWASP A1 — sql injection);
содержит средства защиты.

Исходя из этих данных нам необходимо выбрать и использовать следующие компоненты (минимальный набор).

Owasp ZAP:
Установленные:

Необходимо установить:

Здесь необходимо выбрать те инструменты, которые помогут выявлять и эксплуатировать уязвимости, обозначенные в списке выше.

Burp Suite:
Честно признаюсь, Burp мне нравится больше чем Owasp Zap, поэтому остановлюсь на нем подробнее.

Нам необходимо выполнить задачу по идентификации CMS и установленных компонентов, выявить устаревшие версии, попытаться обойти WAF и проэксплуатировать SQL-инъекцию.

В первую очередь необходимо придерживаться методологии тестирования веб-приложения. В этом нам поможет представленный на последнем Def Con HUNT Burp Suite Extension:

Определяем общие параметры для определенных классов уязвимостей.
Организовываем методологию тестирования внутри Burp Suite.

Далее нам пригодится плагин (уже добавленный в BApp store плагин от Vulners.com (@isox, avleonov — спасибо за замечательный инструмент).

Также, может быть полезен расширенный набор фаззинга для sql-инъекций (которого нет в бесплатной версии — sql и не только.

Далее, ускорить «раскручивание» инъекции нам поможет sql map — для его интеграции необходимо воспользоваться плагином SQLiPy:

Нам известно, что веб-приложение защищено WAF — могут пригодится расширения What the WAF и Waf bypass.

Также рекомендую плагин от Владимира Иванова: burp-xss-sql-plugin.

В качестве средства автоматизации можно использовать встроенный сканнер, либо воспользоваться инструментом Burp Automator:

Требования:

burp-rest-api
Burp Suite Professional
slackclient

Этот инструмент позволит автоматизировать проверки, использую в качестве основы Burp Suite:

$ python burpa.py -h

###################################################
__
/ /_ __ ___________ ____ _
/ __ / / / / ___/ __ / __ `/
/ /_/ / /_/ / / / /_/ / /_/ /
/_.___/__,_/_/ / .___/__,_/
/_/
burpa version 0.1 / by 0x4D31

###################################################
usage: burpa.py [-h] [-a {scan,proxy-config}] [-pP PROXY_PORT] [-aP API_PORT]
[-rT {HTML,XML}] [-r {in-scope,all}]
[—include-scope [INCLUDE_SCOPE [INCLUDE_SCOPE …]]]
[—exclude-scope [EXCLUDE_SCOPE [EXCLUDE_SCOPE …]]]
proxy_url

positional arguments:
proxy_url Burp Proxy URL

optional arguments:
-h, —help show this help message and exit
-a {scan,proxy-config}, —action {scan,proxy-config}
-pP PROXY_PORT, —proxy-port PROXY_PORT
-aP API_PORT, —api-port API_PORT
-rT {HTML,XML}, —report-type {HTML,XML}
-r {in-scope,all}, —report {in-scope,all}
—include-scope [INCLUDE_SCOPE [INCLUDE_SCOPE …]]
—exclude-scope [EXCLUDE_SCOPE [EXCLUDE_SCOPE …]]

Как результат вы получите отчет о проведенном сканировании:

Заключение

Я намеренно не рассматривал готовые сканеры типа w3af (или платные аналоги), позволяющие проводить такие работы, где использование сводится к существующему функционалу (и установки чекбоксов у опций), а постарался раскрыть интересные плагины и доработки для проксирующей утилиты Burp Suite — как наиболее популярного и эффективного инструмента.

Для того чтобы максимально эффективно применять инструменты автоматизированного тестирования необходимо иметь базис ручной проверки, для более точной настройки системы.