Выуживание персистентности из Windows
Что это?
Trawler — это скрипт PowerShell, предназначенный для помощи специалистам по реагированию на инциденты в обнаружении потенциальных индикаторов компрометации на хостах Windows, с основным фокусом на механизмы персистентности, включая запланированные задачи, службы, изменения реестра, элементы автозагрузки, модификации бинарных файлов и другое.
В настоящее время Trawler может обнаруживать большинство техник персистентности, специально выделенных MITRE и Atomic Red Team, причём с регулярным добавлением новых детекций.
Основные возможности
- Сканирование ОС Windows на наличие различных техник персистентности (перечислены ниже)
- Вывод в CSV с техникой MITRE и метаданными для начала расследования
- Документация по анализу и устранению (https://github.com/joeavanzato/Trawler/wiki/Analysis-and-Remediation-Guidance)
- Динамическое присвоение уровня риска для каждого обнаружения
- Встроенные списки разрешений для распространённых конфигураций Windows (Windows 10/Server 2012|2016|2019|2022) для снижения шума
- Захват метаданных персистентности из «эталонного» корпоративного образа (снимка) для использования в качестве динамического списка разрешений во время выполнения
- Анализ смонтированных образов дисков с помощью перенацеливания диска
Как использовать?
Просто загрузите и запустите trawler.ps1 из административной консоли PowerShell/cmd — любые обнаружения будут отображены в консоли, а также записаны в CSV ('detections.csv') в текущем рабочем каталоге. Сгенерированный CSV будет содержать имя обнаружения, источник, риск, метаданные и соответствующую технику MITRE.
Или воспользуйтесь этой однострочной командой из административного терминала PowerShell:
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/joeavanzato/Trawler/main/trawler.ps1'))
Некоторые детекции имеют встроенные списки разрешений, помогающие убрать шум от стандартных конфигураций Windows (10/2016/2019/2022) — ожидаемые запланированные задачи, службы и т.д. Конечно, злоумышленники всегда могут напрямую захватить их и с большой детализацией маскироваться под стандартный процесс ОС — будьте внимательны, используйте множественные формы анализа и обнаружения при работе с опытными противниками.
Если у вас есть примеры или идеи для дополнительных детекций, пожалуйста, смело отправляйте Issue или PR с соответствующими техническими деталями/ссылками — кодовая база сейчас немного грязная, со временем будет очищена.
Кроме того, если вы обнаружите очевидные ложные срабатывания, сообщите мне об этом, открыв issue или PR на GitHub! Главные виновники этого — нестандартные COM, службы или задачи.
Параметры командной строки
-scanoptions : Пролистывание возможных детекций и выбор подмножества с помощью разделённых запятыми терминов (например, .\trawler.ps1 -scanoptions Services,Processes) или пропустите, чтобы выполнить все детекции
-quiet : Подавление вывода детекций в консоль
-snapshot : Путь к предыдущему JSON-выводу trawler для использования в качестве списка разрешений.
-outpath : Определение пользовательского пути для сохранения вывода детекций (по умолчанию "$PSScriptRoot\detections.csv")
-drivetarget : Определение переменной для смонтированного целевого диска (например, .\trawler.ps1 -targetdrive "D:") — (по умолчанию локальная система)
-daysago : Определение количества «дней назад», которое мы хотим учитывать для детекций, основанных на времени (по умолчанию 45)
-hashmode : Определение алгоритма хеширования для поддерживаемых детекций — поддерживает sha1, md5 или sha256 (по умолчанию sha1)
-evtx : Включение создания источника журнала событий и записи детекций в журнал приложений под источником trawler с EID=9001 (по умолчанию отключено)
Чем это отличается от PersistenceSniper?
PersistenceSniper — замечательный инструмент; я активно использовал его в прошлом — но есть несколько ключевых моментов, отличающих эти утилиты:
- trawler (на данный момент) — локальная утилита; однако было бы несложно обернуть её в цикл и использовать сеансы WinRM/PowerShell для выполнения на удалённых хостах
- trawler реализует списки разрешений для многих «шумных» детекций, чтобы убрать ожидаемые обнаружения из стандартных конфигураций Windows (10/2016/2019/2022), и они постоянно обновляются (PS тоже это делает)
PersistenceSniper (в основном) не содержит никаких списков разрешений — поэтому создаётся больше шума при рассмотрении таких элементов, как службы, запланированные задачи, общее сканирование COM DLL и т.д.
- вывод trawler упрощён — имя, риск, источник, техника MITRE и метаданные — единственные элементы, предоставляемые для каждого обнаружения, чтобы помочь аналитикам быстро начать охоту за персистентностью — это палка о двух концах.
- Регулярные выражения используются во многих проверках для обнаружения «подозрительных» ключевых слов или шаблонов в различных критических областях, включая содержимое сканируемых файлов, значения реестра и т.д. Это обеспечивает большую гибкость, но также потенциально более высокий уровень ложных срабатываний.
- trawler поддерживает «перенацеливание диска» для проверки «мёртвых» машин, смонтированных на аналитической машине.
В целом эти инструменты чрезвычайно похожи, но подходят к проблеме с немного разных сторон: PersistenceSniper предоставляет всю информацию аналитику для проверки, в то время как Trawler пытается ограничить возвращаемые данные только результатами, которые, вероятно, являются механизмами персистентности злоумышленника. Как следствие, с trawler возможны ложноотрицательные результаты, если злоумышленник полностью имитирует элемент из списка разрешений.
Например — PersistenceSniper вернёт все «небезопасные» службы Windows, в то время как trawler вернёт только те, которые соответствуют определённому правилу обнаружения, и т.д.
Настройка под вашу среду
Trawler поддерживает загрузку списка разрешений из «снимка» — для этого требуется два шага.
- Запустите '.\trawler.ps1 -snapshot' на «эталонном образе», представляющем серверы в вашей среде — после завершения, помимо стандартного 'detections.csv', будет создан файл с именем 'snapshots.csv'
- Этот файл затем можно использовать как входные данные для trawler при запуске на других хостах, и данные будут динамически загружены как список разрешений для каждой соответствующей детекции
- '.\trawler.ps1' -loadsnapshot "путь\к\snapshot.csv"
Вот и всё — все соответствующие детекции затем будут брать данные из файла снимка как список разрешений, чтобы уменьшить шум и выявить любые потенциальные изменения базового образа.
(Списки разрешений реализованы для большинства проверок, но не для всех — ещё активно внедряются)
Перенацеливание диска
Часто во время расследования аналитики могут смонтировать новый диск, представляющий образ устройства Windows — Trawler теперь частично поддерживает сканирование таких смонтированных дисков с помощью параметра '-drivetarget'.
Во время выполнения Trawler перенацеливает временные переменные уровня скрипта для проверки артефактов на основе файлов, а также пытается загрузить соответствующие кусты реестра (HKLM\SOFTWARE, HKLM\SYSTEM, NTUSER.DAT, USRCLASS.DAT) ниже HKLM/HKU с префиксом 'ANALYSIS_'. Trawler также попытается выгрузить эти временно загруженные кусты по завершении скрипта.
Например, если у вас есть образ, смонтированный по адресу 'F:\Test', содержащий файловую систему NTFS ('F:\Test\Windows', 'F:\Test\User' и т.д.), вы можете вызвать trawler следующим образом:
.\trawler.ps1 -drivetarget "F:\Test"
Обратите внимание, что поскольку trawler пытается загрузить файлы кустов реестра с диска, сопоставление пути UNC с живым удалённым устройством НЕ будет работать, так как эти файлы будут недоступны из-за блокировок системы. Я работаю над подходом для обработки живых удалённых устройств, следите за обновлениями.
Что не проверяется при перенацеливании диска?
- Запущенные процессы
- Сетевые подключения
- «Призрачные» DLL
- Потребители WMI (разрабатывается)
- Задания BITS (разрабатывается)
- Разбор сертификатов (разрабатывается)
Большинство других проверок будут работать нормально, поскольку они полностью основаны на чтении кустов реестра или артефактов на основе файлов (или могут быть преобразованы для этого, например, прямое чтение XML задачи вместо использования встроенных командлетов).
Любые ограничения проверок при перенацеливании диска будут более подробно обсуждаться в вики GitHub.
Примеры изображений
Что проверяется?
- Запланированные задачи
- Пользователи
- Службы
- Запущенные процессы
- Сетевые подключения
- Потребители событий WMI (командная строка/скрипт)
- Обнаружение элементов автозагрузки
- Обнаружение заданий BITS
- Изменения специальных возможностей Windows
- Наличие профиля PowerShell
- Office TrustedDocuments
- Надстройки Office из доверенных расположений
- Мониторинг SilentProcessExit
- Перехват DLL Winlogon Helper DLL
- Перехват точки выполнения опций файла изображения (Image File Execution Option)
- Теневое копирование RDP
- Настройка UAC для удалённых сеансов
- DLL монитора печати
- Перехват пакетов безопасности и аутентификации LSA
- DLL поставщика времени
- DLL процессора печати
- Активная настройка загрузки/входа в систему
- Перехват скрипта входа пользователя при инициализации
- Перехват исполняемого файла заставки (ScreenSaver)
- DLL Netsh
- DLL AppCert
- DLL AppInit
- Шимминг приложений (Application Shimming)
- Перехват COM-объектов
- Перехват уведомлений LSA
- Использование 'Office test'
- Использование Office GlobalDotName
- Перехват DLL служб терминалов
- Перехват DLL автодозвона (Autodial)
- Злоупотребление автозапуском Command AutoRun
- Перехват Outlook OTM
- Перехват доверенного поставщика (Trust Provider)
- Сканирование целей LNK (подозрительные термины, множественные расширения, множественные EXE)
- Имена «призрачных» DLL Windows, загруженных в запущенный процесс (например, неподписанная WptsExtensions.dll)
- Сканирование критических каталогов ОС на наличие неподписанных EXE/DLL
- Перехват пути службы без кавычек
- Перехват бинарного файла через PATH
- Перехват распространённых ассоциаций файлов и подозрительные ключевые слова
- Охота за подозрительными сертификатами
- Обнаружение/сканирование скриптов GPO
- Переопределение DLL платформы разработки NLP
- Замена отладчика AeDebug/.NET/скрипта/процесса/WER
- Загрузка 'Load' в Проводнике
- Перехват startOnUserLogin в терминале Windows
- Несовпадения путей приложений (App Path Mismatches)
- Несовпадения DLL службы/ImagePath
- DLL расширения GPO
- Потенциальные перехваты COM
- Нестандартные расширения LSA
TODO
Оценённые техники MITRE
Обратите внимание, что некоторые из них (конечно) обнаруживаются чаще других — например, мы не обнаруживаем все возможные изменения реестра, а проверяем определённые ключи на очевидные изменения и используем общую технику MITRE «Modify Registry», если другая техника неприменима. Для других элементов, таких как перехват COM, мы проверяем все записи в соответствующем разделе реестра, сравниваем с «известно-хорошими» шаблонами и выявляем неизвестные или несовпадающие значения, что даёт гораздо более полную поверхность обнаружения для этой конкретной техники.
- T1037: Скрипты инициализации загрузки или входа в систему
- T1037.001: Скрипты инициализации загрузки или входа в систему: Скрипт входа (Windows)
- T1037.005: Скрипты инициализации загрузки или входа в систему: Элементы автозагрузки
- T1055.001: Внедрение процесса: Внедрение динамической библиотеки (DLL)
- T1059: Интерпретатор команд и скриптов
- T1071: Протокол прикладного уровня
- T1098: Манипуляция учётными записями
- T1112: Изменение реестра
- T1053: Запланированная задача/задание
- T1136: Создание учётной записи
- T1137.001: Макросы шаблонов Office
- T1137.002: Запуск приложений Office: Office Test
- T1137.006: Запуск приложений Office: Надстройки
- T1176: Расширения браузера
- T1197: Задания BITS
- T1505.005: Компонент серверного ПО: DLL служб терминалов
- T1543.003: Создание или изменение системного процесса: Служба Windows
- T1546: Выполнение, инициированное событием
- T1546.001: Выполнение, инициированное событием: Изменение ассоциации файлов по умолчанию
- T1546.002: Выполнение, инициированное событием: Заставка
- T1546.003: Выполнение, инициированное событием: Подписка на события WMI
- T1546.007: Выполнение, инициированное событием: Вспомогательная DLL Netsh
- T1546.008: Выполнение, инициированное событием: Специальные возможности
- T1546.009: Выполнение, инициированное событием: DLL AppCert
- T1546.010: Выполнение, инициированное событием: DLL AppInit
- T1546.011: Выполнение, инициированное событием: Шимминг приложений
- T1546.012: Выполнение, инициированное событием: Внедрение параметров выполнения файла изображения
- T1546.013: Выполнение, инициированное событием: Профиль PowerShell
- T1546.015: Выполнение, инициированное событием: Перехват COM-объектов
- T1547.002: Автозапуск при загрузке или входе: Пакеты аутентификации
- T1547.003: Автозапуск при загрузке или входе: Поставщики времени
- T1547.004: Автозапуск при загрузке или входе: Вспомогательная DLL Winlogon
- T1547.005: Автозапуск при загрузке или входе: Поставщик поддержки безопасности
- T1547.009: Автозапуск при загрузке или входе: Изменение ярлыков
- T1547.012: Автозапуск при загрузке или входе: Процессоры печати
- T1547.014: Автозапуск при загрузке или входе: Активная настройка
- T1553: Подрыв механизмов доверия
- T1553.004: Подрыв механизмов доверия: Установка корневого сертификата
- T1556.002: Изменение процесса аутентификации: DLL фильтра паролей
- T1564.006: Скрытие артефактов: Запуск виртуального экземпляра
Ссылки
Этот инструмент не существовал бы без удивительного сообщества InfoSec — ниже приведены наиболее примечательные использованные источники.
Дополнительные ссылки