
Auditoria offline rápida de senhas do Active Directory usando Python.
Auditoria offline rápida de senhas do Active Directory usando Python.
Lil Pwny é uma aplicação Python para realizar uma auditoria offline de hashes NTLM das senhas dos usuários, recuperadas do Active Directory, contra senhas conhecidas comprometidas do Have I Been Pwned. Os resultados serão exibidos em formato JSON contendo o nome de usuário, o hash correspondente (pode ser ofuscado) e quantas vezes a senha correspondente foi vista no HIBP.
Mais informações sobre o Lil Pwny podem ser encontradas no meu blog
Lil Pwny oferece a funcionalidade de aprimorar sua lista de senhas personalizadas adicionando variações comumente usadas das suas senhas personalizadas. Estas incluem:
P@ssw0rd)PASSWORD, Password)password!, !password)password123!, !passwordabc, passwordpassword)
password1950, password2034)Uma lista de senhas personalizadas de 100 senhas em texto simples gera 49.848.660 variações.
Lil Pwny procura por usuários que estão usando variações do seu nome de usuário como senha.
Ele converte o nome de usuário nos seguintes formatos:
Estes são então convertidos para hashes NTLM e auditados em relação aos hashes do AD.
Esta aplicação foi desenvolvida para aproveitar ao máximo o multiprocessamento em Python, com o objetivo de funcionar o mais rápido possível em hardware de nível consumidor.
Como usa multiprocessamento, quanto mais núcleos você tiver disponíveis, mais rápido o Lil Pwny deve funcionar. Ainda obtive resultados muito bons com um número baixo de núcleos lógicos:
Lil Pwny irá exibir os resultados no stdout:
ou JSON:
{"localtime": "2021-00-00 00:00:00,000", "level": "NOTIFY", "source": "Lil Pwny", "match_type": "hibp", "detection_data": {"username": "RICKON.STARK", "hash": "32ED87BDB5FDC5E9CBA88547376818D4", "matches_in_hibp": "24230577", "obfuscated": "True"}}
Você pode redirecionar a saída JSON do Lil Pwny para um arquivo:
lil-pwny -ad ... > lil-pwny-results.json
Este log formatado em JSON pode ser facilmente ingerido em um SIEM ou outra ferramenta de análise de logs, e pode ser alimentado para outros scripts ou plataformas para ações de resolução automatizadas.
Instale via pip
pip install lil-pwny
Lil-pwny será instalado como um comando global, use da seguinte forma:
usage: lil-pwny [-h] -hibp HIBP [-v] [-c CUSTOM] [-custom-enhance CUSTOM_ENHANCE] -ad AD_HASHES [-d] [-output {file,stdout,json}] [-o] [--verbose]
Fast offline auditing of Active Directory passwords using Python
options:
-h, --help show this help message and exit
-hibp HIBP, --hibp HIBP
The .txt file containing HIBP NTLM hashes
-v, --version show program's version number and exit
-c CUSTOM, --custom CUSTOM
.txt file containing additional custom passwords to check for
-custom-enhance CUSTOM_ENHANCE, --custom-enhance CUSTOM_ENHANCE
generate an enhanced custom password list based on the provided custom password list. Must be used with -c/--custom flag. The enhanced list will stored in memory and not
written to disk. Provide the minimum length of the passwords you want. Default is 8
-ad AD_HASHES, --ad-hashes AD_HASHES
The .txt file containing NTLM hashes from AD users
-d, --duplicates Output a list of duplicate password users
-output {file,stdout,json}, --output {file,stdout,json}
Where to send results
-o, --obfuscate Obfuscate hashes from discovered matches by hashing with a random salt
--verbose Turn on verbose logging
Exemplo:
lil-pwny -hibp ~/hibp_hashes.txt -ad ~/ad_user_hashes.txt -c ~/custom_passwords.txt -output stdout -do
Em um controlador de domínio, use ntdsutil para gerar um dump IFM do seu domínio AD. Execute o seguinte em uma janela do PowerShell elevada:
ntdsutil
activate instance ntds
ifm
create full **output path**
Para recuperar os hashes NTLM dos dados IFM do AD, é necessário o módulo PowerShell DSInternals.
Uma vez instalado, use o hive SYSTEM nos dados IFM para recuperar os hashes no formato usuario:hash e salve-os no arquivo ad_ntlm_hashes.txt
$bootKey = Get-BootKey -SystemHivePath '.\registry\SYSTEM'
Get-ADDBAccount -All -DBPath '.\Active Directory\ntds.dit' -BootKey $bootKey | Format-Custom -View HashcatNT | Out-File ad_ntlm_hashes.txt -Encoding ASCII
O arquivo pode ser baixado da API HIBP usando um utilitário .NET aqui
O script PowerShell no diretório scripts pode ser usado para remover contas indesejadas da saída IFM antes do processamento. Estas incluem: