Найти тему

Жизнь за пределами Metasploit Framework, сравниваем альтернативы

Оглавление

Предисловие

Идея статьи родилась в ходе исследования способов автоматизации рутинных действий при проведении тестирования на проникновение. Данная мысль возникает, когда исследователь понимает, что в лучшем случае копирует одни и те же команды, в худшем – печатает их на клавиатуре вручную. Моя личная цель автоматизации – экономия самого ценного ресурса, который у нас есть. Времени. Надеюсь, что данная статья позволит и вам сделать это, а также потратить его на более творческие вещи, чем поиск, к примеру, способа реализации туннелирования в Windows-сетях.

Я понимаю и поддерживаю исследователей, которые используют ручное тестирование в целях обучения и при решении нестандартных ситуаций. А для всего остального есть MasterCard… автоматизация).

Что хотелось бы автоматизировать и почему не Metasploit Framework?

Чаще всего целью внутреннего тестирования на проникновение является получения наивысших привилегий в исследуемой инфраструктуре. В зависимости от желаний заказчика это может быть и компрометация наибольшего количества узлов c описанием эксплуатации всех существующих популярных уязвимостей, и получение полного доступа к рабочей станции главного системного администратора, и реализация бизнес-рисков, выделенных руководством. В любом случае перед пентестером зачастую стоит задача собрать воедино множество крупиц информации в тестируемой сети, которые добываются на протяжении всего процесса работ. Если мы рассматриваем тестирование на проникновение как моделирование атаки злоумышленника, то средства и уровень автоматизации должны соответствовать. От этого напрямую зависит скорость получения доступа к критичным данным, а также их полнота. Одним из популярных средств автоматизации являются решения типа RAT/C&C, позволяющие агрегировать все получаемые доступы, произвести ряд некоторых повторяющихся действий на большом количестве узлов, обеспечить закрепление в тестируемой сети. В данной статье будет рассмотрено одно из таких средств, а также выделен функционал, который является наиболее используемым. Изложенная информация посвящена менее распространенному решению, поскольку хочется понять, насколько данные средства являются менее детектируемыми по сравнению с популярными, к примеру, Metasploit Framework, и имеют ли они достаточный функционал.

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

  • Простота развертывания;
  • Наличие поддержки проекта;
  • Кроссплатформенность агентов, использующихся для связи с командным сервером;
  • Наличие механизмов обхода средств защиты на узле в процессе генерации нагрузки;
  • Наличие механизмов обхода средств защиты при взаимодействии с командным сервером;
  • Автоматизация методов закрепления в системе;
  • Автоматизация поиска/получения чувствительной информации (в основном учетные данные);
  • Возможность организации динамического перенаправления портов;
  • Наличие встроенной функции сканирования портов;
  • Наличие встроенных модулей проверки возможности повышения привилегий;
  • Наличие встроенной функции прослушивания/записи сетевого траффика.

Pupy

Установка и поддержка проекта

https://github.com/n1nj4sec/pupy

Для рассмотрения был выбран проект Pupy – кроссплатформенный RAT, имеющий в своем арсенале множество методов постэксплуатации. Проект преимущественно написан на Python 2. Его отличительной чертой является стремление к максимальному охвату эксплуатируемых операционных систем, а также исполнение вредоносного Python-кода, модулей и расширений, написанных на C.

Средство поддерживается для операционных систем Debian 9 и Kali Rolling. Также предоставляется поддержка любой операционной системы, если используется официальный Docker-образ. Но не все так просто…. Данный пункт я сначала я хотел выделить как отдельный комментарий, так как он является довольно объемным и не особо интересным для прочтения. В итоге для всех, кто планирует протестировать данное средство, ссылки на решения и решения некоторых проблем, с которыми столкнулся я, представлены ниже:

Генерация агентов и организация взаимодействия

Тестирование функционала средства производилось в собственной лаборатории и на основании инфраструктуры endgame Hades портала HackTheBox.

После запуска нас встречает напоминание о неправомерности использования средства без соглашения с владельцем и интерактивная оболочка.

-2

Взаимодействие организуется путем запуска listener с определенным способом передачи, который зачастую реализуется путем использования конкретного протокола. Я протестирую два вида организации соединения: SSL+RSA и Websocket с RSA+AES. Стоит также отметить, что чрезмерное использование шифрование значительно замедляет скорость взаимодействия. Данный факт стоит учитывать особенно в условиях работы через всевозможные туннели.

-3

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

-4
-5
-6

Наиболее интересными мне показались агенты, позволяющие выполнять вредоносный код из памяти. На Windows-системе было принято решение протестировать два типа: ps1_onliner и .NET_oneliner.

Перед генерацией агента .NET_oneliner возникла проблема отсутствия пакета для компиляции. Проблема была решена путем обращения к issues на github.

Процесс генерации агента заключается в создании нового фрагмента кода на языке C# и последующей его компиляции при помощи mcs. Pupy выводит на экран готовую команду для запуска на целевой системе. Процесс организации канала представлен на рисунках ниже.

-7
-8
-9

В данной конфигурации Kaspersky Security Cloud блокирует запуск. Обход данного механизма защиты решился довольно банальным способом – отказом от использования опции enc. Успешный запуск и организация канала представлены ниже.

-10
-11

Статистика по детектированию исполняемого файла на ресурсе virustotal представлена ниже.

-12

Далее протестируем вариант агента ps1_oneliner. Данный вектор с точки зрения доставки состоит из двух этапов: скачивание лоадера, а затем скачивание нагрузки. По аналогии с описанными выше действиями был сгенерирован агент, использующий в качестве канала взаимодействия связку криптографического протокола SSL со слоем RSA. Стоит обратить внимание, что данная конфигурация заметно уменьшает скорость взаимодействия.

-13

Данный вариант доставки нагрузки был заблокирован при помощи AMSI. Текущие способы обхода данного компонента защиты Microsoft Windows хорошо описаны в статье моего товарища, с которой я очень советую ознакомиться. Мы на данном вопросе не будем останавливаться. Используем лишь один из вариантов обхода:

$a = ‘System.Management.Automation.A’;$b = ‘ms’;$u = ‘Utils’
$assembly = [Ref].Assembly.GetType((‘{0}{1}i{2}’ -f $a,$b,$u))
$field = $assembly.GetField((‘a{0}iInitFailed’ -f $b),‘NonPublic,Static’)
$field.SetValue($null,$true)

-14
-15

Аналогичным образом протестируем агента для Linux-систем. В качестве нагрузки будем использовать исполняемый файл в формате elf. Взаимодействие агента с сервером организуется путем канала websocket, созданного ранее. В качестве лабораторного стенда использовался endgame Hades с платформы www.hackthebox.eu. Выполнение созданного агента осуществляется посредством уязвимости внедрения команд операционной системы. Более детальный разбор уязвимости можно посмотреть здесь.

-16
-17
-18

Хоть антивирус и не частый гость на Unix-системах, результаты проверки на ресурсе virustotal представлены ниже.

-19

Обобщая изложенный материал по генерации агентов и организации клиент-серверного взаимодействия, можно сделать вывод, что в решении Pupy используются основные средства обхода средств защиты. Исполнение из памяти и нераспространенность данного решения позволяют скрыть от антивирусных средств вредоносную активность. Тесты производились на Kaspersky Security Cloud и Microsoft Defender с актуальными базами обновлений. Также средство имеет широкий спектр способов организации клиент-серверного взаимодействия с разными типами шифрования.

Способы закрепления

В Pupy cуществует отдельный модуль, отвечающий за закрепление на узле жертвы под названием persistence. Его функционал в основном нацелен на Windows-системы, поэтому рассмотрим только этот случай. Также стоит отметить, что в зависимости от привилегий доступны разные методы закрепления. В данной статье будут рассмотрены стандартный пользователь, пользователь с правами локального администратора, пользователь с привилегиями NT AUTHORITY\SYSTEM.

Модуль persistence имеет довольно краткую справку, но ее вполне достаточно для ознакомления.

-20

Также стоит отметить, что при генерации агентов по умолчанию встроен механизм установления соединения в случае его потери. Данный вариант возможен только, если нагрузка все еще находится в запущенном состоянии.

-21

Рассмотрим варианты закрепления, которые могут «пережить перезагрузку». Для пользователя со стандартными привилегиями мы имеем следующие способы:

-22

Все доступные способы в моем случае не дали результатов. Обращение к реестру и использование приложения «Cortana» приводит к блокированию действий посредством антивируса и разрыву соединения. Приложение «People» в моем случае недоступно. Вариант автозапуска является единственно рабочим. Для тестирования был выбран «Калькулятор». Создание недетектируемого при помощи антивируса исполняемого файла, хранящегося в файловой системе, является трудозатратной задачей. При этом раскрывается алгоритм обхода средств защиты. Обычно это приводит к блокированию всех нагрузок, созданных при помощи данной последовательности действий в ближайшем будущем.

-23
-24

Встроенные функции закрепления в Windows-системах являются оберткой проекта WinPwnage.

-25

Создание пакетного файла формата bat в данном случае невозможно из-за ограничений, в рамках которых создается файл. Код представлен здесь.

-26

Путем ручной доставки и нагрузки, которая используется при генерации агента формата .NET_oneliner, было произведено закрепление двумя способами. Первый – связка пакетного файла формата bat, в котором происходит запуск PowerShell-скрипта, второй – одиночный пакетный файл.

-27
-28
-29
-30

Оба способа при этом через некоторое время блокируются антивирусным средством.
В случае наличия сессии с высокими привилегиями нам доступны практически все имеющиеся методы.

-31

К сожалению, ситуация с блокированием посредством антивируса повторяется практически на всех доступных способах. Pupy содержит в себе большинство методов закрепления в Windows-системах. Проект WinPwnage, посредством которого реализован функционал данного модуля, поддерживается (на момент написания статьи последние правки в проект вносились 16 октября 2021 года). Для обхода средств антивирусной защиты необходимо использовать либо полностью ручные методы, либо связку автоматизированных методов с недетектируемой нагрузкой.

Способы постэксплуатации

Разберем основные возможности постэксплуатации, которые есть в данном средстве для Windows-систем. В первую очередь отметим, что повышение привилегий от локального администратора до NT AUTHORITY\SYSTEM в нашем случае может быть выполнено при помощи модуля getsystem.

-32

Список и краткую информацию обо всех доступных модулях можно получить при помощи команды help -M.

-33

Начнем с тех, которые используются для поиска аутентификационных данных. Далее будет рассмотрены модули, которая доступны в основном для Windows-систем (хотя ряд из них поддерживают и Unix-системы). Отдельная трудность в рассмотрении – отсутствие и документации, и подробной справки. Данный фактор очень сильно тормозил рассмотрение и понимание происходящих процессов.

Модуль lazagne

https://github.com/AlessandroZ/LaZagne

Как выяснилось, данный модуль по умолчанию использует все категории учетных данных, которые доступны (lazagne и lazagne all аналогичны).

-34
-35

Также в исходниках были найдены и другие категории: hashdump, cachedump, credfiles. Полный список размещен в репозитории LaZagne. Я не погружался в реализацию данного решения, но есть определенные проблемы с кодировками (возможно при использовании в Pupy). Тестируемая система не содержала специфичных мест хранения паролей, кроме браузера, в котором учетные данные не были обнаружены (хотя таковые были).

Модуль loot_memory

В моем случае не дал результатов. Производится поиск в памяти процессов на предмет наличия паролей в открытом виде.

Модуль creddump

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

-36
-37

Модуль mimishell/mimikatz

Запуск mimishell (интерактивный режим mimikatz) в стандартной конфигурации не срабатывал из-за ошибок, поэтому был протестирован модуль mimikatz в двух режимах: с работающим и с отключенным антивирусом. Также стоит отметить, что исполняемые файлы формата exe по умолчанию не были найдены в моем контейнере. Вместо этого в системе находился zip-архив, из которого необходимо было извлечь содержимое. Для корректной работы необходимо проверить, что в конфигурационном файле проекта правильно указаны пути до исполняемых файлов mimikatz.

-38

Работающий антивирус

-39
-40

Отключенный антивирус

-41
-42

Также в исходниках была найдена стандартная команда запуска модуля.

-43

Модуль search позволяет искать разного рода файла по именам, содержимому и другим признакам, поддерживая при этом регулярные выражения.

Модуль forward

Для динамического перенаправления портов в Pupy существует отдельным модуль под названием forward. Он реализует локальное и удаленное перенаправление портов с поддержкой SOCKS-proxy.

Я продемонстрирую локальное динамическое перенаправление портов с использование SOCKS-proxy, а также сканирование узла из другой подсети на наличие открытых портов при помощи nmap.

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

Модуль port_scan

Далее рассмотрим встроенную функцию сканирования портов, реализованную посредством модуля port_scan.

Данное средство подходит для сканирования некоторого диапазона IP-адресов по небольшому количеству портов для принятия стратегических решений по захвату сети.

Модули повышения привилегий

Рассмотрим модули, которые созданы для тестирование возможности повышения привилегий: beroot, privesc_checker, exploit_suggester. Ни один их них не дал хоть каких-то результатов.

Модуль tcpdump

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

Модули на Unix-системах

Похожим образом по порядку рассмотрим применение модулей на Unix-системе. Группа поиска учетных данных отработала везде без ошибок, но не дала никаких результатов, кроме флага endgame Hades.

Модуль forward справился со своей задачей на отлично.

Модуль сканирование портов port_scan.

Группа модулей повышения привилегий частично отработала. Beroot также не был исполнен из-за ошибок.

Модуль tcpdump также не был исполнен из-за ошибок.

Выводы

Подводя итог, хочется обобщить все вышеописанное. Для того, чтобы как-то оценить данное средство, я выделил плюсы, которые позволили мне сэкономить время, и минусы, которые отняли у меня (очень много) времени, отчасти на основании пунктов, которые приведены в начале статьи.

Плюсы:

  • Кроссплатформенность агентов;
  • Запуск исполняемых файлов из памяти;
  • Использование компилятора mcs для генерации нагрузки;
  • Шифрование траффика при взаимодействии агентов и сервера;
  • Удобный механизм управления сессиями;
  • Встроенное динамическое перенаправление портов;
  • Встроенное сканирование портов.

Минусы:

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

В целом, я остался доволен работой данного средства, хоть и не стал бы его советовать. Для простых задач может подойти, но придется постоянно бороться с неработающим функционалом и в итоге большинство модулей запускать вручную. Выбирая между широко используемым Metasploit Framework и Pupy, я бы остановился на первом, так как не нашел каких-то преимуществ у второго.

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