Обнаружение после проникновения Windows Разведка При попадании в инфраструктуру обычно производится поиск административных учетных записей, привилегированных группы безопасности, наличие настроенных соглашений (trust) между контроллерами доменов с дочерними/родительскими организациями.   net user /domain выведет названия всех учетных записей в домене. Достаточна непривилегированная учетная запись в группе пользователей домена.   Данная команда журналируется только на локальном компьютере, на котором она была исполнена, ее обычно запускают на первом зараженном хосте. Cобытие EventID=4688 журнала Security или на событии EventID=1 журнала Sysmon. Рассмотрим ниже пример события EventID=1 журнала Sysmon с разведкой в формате xml, где обратите внимание на поле  C:\Windows\system32\net1 user /domain   , в котором зафиксирована команда разведки. Как вы заметили в журнале команда  net  зафиксирована как  net1 , это сделано для обеспечения совместимости и исправления старой ошибки в команде  net  в 2000 году и осталась в системе до сих пор. Ситуации с различием команд при логировании и исполнении в командной строке не так часты, но их надо учитывать при разработке корреляционных правил выявления атак и проверять, как журналирует система выполненные команды, если даже они кажутся очевидными. - - 1 5 4 1 0 0x8000000000000000 6914807 Microsoft-Windows-Sysmon/Operational WIN-O6QVDOTOFCA.lab.local - - 2024-02-04 14:23:41.019 {460797FE-9DED-65BF-7D01-000000001800} 976 C:\Windows\System32\net1.exe 6.3.9600.17415 (winblue_r4.141028-1500) Net Command Microsoft® Windows® Operating System Microsoft Corporation net1.exe C:\Windows\system32\net1 user /domain C:\Windows\system32\ LAB\Administrator {460797FE-9671-65BE-4054-040000000000} 0x45440 1 High MD5=A3F48D90EE53FDF2547B41F87A7C8080,SHA256=D28BC8FA6E80316833C0EBB948B46511971B96635892F40998A216A2DD5EC8AA,IMPHASH=EA59607831B13D45CEC2066C9436738F {460797FE-9DEC-65BF-7C01-000000001800} 2372 C:\Windows\System32\net.exe net user /domain LAB\Administrator net group /domain .  Так будет выглядить событие в формате xml по разведке доменных групп. Базируется выявление активности так же на событии EventID=4688 журнала Security или на событии EventID=1 журнала Sysmon. Обратите внимание на поле  C:\Windows\system32\net1 group /domain - - 1 5 4 1 0 0x8000000000000000 6921609 Microsoft-Windows-Sysmon/Operational WIN-O6QVDOTOFCA.lab.local - - 2024-02-04 15:15:07.129 {460797FE-A9FB-65BF-9201-000000001800} 2988 C:\Windows\System32\net1.exe 6.3.9600.17415 (winblue_r4.141028-1500) Net Command Microsoft® Windows® Operating System Microsoft Corporation net1.exe C:\Windows\system32\net1 group /domain C:\Windows\system32\ LAB\Administrator {460797FE-9671-65BE-4054-040000000000} 0x45440 1 High MD5=A3F48D90EE53FDF2547B41F87A7C8080,SHA256=D28BC8FA6E80316833C0EBB948B46511971B96635892F40998A216A2DD5EC8AA,IMPHASH=EA59607831B13D45CEC2066C9436738F {460797FE-A9FB-65BF-9101-000000001800} 2908 C:\Windows\System32\net.exe net group /domain LAB\Administrator Отслеживать каждую команду разведки по отдельности в большой инфраструктуре может быть черевато большим количеством ложных срабатываний, поэтому стоит рассмотреть вариант выявления активнсти по массовому запуску команд разведки за короткий промежуток времени. Примеры корреляционных правил на Sigma: Правило 1 title: Suspicious Reconnaissance Activity id: d95de845-b83c-4a9a-8a6a-4fc802ebf6c0 status: experimental description: Detects suspicious command line activity on Windows systems author: Florian Roth date: 2019/01/16 tags: - attack.discovery - attack.t1087 logsource: category: process_creation product: windows detection: selection: CommandLine: - net group "domain admins" /domain - net localgroup administrators condition: selection fields: - CommandLine - ParentCommandLine falsepositives: - Inventory tool runs - Penetration tests - Administrative activity analysis: recommendation: Check if the user that executed the commands is suspicious (e.g. service accounts, LOCAL_SYSTEM) level: medium Правило 2 title: Suspicious Group And Account Reconnaissance Activity Using Net.EXE id: d95de845-b83c-4a9a-8a6a-4fc802ebf6c0 status: test description: Detects suspicious reconnaissance command line activity on Windows systems using Net.EXE references: - https://redcanary.com/blog/how-one-hospital-thwarted-a-ryuk-ransomware-outbreak/ - https://thedfirreport.com/2020/10/18/ryuk-in-5-hours/ - https://research.nccgroup.com/2022/08/19/back-in-black-unlocking-a-lockbit-3-0-ransomware-attack/ author: Florian Roth (Nextron Systems), omkar72, @svch0st, Nasreddine Bencherchali (Nextron Systems) date: 2019/01/16 modified: 2023/03/02 tags: - attack.discovery - attack.t1087.001 - attack.t1087.002 logsource: category: process_creation product: windows detection: selection_img: - Image|endswith: - '\net.exe' - '\net1.exe' - OriginalFileName: - 'net.exe' - 'net1.exe' # Covers group and localgroup flags selection_group_root: CommandLine|contains: - ' group ' - ' localgroup ' selection_group_flags: CommandLine|contains: # Add more groups for other languages - 'domain admins' - ' administrator' # Typo without an 'S' so we catch both - ' administrateur' # Typo without an 'S' so we catch both - 'enterprise admins' - 'Exchange Trusted Subsystem' - 'Remote Desktop Users' - 'Utilisateurs du Bureau à distance' # French for "Remote Desktop Users" - 'Usuarios de escritorio remoto' # Spanish for "Remote Desktop Users" - ' /do' # short for domain filter_group_add: # This filter is added to avoid the potential case where the point is not recon but addition CommandLine|contains: ' /add' # Covers 'accounts' flag selection_accounts_root: CommandLine|contains: ' accounts ' selection_accounts_flags: CommandLine|contains: ' /do' # short for domain condition: selection_img and ((all of selection_group_* and not filter_group_add) or all of selection_accounts_*) fields: - CommandLine - ParentCommandLine falsepositives: - Inventory tool runs - Administrative activity level: medium analysis: recommendation: Check if the user that executed the commands is suspicious (e.g. service accounts, LOCAL_SYSTEM) Разведка с помощью командлетов ( cmdlets ) PowerShell Выполним команду  Get-ADForest . Данная команда выдает информацию о лесе AD.  Лесом  называют полностью самостоятельную организацию Active Directory, которая имеет определенный набор атрибутов и является периметром безопасности организации. В состав леса могут входить как один, так и несколько доменов. В лесу у каждого домена есть своя база данных и свои собственные контроллеры домена. Однако пользователи домена в лесу также могут получить доступ к другим доменам леса. Это означает, что даже если домен может быть автономным (без необходимости взаимодействия с другими доменами), он не изолирован с точки зрения безопасности, поскольку пользователь из одного домена по умолчанию может получить доступ к ресурсам других доменов в том же лесу. Однако пользователи леса по умолчанию не могут получить доступ к ресурсам из других лесов, поэтому лес является логической структурой, которая может обеспечить изоляцию с точки зрению безопасности. Ниже представлено событие выполнения скрипт-блоков с  EventID = 4104  из журнала  Powershell . Обратите внимание на строку  get-adforest   , в которой зафиксировано выполнение команды. - - 4104 1 5 102 15 0x0 4667 Microsoft-Windows-PowerShell/Operational WIN-O6QVDOTOFCA.lab.local - 1 1 get-adforest 07651e4c-bb49-4563-8b55-1454584112d7 Количество командлетов PowerShell для разведки не малое количество, выявить их запуск можно так же по событию с EventID = 4104.  Пример корреляционного правила на  Sigma для выявления команд разведки данных AD и не только. title: PowerView PowerShell Cmdlets - ScriptBlock id: dcd74b95-3f36-4ed9-9598-0490951643aa related: - id: b2317cfa-4a47-4ead-b3ff-297438c0bc2d type: similar status: test description: Detects Cmdlet names from PowerView of the PowerSploit exploitation framework. references: - https://powersploit.readthedocs.io/en/stable/Recon/README - https://github.com/PowerShellMafia/PowerSploit/tree/master/Recon - https://thedfirreport.com/2020/10/08/ryuks-return - https://adsecurity.org/?p=2277 author: Bhabesh Raj date: 2021/05/18 modified: 2023/11/22 tags: - attack.execution - attack.t1059.001 logsource: product: windows category: ps_script definition: 'Requirements: Script Block Logging must be enabled' detection: selection: ScriptBlockText|contains: - 'Export-PowerViewCSV' - 'Find-DomainLocalGroupMember' - 'Find-DomainObjectPropertyOutlier' - 'Find-DomainProcess' - 'Find-DomainShare' - 'Find-DomainUserEvent' - 'Find-DomainUserLocation' - 'Find-ForeignGroup' - 'Find-ForeignUser' - 'Find-GPOComputerAdmin' - 'Find-GPOLocation' - 'Find-InterestingDomain' # Covers: Find-InterestingDomainAcl, Find-InterestingDomainShareFile - 'Find-InterestingFile' - 'Find-LocalAdminAccess' - 'Find-ManagedSecurityGroups' - 'Get-CachedRDPConnection' - 'Get-DFSshare' - 'Get-DomainDFSShare' - 'Get-DomainDNSRecord' - 'Get-DomainDNSZone' - 'Get-DomainFileServer' - 'Get-DomainGPOComputerLocalGroupMapping' - 'Get-DomainGPOLocalGroup' - 'Get-DomainGPOUserLocalGroupMapping' - 'Get-LastLoggedOn' - 'Get-LoggedOnLocal' - 'Get-NetFileServer' - 'Get-NetForest' # Covers: Get-NetForestCatalog, Get-NetForestDomain, Get-NetForestTrust - 'Get-NetGPOGroup' - 'Get-NetProcess' - 'Get-NetRDPSession' - 'Get-RegistryMountedDrive' - 'Get-RegLoggedOn' - 'Get-WMIRegCachedRDPConnection' - 'Get-WMIRegLastLoggedOn' - 'Get-WMIRegMountedDrive' - 'Get-WMIRegProxy' - 'Invoke-ACLScanner' - 'Invoke-CheckLocalAdminAccess' - 'Invoke-EnumerateLocalAdmin' - 'Invoke-EventHunter' - 'Invoke-FileFinder' - 'Invoke-Kerberoast' - 'Invoke-MapDomainTrust' - 'Invoke-ProcessHunter' - 'Invoke-RevertToSelf' - 'Invoke-ShareFinder' - 'Invoke-UserHunter' - 'Invoke-UserImpersonation' - 'Remove-RemoteConnection' - 'Request-SPNTicket' - 'Resolve-IPAddress' # - 'Get-ADObject' # prone to FPs # - 'Get-Domain' # too many FPs # Covers Cmdlets like: DomainComputer, DomainController, DomainDFSShare, DomainDNSRecord, DomainGPO, etc. # - 'Add-DomainGroupMember' # - 'Add-DomainObjectAcl' # - 'Add-ObjectAcl' # - 'Add-RemoteConnection' # - 'Convert-ADName' # - 'Convert-NameToSid' # - 'ConvertFrom-UACValue' # - 'ConvertTo-SID' # - 'Get-DNSRecord' # - 'Get-DNSZone' # - 'Get-DomainComputer' # - 'Get-DomainController' # - 'Get-DomainGroup' # - 'Get-DomainGroupMember' # - 'Get-DomainManagedSecurityGroup' # - 'Get-DomainObject' # - 'Get-DomainObjectAcl' # - 'Get-DomainOU' # - 'Get-DomainPolicy' # - 'Get-DomainSID' # - 'Get-DomainSite' # - 'Get-DomainSPNTicket' # - 'Get-DomainSubnet' # - 'Get-DomainUser' # - 'Get-DomainUserEvent' # - 'Get-Forest' # Covers: Get-ForestDomain, Get-ForestGlobalCatalog, Get-ForestTrust # - 'Get-IPAddress' # - 'Get-NetComputer' # Covers: Get-NetComputerSiteName # - 'Get-NetDomain' # Covers: Get-NetDomainController, Get-NetDomainTrust # - 'Get-NetGroup' # Covers: Get-NetGroupMember # - 'Get-NetLocalGroup' # Covers: NetLocalGroupMember # - 'Get-NetLoggedon' # - 'Get-NetOU' # - 'Get-NetSession' # - 'Get-NetShare' # - 'Get-NetSite' # - 'Get-NetSubnet' # - 'Get-NetUser' # - 'Get-ObjectAcl' # - 'Get-PathAcl' # - 'Get-Proxy' # - 'Get-SiteName' # - 'Get-UserEvent' # - 'Get-WMIProcess' # - 'New-DomainGroup' # - 'New-DomainUser' # - 'Set-ADObject' # - 'Set-DomainObject' # - 'Set-DomainUserPassword' condition: selection falsepositives: - Unknown level: high Выявление разведки в журналах события AD Для наиболее эффективной разведки могут воспользоваться утилитой  SharpHound  и результаты выполнения, потом, для удобства, визуализировать с помощью утилиты  BloodHound . Аналогичные инструменты атакующих для разведки данных в AD, это,  ADFind ,  PowerView  и  ldapsearch . Запустим ADFind и посмотрим какие останутся следы в жураналах событий. Предварительно должен быть настроен аудит журналирования запросов для генерации событий EventID=1644 журнала Directory Service. Для настройки аудита необходимо с помощью PowerShell на контроллере домена выполнить команды:  Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\NTDS\Diagnostics' -Name '15 Field Engineering' -Value "5" Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\NTDS\Parameters' -Name 'Expensive Search Results Threshold' -Value "10" Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\NTDS\Parameters' -Name 'Inefficient Search Results Threshold' -Value "10" Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\NTDS\Parameters' -Name 'Search Time Threshold (msecs)' -Value "80" Данные команды изначально были предназначены отслеживания медленных запросов к AD. Настройку надо выполнять с осторожностью, поскольку повышается нагрузка на контроллере домена. В данном случае уже мы можем отслеживать аномальную активность на самом контроллере домена, это значит, что выявить атаку вероятность выше по сравнению с подходом выявления атаки при исполнении на конечном узле, т.к. события с контроллера домена всегда должны собираться в SIEM, как от критичного узла в инфраструктуре. Выполним команду: adfind -b dc=lab,dc=local -f "( |(sAMAccountName=Bill) )" Обратите внимание на строку в событии ниже с идентификатором 1644 со значением  ( | (sAMAccountName=Bill) )   , это зафиксирована команда с запросом от утилиты  ADFind  для получения информации о пользователе  Bill . В поле  192.168.0.5:51653  указан IP-адрес с которого был выполнен запрос. В поле LAB\Nick   указано под какой учетной записью был выполнен запрос. - - 1644 0 4 15 0 0x8080000000000000 309 Directory Service WIN-O6QVDOTOFCA.lab.local - CN=Schema,CN=Configuration,DC=lab,DC=local ( | (sAMAccountName=Bill) ) 1630 50 192.168.0.5:51653 subtree uid,sAMAccountName DNT_index:1070:N; 14809 4 0 0 0 47 none LAB\Nick Далее необходимо выявить хост и проанализировать с него журналы событий.  Атака Kerberoasting В Active Directory любой пользователь может запросить сервисный билет —  Service Ticket  для любой зарегистрированной службы в домене и имеющий Service Principal Name (SPN), независимо от статуса службы. Service Ticket частично зашифрован ключом Kerberos, полученным из пароля пользователя сервиса, что позволяет подобрать оффлайн пароль, расшифровывая Service Ticket. Большинство служб регистрируются в учетных записях компьютеров с автоматически генерируемыми паролями длиной 120 символов, меняющимися ежемесячно, что делает взлом Service Ticket невозможным. Однако иногда службы привязываются к обычным учетным записям пользователей со слабыми паролями, что может быть использовано для взлома и получения паролей пользователей. Атака Kerberoasting заключается в запросе Service Ticket для обычных учетных записей пользователей служб и последующей попытке взлома для получения паролей пользователей, которые обычно имеют высокие привилегии и далее используются на следующих этапах атак. Проверим учетные записи пользователей с именами участников-служб с помощью ADFind, выполнив команду. adfind -b dc=lab,dc=local -f "(&(samAccountType=805306368)(servicePrincipalName=*))" В результате получаем две учетный записи с SPN`ами — это  krbtgt , который не попал на скриншот в связи с тем, что его не взломать подбором. Вторая учетная запись с SPN выделена на скриншоте  sqlservice  — это как раз тот самый лакомый кусочек для злоумышленника. Запросив Servcie Ticket для учетной записи sqlservice, злоумышленник может взламывать его у себя на хосте с помощью  hashcat . Для получения Service Ticket и дальнейшего оффлайн взлома, злоумышленник можете использовать следующие скрипты  impacket GetUserSPNs.py , команду  Rubeus kerberoast  или сценарий  Invoke-Kerberoast.ps1 . Проведем атаку с помощью утилиты Rubeus используя команду  Rubeus.exe kerberoast  и результатом получаем хэши от пароля для учетной записи sqlservice на скриншоте ниже, которые можем дальше взламывать. Посмотрим как это будет зафиксировано в журналах событий на AD. При запросе Service Ticket сгенерировалось событие c  EventID = 4769  в журнале  Security . Обратите внимание на следующие важные поля: Nick@LAB.LOCAL  — учетная запись которая выполнила запрос. sqlservice   — наша учетная запись с SPN. 0x17   — 0x17 означает шифрование AES256, но это не помеха для злоумышленника, потому что уже есть разработанные скрипты для взлома. 192.168.0.5  — IP-адрес выполнившего запрос Service Ticket. 58334  — порты выполнившего запрос Service Ticket. - - 4769 0 0 14337 0 0x8020000000000000 94453 Security WIN-O6QVDOTOFCA.lab.local - Nick@LAB.LOCAL LAB.LOCAL sqlservice S-1-5-21-1043167210-2633990363-2710869231-1118 0x40800000 0x17 192.168.0.5 58334 0x0 {9B1A0512-6224-531F-E2B8-C5A47A332D75} - Важное замечание : подобных событий c  EventID = 4769  будет огромное множество в инфраструктуре. Это обычная активность. Для повышения эффективности атаки злоумышленник может запросить несколько Service Ticket за короткий промежуток времени, чтобы получить для дальнейшего брутфорса как можно больше данных, так как он заведомо не знает, у какой сервисной или пользовательской УЗ пароль будет менее криптостойким. Подобную активность можно попытаться выявить корреляционным правилом, которое отслеживает множественные запросы Service Ticket от одного источника за короткий промежуток времени. Для выявления атаки также можно отслеживать запросы Service Ticket c шифрованием RC4, но может быть большое количество ложных срабатываний, если в инфраструктуре есть сервисы, которые используют устаревшее шифрование. Пример правила для выявления запроса Service Ticket с шифрованием RC4 на  Sigma : title: Suspicious Kerberos RC4 Ticket Encryption id: 496a0e47-0a33-4dca-b009-9e6ca3591f39 status: test description: Detects service ticket requests using RC4 encryption type references: - https://adsecurity.org/?p=3458 - https://www.trimarcsecurity.com/single-post/TrimarcResearch/Detecting-Kerberoasting-Activity author: Florian Roth (Nextron Systems) date: 2017/02/06 modified: 2022/06/19 tags: - attack.credential_access - attack.t1558.003 logsource: product: windows service: security detection: selection: EventID: 4769 TicketOptions: '0x40810000' TicketEncryptionType: '0x17' reduction: ServiceName|endswith: '$' condition: selection and not reduction falsepositives: - Service accounts used on legacy systems (e.g. NetApp) - Windows Domains with DFL 2003 and legacy systems level: medium Самый оптимальный способ выявления атаки kerberoasting — использование  SPN HoneyToken . HoneyToken — это в данном случае подделанная учетная запись приманка с SPN, которая потом отслеживается на возникающие к ней запросы, т.к. в легитимных целях она не используется. Дополнительный материал об атаке Kerberoasting . Атака DCSync DCSync  — это атака, позволяющая злоумышленнику выдавать себя за контроллер домена (DC, domain controller) с целью получения базы учетных данных пользователей для последующего горизонтального перемещения в сети и/или доступа к конфиденциальной информации. В основе атаки лежит механизм, предусмотренный для выполнения репликации данных между контроллерами домена (DC). Механизм репликации данных архитектурно заложен в операционной системе Windows. Службы Active Directory и протокол  MS-DRSR  отвечают за взаимодействие между контроллерами домена и осуществляют репликацию. Сама компания Microsoft рекомендует изначально устанавливать как минимум два и более контроллера для одного домена в корпоративной сети, чтобы обеспечить отказоустойчивость доменной инфраструктуры. В процессе репликации данных между контроллерами помимо обычных атрибутов об объекте (имя, отчество, списка групп и так далее) передается и чувствительная информация, например, хеши паролей пользователей, поскольку каждый контроллер выступает как точка для аутентификации и авторизации в домене. Как уже можно было догадаться, отчасти именно из-за наличия такого механизма возможна реализация атаки типа DCSync. Атакующий, имея необходимый набор привилегий, может отправить одному из контроллеров домена организации запрос на выполнение репликации. Запросив при этом информацию по одному или нескольким объектам в домене. Таким образом злоумышленник удаленно собирает хеши паролей пользователей и другую полезную информацию в домене без выполнения какого-либо вредоносного кода на самих контроллерах домена организации. Необходимые права доступа для проведения атаки DCSync. Наименование Common Name(общее имя) Rights-GUID(идентификатор прав) Replicating Directory Changes DRS-Replication-Get-Changes 1131f6aa-9c07–11d1-f79f-00c04fc2dcd2 Replicating Directory Changes All DRS-Replication-Get-Changes-All 1131f6ad-9c07–11d1-f79f-00c04fc2dcd2 Атаку DCSync можно выполнить с помощью инструментов, таких как  secretsdump  из набора impacket и широко известной утилитой  mimikatz . Например злоумышленник выполняет атаку DCSync с помощью команды  lsadump::dcsync /dc:$DomainController /domain:$DOMAIN /all /csv Выявить атаку на контроллере домена можно с помощью события  EventID= 4662  журнала Security. Важно понимать, что включение аудита события 4662 может повлечь за собой генерацию большого количества событий, особенно при неаккуратной настройке  SACL . Настройка происходит в групповой политике:  Computer configurations > Policies > Windows Settings > Security Settings > Local Policies > Audit Policy > Audit Directory Service Access > Enable Success . При настройке этого параметра в журналах будут генерироваться два новых идентификатора события: 4661 и 4662. Предварительно должен быть так же настроен SACL для отслеживания доступа к объектам AD на контроллере домена связанные с репликацией: AD Users and Computers > [Domain] > properties > security > advanced > auditing > add: Principal: Everyone Type: Success Applies to: This Object Only Permissions: Replicating Directory Changes; Replicating Directory Changes All В результате атаки фиксируется событие, в котором необходимо обратить внимание на поле: %%7688 {1131f6aa-9c07-11d1-f79f-00c04fc2dcd2} {19195a5b-6da0-11d0-afd3-00c04fd930c9} - - 4662 0 0 14080 0 0x8020000000000000 111044 Security WIN-O6QVDOTOFCA.lab.local - S-1-5-21-1043167210-2633990363-2710869231-500 administrator LAB 0x45440 DS %{19195a5b-6da0-11d0-afd3-00c04fd930c9} %{83fb1e47-6d25-4d4b-a710-e244aca1c5e8} Object Access 0x0 %%7688 0x100 %%7688 {1131f6aa-9c07-11d1-f79f-00c04fc2dcd2} {19195a5b-6da0-11d0-afd3-00c04fd930c9} - Пример правила для выявления атаки DCSync и в том числе DCShadow на  Sigma . Дополнительный материал про  DCSync . Получение базы даных NTDS.dit Контроллер домена отвечает за хранение базы данных домена  NTDS.dit  со всей информацией об объектах домена и обслуживает службы Active Directory, такие как аутентификация, авторизация, разрешение имен и т.д. База данных хранится в файле  C:\Windows\NTDS\ntds.dit на контроллере домена. Поэтому, если кто-то украдет этот файл, он сможет получить доступ ко всей информации об объектах домена (компьютерах, пользователях, группах, политиках и т.д.), включая учетные данные и хэши пользователей. Следовательно, доступ к этому файлу и к контроллерам домена должен быть ограничен администраторами домена и отслеживаться корреляционными правилам командой мониторинга SOC. При получении доступа к учетной записи администратора домена, можно сделать дамп содержимого базы данных контроллера домена, чтобы прочитать некоторые конфиденциальные данные, такие как  krbtgt  учетные данные пользователя, для создания золотого билета ( Golden Ticket ) и дальнейшего свободного продвижения по всей Windows инфраструктуре. Чтобы извлечь содержимое базы данных, злоумышленник может войти в систему на контроллере домена и локально выгрузить файл NTDS.dit с помощью встроенных в системе утилит  ntdsutil  или  vssadmin . Данные утилиты нужны, потому что просто так взять и скопировать файл  C:\Windows\NTDS\ntds.dit  не получится так, как он используется всегда системой. Есть еще наиболее изящный для злоумышленников способов заполучить базу NTDS.dit, злоумышленник может заполучить административный доступ к системе виртуализации, где у него будет возможность сделать мгновенный снимок (SnapShot) виртуальной машины с сервером Active Directory, далее он выгружает к себе снимок виртуальной машины и делает с ним что хочет, в нашем случае, разбирает базу NTDS.dit. При этом система мониторинга уже это не сможет выявить, если только отслеживать на более раннем этапе действия учтеных записей по созданию снапшотов критичных серверов и их выгрузке из системы виртуализации. Детальнее об этом рассмотрим далее в уроке 4.4 текущего курса. Рассмотрим вариант дампа базы NTDS.dit с помощью утилиты ntdsutil. Классическая команда выглядит следующим образом ntdsutil "activate instance ntds" "ifm" "create full C:\Windows\Temp\NTDS" quit quit Выполнение вышеуказанной команды можно зафиксировать с помощью события создания процесса  EventID=1  журнала Symon,  EventID=4688  журнала Security и с помощью события запуска скриптблоков  EventID=4104  журнала Powershell на контроллере домена. Обратите ниже внимание на строку в событии c EventID=1(Sysmon) ntdsutil "activate instance ntds" "ifm" "create full C:\Windows\Temp\NTDS" quit quit - - 1 5 4 1 0 0x8000000000000000 8119972 Microsoft-Windows-Sysmon/Operational WIN-O6QVDOTOFCA.lab.local - - 2024-02-10 09:42:40.602 {460797FE-4510-65C7-AF07-000000001800} 3856 C:\Windows\System32\ntdsutil.exe 6.3.9600.16384 (winblue_rtm.130821-1623) NT5DS Microsoft® Windows® Operating System Microsoft Corporation ntdsutil.exe ntdsutil "activate instance ntds" "ifm" "create full C:\Windows\Temp\NTDS" quit quit C:\Temp\ LAB\Administrator {460797FE-9671-65BE-4054-040000000000} 0x45440 1 High MD5=0741B31AF51B150DF84BFEFD4A15C624,SHA256=D2C7BD14D91124401AAC6F19DD2D2EDDA0EAAC55CFFB654583444137960EEDCA,IMPHASH=6D8CC7C1C74B6AA69C6C1F189D5781D9 {460797FE-9696-65BE-3A00-000000001800} 2056 C:\Windows\System32\cmd.exe "C:\Windows\system32\cmd.exe" LAB\Administrator Так же сгенерировалось событие создания файла с  EventID=11  журнала Sysmon. Обратите внимание на следующие поля: C:\Windows\system32\ntdsutil.exe  — процес который создал файл C:\Windows\Temp\NTDS\Active Directory\ntds.dit   — этот файл уже может спокойно себе скачать злоумышленник, например, для дальнейшей генерации Golden Ticket. - - 11 2 4 11 0 0x8000000000000000 8120158 Microsoft-Windows-Sysmon/Operational WIN-O6QVDOTOFCA.lab.local - Suspicious 2024-02-10 09:42:51.306 {460797FE-4510-65C7-AF07-000000001800} 3856 C:\Windows\system32\ntdsutil.exe C:\Windows\Temp\NTDS\Active Directory\ntds.dit 2024-02-10 09:42:51.306 LAB\Administrator Пример правила на  Sigma  для выявления атак связанных с кражей ntds.dit ниже. title: Suspicious Process Patterns NTDS.DIT Exfil id: 8bc64091-6875-4881-aaf9-7bd25b5dda08 status: test description: Detects suspicious process patterns used in NTDS.DIT exfiltration references: - https://www.ired.team/offensive-security/credential-access-and-credential-dumping/ntds.dit-enumeration - https://www.n00py.io/2022/03/manipulating-user-passwords-without-mimikatz/ - https://pentestlab.blog/tag/ntds-dit/ - https://github.com/samratashok/nishang/blob/414ee1104526d7057f9adaeee196d91ae447283e/Gather/Copy-VSS.ps1 - https://github.com/zcgonvh/NTDSDumpEx - https://github.com/rapid7/metasploit-framework/blob/d297adcebb5c1df6fe30b12ca79b161deb71571c/data/post/powershell/NTDSgrab.ps1 - https://blog.talosintelligence.com/2022/08/recent-cyber-attack.html?m=1 author: Florian Roth (Nextron Systems) date: 2022/03/11 modified: 2022/11/10 tags: - attack.credential_access - attack.t1003.003 logsource: product: windows category: process_creation detection: selection_tool: # https://github.com/zcgonvh/NTDSDumpEx - Image|endswith: - '\NTDSDump.exe' - '\NTDSDumpEx.exe' - CommandLine|contains|all: # ntdsdumpex.exe -d ntds.dit -o hash.txt -s system.hiv - 'ntds.dit' - 'system.hiv' - CommandLine|contains: 'NTDSgrab.ps1' selection_oneliner_1: # powershell "ntdsutil.exe 'ac i ntds' 'ifm' 'create full c:\temp' q q" CommandLine|contains|all: - 'ac i ntds' - 'create full' selection_onliner_2: # cmd.exe /c copy z:\windows\ntds\ntds.dit c:\exfil\ntds.dit CommandLine|contains|all: - '/c copy ' - '\windows\ntds\ntds.dit' selection_onliner_3: # ntdsutil "activate instance ntds" "ifm" "create full c:\windows\temp\data\" "quit" "quit" CommandLine|contains|all: - 'activate instance ntds' - 'create full' selection_powershell: CommandLine|contains|all: - 'powershell' - 'ntds.dit' set1_selection_ntds_dit: CommandLine|contains: 'ntds.dit' set1_selection_image_folder: - ParentImage|contains: - '\apache' - '\tomcat' - '\AppData\' - '\Temp\' - '\Public\' - '\PerfLogs\' - Image|contains: - '\apache' - '\tomcat' - '\AppData\' - '\Temp\' - '\Public\' - '\PerfLogs\' condition: 1 of selection* or all of set1* falsepositives: - Unknown level: high Рассмотрим следующий вариант дампа базы ntds.dit с помощью утилиты vssadmin. Классическая команда выглядит следующим образом  vssadmin create shadow /for=C: . Выявить активность можно с помощью событий  EventID=4688  журнала Security,  EventID=1  журнала Sysmon. Обратите внимание на зафиксированную командную строку в событии vssadmin create shadow /for=C:  - - 1 5 4 1 0 0x8000000000000000 8140166 Microsoft-Windows-Sysmon/Operational WIN-O6QVDOTOFCA.lab.local - - 2024-02-10 12:14:55.026 {460797FE-68BF-65C7-EC07-000000001800} 860 C:\Windows\System32\vssadmin.exe 6.3.9600.17415 (winblue_r4.141028-1500) Command Line Interface for Microsoft® Volume Shadow Copy Service Microsoft® Windows® Operating System Microsoft Corporation VSSADMIN.EXE vssadmin create shadow /for=C: C:\Temp\ LAB\Administrator {460797FE-9671-65BE-4054-040000000000} 0x45440 1 High MD5=D9EE4ACBA0FD5AF721EC2CE5226B5E2E,SHA256=AF08DA2358D55665FAE06AE694129B5F3778989E93F5F369E0B594E1A2BC521E,IMPHASH=E29ADBD24C814ABA83B2027E5BB6C452 {460797FE-9696-65BE-3A00-000000001800} 2056 C:\Windows\System32\cmd.exe "C:\Windows\system32\cmd.exe" LAB\Administrator Соответственно мы обнаружим создание файла  C:\Windows\Temp\ntds.dit.save в событие  EventID=11  журнала Sysmon.  - - 11 2 4 11 0 0x8000000000000000 8140853 Microsoft-Windows-Sysmon/Operational WIN-O6QVDOTOFCA.lab.local - Executable 2024-02-10 12:19:54.526 {460797FE-9696-65BE-3A00-000000001800} 2056 C:\Windows\system32\cmd.exe C:\Windows\Temp\ntds.dit.save 2024-02-10 12:19:54.526 LAB\Administrator Для заметания следов следующим шагом злоумышленник может выполнить команду: vssadmin delete shadows /shadow={e1f24f05-c919-4f96-ac60-fad4bfb07459} Обратите внимание на зафиксированную команду в событии:    vssadmin delete shadows /shadow={e1f24f05-c919-4f96-ac60-fad4bfb07459} - - 1 5 4 1 0 0x8000000000000000 8141617 Microsoft-Windows-Sysmon/Operational WIN-O6QVDOTOFCA.lab.local - - 2024-02-10 12:25:31.136 {460797FE-6B3B-65C7-F207-000000001800} 3332 C:\Windows\System32\vssadmin.exe 6.3.9600.17415 (winblue_r4.141028-1500) Command Line Interface for Microsoft® Volume Shadow Copy Service Microsoft® Windows® Operating System Microsoft Corporation VSSADMIN.EXE vssadmin delete shadows /shadow={e1f24f05-c919-4f96-ac60-fad4bfb07459} C:\Temp\ LAB\Administrator {460797FE-9671-65BE-4054-040000000000} 0x45440 1 High MD5=D9EE4ACBA0FD5AF721EC2CE5226B5E2E,SHA256=AF08DA2358D55665FAE06AE694129B5F3778989E93F5F369E0B594E1A2BC521E,IMPHASH=E29ADBD24C814ABA83B2027E5BB6C452 {460797FE-9696-65BE-3A00-000000001800} 2056 C:\Windows\System32\cmd.exe "C:\Windows\system32\cmd.exe" LAB\Administrator  Далее злоумышленник любым из возможных способов может забрать к себе файл  C:\Windows\Temp\ntds.dit.save . Действия при компроментации системы Сбросьте все пароли учетных записей пользователей: сбросьте дважды (с интервалом не менее восьми часов) пароль пользователя KRBTGT; сбросить все пароли администратора; сбросить пароли всех сервисных учетных записей; сбросить все пароли учетных записей компьютеров. Проверьте значение параметра срока жизни пароля для компьютеров. Злоумышленники могут изменить этот срок, чтобы предоставить себе доступ с использованием машинных хэшей на более длительный  срок . Сбросить все пароли LAPS. Сбросить разрешения для объекта AdminSDHolders. Удалить у всех администраторов домена и администраторов систем все данные из атрибута msDS-KeyCredentialLink. Занести всех администраторов домена и администраторов систем в группу Protected Users. Отозвать и перевыпустить все сертификаты ADCS. Проверьте наличие вредоносных запланированных задач. Проверьте наличие вредоносных автозапусков или других механизмов сохранения на основе реестра. Проверьте наличие бэкдоров в стиле utilman. Проверьте наличие вредоносных принтеров/драйверов принтеров. Просмотрите права делегированного доступа Active Directory (RBCD Bakdoors). Ротация сертификатов подписи токенов ADFS и сертификатов расшифровки токенов. Проверьте дескрипторы безопасности  Service Control Manager  (SCM). Проверьте наличие изменений объекта в соответствии с первоначальными временными рамками доступа/событий. Проверка членства в группах на соответствие известным базовым показателям. Просмотрите сценарии входа в GPO и SYSVOL. Просмотрите домены и доверительные отношения Active Directory. Установить все последние обновления безопасности.