
C# Инструменты разведки целевых атак
Это пользовательская сборка .NET, которая выполняет ряд действий по ситуационной осведомлённости. В настоящее время доступно несколько наборов функций:
Когда я писал этот инструмент, я не знал, что разрабатывается GhostPack; мы опубликовали свои инструменты примерно в одно и то же время. На самом деле GhostPack теперь намного функциональнее. Я удаляю функцию PrivescCheck, потому что SharpUp покрывает все её возможности и даже больше.
Ключевой момент: всё реализовано на чистом .NET — никакого PowerShell.
Инструмент настраивается и управляется через параметры командной строки, что делает его пригодным для использования с директивой Beacon execute-assembly.
Этот модуль получает с хоста несколько блоков информации. Предупреждаю: вывод может быть ОЧЕНЬ большим. Будут отображены:
В командной строке необходимо передать глагол 'basic', а затем конкретную проверку. Если в качестве второго параметра передано слово 'all', будут выполнены все проверки.
Обратите внимание: если используется 'all', автоматически включается 'proxycheck http://www.google.com'. Подробности см. в разделе о proxycheck.
Выполнить все базовые проверки: beacon> execute-assembly /tmp/Reconerator.exe или beacon> execute-assembly /tmp/Reconerator.exe basic all
Выполнить только перечисление MRU: beacon> execute-assembly /tmp/Reconerator.exe basic mru
Вывести только сетевые диски: beacon> execute-assembly /tmp/Reconerator.exe basic mappeddrives
Относительно безопасно. Выполняется запрос к системному реестру; вряд ли это будет отслеживаться.
Этот модуль позволяет выполнять LDAP-запросы. Проще всего продемонстрировать это на примере.
Этот запрос покажет всех пользователей домена 'dc=stufus,dc=lan' с контроллером домена W2K8DC:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "objectClass=user" 0
Этот запрос покажет максимум 5 пользователей домена 'dc=stufus,dc=lan' с контроллером домена W2K8DC:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "objectClass=user" 5
Этот запрос покажет всех членов группы администраторов домена 'dc=stufus,dc=lan' с контроллером домена W2K8DC:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "(&(objectClass=group)(cn=Domain Admins))" 0
Этот запрос покажет всех членов групп администраторов домена или предприятия домена 'dc=stufus,dc=lan' с контроллером домена W2012DC:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2012DC/dc=stufus,dc=lan" "(&(objectClass=group)(|(cn=Enterprise Admins)(cn=Domain Admins)))" 0
Это приведёт к генерации сетевого трафика к указанному контроллеру домена. Для ясности: используется LDAP (а не RPC или что-то подобное).
Выполняет DNS-запрос с использованием DNS-сервера хоста.
Разрешить www.google.com:
beacon> execute-assembly /tmp/Reconerator.exe resolvehost www.google.com
Это приведёт к генерации DNS-запроса к контроллеру домена, но вряд ли это вызовет сигнал тревоги из-за большого объёма легитимных DNS-запросов.
Этот модуль позволяет взаимодействовать с Windows Search (ранее — служба индексирования Windows), что позволяет очень быстро искать интересные файлы и папки (и их содержимое). Обычно индексируются письма, но сетевые папки — нет, поэтому поиск домашних каталогов пользователей, если они хранятся удалённо, может быть неидеальным. Однако этот метод очень быстрый.
Интерфейс Windows Search похож на SQL; данная реализация позволяет, по сути, указать содержимое предложения 'WHERE'. Проще всего объяснить на примерах, но для полного ознакомления с возможными критериями необходимо изучить MSDN.
Найти всё, что было проиндексировано и содержит где-либо слово 'password' (т.е. поиск по содержимому файлов и писем):
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "CONTAINS('password')"
Найти всё, что было проиндексировано и содержит слово 'stufus' в пути или имени файла:
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "System.ItemPathDisplay LIKE '%stufus%'"
Найти всё, что было проиндексировано и содержит слово 'stufus' в имени файла ИЛИ содержит слово 'secret':
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "System.ItemName LIKE '%stufus%' OR CONTAINS('secret')"
Мне неизвестно о чём-либо, что могло бы посчитать это подозрительным.
Этот модуль возвращает прокси-сервер, который будет использоваться для посещения указанного URL. Это сделано для случаев, когда для разных URL могут использоваться разные прокси или действуют сложные исключения. Интересующий URL передаётся в качестве параметра.
Обратите внимание: если указан 'basic all' (см. выше), автоматически выполняется проверка прокси для http://www.google.com, исходя из предположения, что большинство организаций используют один исходящий прокси для всего невнутреннего интернет-трафика.
Отобразить прокси-сервер, который будет использоваться при посещении www.google.com:
beacon> execute-assembly /tmp/Reconerator.exe proxycheck www.google.com
Отобразить прокси-сервер, который будет использоваться при посещении https://www.mwrinfosecurity.com:
beacon> execute-assembly /tmp/Reconerator.exe proxycheck https://www.mwrinfosecurity.com
Это локальное действие, и оно легитимно; мне неизвестно о чём-либо, что могло бы посчитать его подозрительным.
Этот модуль проверяет несколько векторов повышения привилегий и сообщает, возможны ли они. В настоящее время их количество равно 1.
Как и в модуле BASIC, в командной строке можно указать privesccheck all для выполнения всех проверок, или конкретную проверку при необходимости.
В командной строке необходимо передать глагол 'basic', а затем конкретную проверку. Если в качестве второго параметра передано слово 'all', будут выполнены все проверки.
| Проверка | Описание |
|---|---|
| alwaysinstallelevated | Определяет, установлен ли ключ 'AlwaysInstallElevated' в 1 или нет. Если установлен, любой MSI-файл будет запущен с правами локального администратора. |
| Проверка | Примечания |
|---|---|
| alwaysinstallelevated | Это локальный запрос к реестру; вряд ли что-то пометит его как вредоносный. |
Выполнить все проверки повышения привилегий:
beacon> execute-assembly /tmp/Reconerator.exe privesccheck all
Проверить только ключ реестра AlwaysInstallElevated:
beacon> execute-assembly /tmp/Reconerator.exe privesccheck alwaysinstallelevated
Скомпилируйте в Visual Studio 2019. В настоящее время сборка ориентирована на .NET v4. При желании это можно изменить в настройках компиляции.
| Проверка | Описание |
|---|
| env | Отображает все переменные окружения. |
| info | Отображает IP-адрес хоста и номер основной/дополнительной версии ОС. |
| mru | Выполняет поиск по различным спискам «недавно использовавшихся». В настоящее время включает историю окна «Выполнить» и MRU файлов и путей Office для всех версий Word, Excel, PowerPoint, Access, Publisher и Visio. Также отображает расположение специальной папки «Недавние». |
| favourites | Отображает URL, хранящиеся в папке избранного (фактически это закладки пользователя). В настоящее время не поддерживает подпапки; это нужно исправить. |
| mappeddrives | Отображает сетевые диски из сеанса пользователя. Полезно для быстрого поиска центральных файловых ресурсов и домашних каталогов. Если диск смонтирован, на нём, вероятно, есть полезные данные. |
| installedapplications | Выводит список установленных приложений. Включает приложения, установленные администратором (локально) И приложения, установленные текущим пользователем. Они хранятся в разных местах реестра. |
| onedrive | Отображает информацию о OneDrive (включая синхронизируемые сайты/арендаторов Teams). |