Привет, Хабр! Если вы это читаете — значит, вы интересуетесь кибербитвой Standoff. Эта статья первая из цикла, цель которого познакомить с платформой всех, кто мечтает поучаствовать в кибербитве впервые. Интересно будет и матерым игрокам — ведь даже самая незначительная крупица опыта коллеги может стать неоспоримым преимуществом во время кибербитвы.
На связи Антипина Александра (N3m351d4) aka капитан команды Cult. Если ваш опыт не похож на наш, мы всем комьюнити будем рады узнать, как участвует в Standoff ваша команда. Ждем ваши истории в комментариях ?
Новичкам кажется, что команды делают нечто невообразимо сложное. Это неправда. На самом деле для решения любой задачи достаточно знаний среднестатистического специалиста по анализу защищенности, а добрая треть задач поддастся даже студенту, имеющему опыт игры в CTF и решения уязвимых машин на любой из доступных площадок. Тем не менее, чтобы победить, надо будет приложить немало усилий. Мы с командой добились отличных результатов благодаря сбору информации и обмену знаниями на протяжении нескольких лет. Это говорит о том, что нет ничего невозможного!
Давайте же рассмотрим, из чего состоит онлайн-полигон, что нужно знать, чтобы его ломать, как реализовывать недопустимые события и начать путь к званию сильнейшего хакера.
Из чего состоит онлайн-полигон
Системы, развернутые на онлайн-полигоне, во многих аспектах схожи с инфраструктурой кибербитвы Standoff. Поэтому я настоятельно рекомендую вам ознакомиться с ними.
По задумке разработчиков, онлайн-полигон является моделью государства либо нескольких государств, представленных набором виртуальных компаний и отраслей экономики. Большинство отраслей на полигоне системообразующие для реальных государств: подобные инфраструктуры либо их части могут быть категорированы как КИИ.
Одна из критически важных отраслей — энергетика. На полигоне в качестве примера энергетической компании представлена организация HighTechEnergy.
Как и в реальной жизни, инфраструктура компании в виртуальном государстве может быть представлена несколькими веб-приложениями, доступными извне: к примеру, сайтом и веб-сервисами для сотрудников и клиентов. Кроме того, организация может иметь свой почтовый сервер, CRM-систему и файловые хранилища, доступные из корпоративной сети VPN. Не стоит забывать и о пользователях — их рабочие станции зачастую объединены в домен для удобного администрирования. Сами пользователи имеют разные должности и права, в том числе на доступ к сетевым корпоративным ресурсам.
Инфраструктуры компаний могут быть схожими, но технологический сегмент всегда является уникальным. Получение несанкционированного доступа к нему повлечет за собой реализацию самых весомых критически опасных событий, задевающих благосостояние всего виртуального государства.
Выше изображено схематичное представление виртуального офиса: внешний и внутренний периметр, пользовательский, серверный и технологический сегменты.
Внешний периметр и его разновидности
Внешний периметр онлайн-полигона во время соревнований может быть представлен по-разному. Два наиболее часто встречающихся варианта:
Классический — аналогичный внешнему периметру компаний на онлайн-полигоне Standoff (см. рис. 2). Может быть представлен несколькими эксплуатируемыми веб-приложениями, среди которых обязательно будет сайт компании, и VPN-сервером (для подключения сотрудников к внутренней сети).
С гейтами (см. рис. 3). Гейт — это сервер с одним или несколькими веб-приложениями, имеющий сетевую связность с внутренней сетью (классический вариант может подобной связности не иметь).
В зависимости от способа организации внешнего периметра изменяются количество и варианты путей получения первоначального доступа. Далее мы рассмотрим, какие векторы атак применимы к каждой из схем.
Как ломать внешний периметр
При организации периметра первым (классическим) способом могут быть следующие варианты развития событий (см. рис. 4).
Первый вариант — соберите информацию с веб-сервисов внешнего периметра. Там можно обнаружить VPN-конфигурацию и адреса электронной почты доменных пользователей для подключения к внутренней сети. Дополнительно, используя полученную информацию, можно провести фишинговую атаку: отправить письма под учетной записью, предоставленной организаторами. После этого инициируйте VPN-подключение к внутренней сети.
Вторым вариантом могут быть сбор информации (адресов электронной почты) с серверов внешнего периметра и последующая фишинговая атака с полезной нагрузкой, позволяющей установить обратное соединение с компьютера сотрудника компании.
Если вы встретили инфраструктуру с гейтами, то одним из самых очевидных векторов атаки будет удаленное выполнение кода (RCE) на гейте и построение туннеля во внутреннюю сеть.
Следует отметить, что, когда на внешнем периметре есть гейты, организаторы не предоставляют участникам учетные записи для фишинга. Соответственно, чтобы провести фишинговую атаку, потребуется собрать информацию, подобрать учетные данные или выполнить другие манипуляции для получения доступа к почтовому серверу и последующей отправки писем.
Разведка сети и сканирование портов
Представим, что вы выбрали компанию, которую будете атаковать, прочитали ее описание и узнали, что скоуп внешнего периметра выглядит так, как на рисунках ниже.
В случае если вам дан диапазон IP-адресов, имеет смысл сначала определить работающие узлы, а уже затем — открытые порты и доступные сетевые сервисы. Так разведка внешнего периметра пройдет быстрее. Если внешний периметр представлен набором известных IP-адресов, то можно сразу приступать к поиску открытых портов и определению сервисов.
Зачастую перед началом кибербитвы организаторы дают командам файлы с результатами сканирования внешнего периметра утилитой nmap, чтобы снизить нагрузку на сеть. Если вам предоставили подобный файл, вы сразу можете приступить к сбору информации и поиску уязвимых сервисов, минуя разведку. К сожалению, на следующий день внешний периметр может слегка поменяться и вам потребуется провести сканирование заново.
Какие же утилиты использовать для разведки сети? Существует огромное количество сканеров с открытым исходным кодом, которые можно скачать или получить в составе дистрибутивов, таких как Kali Linux. Например, сканировать сеть, искать открытые порты и определять сервисы можно с помощью следующих инструментов:
nmар (и другого софта на его основе, например Zenmap). Он крайне популярен у пентестеров и имеет огромное количество параметров для любого случая.
masscan.
Перед сканированием сети важно не только выбрать нужные параметры, но и верно задать ограничение на количество отправляемых сканером запросов в секунду, иначе вас могут заблокировать.
Сбор информации и поиск уязвимых сервисов
Получив список IP-адресов открытых портов, имеющихся сервисов и их версий, вы можете приступить к дальнейшему сбору информации:
Если вам доступен веб-сервер, поищите на нем дополнительную информацию. Например, соберите адреса электронной почты, указанные на сайте, чтобы позже провести фишинговую атаку. Дополнительно попробуйте найти скрытые страницы и каталоги веб-сервиса с помощью перебора — в этом вам помогут утилиты dirsearch, gobuster и их многочисленные аналоги. Так можно выявить потенциально важные для реализации критически опасных событий файлы, информацию о версии веб-сервиса и его плагинов, о версии сервера и прочие данные.
Если вам встретились сервисы, работающие по протоколу SMB или FTP, можно попробовать получить к ним анонимный доступ или провести атаку с перебором паролей (например, при помощи Hydra).
На первоначальном этапе можно найти известные уязвимости и эксплойты, опираясь на информацию о версиях сервисов, полученную по результатам сканирования. Для этого используются:
Exploit Database — сайт, на котором хранятся эксплойты к некоторым уязвимостям (или SearchSploit, его версия для командной строки).
Сайт cve.mitre.org или его аналоги.
Поисковые запросы, содержащие название программного обеспечения и его версию: Wing FTP Server 4.3.8 exploit, Wing FTP Server 4.3.8 CVE и т. п.
Обнаружив уязвимый сервис и эксплойт, вы сможете, например, удаленно выполнить код (RCE) на атакуемом вами узле. Но не все уязвимости можно проэксплуатировать подобным образом. Далее мы рассмотрим поиск и эксплуатацию неверсионных недостатков веб-приложений.
Поиск и эксплуатация веб-уязвимостей
Итак, представим, что перед нами веб-сервис, не содержащий версионных уязвимостей. Необходимо протестировать его и либо убедиться, что в нем не заложены уязвимости, либо обнаружить недостаток и проэксплуатировать его.
Первый вариант тоже важен: сервисы могут быть развернуты для сбора информации и иного взаимодействия.
За эксплуатацию веб-уязвимостей можно получить баллы, влияющие на вашу позицию в рейтинге. На рисунке ниже представлен список уязвимостей, отчеты о которых принимает жюри.
Немного о каждом из перечисленных типов:
Path Traversal — часто встречается на онлайн-полигоне и довольно просто эксплуатируется.
SQLi — вторая по частоте в моем личном рейтинге. Обычно ее можно проэксплуатировать перехватив запрос к сервису с помощью Burp Suite и использовав sqlmар.
SSRF и XXE — очень редко встречаются на онлайн-полигоне.
RCE — выполнить код на целевом устройстве зачастую становится возможно в ходе эксплуатации цепочки уязвимостей (например, вы нашли SQLi и с ее помощью выполнили код).
LPE — проэксплуатировать эту уязвимость невозможно без предварительного выполнения кода (то есть без RCE).
Как искать подобные уязвимости, в двух словах рассказать не получится. Почитать о том, что они собой представляют, можно на сайте OWASP. Там же можно ознакомиться с методологией тестирования веб-приложений (OWASP Web Security Testing Guide). Еще вам обязательно пригодятся:
Платформа Burp Suite — для тестирования приложений.
Web Security Academy (PortSwigger) — для тренировки навыков.
Инструмент sqlmap — для внедрения SQL-кода (конечно, с ограничением количества отправляемых запросов).
Скрипты LinPEAS и WinPEAS — для поиска векторов повышения привилегий (LPE) в системах.
Минимальные знания и опыт поиска веб-уязвимостей, которые можно получить участвуя в программах bug bounty (например, на платформах CTFlearn, Root Me, Standoff Bug Bounty, TryHackMe).
Постэксплуатация на узлах внешнего периметра
Если вам удалось проэксплуатировать уязвимость типа RCE либо LPE на одном из узлов внешнего периметра, имеет смысл определить:
пользовательские файлы (ключи, документы, скрипты, VPN-конфигурации);
запущенные сервисы (например, обнаружив базу данных SQL, можно получить учетные данные для спреинга);
сетевые интерфейсы и их связность с другими сетями (например, веб-сервер внешнего периметра типа «гейт» обязательно имеет доступ к ранее недоступной вам подсети — вы сможете просканировать ее, развернуть прокси-сервер и получить доступ к новым серверам).
Механики фишинга
Как я упоминала, иногда возможно получить доступ к внутренней сети через узлы внешнего периметра. Кроме того, на онлайн-полигоне реализована механика фишинга, представленная в двух вариантах:
Участники получают учетные записи на внешнем почтовом сервере, с которого должны проводиться атаки.
Учетные данные не выдаются, и фишинговые атаки проводятся с почтового сервера во внутренней сети.
Для того чтобы отправлять фишинговые письма, необходимо заранее найти доменные адреса электронной почты пользователей. Обычно они имеют вид g_loves@city.stf, где g — первая буква имени пользователя, loves — фамилия, city — название компании, stf — повторяющийся домен верхнего уровня. Адреса часто можно собрать с узлов на внешнем периметре.
Во втором варианте, когда письма рассылаются с почтового сервера во внутренней сети, вам потребуется знать не только адреса электронной почты, но и пароли от них, чтобы войти в клиент для отправки писем. Пароли учетных записей, обнаруженных на внешнем периметре, часто простые — их можно подобрать по словарю.
Обычно перед битвой организаторы выдают участникам словарь для подбора паролей, чтобы снизить нагрузку на сеть и уменьшить затрачиваемое на этот этап время.
Если вы отправили письмо на верный адрес, вам ответит бот. Варианты ответа зависят от того, было ли вложение открыто и запущено. Соответственно, если бот пишет, что не видит вложения, — вы прикрепили файл не того формата либо с полезной нагрузкой что-то не так. Если же бот отвечает, что ваше письмо — это то, чего он ждал, либо что он получил файл и у него все работает, значит, ему удалось открыть ваше письмо и запустить полезную нагрузку. Если бот не ответил на письмо в течение 10 минут, имеет смысл написать в поддержку и узнать, корректно ли он работает и должен ли этот пользователь читать письма (не все это делают).
Далее расскажем, как создать письмо с вложением для фишинга на онлайн-полигоне.
Генерация фишинга
Фишинговое письмо должно содержать полезную нагрузку, позволяющую выполнить команду на компьютере сотрудника компании. На полигоне боты могут открывать письма с различной вредоносной нагрузкой — это может быть, например, файл, ссылка или плагин.
Рассмотрим создание вредоносной нагрузки на примере файлов Microsoft Word формата DOC, наиболее часто используемых для фишинга. В подобных файлах есть поддержка макросов, с помощью которых можно выполнять код на компьютере жертвы (при условии, что она разрешит выполнение макроса).
Существует большое количество способов создания макросов: можно писать их самостоятельно либо использовать утилиты для генерации (например, msfvenom и macro_reverse_shell). Скрипт macro_reverse_shell также популярен для генерации макросов для фишинга. Запуская его, необходимо указать IP-адрес вашего устройства и порт, на котором вы будете слушать входящие соединения, развернуть слушатель на указанном выше порте (например, с помощью nc) и отправить письмо с макросом на адрес для фишинга. Если все сделано верно, то вы получите доступ к компьютеру сотрудника виртуальной компании.
Протестировать советы и скрипты вы можете на онлайн-полигоне Standoff. Следует учитывать, что на новых сегментах полигона работает антивирус — Windows Defender. Однако спустя некоторое время другие пользователи могут его отключить, и вы встретите меньше трудностей, чем на соревнованиях Standoff.
Далее рассмотрим, как подготовить полезную нагрузку, не детектируемую антивирусными решениями.
Обход антивируса
На соревнованиях мы часто сталкиваемся с антивирусными решениями на целевых узлах, поэтому необходимо заранее проверять фишинговые документы на предмет их детектирования. Существует несколько вариантов проверки. Первый — отправка на сайт VirusTotal. Он позволяет узнать, сколько антивирусов посчитают ваш файл вредоносным и, соответственно, заблокируют его. Второй — тестирование в реальной системе. Этот вариант более приемлемый: создаваемые условия полностью соответствуют целевым, возможно отладить код и протестировать его работу.
Необходимо, чтобы во время тестирования виртуальные машины не имели доступа к интернету. Это нужно, чтобы Windows Defender не отправлял семплы полезной нагрузки на сервер.
Тестирование проходит следующим образом:
Разверните две виртуальные машины и настройте между ними сеть. Если вы тестируете фишинг для Windows, то одной из виртуальных машин должна быть система с Windows, а второй — атакующая система, с которой будет установлено соединение.
Создайте документ и запишите в него сгенерированный макрос с указанием порта и адреса атакующей виртуальной машины, на которой развернут слушатель.
Откройте документ и разрешите выполнение макроса.
В идеальном случае с атакующей виртуальной машиной будет установлено обратное соединение. Но если этого не произошло и на целевой виртуальной машине появилось уведомление от антивируса, необходимо изменить нагрузку.
Чтобы обойти антивирус, вы можете:
найти альтернативные скрипты для генерации нагрузки;
самостоятельно написать обфусцированный код;
поискать обфускаторы для макросов в интернете и на GitHub.
Когда полезная нагрузка заработает на целевой виртуальной машине, вы можете попробовать протестировать ее в системе, имеющей доступ в интернет. Вот несколько статей, в которых описан процесс обхода антивируса:
Malicious VBA Macro’s: Trials and Tribulations — статья о генерации полезной нагрузки для фишинга с последующей обфускацией макроса с помощью EvilClippy и macro_pack и с обходом антивируса.
VBA Obfuscation — сборник утилит для обфускации макросов.
MS Word Macros with Powercat Reverse Shell — подробный пример создания письма с вредоносным макросом для ранних версий Windows.
Ориентируясь на указанные выше статьи и обращаясь с подобными запросами к интернету, вы сможете узнать о большом количестве способов обхода антивирусов, в частности Windows Defender.
Важно понимать, что подобрать работающий обфускатор или генератор макросов — задача достаточно сложная и ресурсоемкая: как только новый софт появляется в открытом доступе, разработчики антивируса стараются нивелировать его действие.
На этом все! Надеюсь, что статья была полезна. Напоминаю делиться вашим опытом участия в Standoff в комментариях ?
До встречи уже в следующей статье, где я расскажу про взлом внутреннего периметра.
N3m351d4 @L1-1on
Капитан команды Cult на Standoff