Продвинутое логирование Windows. Ищем mimikatz

h0hb_i-lgn82omzxc6sknai5hu8.png


Всем привет. Сегодня рассмотрим пример, когда злоумышленнику удалось обойти Windows Defender, но не удалось — безопасника. Да, речь опять про mimikatz. Как, запуская mimikatz, обойти Windows Defender, можно почитать тут. А сегодня, как я и обещал, рассмотрим что-нибудь для «синей» команды. Если это хоть кому-нибудь поможет, значит — все не зря. Итак, поехали.
Про стек ELK (Elasticsearch, Logstash, Kibana) написано немало (в том числе и на хабре), и сегодня мы будем использовать его, а если быть точнее — допиленный под наши нужды ELK для threat hunting.

The Hunting ELK, или HELK


Схема HELK выглядит вот так:

ef8kifvomhyx3_-w_abknc1-zqs.png

Перейдем к установке.

В качестве сервера, где будет располагаться HELK, я выбрал, как и советует разработчик:

tomhunter@helk:~$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" 


Установка проста и выполняется в 2 команды:

git clone https://github.com/Cyb3rWard0g/HELK
tomhunter@helk:~/HELK/docker$ sudo ./helk_install.sh


Примечание: возможно, вас попросят выделить больше ОЗУ для установки. Я использую 10 ГБ.


Из предложенных вариантов установки я выбрал KAFKA + KSQL + ELK + NGNIX + ELASTALERT. А теперь просто ждем. И, если мы все сделали правильно, мы увидим заветное:

jdhpp70rd77qhrxxnp6fgqk1bko.png

С сервером закончили, давайте подготовим клиент. В качестве него будет выступать машина с ОС Windows 10. На него нам нужно установить Sysmon.

Так же нам нужен файл конфигурации:

 git clone https://github.com/olafhartong/sysmon-modular  


Сгенерируем конфиг:

 . .\Merge-SysmonXml.ps1
Merge-AllSysmonXml -Path ( Get-ChildItem '[0-9]*\*.xml') -AsString | Out-File sysmonconfig.xml


Выполним:

 PS C:\Users\Tomhunter\Documents\sysmon-modular> .\Sysmon64.exe -i .\sysmonconfig.xml 


Также установим winlogbeat, удалим файл winlogbeat.yml и создадим новый, скопировав в него
raw.githubusercontent.com/Cyb3rWard0g/HELK/master/configs/winlogbeat/winlogbeat.yml

Примечание: и здесь нам нужно поменять IP адрес на нужный (в моем случае hosts: [«192.168.31.97:9092»].




Установим:

 PS C:\Users\Tomhunter\Desktop\winlogbeat-7.6.2-windows-x86_64> .\install-service-winlogbeat.ps1 


Примечание: сервис нужно включить руками, либо перезагрузить систему.


Все готово, давайте посмотрим, что у нас получилось.

Запускаем mimikatz на Windows 10.

ksnlhmbxqjbjuukkkw6twygi2pq.png

И, зайдя в кибану (в моем случае — это 192.168.31.97, учетные данные по дефолту: helk:hunting) мы видим алерт. В сыром виде он выглядит так:

jk1axps0zuzqh-6tgosxcu5eud8.png

Алерты можно отсылать себе на электронную почту, в слак и т.д.

Но нам гораздо интереснее, как это работает, давайте разбираться.

Немного теории


После запуска mimikatz c Windows 10 улетает такое сообщение:

3feagiz2vt7qa3j3skxibjvlqsa.png

Что же смутило правило, выдавшее алерт? (спойлер: не имя файла mimikatz.exe). Давайте взглянем на само правило:

sudo docker exec -it helk-elastalert bash
cat /opt/sigma/rules/windows/sysmon/sysmon_mimikatz_detection_lsass.yml


7kl-pqvy38dfcjcagg8ijrc8t5c.png

EventID: 10. Это у нас ProcessAccess.

TargetImage: C:\windows\system32\lsass.exe. 

Это хорошо, но mimikatz же не единственный кто обращается к lsass.

ufiog3h0rkayzzseetwyqbwakng.png

GrantedAccess: 0x1410 или 0x1010.

И вот тут все встает на свои места. Объясняю.

Давайте заглянем в исходный код mimikatz, а именно нас интересует файл kuhl_m_sekurlsa.c и функция kuhl_m_sekurlsa_acquireLSA()

oz8ndf1uq3d45s6wv8o1ost5eku.png

Обратившись на сайт майкрософта, мы видим, что

PROCESS_QUERY_LIMITED_INFORMATION (0x1000)
PROCESS_VM_READ (0x0010)
PROCESS_QUERY_INFORMATION (0x0400)


Применяя побитовое “ИЛИ” мы получаем наш Granted Access

Примечание: ранее в правиле sigma был детект только 0x1410, вероятно, это связано с тем, что старые версии mimikatz делали оба запроса (PROCESS_QUERY_INFORMATION и PROCESS_QUERY_LIMITED_INFORMATION), однако пропускало mimikatz с 0х1010, в связи с чем нужно было самому корректировать правило. Сейчас такой проблемы уже нет, и все работает из коробки.


Таким образом, если в кибане мы поставим фильтр
event_id: 10 AND process_target_name: "*lsass.exe" AND process_granted_access: «0x1010», то у нас останется только наш mimikatz.

ifyspbxc2bgjytx6safefnbt8ak.png

Из приятного: правила есть и для mimikatz_inmemory, mimikatz_trough_winrm, и даже для safetycatz (версия mimikatz на .NET со своими фишками).

Что еще можно?


Правила, естественно, не ограничиваются mimikatz, их очень много. Они разбиты на категории application, cloud, compliance, linux, network, proxy, web и windows. Категории разбиты на подкатегории. Например, windows делится на builtin, malware, other, powershell, process_creation, sysmon.

И кто знает, возможно, включив в GPO логирование powershell, вы будете получать алерты по этим правилам:

6qvwo7i_xeapqq2p_tpka2icoqs.png

На этом вроде бы все. Подписывайтесь на канал, ставьте лайки, жмякайте колокольчик.

© Habrahabr.ru