
Dump de informações do Active Directory via LDAP
Dump de informações do Active Directory via LDAP
Em um domínio Active Directory, muitas informações interessantes podem ser obtidas via LDAP por qualquer usuário autenticado (ou máquina). Isso torna o LDAP um protocolo interessante para coleta de informações na fase de reconhecimento de um pentest em uma rede interna. Um problema é que os dados do LDAP muitas vezes não estão disponíveis em um formato de fácil leitura.
O ldapdomaindump é uma ferramenta que visa resolver esse problema, coletando e analisando informações disponíveis via LDAP e gerando saída em formato HTML legível por humanos, além de JSON e CSV/TSV/arquivos pesquisáveis (greppable) legíveis por máquina.
A ferramenta foi projetada com os seguintes objetivos em mente:
A ferramenta gera vários arquivos contendo uma visão geral dos objetos no domínio:
Além de dois arquivos agrupados:
Requer ldap3 > 2.0 e dnspython. O ldapdomaindump requer Python 3.6 ou superior.
As dependências podem ser instaladas manualmente com pip install ldap3 dnspython future, mas na maioria dos casos devem ser gerenciadas pelo pip ao instalar o pacote principal, seja a partir do git ou do pypi.
O pacote ldapdomaindump pode ser instalado com python setup.py install a partir do código-fonte git, ou, para a versão mais recente, com pip install ldapdomaindump.
Existem 3 maneiras de usar a ferramenta:
python ldapdomaindump.pypython -m ldapdomaindumpldapdomaindumpA ajuda pode ser obtida com a opção -h:
usage: ldapdomaindump.py [-h] [-u USERNAME] [-p PASSWORD] [-at {NTLM,SIMPLE}]
[-o DIRECTORY] [--no-html] [--no-json] [--no-grep]
[--grouped-json] [-d DELIMITER] [-r] [-n DNS_SERVER]
[-m]
HOSTNAME
Domain information dumper via LDAP. Dumps users/computers/groups and
OS/membership information to HTML/JSON/greppable output.
Required options:
HOSTNAME Hostname/ip or ldap://host:port connection string to
connect to (use ldaps:// to use SSL)
Main options:
-h, --help show this help message and exit
-u USERNAME, --user USERNAME
DOMAIN\username for authentication, leave empty for
anonymous authentication
-p PASSWORD, --password PASSWORD
Password or LM:NTLM hash, will prompt if not specified
-at {NTLM,SIMPLE}, --authtype {NTLM,SIMPLE}
Authentication type (NTLM or SIMPLE, default: NTLM)
Output options:
-o DIRECTORY, --outdir DIRECTORY
Directory in which the dump will be saved (default:
current)
--no-html Disable HTML output
--no-json Disable JSON output
--no-grep Disable Greppable output
--grouped-json Also write json files for grouped files (default:
disabled)
-d DELIMITER, --delimiter DELIMITER
Field delimiter for greppable output (default: tab)
Misc options:
-r, --resolve Resolve computer hostnames (might take a while and
cause high traffic on large networks)
-n DNS_SERVER, --dns-server DNS_SERVER
Use custom DNS resolver instead of system DNS (try a
domain controller IP)
-m, --minimal Only query minimal set of attributes to limit memmory
usage
A maioria dos servidores AD suporta autenticação NTLM. No caso raro de não suportar, use --authtype SIMPLE.
Por padrão, a ferramenta gera todos os arquivos em HTML, JSON e saída delimitada por tabulação (greppable). Há também dois arquivos agrupados (users_by_group e computers_by_os) para conveniência. Estes não possuem saída greppable. A saída JSON para arquivos agrupados está desabilitada por padrão, pois cria arquivos muito grandes sem nenhum dado que já não esteja presente nos outros arquivos.
Uma opção importante é a opção -r, que define se o atributo DNSHostName de um computador deve ser resolvido para um endereço IPv4. Embora isso possa ser muito útil, o atributo DNSHostName não é atualizado automaticamente. Quando o domínio AD usa subdomínios para nomes de host de computadores, o DNSHostName frequentemente estará incorreto e não será resolvido. Lembre-se também que resolver todos os nomes de host do domínio pode causar alta carga no controlador de domínio.
Por padrão, o ldapdomaindump tentará salvar cada atributo que puder ler nos arquivos .json. Em redes grandes, isso usa muita memória (já que as relações de grupo são atualmente calculadas em memória antes de serem gravadas em disco). Para salvar apenas os atributos mínimos necessários (aqueles mostrados por padrão nos arquivos .html e .grep), use a opção --minimal.
O LDAPDomainDump inclui um utilitário que pode ser usado para converter os arquivos .json do ldapdomaindump em arquivos CSV adequados para o BloodHound. O utilitário se chama ldd2bloodhound e é adicionado ao seu PATH durante a instalação. Alternativamente, você pode executá-lo com python -m ldapdomaindump.convert ou com python ldapdomaindump/convert.py se estiver executando a partir do código-fonte.
A ferramenta de conversão pegará os arquivos .json de usuários/grupos/computadores/trusts e os converterá em group_membership.csv e trust.csv, que podem ser adicionados ao BloodHound. Note que esses arquivos são compatíveis apenas com o BloodHound 1.x, que é bastante antigo. Não há planos de suportar a versão mais recente, pois o projeto BloodHound.py foi criado para isso. Com o método de coleta DCOnly, esta ferramenta também se comunicará apenas com o LDAP e coletará mais informações do que o ldapdomaindump coletaria.
O LDAPDomainDump inclui um utilitário que pode ser usado para gerar uma saída dos arquivos .json do ldapdomaindump em um formato semelhante ao enum4linux. O utilitário se chama ldd2pretty e é adicionado ao seu PATH durante a instalação. Alternativamente, você pode executá-lo com python -m ldapdomaindump.pretty ou com python ldapdomaindump/pretty.py se estiver executando a partir do código-fonte.
MIT