Active Directory
February 15

Атаки на Active Directory - 1 часть

Active Directory

Active Directory (AD) является неотъемлемой частью современных организаций, служащей основой инфраструктуры идентификации. AD широко используется организациями благодаря своей простоте и централизованному подходу к управлению.

Это облегчает сотрудникам доступ к ресурсам и приложениям с помощью единого набора учетных данных, что повышает производительность и эффективность. Централизованная структура управления обеспечивает единую точку контроля для ИТ-администраторов, позволяя им управлять пользователями, компьютерами и доступом к ресурсам в одном месте.

Однако, из-за широкого распространения и архитектурных ограничений Active Directory становится угрозой в случае нарушения безопасности и является приоритетной целью для злоумышленников. Одним из методов атаки на Active Directory является использование альтернативных методов аутентификации, таких как хэши паролей, билеты Kerberos и токены доступа к приложениям. Этот метод атаки известен как T1550 в системе MITRE ATT&CK.

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

В этой статье приведены подробные разборы двух подтехник данного метода:

  • Pass-the-Hash (T1550.002).
  • Pass-the-Ticket (T1550.003).
Данная статья представлена исключительно в образовательных целях. Red Team сообщество "GISCYBERTEAM" не несёт ответственности за любые последствия ее использования третьими лицами.

Pass-the-Hash (T1550.002)

Данный тип атаки представляет собой уникальную форму кражи учетных данных, при которой злоумышленник использует протокол аутентификации Windows New Technology LAN Manager (NTLM) для аутентификации в удаленной системе с помощью предварительно вычисленного хэша пароля действительного пользователя.

В сценарии Pass-the-Hash хакеры получают первоначальный доступ к целевой сети, крадут или сохраняют "хэшированные" учетные данные пользователя и используют сброшенные учетные данные для создания новой пользовательской сессии на скомпрометированном узле.

Этот метод атаки основан на использовании протокола NTLM, который является методом единой регистрации, использующим систему "challenge-response" для проверки личности пользователя без необходимости идентификации пользователя или ввода его пароля. Поскольку версия пароля в открытом виде не требуется, это избавляет от необходимости выполнять времязатратные операции по взлому.

Если злоумышленник получает NTLM-хэш пароля пользователя с помощью таких средств, как извлечение его из памяти lsass.exe или из файла %systemroot%\system32\config\SAM, перехватив его во время сетевой передачи данных или сброса его из резервной копии или образа системы, они могут использовать хэшированный пароль, передав его удаленной системе, которая аутентифицирует скомпрометированную учетную запись пользователя. В зависимости от привилегий и уровня доступа скомпрометированного пользователя хакеры могут получить полный доступ к системе и успешно выполнить атаки с горизонтальным перемещением.

Для взлома системы в арсенале у хакеров есть различные инструменты, такие как Mimikatz и evil-winrm, а также встроенные команды PowerShell.

Они позволяют произвести извлечение хэша из памяти взломанной системы и последующее его использование для получения доступа к другим системам в сети.

Mimikatz

Первый инструмент, который может быть использован для этих целей, - это Mimikatz.

С помощью модуля Sekurlsa в Mimikatz злоумышленники могут использовать ряд различных техник для извлечения информации об аутентификации из памяти LSASS и с помощью Windows API.

Функция "logonpasswords" этого модуля извлекает данные сеанса входа в систему, такие как сохраненные хэши паролей и кэшированные учетные данные. Данные могут включать информацию о сеансе текущего пользователя, а также информацию других пользователей, которые вошли в систему на той же машине.

Однако, перед использованием команды sekurlsa::logonpasswords злоумышленникам необходимо запустить команду privilege::debug, чтобы Mimikatz мог работать должным образом.

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

Таким образом, злоумышленники могут использовать Mimikatz для извлечения хэша пароля из памяти взломанной системы и последующего его использования для получения доступа к другим системам в сети.

PS> .\mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords"
Authentication Id : 0 ; 399233 (00000000:00050ef9)
Session : UndefinedLogonType from 0
User Name : Ivan
Domain : DOMAIN
Logon Server : DC1
Logon Time : 12/02/2024 12:13:40
SID : S-1-5-21-3501040295-3816137123-30697657-1109
 msv :
 [00000003] Primary
 * Username : Ivan
 * Domain : DOMAIN
 * NTLM : 5bc719b8f54c7ef1ef5423ee8231207e

После того, как хакер успешно извлек хэш пароля из памяти взломанной системы, он может использовать этот хэш для аутентификации на других системах в сети.

Для этого злоумышленник может использовать команду "sekurlsa::pth" в Mimikatz. Эта функция облегчает проведение атак типа "Pass-the-Hash", которые позволяют ему аутентифицироваться на других системах, используя украденный хэш пароля.

Команда "sekurlsa::pth" принимает несколько параметров:

  • /user: (имя пользователя) - имя скомпрометированного пользователя.
  • /domain: (имя домена) - имя домена, к которому принадлежит пользователь.
  • /ntlm: (NTLM-хэш пароля пользователя) - украденный хэш пароля пользователя.
PS> .\mimikatz.exe "sekurlsa::pth /user:Ivan /domain:domain.com
/ntlm:5bc719b8f54c7ef1ef5423ee8231207e"
user : Ivan
domain : domain.com
program : cmd.exe
impers. : no
NTLM : 5bc719b8f54c7ef1ef5423ee8231207e
...

После аутентификации, хакер может получить доступ к ресурсам через новую учетную запись пользователя.

PsExec

Один из способов, которым злоумышленник может это сделать, - это использование утилиты командной строки PsExec.

PsExec позволяет удаленно выполнять команды на другом хосте, что позволяет получить доступ к ресурсам и выполнить различные действия, такие как чтение файлов, изменение настроек системы и т.д.

Например, запуск процесса "cmd.exe" на удаленной машине с внутренним IP-адресом "192.168.1.200":

psexec.exe \\192.168.1.200 cmd.exe

PowerShell

Второй инструмент, который мы рассмотрим, это PowerShell. Злоумышленники могут использовать встроенные команды PowerShell для осуществления атак типа "Pass-the-Hash" (PtH). Одной из таких команд является Invoke-WMIExec, которая позволяет выполнять произвольные команды на удаленной машине Windows с помощью WMI (Windows Management Instrumentation).

Invoke-WMIExec - это встроенная команда PowerShell, которая присутствует во многих новых системах Windows. Она позволяет злоумышленнику выполнить команду на удаленной машине, используя украденный хэш пароля.

Например, команда ниже с помощью скрипта Invoke-WmiExec запускает команду "hostname" на удаленной машине с внутренним IP-адресом 192.168.1.205:

Invoke-WmiExec -target 192.168.1.205 -hash 5bc719b8f54c7ef1ef5423ee8231207e
-username Ivan -command hostname

Evil-WinRM

Хакеры могут использовать evil-winrm для выполнения удаленных команд на машине Windows с помощью протокола Windows Remote Management (WinRM).

Инструмент "evil-winrm" - это Ruby-gem, который позволяет выполнять удаленные команды на машине Windows, используя украденный хэш пароля. В качестве параметров указываются имя пользователя, NTLM-хэш и IP-адрес целевой системы.

Например, PtH-атака на Windows-машину с IP-адресом 192.168.1.205, использующую имя пользователя "Ivan" и NTLM-хэш "5bc719b8f54c7ef1ef5423ee8231207e" может быть выполнена следующим образом:

evil-winrm -u Ivan -H 5bc719b8f54c7ef1ef5423ee8231207e-i 192.168.1.205

xfreerdp

Если на атакуемом хосте работает RDP, можно подключиться к нему по данному протоколу с использованием атаки pass the hash при помощи утилиты xfreerdp и параметра /pth в ней.

xfreerdp /v:192.168.1.205 /u:Ivan /pth:5bc719b8f54c7ef1ef5423ee8231207e

CrackMapExec

CrackMapExec, также известный как CME, представляет собой инструмент пост-эксплуатации. Разработчик инструмента описывает его как «швейцарский армейский нож для тестирования сетей на проникновение».

Данное решение может перечислять авторизированный пользователей и индексировать общие папки SMB, выполнять атаки в стиле psexec и реализовывать автоматические инъекции Mimikatz / Shellcode / DLL в память используя Powershell, дампинг NTDS.dit и многое другое.

Ниже перечислены основные возможности данного решения:

  • Перечисление пользователей.
  • Перечисление IP-адресов сети.
  • Перечисление групп пользователей.
  • Поиск файлов.
  • Обнаружение общих ресурсов.
  • Просмотр активных сессий.
  • Просмотр политики паролей.
  • Список логических дисков.
  • Брутфорс имени пользователя.
  • Брутфорс пароля.
  • Дампинг учетных данных SAM.
  • Дампинг учетных данных LSA.
  • Дамп учетных данных NTDS (DRSUAPI).
  • Дамп учетных данных NTDS (VSS).
  • Password Spraying.
  • Pass the Hash.

В рамках данной статьи мы рассмотрим атаку Pass the Hash. Применение данного инструмента поможет нам за короткое время узнать перечень хостов куда мы можем подключиться через протокол WinRM, имея украденный хэш пользователя.

crackmapexec winrm 192.168.1.0/24 -u Ivan -H 5bc719b8f54c7ef1ef5423ee8231207e

Pass-the-Ticket (T1550.003)

Pass-the-Ticket - это техника, которая позволяет злоумышленнику использовать ранее полученный билет Kerberos Ticket Granting Ticket (TGT). TGT является важным компонентом протокола Kerberos, поскольку он позволяет пользователю аутентифицироваться в нескольких системах без необходимости каждый раз вводить пароль.

Ticket Granting Ticket (TGT) - это тип билета, выдаваемого контроллером домена (DC) пользователю после успешной аутентификации в домене. Он содержит важную информацию, такую как ключ сеанса пользователя, принадлежность группам и привилегии, которые используются для запроса сервисных билетов для определенных служб на целевых системах. Kerberos шифрует TGT с помощью хэша пароля пользователя и использует симметричные алгоритмы шифрования (такие как DES или AES) в зависимости от конфигурации среды Kerberos. После шифрования TGT отправляется на компьютер пользователя и хранится в памяти.

Чтобы получить доступ к ресурсу другой системы, пользователь использует TGT для запроса сервисного билета у DC, также зашифрованного сеансовым ключом пользователя, и содержит зашифрованный сеансовый ключ, который может быть использован для аутентификации в целевой системе.

Затем сервисный билет отправляется на компьютер пользователя, где он используется для аутентификации в целевой системе.

Имея украденный ключ TGT, злоумышленник может запросить у DC сервисный билет для конкретной службы в целевой системе, чтобы получить доступ к ее ресурсам.

Чтобы упростить применение данной техники хакеры часто прибегают к использованию различных инструментов.

Mimikatz как раз один из таких инструментов. Он позволяет хакерам легко извлекать Kerberos Ticket Granting Ticket (TGT) из памяти взломанной системы и использовать его для получения доступа к другим системам в сети.

Для извлечения Kerberos TGT из памяти взломанной системы в Mimikatz используется команда "sekurlsa::tickets" с параметром "/export". Она сохраняет все Kerberos билеты в файлы с расширением .kirbi.

Просматривая имена файлов .kirbi, можно определить, есть ли билеты Kerberos для учетной записи администратора домена, например, DOMAIN\Ivan:

PS> .\mimikatz.exe "privilege::debug" "sekurlsa::tickets /export"
PS> dir | findet "Ivan" | findstr "krbtgt"
...
[0;1a5c8aa][email protected]
...

Второй командой, dir | findet "Ivan" | findstr "krbtgt", выводится список всех файлов связанных с пользователем "Ivan” в текущем каталоге, а затем результат передается в команду findstr для поиска текста "krbtgt" в именах этих файлов.

Теперь можно повторно использовать полученные билеты.

В Mimikatz есть команда kerberos::ptt для вставки полученного TGT в свою собственную сессию, в результате чего сессия принимает идентификационные данные и права украденного TGT для дальнейшего доступа к ресурсам без знания учетных данных в открытом виде.

PS> .\mimikatz.exe "kerberos::ptt C:\\\\KerberosTickets\\\\[0;1a5c8aa][email protected]"
* Файл: 'C:\\\\KerberosTickets\\\\[0;1a5c8aa][email protected]': OK

Важно отметить, что TGT имеет ограниченное время жизни, и оно истечет через определенный период времени. Пользователю придется повторно аутентифицироваться в домене, чтобы получить новый TGT.

Чтобы убедиться, что был введен правильный билет, можно использовать команду "kerberos::list" в Mimikatz.

PS> .\mimikatz.exe "kerberos::list"
[00000000] - 0x00000011 - aes256_hmac
 Start/End/MaxRenew: 12/02/2024 13:13:40 ; 12/02/2024 13:14:40 ; 12/02/2024 13:14:40
 Server Name : krbtgt/DOMAIN.COM @ DOMAIN.COM
 Client Name : Ivan @ DOMAIN.COM
 Flags 32f10000 : name_canonicalize ; pre_authent ; initial ; renewable ;
forwardable ;

Далее потребуется определить привилегии украденного билета т.к. TGS предоставляет доступ только к определенному ресурсу, для которого он был выпущен.

Один из способов сбора данной информации - это проверка членства пользователя в группах и поиск явных признаков. Это можно сделать с помощью команды “net”. Например, команда "net user Ivan /domain" в примере ниже позволяет получить информацию о пользователе Ivan.

PS> net user Ivan /domain
The request will be processed at a domain controller for domain domain.com.
User name Ivan
Full Name Ivan Ivanov
Comment
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
. . .
Local Group Memberships
Global Group memberships *Workstation Administrators *VPNUser *FileServer1_PublicShare *Domain Users

The command completed successfully.

Наконец, остается получить доступ к ресурсам через новую учетную запись пользователя.

Для этого можно использовать встроенную в ос утилиту командной строки PsExec, которую мы уже рассмотрели в разборе Pass-the-Hash выше.