TWAPT — пентестим по-белому в домашних условиях
Чтобы поймать преступника, ты должен думать, как преступник, ты должен чувствовать, как преступник, ты должен сам стать преступником!
Подобную фразу можно встретить во многих детективных фильмах или триллерах, где защитники правопорядка пытаются поймать неуловимого злодея. В эпоху Интернета теми самыми неуловимыми злодеями можно назвать киберпреступников (хакеров), которым для совершения преступлений не требуется показывать своего лица, и даже не обязательно находиться в одной стране с жертвой атаки, а все их действия могут остаться анонимными. Чтобы понять как действует злоумышленником, нужно самому стать им. Однако, у Уголовного Кодекса РФ на это другие взгляды. В частности, 28 глава УК РФ регулирует преступления в сфере компьютерной информации. Как быть в этом случае специалисту по информационной безопасности, если нарушать законодательство — плохая идея, а понять как мыслит злоумышленник все же необходимо? На помощь приходят бесплатные площадки тестирования на проникновение, где любой желающий может попробовать свои силы в пентесте, прокачать собственные навыки и использовать полученные знания для повышения уровня защищенности своей компании. Есть 2 типа площадок:
онлайн;
оффлайн.
К онлайн относят довольно популярные ресурсы: Test lab от Pentestit, hackthebox, pentesterlab, Root me и многие другие. Все эти площадки довольно популярные и останавливаться на них мы не будем. Сегодня мы поговорим про оффлайн площадку TWAPT.
Статья носит информационный характер. Не нарушайте законодательство.
TWAPT
Домашняя страница
Сам по себе проект задумывался как сборник нескольких оффлайн платформ для тестирования на проникновение.
Весь набор представлен в виде Docker-контейнеров, которые можно просто скачать и запустить за «пару кликов». Но перед этим необходимо установить (на примере Debian 10):
Docker# apt update
# apt install apt-transport-https ca-certificates curl gnupg lsb-release
# curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# apt update
# apt install docker-ce docker-ce-cli containerd.io
# apt update
# curl -L "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# docker-compose --version
Скачивание и запуск контейнеров происходит командами:
# git clone https://github.com/MoisesTapia/TWAPT
# cd TWAPT
# docker-compose up -d
Чтобы узнать какой порт заняло то или иное веб-приложение нужно выполнить команду:
# docker-compose ps
Вероятно, предполагалось, что от пользователя кроме запуска контейнера больше нчиего не потребуется, но в реальности некоторые контейнеры после запуска требуют дополнительных манипуляций. Например, после запуска контейнера с bWAPP требуется перейти по адресу localhost:8082/install.php и произвести установку БД для корректной работы, после этого можно продолжать пользоваться. А в случае с VulnWordpress нужно скрипт start.sh запустить самостоятельно внутри контейнера. Для этого необходимо:
Узнать ID контейнера:
# docker ps -a
Запустить оболочку контейнера:
# docker exec -ti /ID контейнера/ bash -c "/bin/bash"
Самостоятельно выполнить script.sh.
После этого можно произвести установку WordPress.
Состав набора
Mutillidae
Mutillidae — язвимое веб-приложение, поддерживаемое организацией OWASP, которое включает в себя порядка 40 различных веб-уязвимостей, которые актуальны для OWASP Top Ten 2007, 2010, 2013 и 2017. На сайте присутствуют подсказки для прохождения заданий, а если приложение стало некорректно работать, то можно кнопкой «Reset DB» сбросить настройки БД и восстановить работоспособность веб-приложения. Такая же функция есть почти у всех ресурсов, которые представлены ниже.
bWAPP
bWAPP (buggy web application) — это бесплатное, намеренно небезопасное веб-приложение с открытым исходным кодом. Тоже охватывает все уязвимости, присутствующие в OWASP Top Ten.
Для каждой задачи можно установить уровни сложности, которые можно повышать. Например, выберем задачу с перебором пароля:
уровень Low;
На первом уровне для перебора требуется только ввести логин и пароль.
уровень Medium;
Уже сложнее, для каждого запроса используется собственный salt, который обновляется.
уровень High.
Самый сложный вариант, когда для входа необходимо пройти капчу.
WebGoat
WebGoat — это заведомо небезопасное приложение, которое позволяет тестировать уязвимости, обычно обнаруживаемые в приложениях, написанные на Java и использующих популярные компоненты с открытым исходным кодом.
DVWAP
DVWAP — уязвимое веб-приложение, написанное на PHP и использующее MySQL в качестве базы данных. Среди уязвимостей, которые представлены в веб-приложении, собраны множество типов инъекций, XSS, LFI/RFI, уязвимости капчи и т.д. Также присутствует 3 уровня сложности, но в отличие от того же bWAPP есть четвертый уровень — impossible, где невозможно проэксплуатировать уязвимость и разработчики дают краткое пояснение почему. После первого запуска контейнера необходимо нажать кнопку «Setup/Reset DB» для установки базы данных.
Bricks
Bricks — еще одно веб-приложение, написанное на PHP. Из набора уязвимостей, которые используются в составе платформы: различные уязвимости страницы аутентификации, формы загрузки файлов, а также SQL-инъекции. Из плюсов можно назвать подсказку по команде, которую для наглядности формирует и отправляет веб-приложение к базе данных. Поэтому можно смотреть какой запрос был отправлен, корректен ли он и как его можно изменить. В целом, набор заложенных уязвимостей немного уступает тем же bWAPP или DVWAP.
Juice-Shop
Juice-Shop — уязвимое веб-приложение, написанное на Node.js, Express и Angular и представляет из себя типичный пример интернет-магазина с 1–2 присущими ему уязвимостями, перечисленными в OWASP Top Ten, такими как Injection, XSS, Broken Authentication, Broken Access Control, Sensitive Data Exposure и т.д.
NinjaWeb
NinjaWeb, как и на всех предыдущих платформах, использует уязвимости, находщиеся в OWASP Top Ten. Приятным бонусом для данной платформы также стало наличие подсказок и полноценное прохождение задания в случае затруднений, не требующее от пользователя искать прохождение на сторонних ресурсах.
VulnWordPress
VulnWordPress — чистый CMS WordPress, где можно установить уязвимый компонент и проверить наличие уязвимости.
Тестирование WAF
Заведомо уязвимые веб-приложения хороши еще и тем, что на их примере можно оценить работу средств защиты, например, WAF. Достаточно на локальном сервере развернуть платформу, а в случае с Docker-контейнером это сделать достаточно просто, и настроить работу WAF на уязвимое веб-приложение. Теперь мы не просто изучаем как эксплуатируются веб-уязвимости, но и пробуем обойти средства защиты, чтобы еще больше приблизиться к реальным условиям, с которыми сталкивается злоумышленник при атаках.
Попробуем протестировать веб-приложение DVWAP, защитив его с помощью Nemesida WAF Free (бесплатная версия), который обеспечивает защиту на основе сигнатурного анализа. Для сегодняшнего тестирования этого будет достаточно. Но у сигнатурного анализа, несмотря на все его преимущества, есть недостатки, например, база сигнатур находится в открытом доступе и злоумышленник, используя ее, может составить запрос, который позволит обойти защиту. Тем не менее, если база сигнатур составлена качественно, то и уровень защиты веб-приложения будет высоким.
Итак, протестируем один из самых популярных классов уязвимостей согласно OWASP Top Ten — инъекции.
Command injection
Пробуем подставить команду в поле для проверки доступности сервера:
127.0.0.1; ls /
От данной атаки Nemesida WAF Free не смог защитить. Тогда попробуем прочитать файл /etc/passwd.
2021/04/13 10:57:23 [error] 6261#6261: *11 Nemesida WAF: the request 8c137c6199bfdb63851c0c7b15468897 blocked by rule ID 1559 in zone BODY, client: 192.168.0.135, server: dvwa.site.lan, request: "POST /vulnerabilities/exec/ HTTP/1.1", host: "dvwa.site.lan", referrer: "http://dvwa.site.lan/vulnerabilities/exec/"
В error.log видим блокировку по правилу 1559. Обращаемся к базе сигнатур и смотрим сигнатуру, по которой был заблокирован запрос:
В первом случае запрос не был заблокирован, но это сделано для того, чтобы веб-приложение могло нормально функционировать т.к. в противном случае любой URL будет блокироваться из-за знака »/». Во втором случае на основе сигнатур запрос был заблокирован.
Попробуем обойти блокировку, для этого воспользуемся инструментом Commix.
# python commix.py -u http://dvwa.site.lan/vulnerabilities/exec/ -d "ip=127.0.0.1&Submit=Submit" -p "ip"
В результате все атаки были заблокированы.
SQLi
Теперь тестируем более известный вид инъекций, защитив уязвимое веб-приложение Nemesida WAF Free.
# sqlmap -u 'http://dvwa.site.lan/vulnerabilities/sqli/?id=1*&Submit=Submit' --dbs --random-agent
Все попытки эксплуатации уязвимости заблокированы:
Попробуем добавить скрипты для обфускации пейлоадов, доступные в SQLmap. Но это не принесло результатов:
XSS
Последними в списке будут не менее популярные XSS. Для тестирования воспользуемся инструментом XSStrike:
# python3 xsstrike.py -u 'http://dvwa.site.lan/vulnerabilities/xss_r/?name='
В стандартной конфигурации Nemesida WAF Free заблокировал все атаки:
Вывод
TWAPT однозначно отличная площадка для проверки и оттачивания навыков в области практической информационной безопасности, которая позволяет специалисту тренироваться и развиваться не нарушая законодательство. К тому же, метод защиты заведомо уязвимых стендов для проверки работы WAF, пожалуй, один из лучших способов его тестирования и при грамотном составлении базы сигнатур вероятность эксплуатации уязвимостей заметно сокращается. Методы атак веб-приложений и обхода средств защиты с каждым днем развиваются. Так или иначе, когда-нибудь сигнатурный анализ уже будет не так эффективен как сейчас. Однако, в Nemesida WAF используется модуль машинного обучения Nemesida AI, который за счет использования поведенческих моделей, построенных на основе запросов к конкретному веб-приложению, позволяет значительно повысить точность выявления атак с минимальным количеством ложных срабатываний. Также реализован механизм выявления ботов, смс-флуда, защиты от атак методом пебора паролей