Сегодня защита веб-приложения имеет решающее значение, поэтому осваивать пентест инструменты приходится и самим разработчикам. О мощном фреймворке WPScan для пентеста WordPress мы уже писали, но сайты бывают и на других движках. Именно поэтому сегодня разберем более универсальный пентест-инструмент OWASP ZAP (Zed Attack Proxy). OWASP (Open Web Application Security Project) — всемирная некоммерческая организация, деятельность которой направлена на повышение безопасности ПО. OWASP ZAP (Zed Attack Proxy) — один из самых популярных в мире инструментов безопасности. Это часть сообщества OWASP, а значит, что этот инструмент абсолютно бесплатный. Он предназначен для пользователей с широким спектром опыта в области безопасности, поэтому отлично подходит для разработчиков и функциональных тестировщиков, которые плохо знакомы с пентестами. ZAP создает прокси-сервер между клиентом и вашим сайтом. Пока вы перемещаетесь по своему веб-сайту, он фиксирует все действия, а затем атакует сайт известными методами. Проект был запущен в 2010 году, но до сих пор дорабатывается и регулярно обновляется. ZAP является кроссплатформенным и для своей работы требует только наличия JAVA 8+. Поэтому можно обойтись без Kali Linux или других ОС для белого хакинга. При запуске ZAP предложит сохранить сеанс. Если мы хотим получить конфигурацию своего веб-сайта или результаты тестирования позже, тогда следует сохранить сеанс, а пока можно выбрать значение: «No,I do not want to persist the session...».  С точки зрения теста на проникновение, пассивное сканирование — это безобидный тест, который ищет только ответы и проверяет их на наличие известных уязвимостей. Пассивное сканирование не изменяет данные сайта, что делает его более безопасным. Активное сканирование атакует веб-сайт различными известными методами. Активное сканирование может изменять данные и вставлять вредоносные скрипты. Поэтому лучше таким образом тестировать сайты, которые развернуты на локальном хосте, как мы уже делали с нашей пентест лабораторией WordPress. Давайте кратко рассмотрим макет пользовательского интерфейса ZAP, чтобы понять основы. На следующем экране перечислены окна с 4мя разделами.  В верхнем левом углу экрана видны режимы, которых всего 4: Здесь будут перечислены все сайты, к которым мы получаем доступ через ZAP. 2.1 — Показывать только URL-адреса. Желательно включить эту опцию, так как после первых тестов данный раздел будет сильно засорен. Чтобы сфокусироваться на целевом веб-сайте необходимо поставить на него флаг «In Scope».  Окно рабочей области состоит из 3 вкладок: 3.1 — Окно быстрого запуска. Это самый быстрый и прямой способ начать активное сканирование. Введите адрес целевого веб-сайта и нажмите кнопку атаки. Сначала он краулит веб-сайт, а затем выполняет активное сканирование. 3.2 — Окно запроса и ответа. Это наиболее часто используемые части пользовательского интерфейса. На вкладке запроса вы видите, что окно разделено на 2 части: Окно ответа аналогично окну запроса и показывает:  Нижнее окно показывает: Самая важная вкладка здесь — вкладка «Alerts». 4.1 — Вкладка «Alerts». Показывает уязвимости, обнаруженные на целевом веб-сайте. Когда мы щелкаем по одному из предупреждений в списке, открывается соответствующий запрос/ответ в правом верхнем углу и выводится точная информация об уязвимости. Давайте посмотрим, что произошло на предыдущем изображении. Запрос POST выполняется по адресу http://localhost:22742/api/TokenAuth/Authenticate. Пользователь входит в систему с учетными данными и сервер возвращает ошибку http-500. HTTP-500 Internal Server Error. OWASP ZAP считает, что это проблема. И в 3-м окне вы увидите некоторую информацию о ней. Он показывает точный URL и желтый флаг (средний риск). В описании говорится: Эта страница содержит сообщение об ошибке/предупреждении, которое может раскрывать конфиденциальную информацию, такую как расположение файла, вызвавшего необработанное исключение. Эта информация может быть использована для дальнейших атак на веб-приложение. Предупреждение может быть ложным, если сообщение об ошибке находится на странице документации. Это круто, потому что OWASP ZAP чувствует некоторую утечку информации. Он подозревает, что веб-сайт выдает необработанное исключение. Это может быть действительно уязвимым, когда веб-сайт показывает злоумышленнику некоторый стек исключений и предоставляет информацию о среде или коде. Но в нашем примере ответ представляет собой содержимое JSON, в котором говорится «Invalid user name or password», но разработчик предпочитает отправлять его через HTTP-500. Это ложное срабатывание, поскольку никакая информация не раскрывается.  В разделе решения содержится информация о том, как решить проблему.  В более ранней версии OWASP ZAP приходилось настраивать прокси-сервер вашего браузера для захвата запросов, но сейчас есть полезная функция JxBrowser! Это браузер на основе Chromium, интегрированный в OWASP ZAP. По умолчанию в нем настроена вся конфигурация прокси, что позволяет OWASP ZAP пропускать через него весь трафик. Нажмите "Launch Browser" и перейдите на свой веб-сайт.  Чтобы извлечь дерево веб-сайта необходимо просканировать его в JxBrowser. Нужно поразить все функции и пройти все возможные действия. Данный этап очень важен! Краулинг сайта означает сканирование всех ссылок и получение структуры веб-сайта. О других краулерах мы уже писали ранее. Краулинг нужен лишь в тех случаях, когда получить ко всему доступ только с помощью навигации не удалось. Он может обнаружить моменты, которые были упущены, а также когда проксирование невозможно. Для его запуска щелкните правой кнопкой мыши на сайт и выберите в меню «Attack», а затем нажмите «Spider». Убедитесь, что напротив пункта «recurse» стоит флажок! Нажмите кнопку «Start Scan». Это займет некоторое время в зависимости от количества ссылок на вашем сайте. Если это веб-сайт SPA, тогда необходимо дополнительно указать, что параметры представляют структуру, а не данные приложения.  Если охватить все функции и действия своего SPA-сайта, то не нужно будет краулить его. Owasp добавило площадку расширений, ознакомиться со списком которых можно с помощью значка 3х цветного прямоугольника. Чтобы установить расширение, щелкните вкладку Marketplace и введите имя расширения в поле. Затем нажмите кнопку «Install Selected». Перезагружать ZAP не нужно. Несколько полезных расширений:  Рекомендуем использовать следующие настройки сканирования. В меню «Analyse» выберите «Scan Policy Manager». Нажмите кнопку «Modify». В окне «Scan Policy» установите «Low» => «Threshold To All» и нажмите кнопку «Go». То же, как и с Insane => Strength To All и нажмите кнопку Go. Все атаки будут сохранены в памяти, а сканирование будет более надежным. Для сохранения настроек нажимаем кнопку Ок.  Атака на целевой сайт очень проста. 1 — Добавьте свой сайт в контекст. Для этого щелкните правой кнопкой мыши целевой веб-сайт на левой панели. Выберите: Теперь вы видите, что во всплывающем окне появляется новый URL-адрес веб-сайта, который добавляет ваш веб-сайт как регулярное выражение. Звездочка (*) в URL-адресе означает атаку на все URL-адреса этого веб-сайта. Наконец, жмем кнопку ОК.  2 — Показать только URL-адреса в текущей области. Таким образом мы скрываем другие веб-сайты и предотвращаем случайные атаки.  3 — Запускаем краулинг.  4 — Атака! Это главная цель. Запустим активное сканирование.  Кнопка «Start Scan» запустит процесс, который может занять много времени (в зависимости от количества URL-адресов).  Фаззинг — это отправка неожиданных или случайных данных на входы веб-сайта. Обычно мы проверяем вводимые данные на стороне клиента, поэтому игнорируем некоторые проблемы в серверной части. Когда вводятся нечеткие ключевые данные (например, основной поисковый ввод на веб-сайте или входные данные на странице входа), можно увидеть ошибки кодирования и лазейки в безопасности. Это необязательный шаг безопасности.  Если вы хотите запустить фаззер, тогда в левой части панели найдите запрос, который хотите обработать. Щелкните правой кнопкой мыши и выберите «Attack», затем нажмите «Fuzz». В окне фаззера будут видны данные для публикации запроса. Нажмем на них и выделим текст, который желаем атаковать. На правой панели нажмите кнопку «Add». Вы увидите окно Payloads. Снова нажмите кнопку «Add». В окне «Add Payload» выберите «File Fuzzers» в поле со списком типов. Выберите файл, который хотите использовать. Этот файл представляет собой базу данных, которая будет использоваться для брутфорса. Брутфорсить сайты на WordPress можно другими методами, о которых мы уже писали ранее. Когда процесс брутфорса закончится, результаты будут перечислены на нижней вкладке под названием Fuzzer. Те, которые помечены как Fuzzed, требуют особого внимания.   Краулер ищет известные URL-адреса с органическими ссылками, но он не может найти URL-адрес, который нигде не упоминается на сайте. В этом случае на помощь приходит принудительный просмотр, который использует брутфорс словари, чтобы проверить, есть ли какие-либо другие скрытые URL-адреса, такие как панель администратора или что-то, что можно взломать.  Break — очень хорошая функция для перехвата и изменения запросов и ответов. Если вы хотите изменить какие-либо данные публикации запроса или данные ответа, щелкните на сайт правой кнопкой мыши, выберите «Break», в окне «Add Break Point» нажмите «Save». Теперь на нижней панели будет видно, что точка останова включена. Отныне все запросы будут перехватываться инструментом OWASP ZAP. Всякий раз, когда вы делаете запрос с исходного веб-сайта, окно ZAP выводится на передний план и позволяет вам изменить запрос. После того, как вы нажмете зеленую кнопку воспроизведения на панели инструментов, ZAP выдаст вам отправленный сервером ответ. Этот ответ также можно изменить. Таким образом, ваш браузер получит измененный ответ.  Мы хорошо просканировали сайт на предмет известных уязвимостей и пришло время ознакомиться с результатами. Увидеть проблемы можно на вкладке «Alerts», расположенной в нижней панели. На следующем экране представлены 5 предупреждений с цветными флажками. Если нет красного флага, тогда вам повезло. Если красные флажки есть, тогда в первую очередь необходимо поработать над их устранением.  Если никаких предупреждений не видно, возможно, что-то было сделано не так. Когда вы щелкаете одно из предупреждений, отображается соответствующее окно запроса и ответа. Есть хороший инструмент для создания отчетов, который автоматически создает удобный файл отчета. Можно экспортировать отчеты в форматах:  В качестве примера выберем HTML.   Как видите, это хорошо организованный итоговый отчет, который в исходном виде можно отправлять любому коллеге.