Одна из самых часто используемых техник при атаках — получение учетных данных из операционной системы. В этом можно убедиться, читая аналитические отчеты различных компаний: техника T1003 OS Credential Dumping в подавляющем большинстве случаев входит в ТОП-5. После проникновения в систему злоумышленникам необходимы учетки для перемещения по сети и доступа к конфиденциальной информации, а данная техника направлена на извлечение локальных и доменных учетных записей из системных файлов, реестра и памяти процессов.
В этой статье мы акцентируем внимание на своевременном выявлении подозрительной активности с помощью мониторинга ИБ и расскажем, как на основе событий штатной подсистемы аудита ОС обнаружить, что пытаются сдампить учетные данные в Windows. Логика детектирования будет представлена в общем виде по полям событий, а также в виде псевдокода, который можно адаптировать под синтаксис любой системы мониторинга. Ну и для возможности тестирования правил корреляции будут приведены краткая справка по атакам и способы их реализации.
Рассмотрим покрытие таких подтехник, как:
· дамп процесса lsass.exe;
· кража данных из базы SAM;
· дамп базы NTDS;
· извлечение секретов LSA;
· получение кэшированных данных;
· атака DCSync.
![Изображение сгенерировано ботом Kandinsky (https://t.me/kandinsky21_bot) Изображение сгенерировано ботом Kandinsky (https://t.me/kandinsky21_bot)](https://habrastorage.org/getpro/habr/upload_files/43a/1b3/318/43a1b331817d40d68aed04a2e77a3453.png)
LSASS Memory (T1003.001)
LSASS — это процесс Windows, отвечающий за аутентификацию пользователей при входе в систему и соблюдение политик безопасности. В памяти процесса хранятся имена пользователей, NT-хеши паролей, Kerberos-билеты. Могут храниться и пароли в открытом виде, если включен WDigest.
Как злоумышленники дампят память LSASS
Если кратко — можно сделать «снимок» памяти процесса или прочитать данные сразу из памяти. Методов много, и в один раздел их не вместить. Эта тема раскрыта в классной статье.
Как обнаружить
Существуют два способа, как детектировать дамп памяти LSASS.
Для регистрации нужных событий необходимо включить политики аудита Object Access – Audit Kernel Object и Object Access – Audit Handle Manipulation.
1. По событию запроса дескриптора объекта (4656 – журнал Security)
Event ID = 4656
Object Type = Process
Object Name = *lsass.exe
-
Access List = *%%4484*
Событие 4656 при дампе lsass.exe с помощью mimikatz.exe
По событию попытки доступа к объекту (4663 – журнал Security)
Event ID = 4663
Object Type = Process
Object Name = *lsass.exe
Access List = *%%4484*
![Событие 4663 при дампе lsass.exe с помощью comsvcs.dlll Событие 4663 при дампе lsass.exe с помощью comsvcs.dlll](https://habrastorage.org/getpro/habr/upload_files/992/806/ff4/992806ff45ff22274909a2fee1a1f4a7.png)
Псевдокод
(event.id = “4656” AND object.type = “process” AND object.name contains “lsass.exe” AND access.list contains “%%4484”)
OR
(event.id = “4663” AND object.type = “process” AND object.name contains “lsass.exe” AND access.list contains “%%4484”)
Код доступа *%%4484 означает «Чтение из памяти процесса».
Основные отличия событий с id 4663 от 4656:
- 4663 показывает, что право доступа было использовано, а не просто запрошено;
- 4663 фиксирует только успешно выполненные операции.
SAM (T1003.002)
Из базы данных SAM (Security Account Manager) злоумышленник может получить NT-хеши паролей локальных пользователей.
Как злоумышленники дампят SAM
Самый простой способ — сохранить ветки реестра HKLM\SAM и HKLM\SYSTEM, а затем извлечь из них учетные данные на своем хосте. Команды нужно выполнять от имени администратора или системы:
reg save HKLM\sam path_to_sam_file
reg save HKLM\system path_to_system_file
![Сохранение веток реестра Сохранение веток реестра](https://habrastorage.org/getpro/habr/upload_files/a57/532/52e/a5753252e4817a344a7d348311133b03.png)
Далее уже на своей машине злоумышленник может извлечь хеши с помощью secretsdump.py из impacket или другой утилиты:
secretsdump.py LOCAL -sam sam -system system
![Извлечение учетных данных Извлечение учетных данных](https://habrastorage.org/getpro/habr/upload_files/a56/1ef/46e/a561ef46ecd8f7f23cb67df79b68beac.png)
Второй способ — получить данные удаленно. Часто используются secretsdump.py или crackmapexec. Нужно также использовать учетную запись, которая имеет привилегии локального администратора на хосте:
secretsdump.py domain.local/username:'password'@hostname_or_IP
![Получение хешей паролей из базы SAM с помощью secretsdump.py Получение хешей паролей из базы SAM с помощью secretsdump.py](https://habrastorage.org/getpro/habr/upload_files/60a/c0a/906/60ac0a90628fb2b4c7ae593a688af6d1.png)
crackmapexec smb hostname_or_IP --local-auth -u username -p 'password' --sam
![Получение хешей паролей из базы SAM с помощью crackmapexec Получение хешей паролей из базы SAM с помощью crackmapexec](https://habrastorage.org/getpro/habr/upload_files/ed1/93a/445/ed193a445abc0376ebe46e4b73347a1f.png)
Как обнаружить
Сохранение ветки реестра с помощью утилиты reg можно увидеть в событии создания нового процесса (4688 – журнал Security).
Для логирования командной строки процесса необходимо дополнительно включить политики аудита:
Process Tracking – Process Creation
System – Audit Process Creation – Include command line in process creation events
Event ID = 4688
New Process Name = *reg.exe
Process Command Line = “*save*” и (“*HKLM\SAM*” или “*HKEY_LOCAL_MACHINE\SAM*” или “*HKLM\System*" или “*HKEY_LOCAL_MACHINE\System*”)
![Событие 4688 при сохранении ветки реестра SAM Событие 4688 при сохранении ветки реестра SAM](https://habrastorage.org/getpro/habr/upload_files/2ae/28d/b70/2ae28db70fdc074aee73ea3a52dddf78.png)
Также сохранение ветки реестра можно обнаружить в событии запроса дескриптора объекта (4656 – журнал Security): для этого предварительно необходимо включить политику аудита Object Access – Registry и настроить SACL для веток реестра Sam и System (настройки аналогичные).
![SACL для ветки реестра HKLM\SAM SACL для ветки реестра HKLM\SAM](https://habrastorage.org/getpro/habr/upload_files/110/5f1/876/1105f1876e9cb286c08487e17c1a58ce.png)
Event ID = 4656
Process Name = *reg.exe
Object Name = “\REGISTRY\MACHINE\SAM” или “\REGISTRY\MACHINE\SYSTEM”
![Событие 4656 при сохранении ветки реестра SAM Событие 4656 при сохранении ветки реестра SAM](https://habrastorage.org/getpro/habr/upload_files/3ce/c89/45c/3cec8945c5d6041f01e9a715fe5e672c.png)
События 4688 и 4656 следует рассматривать в связке, связующими будут целевой узел и одна учетная запись.
Псевдокод
(event.id = “4688” AND new.process.name contains “reg.exe” AND process.command.line contains “save” AND (process.command.line contains “HKLM\SAM” OR process.command.line contains “HKEY_LOCAL_MACHINE\SAM” OR process.command.line contains “HKLM\System” OR process.command.line contains “HKEY_LOCAL_MACHINE\System”))
AND
(event.id = “4656” AND process.name contains “reg.exe” AND (object.name = “\REGISTRY\MACHINE\SAM” OR object.name = “\REGISTRY\MACHINE\ SYSTEM”))
WITH IDENTICAL destination.hostname, source.username TIMER 30s
В случае получения данных SAM удаленно (secretsdump/crackmapexec) детектирование осуществляется по цепочке событий:
1. Вход в учетную запись был успешно выполнен (4624 – журнал Security).
Нужна политика аудита Logon/Logoff – Logon
2. Объект общей сетевой папки был проверен на предмет возможности предоставления клиенту желаемого доступа (5145 – журнал Security).
Нужна политика аудита Object Access – Detailed File Share
3. Запрошен дескриптор объекта (4656 – журнал Security).
Нужна политика аудита Object Access – Registry и SACL для веток реестра HKLM\SAM (аналогично указанному раннее) и HKLM\SYSTEM\CurrentControlSet\Control\Lsa
![SACL для ветки реестра HKLM\SYSTEM\CurrentControlSet\Control\Lsa SACL для ветки реестра HKLM\SYSTEM\CurrentControlSet\Control\Lsa](https://habrastorage.org/getpro/habr/upload_files/85b/2f6/f89/85b2f6f89b360c1443fe977c44109fcd.png)
Event ID = 4624
Source Network Address != “localhost” и “127.0.0.1” и “–”
Logon Type = 3
Event ID = 5145
Share Name = \\*\IPC$
Share Path = winreg
Event ID = 4656
Process Name = *svchost.exe
Object Name = “\REGISTRY\MACHINE\SAM”
Event ID = 4656
Process Name = *svchost.exe
Object Name = “*\Control\Lsa\*”
В данной цепочке события будут зарегистрированы на одном целевом узле и с одной учетной записью.
![Событие 4624 при использовании crackmapexec Событие 4624 при использовании crackmapexec](https://habrastorage.org/getpro/habr/upload_files/d78/904/c1c/d78904c1cb37ccb476c7c1e00eeddfea.png)
![Событие 5145 при использовании crackmapexec Событие 5145 при использовании crackmapexec](https://habrastorage.org/getpro/habr/upload_files/330/366/bf7/330366bf79a9b21f39e0c59e54fd8ec8.png)
![Событие 4656 (ветка SAM) при использовании crackmapexec Событие 4656 (ветка SAM) при использовании crackmapexec](https://habrastorage.org/getpro/habr/upload_files/71b/930/b6d/71b930b6d9e82cc2ebb3958a2c69f3ae.png)
![Событие 4656 (ветка LSA) при использовании crackmapexec Событие 4656 (ветка LSA) при использовании crackmapexec](https://habrastorage.org/getpro/habr/upload_files/be2/811/f09/be2811f091735f0a256151b8ad64ee6f.png)
Псевдокод
(event.id = “4624” AND source.network.address != “localhost” AND source.network.address != “127.0.0.1” AND source.network.address != “–” AND logon.type = “3”)
AND
(event.id = “5145” AND share.name = “\\*\IPC$” AND share.path = “winreg”)
AND
(event.id = “4656” AND process.name contains “svchost.exe” AND object.name = “\REGISTRY\MACHINE\SAM”)
AND
(event.id = “4656” AND process.name contains “svchost.exe” AND object.name contains “\Control\Lsa\”)
WITH IDENTICAL destination.hostname, source.username TIMER 30s
NTDS (T1003.003)
NTDS.dit — это файл базы данных на контроллерах домена, содержащий все данные Active Directory. Из него можно получить NT-хеши паролей всех пользователей и компьютеров в домене. Если для учетной записи в Active Directory установлен параметр «Хранить пароль с использованием обратимого шифрования», то можно извлечь пароль в открытом виде.
Как злоумышленники дампят NTDS
Первый способ — Shadow Copy. Создать «теневую копию» на контроллере домена можно с помощью vssadmin:
vssadmin create shadow /for=C:
copy $ShadowCopyName\Windows\NTDS\NTDS.dit C:\ntds.dit.save
copy $ShadowCopyName\Windows\System32\config\SYSTEM C:\system.save
![Создание и копирование Shadow Copy Создание и копирование Shadow Copy](https://habrastorage.org/getpro/habr/upload_files/928/5e8/a1b/9285e8a1b0b7ad59ad1af1b7a0060817.png)
Затем файлы ntds.dit.save и system.save необходимо скопировать на свой хост и с помощью secretsdump.py извлечь из них учетные данные:
secretsdump.py LOCAL -ntds ntds.dit.save -system system.save
![Получение учетных данных из файлов Получение учетных данных из файлов](https://habrastorage.org/getpro/habr/upload_files/ecf/7a3/0c7/ecf7a30c7e7b62e9422e7916a94a8cca.png)
Второй способ — использование NTDSUtil на контроллере домена:
ntdsutil "activate instance ntds" "ifm" "create full C:\NTDS" quit quit
В результате будут созданы файлы C:\NTDS\Active Directory\ntds.dit, C:\NTDS\registry\SECURITY и C:\NTDS\registry\SYSTEM, которые необходимо скопировать на свой хост и с помощью secretsdump.py извлечь из них учетные данные:
secretsdump.py LOCAL -ntds ntds.dit -system SYSTEM
![Создание копии NTDS.dit и веток реестра SYSTEM и SECURITY Создание копии NTDS.dit и веток реестра SYSTEM и SECURITY](https://habrastorage.org/getpro/habr/upload_files/7de/445/ac0/7de445ac0a05f6d8c2ed651a44450011.png)
![Получение учетных данных из файлов Получение учетных данных из файлов](https://habrastorage.org/getpro/habr/upload_files/796/eb9/f3d/796eb9f3df4bca7da73a7e9a98d1b41f.png)
Как обнаружить
Создание «теневой копии» с помощью утилиты vssadmin можно увидеть в событии создания нового процесса (4688 – журнал Security).
Для логирования командной строки процесса необходимо дополнительно включить политики аудита:
Process Tracking – Process Creation
System – Audit Process Creation – Include command line in process creation events
Event ID = 4688
New Process Name = *vssadmin.exe
Process Command Line = “*vssadmin*” и “*create*” и “*shadow*”
![Событие 4688 при создании «теневой копии» Событие 4688 при создании «теневой копии»](https://habrastorage.org/getpro/habr/upload_files/47b/c33/eed/47bc33eed4c37a5e42a47fe75c562de9.png)
Дамп ntds.dit с помощью утилиты ntdsutil можно увидеть в событии создания нового процесса (4688 – журнал Security).
Event ID = 4688
New Process Name = *ntdsutil.exe
Process Command Line = “*ac*” и “*i*” и “*ntds*” и “*ifm*” и “*create*” и “*full*”
![Событие 4688 при использовании утилиты ntdsutil Событие 4688 при использовании утилиты ntdsutil](https://habrastorage.org/getpro/habr/upload_files/ab7/c66/563/ab7c66563fcf2748aaeb3078c5fd72fe.png)
Псевдокод
(event.id = “4688” AND new.process.name contains “vssadmin.exe” AND process.command.line contains “vssadmin” AND process.command.line contains “create” AND process.command.line contains “shadow”) OR (event.id = “4688” AND new.process.name contains “ntdsutil.exe” AND process.command.line contains “ac” AND process.command.line contains “i” AND process.command.line contains “ntds” AND process.command.line contains “ifm” AND process.command.line contains “create” AND process.command.line contains “full”)
LSA (T1003.004)
Из LSA злоумышленники могут получить пароль учетной записи, от имени которой запускается какой-то сервис, и учетные данные компьютерной учетной записи.
Как злоумышленники дампят LSA
Самый простой вариант — сохранить ветки реестра HKLM\SECURITY и HKLM\SYSTEM, а затем извлечь из них учетные данные на своем хосте. Команды нужно выполнять с правами локального администратора или системы:
reg save HKLM\security path_to_security_file
reg save HKLM\system path_to_system_file
![Сохранение веток реестра Сохранение веток реестра](https://habrastorage.org/getpro/habr/upload_files/e7b/514/111/e7b5141114f78aacf03ff670a36696c5.png)
Далее уже на своей машине злоумышленник может извлечь хеши с помощью secretsdump.py из impacket или другой утилиты:
secretsdump.py LOCAL - security security -system system
![Извлечение учетных данных Извлечение учетных данных](https://habrastorage.org/getpro/habr/upload_files/421/635/777/4216357771ebedcea309c7669621252f.png)
Получить данные удаленно можно также с помощью secretsdump.py или crackmapexec:
secretsdump.py domain.local/username:'password'@hostname_or_IP
![Получение учетных данных из LSA с помощью secretsdump.py Получение учетных данных из LSA с помощью secretsdump.py](https://habrastorage.org/getpro/habr/upload_files/eed/b61/15f/eedb6115f10748eded05ed92a3c13076.png)
crackmapexec smb hostname_or_IP --local-auth -u username -p 'password' –lsa
![Получение учетных данных из LSA с помощью crackmapexec Получение учетных данных из LSA с помощью crackmapexec](https://habrastorage.org/getpro/habr/upload_files/098/54d/fb4/09854dfb4b3eebf51843854821984b2b.png)
Как обнаружить
Детектирование производится аналогично сценарию с SAM, только вместо ветви SAM в событиях будет SECURITY (не забудьте настроить на нее такой же SACL).
Cached Domain Credential (T1003.005)
Когда пользователь проходит аутентификацию на хосте, который входит в домен, его учетные данные кэшируются. Это используется для того, чтобы пользователи могли проходить аутентификацию в ОС на хосте в случае, если будет нарушена сетевая связность между хостом и контроллером домена.
Как злоумышленники дампят Cached Domain Credential
Кэшированные учетные данные (DCC2-хеши) могут быть получены из ветки реестра HKLM\Security таким же образом, как и секреты LSA. Поэтому действия злоумышленник производит такие же, как и при дампе LSA.
![Извлечение учетных данных Извлечение учетных данных](https://habrastorage.org/getpro/habr/upload_files/ae8/026/bb0/ae8026bb0a2325d016eb25e47307b85e.png)
![Получение кэшированных учетных данных с помощью secretsdump.py Получение кэшированных учетных данных с помощью secretsdump.py](https://habrastorage.org/getpro/habr/upload_files/6a8/674/71a/6a867471a306d4dfa4fee1544cb20d6d.png)
![Получение кэшированных учетных данных с помощью crackmapexec Получение кэшированных учетных данных с помощью crackmapexec](https://habrastorage.org/getpro/habr/upload_files/ec1/cd8/e74/ec1cd8e74f947816915e6201af751753.png)
Как обнаружить
Детектирование производится аналогично сценарию с SAM, только вместо ветви SAM в событиях будет SECURITY (не забудьте настроить на нее такой же SACL).
DCSync (T1003.006)
Атака DCSync заключается в том, что атакующий притворяется контроллером домена и проводит репликацию учетных данных доменных пользователей (учетные данные в NTDS.dit).
Как злоумышленники проводят атаку DCSync
Самый популярный вариант — использование mimikatz:
lsadump::dcsync /all
![Атака DCSync с помощью mimikat Атака DCSync с помощью mimikat](https://habrastorage.org/getpro/habr/upload_files/dee/d0b/b01/deed0bb01de5f31db24ea940c013a9ce.png)
![Атака DCSync с помощью mimikatz Атака DCSync с помощью mimikatz](https://habrastorage.org/getpro/habr/upload_files/71f/d8b/209/71fd8b2094597a9cf1b53b5c7231c78e.png)
Получить данные удаленно можно с помощью secretsdump.py. Для этого нужно указать флаг -just-dc и в качестве целевого хоста указать контроллер домена:
secretsdump.py -just-dc domain.local/username:'password'@dc_hostname_or_IP
![Атака DCSync с помощью secretsdump Атака DCSync с помощью secretsdump](https://habrastorage.org/getpro/habr/upload_files/c5f/55a/1f9/c5f55a1f9548eeba535c585be5de4efe.png)
Как обнаружить
В момент репликации базы данных Active Directory (ntds.dit) на контроллере домена регистрируется событие выполнения операции с объектом доменных служб AD DS (4662 – журнал Security).
Данное событие не настроено по умолчанию, поэтому предварительно необходимо включить политику аудита DS Access – Audit Directory Service Access и настроить SACL для всех пользователей.
![Аудит для всех пользователей Аудит для всех пользователей](https://habrastorage.org/getpro/habr/upload_files/6f0/1b1/eed/6f01b1eed7e7c0622206279a33652c0b.png)
![SACL на репликацию ntds.dit SACL на репликацию ntds.dit](https://habrastorage.org/getpro/habr/upload_files/d31/402/7a5/d314027a537e04e3edcde4101ff3e101.png)
Event ID = 4662
Access Mask = 0x100
Properties = “*1131f6aa-9c07-11d1-f79f-00c04fc2dcd2*” или “*1131f6ad-9c07-11d1-f79f-00c04fc2dcd2*” или “*89e95b76-444d-4c62-991a-0facbeda640c*” или “*9923a32a-3607-11d2-b9be-0000f87a36b2*”
![Событие 4662 при репликации ntds.dit Событие 4662 при репликации ntds.dit](https://habrastorage.org/getpro/habr/upload_files/eaf/0be/5f2/eaf0be5f2006189aa9eae44d3242ffad.png)
Псевдокод
event.id = “4662” AND access.mask = “0x100” AND (properties contains “1131f6aa-9c07-11d1-f79f-00c04fc2dcd2” OR properties contains “1131f6ad-9c07-11d1-f79f-00c04fc2dcd2” OR properties contains “89e95b76-444d-4c62-991a-0facbeda640c” OR properties contains “9923a32a-3607-11d2-b9be-0000f87a36b2”)
Поле Properties содержит идентификаторы GUID свойств, для которых была выполнена операция:
1. 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2 (Ds-Replication-Get-Changes – Репликация изменений каталога)
2. 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2 (Ds-Replication-Get-Changes-All – Репликация изменений каталога)
3. 89e95b76-444d-4c62-991a-0facbeda640c (DS-Replication-Get-Changes-In-Filtered-Set – Репликация изменений каталога в отфильтрованном наборе)
4. 9923a32a-3607-11d2-b9be-0000f87a36b2 (Ds-Install-Replica – Добавление или удаление реплики в домене)
Access Mask 0x100 говорит о том, что доступ разрешен только после выполнения расширенных проверок прав, поддерживаемых объектом.
В заключение
В статье мы рассмотрели шесть способов получения злоумышленниками учетных данных из реестра, памяти ОС Windows и из базы NTDS контроллеров домена Active Directory. На практике при проведении проектов по пентестам и Purple Team в большинстве случаев мы фиксируем, что у заказчиков подлежит мониторингу только дамп памяти процесса LSASS. Практически никто не мониторит получение учетных данных из реестра.
Также неоднократно фиксировали, что даже если написаны правила детектирования, то в них бывают ошибки. Например, в одном из проектов на атаку DCSync сработал алерт на PetitPotam. При реальной атаке это может привести к тому, что сработку посчитают ложноположительной, тем самым пропустив инцидент.
Атакующий может вообще не использовать вредоносное ПО, а применять только стандартные утилиты. В любом случае при должных настройках аудита в журнале событий Security останутся следы. Так как от большинства подтехник защититься не получится (встроенные функции нужны для работы Active Directory), то важно своевременно выявлять подозрительную активность и реагировать на нее. Данная статья может стать для вас инструкцией по настройке мониторинга техники T1003 OS Credential Dumping (Windows). При этом стоит учитывать, что в вашей инфраструктуре дополнительно может потребоваться профилирование легитимной активности и ложноположительных срабатываний.
Авторы:
Валерия Шотт, аналитик центра мониторинга и реагирования на инциденты Jet CSIRT компании «Инфосистемы Джет»
Ирина Беляева, старший консультант по информационной безопасности компании «Инфосистемы Джет»
Комментарии (4)
HorekRediskovich
14.12.2023 13:22Интересная статья но для профи, для новичков сложно ибо не понятно каким образом автор к примеру фильтрует:
Event ID = 4656
Object Type = Process
Object Name = *lsass.exe
Access List = *%%4484*
В стандартным методом в журнале Безопасности, Фильтр текущего журнала, получается указать только Event ID = 4656
Как вызвать такое окно тоже не понятно:
Где включаются вот такие политики аудита тоже не понятно:
Для логирования командной строки процесса необходимо дополнительно включить политики аудита:
Process Tracking – Process Creation
System – Audit Process Creation – Include command line in process creation events
AlexeyK77
14.12.2023 13:22авторы показали лишь пруф, а в реальности эти события вычитываются централизовано и обрабатываются автоматически siem-системой, параметры типа Object Type извлекаются из события парсером для анализа.
AlexeyK77
Круть, спасибо!
По хорошему всем этим должен заниматься endpoint security из коробки, а не заставлять людей делать закат солнца вручную вместо EDR.