
NebulousAD — ferramenta automatizada de auditoria de credenciais.
A partir de 14 de abril, a NuID não hospedará mais a API NebulousAD com a qual este código se comunica. Como uma pequena equipe de desenvolvedores, percebemos que não é viável suportar, monitorar e desenvolver ativamente tanto o portal NebulousAD quanto nosso Portal do Desenvolvedor de Autenticação de forma eficaz.
O código para verificar senhas do Active Directory contra um conjunto de credenciais de autenticação violadas publicamente continuará a existir neste repositório, e estaremos incorporando todo o excelente feedback que recebemos através de nossa experiência com o NebAD para fornecer um serviço de lista negra de senhas perfeito juntamente com nossa API de Autenticação nos próximos meses. Portanto, fique atento!
Agradecemos seu envolvimento e feedback no passado e esperamos ouvir de você no futuro. Não hesite em entrar em contato com perguntas sobre NebAD, NuID ou qualquer coisa relacionada à identidade digital.
Até logo!
NebulousAD é uma ferramenta para auditar senhas de usuários do Active Directory contra um banco de dados de senhas comprometidas encontradas em violações de dados. A ferramenta foi criada para ajudar administradores de sistemas Windows a encontrar e, opcionalmente, remediar o uso de senhas comprometidas. Esta abordagem é recomendada pelo NIST 800-63B e pode ajudar a proteger contra ataques de pulverização de credenciais e preenchimento de credenciais.
O banco de dados Nebulous atualmente contém mais de 2,5 bilhões de hashes únicos de senhas violadas.
NebulousAD usa o modelo k-anonymity por padrão para preservar a privacidade e segurança das senhas verificadas contra a API. Apenas os primeiros cinco caracteres de um hash SHA-2 são enviados para a API. Você pode ler mais sobre k-anon aqui.
A ferramenta foi originalmente lançada no BSides Las Vegas 2019. Um vídeo da apresentação do BSides está aqui.
Recursos futuros:
Simplesmente baixe a versão pré-compilada (não requer interpretador Python) ou compile a partir do código-fonte:
Esta ferramenta requer Python 2.7 (por enquanto).
Execute git clone https://github.com/NuID/nebulousAD.git
Em seguida, instale com python setup.py install
Depois inicialize sua chave. Você pode obter sua chave visitando: https://nebulous.nuid.io/#/register Uma vez registrado, clique no botão para gerar sua chave de API e copie-a.
Agora você pode inicializá-la assim: nebulousAD -init-key <api_key>
Agora você pode executar a ferramenta. Se ela não encontrar sua chave de API, talvez seja necessário reiniciar sua sessão de terminal. A chave de API é armazenada em uma variável de ambiente. Sair e entrar novamente também funciona.
Você pode baixar o arquivo nebulousAD.exe, para usar sem um interpretador aqui. Alternativamente, você pode compilar a ferramenta a partir do código-fonte:
pip install pyinstallergit clone https://github.com/NuID/nebulousAD.gitcd .\nebulousAD\nebulousADpyinstaller --onefile nebulousAD.pyO Pyinstaller mostrará a localização do binário compilado:

Um comando de exemplo para despejar todos os hashes e verificá-los contra a API:
nebulousAD.exe -v -snap --check
Ferramenta de auditoria de credenciais NuID.
argumentos opcionais:
-h, --help Mostra esta mensagem de ajuda e sai
-ntds NTDS Arquivo NTDS.DIT a ser analisado
-system SYSTEM Hive do registro SYSTEM a ser analisado
-csv CSV Exporta resultados para um arquivo CSV neste CAMINHO.
-json JSON Exporta resultados para um arquivo JSON neste CAMINHO
-init-key INIT_KEY Instala sua chave de API Nu_I.D. no PATH do usuário
atual.
-c, --check Verifica contra a API Nu_I.D. por credenciais
comprometidas.
-dk, --disable-k-anon
Desativa pesquisas de hash com k-anon na API (acelera
a auditoria).
-snap Usa ntdsutil.exe para fazer um snapshot do hive do
registro do sistema e do arquivo ntds.dit para
<unidadeSistema>:\Arquivos de Programa\NuID\
-shred Ao realizar operações de exclusão em arquivos, usa
7 passagens de sobrescrita com sdelete.exe. Baixe
aqui: https://docs.microsoft.com/en-
us/sysinternals/downloads/sdelete
-no-backup Não faz backup dos snapshots existentes, apenas os
sobrescreve.
-clean-old-snaps CLEAN_OLD_SNAPS
Limpa backups mais antigos que N dias.
opções de exibição:
-user-status Exibe se o usuário está desabilitado ou não
-pwd-last-set Mostra o atributo pwdLastSet para cada conta
encontrada no banco de dados NTDS.DIT.
-history Despeja o histórico de hashes NTLM dos usuários.
-v Ativa o modo detalhado.
Desativa a função de verificação de hash com k-anonimato. Isso é útil para acelerar o tempo de busca, mas resultará no envio do hash SHA-256(NTLM) completo para a API. Nós não registramos ou armazenamos hashes enviados para a API.
O parâmetro -snap fará automaticamente um snapshot do Active Directory (usando ntdsutil.exe) e despejará o arquivo ntds.dit, bem como o hive do registro SYSTEM, se você tiver os privilégios necessários.
Você pode fazer isso manualmente usando vários métodos ou a ferramenta ntdsutil.exe.
Se despejar manualmente, você pode apontar para os arquivos com -system caminho\para\SYSTEM e -ntds caminho\para\ntds.dit. Isso é útil se você quiser auditar snapshots antigos.
Isso requer uma chave de API de https://nebulous.nuid.io/#/register. Depois de obtê-la e instalá-la com -init-key, você pode verificar os hashes contra a API NuID.
Se você especificou -history, também verificará o histórico de senhas de cada conta para ver se houve alguma senha que o usuário usou anteriormente e que foi comprometida.
Adiciona saída indicando se a conta está Habilitada ou Desabilitada no Active Directory.
Adiciona saída indicando a data em que a senha da conta foi definida pela última vez. Isso pode ser útil para detectar violações da política de segurança de contas que não são redefinidas automaticamente conforme definido no GPO, como Contas de Serviço.
Também audita ou despeja o histórico de senhas armazenado das contas.
Usa uma sobrescrita de 7 passagens DoD ao limpar snapshots. Isso requer ter o sdelete.exe em seu PATH. Você pode obtê-lo aqui: https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete
Basta baixá-lo e colocá-lo no diretório %SYSTEMDRIVE\Windows\System32\ ou configurar a variável de ambiente.
Útil para limpar backups ao configurar esta aplicação para ser executada com o Agendador de Tarefas. O hive SYSTEM e o arquivo .dit podem ser bastante grandes em domínios maiores e ocupar muito espaço em disco.
Se você usar o Agendador de Tarefas para fazer uma auditoria diária, pode usar esta opção assim: -clean-old-snaps 7 para armazenar apenas uma semana de snapshots.
Se detectarmos um snapshot antigo, fazemos backup dele para %SYSTEMDRIVE%\Arquivos de Programa\NuID\snapshot-backups por padrão.
Isso ocorre porque o ntdsutil.exe requer um diretório vazio.
Se você quiser desabilitar este backup e apenas limpar o snapshot atual, use este argumento.
Uma API web RESTful é fornecida que permitirá que os usuários utilizem o Token de API NuID, uma vez gerado, para seu próprio cliente personalizado. Esta seção descreve a funcionalidade adequada da API web, requisições válidas, tipos de erro e mais.
A estrutura básica de cada resposta será idêntica. Sem exceção, as respostas devem conter os seguintes três campos: success, data e error. A primeira coisa a determinar ao receber a resposta é o valor success. Isso determinará se você deve continuar a manipular o objeto data ou manipular o objeto error em vez disso. Os exemplos a seguir mostram respostas genéricas do servidor em situações de sucesso e falha:
{
success: True, // Indica que a requisição foi concluída com sucesso
data: {
/* valor depende do endpoint consultado */
},
error: {} // Vazio
}
{
success: False, // Indica que a requisição não foi concluída com sucesso
data: { }, // Vazio
error: {
"ErrorName": "Descrição útil do erro que ocorreu durante a requisição"
}
}
Cada erro oferece insights sobre o que deu errado durante a requisição, permitindo que o usuário faça as alterações necessárias.
Atualmente, apenas um hash_type é suportado. Esses valores (sem distinção entre maiúsculas e minúsculas) podem ser usados no lugar de hash_type. O tamanho da representação hexadecimal em string do hash_value também é fornecido. O hash_prefix não pode exceder este tamanho:
| Hash | Comprimento |
|---|---|
| NTLMSHA2 | 64 |
O seguinte cabeçalho HTTP deve ser fornecido em todas as requisições de endpoint da API, caso contrário, um erro será retornado:
X-NUID-API-KEY: <Sua Chave de API NuID>
Cada endpoint começa com a seguinte URL:
https://nebulous.nuid.io
/api/search/kanon/<hash_type>/<hash_prefix>Método: GET
Descrição: Consulta o banco de dados de hashes usando uma versão anonimizada de um hash. O hash completo pode ser fornecido, mas alternativamente, um hash parcial pode ser usado na forma de um prefixo de pelo menos 5 caracteres. Todos os hashes no banco de dados Nebulous que correspondem a este prefixo serão retornados sem divulgar o hash exato em si.
Resposta:
A resposta da seguinte URL: https://nebulous.nuid.io/api/search/kanon/5f4dcc
{
"success": true,
"data": {
"matches": [
"5f4dcc3010a3b4ffd56ec97b33a0f837",
"5f4dcc3b5aa765d61d8327deb882cf99",
"5f4dcc3b5bef0f9cc4c0f96d758010b8"
]
},
"error": {}
}
/api/search/kanon/<hash_type>Método: POST Dados do Post:
{
"prefix": "<Prefixo do Hash>"
}
Descrição: Consulta o banco de dados de hashes usando uma versão anonimizada de um hash. O hash completo pode ser fornecido, mas alternativamente, um hash parcial pode ser usado na forma de um prefixo de pelo menos 5 caracteres. Todos os hashes no banco de dados Nebulous que correspondem a este prefixo serão retornados sem divulgar o hash exato em si.
Resposta:
A resposta da seguinte URL: https://nebulous.nuid.io/api/search/kanon com os dados {"prefix": "5f4dcc"}
{
"success": true,
"data": {
"matches": [
"5f4dcc3010a3b4ffd56ec97b33a0f837",
"5f4dcc3b5aa765d61d8327deb882cf99",
"5f4dcc3b5bef0f9cc4c0f96d758010b8"
]
},
"error": {}
}
Parece haver um bug no impacket que não permite que o nthash seja extraído corretamente.
Evite usar o argumento -history por enquanto.
https://github.com/SecureAuthCorp/impacket/issues/395 https://github.com/SecureAuthCorp/impacket/issues/660
Entre em contato conosco em [email protected]
| Nome do Erro | Descrição | Código de Status |
|---|
ActionExpired | A ação que você está tentando invocar expirou e não é mais válida | 401 |
ActionInvalid | A ação que você está tentando invocar não existe | 401 |
AuthFailure | Combinação de usuário/senha inválida | 401 |
AuthMissingToken | Nenhum token de autenticação foi fornecido | 401 |
FieldMissing | Um ou mais campos estão faltando na requisição JSON | 422 |
HashInvalidLength | O hash fornecido e o comprimento esperado para o tipo de hash fornecido não correspondem | 422 |
HashInvalidValue | Representação hexadecimal do hash esperada | 422 |
HashInvalidPrefix | Um prefixo deve ter no mínimo 5 caracteres | 422 |
HashUnsupported | O tipo de hash fornecido não é suportado | 422 |
InvalidJWT | O JWT fornecido é inválido | 401 |
InvalidRequest | A requisição fornecida está malformada ou faltando um payload JSON | 422 |
KeyBadUser | A chave de API fornecida não corresponde ao usuário esperado | 401 |
KeyDisabled | A chave de API fornecida está desabilitada | 403 |
KeyInvalid | A chave de API fornecida é inválida | 401 |
KeyMissing | Nenhuma chave de API foi fornecida | 401 |
NotFound | O endpoint que você está tentando acessar é inválido | 404 |
PasswordIncorrect | A senha atual não corresponde | 401 |
UserDisabled | A conta está atualmente desabilitada | 401 |
UserKeyLimit | Você atingiu o número máximo de chaves de API | 403 |
UserNotActivated | A conta de usuário ainda não foi ativada | 403 |
UserNotFound | A conta de usuário não pode ser encontrada | 401 |