Active Directory
Entendendo um Pouco Sobre AD
AD DS (Data Store)
NTDS.dit
é um arquivo geralmenta fica em %SystemRoot%\NTDS
e só pode acessado apenas pelo DC (Domain Controller). NTDS.dit
funciona como um banco de dados que contém todas as informações do Active Directory, incluindo hashes de senhas dos usuários no Domínio. Este, é semelhante ao arquivo SAM
, usado para contas locais. Algo importante a notar, é que se a configuração de armazenar senha com criptografia reversível estiver habilitada, o NTDS.DIT
também armazenará as senhas em texto não criptografado para todos os usuários criados ou que alteraram suas senhas após a definição desta política. Isso é possível, porém raramente irá ver esse cenário.
SysVol
É um diretório existente em cada DC, que contém arquivos públicos do domínio que precisam ser acessados pelos clientes e mantidos sincronizados entre os DC's. Por padrão, podemos localizá-lo localmente em C:\Windows\SYSVOL
ou remotamente em \\<domain.local>\sysvol
.
Components (Componentes)
Schema
= Define objetos e seus atributosQuery e Index
= Fornece pesquisa e publicação de objetos e suas propridadesGlobal Catalog (GC)
= Contém informações sobre todos os objetos do diretórioReplication Service
= Distribui informações entre os Controladores de Domínio
Forest (Floresta)
Resumindo em poucas palavras, Floresta é apenas uma forma de descrever a conexão criada entre as Trees (Árvores) e os Domain Controllers (DC) pela rede. É uma coleção de um ou mais Domínios que compartilham a mesma estrutura lógica (mesmo esquema, catálogo global e configurações de diretório), sendo assim uma espécia de limite de segurança.
Uma Floresta é constituída dos seguintes itens:
Trees
= Uma hierarquia de Domínios do AD DS (Active Directory Domain Services)Domains
= Usados para agrupar e gerenciar objetosOrganizational Units (OUs)
= Uma OU agrupa diversos tipos de Objetos do AD e pode ser vinculada a uma GPO, diferentemente dos Grupos que não podem ter esse vínculado. O controle de uma OU é determinada pelo ACL (Access Control List) e possui suporte a Delegação de Autoridade, onde os proprietátrios podem transferir o controle administrativo (total ou parcial) para outros usuários (ou grupos)Trusts
= Permite aos usuários, acessar recursos de outros domíniosObjects
= Usuários, grupos, impressoras, computadores, compartilhamentosDomain Services
= DNS Server, LLMNR, IPv6Domain Schema
= Regras para criação de objetos
Users (Usuários)
Por padrão no Active Directory, teremos 2 usuários, sendo eles o Administrator
e o Guest
. E também temos 4 tipos padrões de usuário, sendo eles:
Domain Admin
= É o único que pode acesar o Domain Controller e é claro, pode controlar o DomínioService Account
= Geralmente são utilizados para manutenção de serviços e podem ser administradores do DomínioLocal Administrators
Domain Users
= São os usuários que a maioria das pessoas usam, eles podem fazer login nas máquinas que têm autorização para acessar e podem ter direitos de administrador local (Local Administrators
) para as máquinas, dependendo das políticas da organização.
Grupos
Enterprise Admins
= A associação a este grupo fornece acesso completo à configuração no domínio. O grupo só existe no domínio raiz de uma floresta do AD. Os membros desse grupo têm a capacidade de fazer alterações em toda a floresta, como adicionar um domínio filho ou criar uma relação de confiança. A conta Administrador do domínio raiz da floresta é o único membro desse grupo por padrão.Administrators
= Os membros têm acesso total e irrestrito a um computador ou a um domínio inteiro se estiverem nesse grupo em um controlador de domínio.Account Operators
= Os membros podem criar e modificar a maioria dos tipos de contas, incluindo usuários, grupos locais e grupos globais, e os membros podem fazer login localmente em controladores de domínio. Eles não podem gerenciar a conta Administrador, contas de usuário administrativo ou membros dos grupos Administradores, Operadores de servidor, Operadores de conta, Operadores de backup ou Operadores de impressão, mas podem modificar contas e grupos não protegidos no domínioDefault Administrators
= Domain Admins e Enterprise AdminsBackup Operators
= Os membros podem fazer backup e restaurar todos os arquivos em um computador, independentemente das permissões definidas nos arquivos. Os operadores de backup também podem fazer logon e desligar o computador. Os membros podem fazer logon em DC's localmente e devem ser considerados administradores de domínio. Eles podem fazer cópias de sombra do banco de dados SAM/NTDS, que, se tomadas, podem ser usadas para extrair credenciais e outras informações interessantes.DnsAdmins
= Os membros têm acesso às informações de DNS da rede. O grupo só será criado se a função de servidor DNS estiver ou tiver sido instalada em um controlador de domínio no domínio.Domain Admins
= Os membros têm acesso total para administrar o domínio e são membros do grupo do administrador local em todas as máquinas ingressadas no domínio.Domain Computers
= Todos os computadores criados no domínio (exceto controladores de domínio) são adicionados a esse grupo.Domain Controllers
= Contém todos os DC's em um domínio. Novos DC's são adicionados a este grupo automaticamente.Domain Users
Domain Users = Este grupo contém todas as contas de usuário em um domínio. Uma nova conta de usuário criada no domínio é adicionada automaticamente a este grupo.Domain Guests
= Este grupo inclui a conta de convidado interna do domínio. Os membros deste grupo têm um perfil de domínio criado ao entrar em um computador associado ao domínio como um convidado local.DNS Admins
= Os membros têm a capacidade de carregar uma DLL em um DC, mas não têm as permissões necessárias para reiniciar o servidor DNS. Eles podem carregar uma DLL maliciosa e aguardar uma reinicialização como um mecanismo de persistência. Carregar uma DLL geralmente resultará na falha do serviço. Uma maneira mais confiável de explorar esse grupo é criar um registro WPAD.Event Log Readers
= Os membros podem ler logs de eventos em computadores locais. O grupo só é criado quando um host é promovido a controlador de domínio.Group Policy Creator Owners
= Os membros criam, editam ou excluem objetos de política de grupo no domínio, porém apesar de poder criar novos GPO's, é preciso receber permissões adicionais para vincular GPO's a um contêiner, como um domínio ou OU.Hyper-V Administrators
= Os membros têm acesso completo e irrestrito a todos os recursos do Hyper-V. Se houver DCs virtuais no domínio, quaisquer administradores de virtualização, como membros de administradores do Hyper-V, devem ser considerados administradores de domínio.IIS_IUSRS
= Este é um grupo interno usado pelos Serviços de Informações da Internet (IIS), começando com o IIS 7.0.Pre–Windows 2000 Compatible Access
= Este grupo existe para compatibilidade com versões anteriores de computadores que executam o Windows NT 4.0 e versões anteriores. A associação a esse grupo geralmente é uma configuração herdada restante. Isso pode levar a falhas em que qualquer pessoa na rede pode ler informações do AD sem exigir um nome de usuário e senha válidos do AD.Print Operators
= Os membros podem gerenciar, criar, compartilhar e excluir impressoras conectadas a controladores de domínio no domínio junto com qualquer objeto de impressora no AD. Os membros têm permissão para fazer logon em DCs localmente e podem ser usados para carregar um driver de impressora mal-intencionado e escalar privilégios no domínio.Protected Users
= Os membros desse grupo recebem proteções adicionais contra roubo de credenciais e táticas como abuso de Kerberos.Read-only Domain Controllers
= Contém todos os controladores de domínio somente leitura no domínio.Remote Desktop Users
= Este grupo é usado para conceder a usuários e grupos permissão para se conectar a um host por meio da Área de Trabalho Remota (RDP). Este grupo não pode ser renomeado, excluído ou movido.Remote Management Users
= Este grupo pode ser usado para conceder aos usuários acesso remoto a computadores via Windows Remote Management (WinRM). Os membros têm permissão para fazer logon em DCs com PSRemoting (este grupo às vezes é adicionado ao grupo de gerenciamento remoto local em não DCs).Schema Admins
= Os membros podem modificar o esquema do Active Directory, que é a forma como todos os objetos com AD são definidos. Esse grupo existe apenas no domínio raiz de uma floresta do AD. A conta Administrador do domínio raiz da floresta é o único membro desse grupo por padrão.Server Operators
= Este grupo só existe em controladores de domínio. Os membros podem modificar serviços, acessar compartilhamentos SMB e fazer backup de arquivos em controladores de domínio. Por padrão, este grupo não tem membros.
Privilégios
SeImpersonatePrivilege
= Esse privilégio nos permite representar um token de uma conta privilegiada, como NT AUTHORITY\SYSTEM. Isso pode ser aproveitado com uma ferramenta como JuicyPotato, RogueWinRM, PrintSpoofer, etc., para escalar privilégios em um sistema de destino.SeLoadDriverPrivilege
= Um usuário com esse privilégio pode carregar e descarregar drivers de dispositivo que podem ser usados para aumentar privilégios ou comprometer um sistema.SeRemoteInteractiveLogonRight
= Esse privilégio pode dar ao nosso usuário de destino o direito de fazer logon em um host por meio da Área de Trabalho Remota (RDP), que pode ser usada para obter dados confidenciais ou aumentar privilégios.SeBackupPrivilege
= Isso concede ao usuário a capacidade de criar backups do sistema e pode ser usado para obter cópias de arquivos confidenciais do sistema que podem ser usados para recuperar senhas, como os hives SAM e SYSTEM Registry e o arquivo de banco de dados NTDS.dit Active Directory.SeDebugPrivilege
= Isso permite que um usuário depure e ajuste a memória de um processo. Com esse privilégio, os invasores podem utilizar uma ferramenta como o Mimikatz para ler o espaço de memória do processo LSASS (Local System Authority) e obter quaisquer credenciais armazenadas na memória.SeTakeOwnershipPrivilege
= Isso permite que um processo se aproprie de um objeto. Em seu nível mais básico, poderíamos usar esse privilégio para obter acesso a um compartilhamento de arquivo ou a um arquivo em um compartilhamento que de outra forma não seria acessível a nós.
GPO (Group Policy Object)
As GPO não se aplicam diretamente a Grupos e Usuários. Por esse motivo, deve-se utilizar as OU's para herdar essas Políticas de Grupo
GPC (Group Policy Container)
= Contém informações sobre as propriedades de uma GPO e é armazenado no AD em Domain Controller do Domínio GPT (Group Policy Template)
= Contém os dados em uma GPO e é armazenado no SysVol
, dentro do diretório /Policies
As GPO's são aplicadas da seguinte forma. Leve em conta que uma GPO sobrepõe as outras GPO's que já foram aplicadas, então a última GPO irá sobreescrever e ter assim efeito na política final que será aplicada
GPO local
Sites
Domínio
OU (caso tenha OU aninhada, a OU filha irá sobreescrever a OU pai)
SPN
Indentificador único de um determinado serviço do Domínio / Floresta, onde cada instância de serviço tem seu próprio SPN. É através do SPN, que o Kerberos associa uma instância de serviço a uma conta de logon de serviço. A sintaxe do SPN constitui no seguinte padrão:
service_class
= Campo obrigatório que define o tipo de serviço como LDAP, SQLServer, WWW, etchost
= Campo obrigatório onde pode o FQDN ou o NetBios, que não recomendado porém ainda existe devido a questões de compatibilidadeport
= Campo não obrigatório, porém se não for emitido, será definido a porta padrão do serviço em questão. Por exemplo, se for um MySQL, será utilizado por padrão a porta 3306service_name
= Campo não obrigatório que pode ser utilizado para identificar outros dados
Dentre os SPN's disponíveis, segue abaixo os principais (link no fim da página para lista completa de SPN):
TERMSRV
= RDPLDAP
= Serviço LDAPCIFS
= Common Internet File SystemexchangeAB
= Exchange Address Book ServiceDNS
= Domain Name Serverhost
= Serviço HOST, que representa o próprio computador, no qual toda máquina a possui. Se tiver um ticket dessa máquina, é possível acessá-la e executar comandos no SOFTP
= File Transfer ProtocolHTTP
= Serviço WEB que suporta autenticação KerberosMSSQL
= Microsoft SQL Server
ACL
Quando um usuário loga no Windows, ele recebe um token no qual consiste em verificar se o usuário está incluso na ACL do objetos ou recursos que ele solicita. Essa ACL é uma lista composta por ACE (Access Control Entry) e cada ACE em uma ACL, identifica uma entidade de segurança, os direitos de acesso permitido, negados ou auditados para essa entidade.
Clique no link abaixo para mais detalhes sobre ACL.
Relação de Confiança
One-Way (Unidirecional)
= Os usuários de um Domínio confiável (Trusted
) podem acessar recursos de um Domínio em que depositou essa confiança nele (Trusting
), porém o inverso não é possível. Por exemplo, o Domínioabc.com
(Trusted) pode acessar todos os recursos do Domíniodef.com
(Trusting), pois este confia emabc.com
. Em contra partida, o Domíniodef.com
(Trusting
) não pode acessar os recursos deabc.com
(Trsuted
), poisabc.com
não confia emdef.com
Two-Way (Bidirecional)
= O Domínioabc.com
pode acessardef.com
e vice-versa. Esse tipo de confiança é estabelecido por padrão em uma Floresta e é TransitivoTransitiva
= Se o Domínioabc.com
confia emdef.com
, edef.com
confia emghi.com
, entãoabc.com
confia emghi.com
, eghi.com
confia emabc.com
Não-Transitivo
= Relação padrão entre 2 Domínios em florestas diferentesExternal Trust (Externa)
= Confiança entre 2 Domínios de Florestas diferentes que não possuem relação de confiança entre si. Estas podem ser Unidirecional ou Bi-Direcional e são Não-TransitivasFlorestas
= Por padrão as Florestas são de Unidirecional ou Bi-Direcional e Não-Transitivas. Por exemplo, aFloresta A
confia naFloresta B
, e aFloresta B
confia naFloresta C
, porém aFloresta A
não confia naFloresta C
. Esse é a configuração padrão, porém pode ser configurada para que seja Transitiva.
Windows Server AD VS Azure AD
Segue abaixo as principais diferenças entre o Windows Server AD (On-Premise) e o Azure AD (Cloud)
WINDOWS SERVER AD
AZURE AD
LDAP
Rest APIs
NTLM
OAuth/SAML
Kerberos
OpenID
OU Tree
Flat Structure
Domains and Forests
Tenants
Trusts
Guests
Gerenciando AD via Powershell
Antes de começar, importe o módulo para poder executar os comandos com êxito
Adicionando usuário no AD
Removendo usuários do AD
Desbloquando conta
Resetando senha de usuário
Forçando aleração de senha
Criando OU
Criando Grupo
Adicionando usuário(s) em um grupo
Duplicando uma GPO
Linkando GPO com OU
Inserindo o próprio computador em um Domínio
Adicionado um computador remoto no AD
Autenticação
Além de Kerberos e LDAP, o Active Directory utiliza vários outros métodos de autenticação que podem ser usados (e abusados) por aplicativos e serviços no AD. Isso inclui LM, NTLM, NTLMv1 e NTLMv2. LM e NTLM aqui são os nomes de hash e NTLMv1 e NTLMv2 são protocolos de autenticação que utilizam o hash LM ou NT. Abaixo está uma rápida comparação entre esses hashes e protocolos, o que nos mostra que, embora não seja perfeito, o Kerberos geralmente é o protocolo de autenticação preferido sempre que possível. É essencial entender a diferença entre os tipos de hash e os protocolos que os utilizam.
LDAP
Na próxima página veremos informações mais detalhadas sobre LDAP. Caso queira, clique no link abaixo.
LM (LAN Manager)
Os hashes do LAN Manager (LM) são o mecanismo de armazenamento de senha mais antigo usado pelo sistema operacional Windows. LM estreou em 1987 no sistema operacional OS/2. Se em uso, eles são armazenados no banco de dados SAM em um host Windows e no banco de dados NTDS.DIT em um controlador de domínio. Devido a deficiências de segurança significativas no algoritmo de hash usado para hashes LM, ele foi desativado por padrão desde o Windows Vista/Server 2008. No entanto, ainda é comum encontrar, especialmente em grandes ambientes onde sistemas mais antigos ainda são usados. As senhas que usam LM são limitadas a um máximo de 14 caracteres. As senhas não diferenciam maiúsculas de minúsculas e são convertidas em maiúsculas antes de gerar o valor de hash, limitando o espaço de chave a um total de 69 caracteres, tornando relativamente fácil decifrar esses hashes usando uma ferramenta como o Hashcat. Antes do hash, uma senha de 14 caracteres é primeiro dividida em dois pedaços de sete caracteres. Se a senha tiver menos de quatorze caracteres, ela será preenchida com caracteres NULL para atingir o valor correto. Duas chaves DES são criadas a partir de cada pedaço. Esses pedaços são então criptografados usando a string KGS!@#$%
, criando dois valores de texto cifrado de 8 bytes. Esses dois valores são então concatenados, resultando em um hash LM. Esse algoritmo de hash significa que um invasor precisa apenas forçar brute sete caracteres duas vezes em vez de todos os quatorze caracteres, tornando mais rápido quebrar hashes LM em um sistema com uma ou mais GPUs. Se uma senha tiver sete caracteres ou menos, a segunda metade do hash LM sempre terá o mesmo valor e poderá ser determinada visualmente mesmo sem ferramentas necessárias, como Hashcat. O uso de hashes LM pode ser desaprovado usando a Diretiva de Grupo. Um hash LM tem o seguinte formato de exemplo: c96bd12cc1161d96
.
NTHash (NTLM)
A autenticação NTLM é utilizada quando um cliente se autentica em um servidor através do seu endereço IP (ao invés do nome do host) ou se o usuário tenta se autenticar pelo nome do host que não está registrado no servidor DNS integrado ao AD. Da mesma forma, aplicativos de terceiros podem optar por usar a autenticação NTLM em vez da autenticação Kerberos (clique em baixo para saber mais sobre o Kerberos).
Os hashes do NT LAN Manager (NTLM) são usados em sistemas Windows modernos. É um protocolo de autenticação desafio-resposta e usa três mensagens para autenticar: primeiro um cliente envia uma NEGOTIATE_MESSAGE
ao servidor, cuja resposta é uma CHALLENGE_MESSAGE
para verificar a identidade do cliente. Por fim, o cliente responde com um AUTHENTICATE_MESSAGE
. Esses hashes são armazenados localmente no banco de dados SAM ou no arquivo de banco de dados NTDS.DIT
em um controlador de domínio. O protocolo tem dois valores de senha com hash para escolher para executar a autenticação: o hash LM e o hash NT, que é o hash MD4 do valor UTF-16 little-endian da senha. O algoritmo pode ser visualizado como: MD4(UTF-16-LE(senha)). Mesmo sendo mais seguro que o LM, o NTLM também pode sofrer ataques de sucesso com Brute Force (dependendo da complexibilidade da senha) e também ataques de pass-the-hash.
Um hash NT assume a forma de b4b9b02e6f09a9bd760f388b67351e2b, que é a segunda metade do hash NTLM completo. Um hash NTLM se parece com isso:
Observando o hash acima, podemos dividir o hash NTLM em suas partes individuais:
user
= É o nome de usuário500
= Esse é o Identificador Relativo (RID). O valor 500 é o RID conhecido para a conta de administrator84f3c115b514a5aaefd3b935b54a04fe
= É o hash LM e, se os hashes LM estiverem desabilitados no sistema, não poderá ser usado para nadad33dfe544fa0daa4de7f59fb6d48ea0b
= É o hash do NTLM. Esse hash pode ser quebrado offline para revelar o valor de texto simples (dependendo do tamanho/força da senha) ou usado para um ataque de pass-the-hash, utilizando por exemplo, ferramentas comoCrackMapExec
.
NTLMv1 (Net-NTMLv1)
O protocolo NTLM executa um desafio/resposta entre um servidor e um cliente usando o hash NT. O NTLMv1 usa o hash NT e LM, o que pode facilitar o "crack" offline após a captura de um hash usando uma ferramenta como o Responder
ou por meio de um ataque de retransmissão NTLM. O protocolo é usado para autenticação de rede e o próprio hash Net-NTLMv1 é criado a partir de um algoritmo de desafio/resposta. O servidor envia ao cliente um número aleatório de 8 bytes (desafio) e o cliente retorna uma resposta de 24 bytes. Esses hashes NÃO podem ser usados para ataques pass-the-hash.
Exemplo de hash:
NTLMv2 (Net-NTLMv2)
O protocolo NTLMv2 foi introduzido pela primeira vez no Windows NT 4.0 SP4 e foi criado como uma alternativa mais forte ao NTLMv1. Ele é o padrão no Windows desde o Server 2000. Ele é protegido contra certos ataques de falsificação aos quais o NTLMv1 é suscetível. O NTLMv2 envia duas respostas ao desafio de 8 bytes recebido pelo servidor. Essas respostas contêm um hash HMAC-MD5 de 16 bytes do desafio, um desafio gerado aleatoriamente do cliente e um hash HMAC-MD5 das credenciais do usuário. Uma segunda resposta é enviada, usando um desafio de cliente de comprimento variável, incluindo a hora atual, um valor aleatório de 8 bytes e o nome de domínio.
Exemplo de hash NTLMv2:
Domain Cached Credentials (MSCache2)
Em um ambiente AD, os métodos de autenticação mencionados nesta seção e na anterior requerem que o host que estamos tentando acessar se comunique com os "cérebros" da rede, o Controlador de Domínio. A Microsoft desenvolveu o algoritmo MS Cache v1 e v2 (também conhecido como Domain Cached Credentials (DCC) para resolver o possível problema de um host associado a um domínio não conseguir se comunicar com um controlador de domínio (ou seja, devido a uma interrupção de rede ou outro problema técnico) ) e, portanto, a autenticação NTLM/Kerberos não funciona para acessar o host em questão. Os hosts salvam os últimos 10 hashes para qualquer usuário de domínio que faça login com êxito na máquina na chave de registro HKEY_LOCAL_MACHINE\SECURITY\Cache. Esses hashes não podem ser usados em Além disso, o hash é muito lento para quebrar com uma ferramenta como o Hashcat, mesmo ao usar um equipamento de cracking de GPU extremamente poderoso, então as tentativas de quebrar esses hashes geralmente precisam ser extremamente direcionadas ou depender de um senha fraca em uso. Esses hashes podem ser obtidos por um invasor ou pentester após obter acesso de administrador local a um host.
Exemplo de hash:
Gerenciando Usuários
Adicionando um usuário em um grupo
Enumerando com Domain Controller (Forma Nativa)
Filter
-eq
Igual a
Get-ADUser -Filter "name -eq 'mysther'"
-le
Menor que ou igual a
-ge
Maior que ou igual a
-ne
Diferente de
Get-ADUser -Filter "name -le 'mysther'"
-lt
Menor que
-gt
Maior que
-approx
Aproximadamente igual a
-bor
OR Bit a Bit
-band
AND Bit a Bit
-recursivematch
Correspondência recursiva
-like
Substring, semelhante ao LIKE do SQL
Get-ADUser -Filter "name -like 'mysth*'"
-notlike
Inverso ao LIKE
Get-ADUser -Filter "name -notlike 'mysth*'"
-and
AND booleano
-or
OR booleano
-not
NOT booleano
Os filters
podem ser escritos de algumas maneiras (trazendo o mesmo resultado).
Buscando por todos os usuários cadastrados no AD
Buscando nome de computadores e seus respectivos IP's
Pesquisando por todas os hosts na rede que possui "sql" no nome
Todos os usuários administrativos com DoesNotRequirePreAuth
ativo. Assim, pegaremos usuários vulneráveis a ataque ASREPRoasted
O comando a seguir pode ser usado para localizar todos os usuários administrativos com o conjunto de atributos "servicePrincipalName", o que significa que eles provavelmente podem estar sujeitos a um ataque Kerberoasting
Filtrando por usuários com mais de 3 logins incorretos
Mostrando todos os usuários que fazem parte de uma determinada OU
Buscando por todos os usuários que possuem PasswordNotRequired ativo
SearchBase
Níveis de pesquisa
Base
= Escopo básico
OneLevel
= Não retorna nenhum sub-container
SubTree
= Pesquisa objetos contidos pelo SearchBase e todos os containers filhos, sendo este recursivamente até a hierarquia do AD.
Exemplo de comandos:
Realizando um count
Note que usamos o Get-ADUser
, mas podemos utilizar Get-ADObject
para obtermos resultados diferentes.
Verificando quantos usuários estão em uma determinada OU
Powershell
Informações sobre um determinado usuário.
Verificando todos os usuários que fazem parte de um determinado grupo.
Informações sobre todos os computadores do domínio.
Informações detalhadas sobre determinado computador do domínio
Membros de determinado grupo local
Informações sobre um determinado grupo
Verificando membros de um determinado grupo.
Verificando qual OU está gerenciando determinado grupo
Verificando se as políticas AppLocker são aplicadas:
OBS.: Os comandos mostrados acima, como Get-ADUser também pode ser instalado em estações de trabalho comuns como o Windows 7, porém é necessário ter privilégios administrativos para isso.
Enumerando com um Host do Domínio (Forma Nativa)
Informações sobre o Domínio
Pegando informações sobre o Domínio. Note no campo name
, teremos o nome do Domínio e no campo PdcRoleOwner
teremos Primary Domain Controller (PDC), então este terá as informações mais atualizadas sobre login e autenticação dos usuários.
Verificando as políticas de conta de domínio. Note o valor de Lockout threshold
, que indica quantas tentativas de login podem ser executadas com erro antes de bloquear a conta e Lockout Duration (minutes)
para saber quantos minutos após as tentativas de login (sem chegar no limite de Lockout threshold), pode realizar novas tentativas.
Informações sobre Usuários e Grupos
Pegando todos os usuários do Domínio
Informações sobre determinado usuário no domínio
Outra forma de pegar todos os usuários do Domínio (porém de uma maneira mais detalhada), é partir do comando abaixo (executado em Powershell):
Dessa maneira irá trazer todos os usuários do domínio, o que pode ser gerar uma saída bem poluída. Caso deseje retornar computadores ao invés de usuários, altere o samAccountType
805306368
para 805306369
. Mas dando continuidade na enumeração de usuários, vamos alterar o filtro para trazer somente um determinado usuário. Para isso altere a linha $Searcher.filter="samAccountType=805306368"
para a linha abaixo, alterando é claro o filtro desejado.
Pegando o nome de todos os grupos do Domínio:
Agora que já sabemos o nome dos grupos do Domínio, podemos saber quem são os membros desse grupo, através do seguinte comando (altere o valor de <Nome_do_Grupo>
):
Verificando usuários que estão logados nesse exato momento
Como já sabemos que esses usuários estão logados atualmente, podemos validar isso, verificando se uma sessão ativa deles no Domain Controller. Lembre-se que, quando um usuário faz login, a sessão é armazenada no DC, ele apenas teve origem de uma estação de trabalho (ou de algum servidor).
Informações sobre contas de serviços
As Contas de serviços podem ter acessos privilegiados, então é sempre recomendado buscarmos essas contas. No exemplo abaixo, estamos fazendo um filtro por http
, então provavelmente irá buscar por contas responsáveis pelo IIS, mas snita-se a vontade para procurar por outras contas, como SQL
, por exemplo.
Caso o comando tenha êxito e retorne algo, verifique o campo samaccountname
para identificar o nome da conta e seviceprincipalname
, pois é através dele que iremos pegar o seu IP. Após o HTTP/
, podemos ver o seu caminho de acesso basta dar um nslookup
nele, para ver o seu IP.
Com isso em mente, podemos salvar o Ticket desses serviços em memória (substitua o valor de -ArgumentList pelo valor de seviceprincipalname
executado no comando acima):
Execute um dos comandos abaixo para verificar se realmente o ticket foi gerado
Agora podemos resgatar o ticket e salvá-lo em disco utilizando o próprio Mimikatz:
Agora vamos transferir o arquivo para o Linux e realizar um ataque de Brute Force para descobrirmos a senha da conta de serviço.
ATENÇÃO!! Nesse ponto provavelmente irá querer transferir o ticket, mas lembre-se de que ele está como binário, então tome cuidado para não destruí-lo ao transferir com ferramentas como Netcat. Recomendo utilizar o smbserver.py
.
Após transferir o Ticket (em binário), basta realizar um ataque de Brute Force. Para isso, podemos utilizar o tgsrepcrack.py. Caso não tenha instalado, utilize o comando abaixo:
Após isso basta executá-lo:
GPO
Listando GPO's do Domínio
Sincronizando o Domain Controller
Quando o Domain Controller recebe uma solicitação de atualização, ele não verifica se a solicitação veio de um Domain Controller conhecido, mas apenas se o SID associado tem os privilégios apropriados. Se tentarmos emitir uma solicitação de atualização não autorizada para um Domain Controller de um usuário que é membro do grupo Domain Admins, ele será bem-sucedido.
O arquivo responsável por manter essas atualizações, é o NTDS.dit
, que funciona como um espécie de banco de dados do Active Directory.
Após a execução, podemos ver os hashes, incluindo o NTLM do usuário Administrator. O dump contém vários hashes associados às últimas vinte e nove senhas de usuário usadas, bem como os hashes usados com criptografia AES.
Usando a técnica acima, podemos solicitar uma atualização de replicação com um controlador de domínio e obter os hashes de senha de cada conta no Active Directory sem nunca fazer login no controlador de domínio.
DCSync
Em um ataque de DCSync o processo é mais furtivo, pois o atacante finge ser o DC, requisita a replicação de usários e assim DC original fornece os hashes dos usuários. No comando abaixo utilizamos o krbtgt
como usuário alvo (por questões óbvias, já que é um usuário com privilégio alto), porém pode-se utilizar qualquer outro usuários. Note que é preciso ser Administrador do Domínio para conseguir realizar esse tipo de ataque, mas não precisa executar o Mimikatz dentro do DC, mas sim de qualquer máquina.
Na verdade, o DCSync exige que o usuário tenha uma combinação de 3 direitos/permissão:
Replicating Directory Changes (DS-Replication-Get-Changes)
Replicating Directory Changes All (DS-Replication-Get-Changes-All)
Replicating Directory Changes In Filtered Set (DS-Replication-Get-Changes-In-Filtered-Set)
Para realizar o DCSync, utilize o seguinte comando no DC para obter o hash NTLM do krbtgt:
Zero Logon
Certifique-se de ter o Impacket antes
Após fazer isso, a senha da conta do DC é nula, então podemos utilizá-la para realizar qualquer operação. No exemplo abaixo, estamos pegando todos os hashes NTLM dos usuários, incluindo o krbtgt.
Caso queira, é possível alterar a senha, bastando apenas codificá-la em hex. No exemplo abaixo o hex 41424344
é equivalente a ABCD
:
FSMO (Flexible Single Master Operation)
Há cinco funções de FSMO (Flexible Single Master Operation - Operação Mestre Única Flexível), sendo estes:
Schema Master
= Essa função gerencia a cópia de leitura/gravação do esquema do AD, que define todos os atributos que podem ser aplicados a um objeto no AD.Domain Naming Master
= Gerencia nomes de domínio e garante que dois domínios com o mesmo nome não sejam criados na mesma floresta.Relative ID (RID) Master
= O RID Master atribui blocos de SIDs aos DC's que podem ser usados para novos objetos. O RID Master ajuda a garantir que vários objetos não sejam atribuídos ao mesmo SID.PDC Emulator
= O host com essa função seria o DC autoritativo no domínio e responderia a solicitações de autenticação, alterações de senha e gerenciaria objetos de política de grupo (GPOs). O emulador PDC também mantém o tempo dentro do domínio.Infrastructure Master
= Essa função traduz GUIDs, SID's e DNs entre domínios. Essa função é usada em organizações com vários domínios em uma única floresta. O Infrastructure Master os ajuda a se comunicar. Se esta função não estiver funcionando corretamente, as Listas de Controle de Acesso (ACL's) mostrarão SID's em vez de nomes totalmente resolvidos.
Skeleton Key
Essa técnica consiste em realizar um patch do processo LSASS do DC, resultando no acesso em qualquer usuário utilizando uma senha única. Um ponto fraco desse tipo de atque, é que por ser uma modificação a nível de processo, é preciso realizar o ataque novamente, uma vez que o DC for reiniciado. Execute o comando Mimikatz abaixo no DC, de forma remota ou com o Invoke-Command
Após isso, abra o Powershell (em outra máquina) com qualquer privégio e execute o comando abaixo:
Assim que executar o comando acima, irá ser exibido um popup solicitando a senha do usuário Administrator. Ao executarmos o Mimikatz no DC, ele alterou a senha de todos os usuários (incluindo o Administrator) para mimikatz
, então utilize esse senha para acessar os computadores da rede e também o próprio DC.
ATENÇÃO: Nesse exato momento, tanto a senha mimikatz
quanto a senha original de cada usuário, funcionam para realizar login, então os usuários irão continuar acessando normalmente suas contas.
Em alguns casos, o DC pode conter proteções no processo LSASS, então devemos realizar alterações a nível de kernel, utilizando o driver do Mimikatz e o mesmo deverá estar em disco na máquina do DC. O ponto fraco disso, é que o Mimikatz deve estar em disco, pois somente carregando em memória, não irá funcionar.
Brute Force
Realiza tentativa de uma uníca senha para vários usuários (spraying). o Paramêtro -Admin
indica que é para testar as contas administrativas.
Pegando Informações sobre o AD
Informçãoes do AD
Filtrando por todos os usuários que não tem o campo "Description" em branco. Isso pode ser útil para pegar informaçõe úteis ou até mesmo sensíveis, já que alguns administradores insistem em deixar senhas no campo de descrição.
Buscando por políticas de grupos da GPO OBS.: Invoque o PowerView.ps1 antes de executar o comando abaixo
Pegando usuários que fazem parte de determinado grupo
RSAT (Remote Server Administration Tools)
Verificando quais ferramentas estão disponíveis
Instalando uma única ferramenta. Como exemplos, utilizamos o ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
Instalando todas as ferramentas de uma vez
Após instalar, note que as ferramentas estarão disponíveis no Painel de Controle > Ferramentas Administrativas.
Também podemos acessar o ADSI (tool do RSAT) do Domain Controller a partir de um host que não está no Domínio (para isso é necesário possuir as devidas credenciais), facilitando bastante o processo de enumeração do AD. Caso prefira, é possível acessar somente o mmc
e assim adicionar os snap-ins que preferir. Possivelmente, irá receber erro specified domain either does not exist or could not be contacted.
, então clique com o botão direito do mouse no snap-in e depois clique em Change Domain
.
Enumerando Usuários
Verificando se o user tem permissão GenericAll
para um determinado usuário
Verificando quais usuários possuem permissão GenericAll
em um determinado grupo. Observe o resultado de IdentityReference
Impacket
OBS.: Caso queira o hash da senha para quebrar com o hashcat
, adicione -format hashcat
no final do comando.
crackmapexec
Listando todos os usuários do AD
Unconstrained Delegation (Delegação Irrestrita)
Impacket - Verificando as delegação de um DC
krbrelayx (https://github.com/dirkjanm/krbrelayx)
Caso tenha alguma delegação, podemos usar o krbrelayx
para abusar da delegação irrestrita, forçando o DC a se conectar ao host alvo e extrair p seu TGT. Usando os privilégios do DC para executar ataques DCSync, podemos extrair credenciais de qualquer usuários do domínio.
PowerView
Carregando PowerView
Forma convencional
A segunda maneira que temos de carregar o PowerView.ps1, é da maneira abaixo. Note que antes de chamamarmos o PowerView, estamos chamando o arquivo amsibypass
, que server para realizar bypass no Windows Defender (caso esteja ativo).
Caso não tenha saiba como realizar bypass em amsi, clique no link abaixo:
Convertendo SID
É comum durante o processo de enumeração, pegarmos SID's que não são convertidos para os devidos nomes. Para realizamos tal conversão. podemos utilizar os seugintes comandos:
Floresta
Enumerando todos os Domínios da Floresta
Enumerando todos os Domínios da outra Floresta
Enumerando Floresta
Enumerando outra Floresta
Enumerando o Global Catalog da Floresta
Enumerando as relações de confiança de Floresta
Enumerando as relações de confiança de outra Floresta
Domínio
Enumerando o Domínio local
Enumerando outro Domínio
Identificando o SID do Domínio
Enumerando o DC
Enumerando outro DC
Enumerando políticas do Domínio. Note que aqui podemos ver o valor de LockoutBadCount
. Caso LockoutBadCount
seja 0
, significa que não irá bloquear o usuário, caso erre a senha diversas vezes. Caso tenha um número entre 2 e 16, significa que este mesmo valor será a quantidade de tentativas incorretas que o usuário pode tentar até que sua conta seja bloqueada. Outro valor importante que podemos olhar, é o MaximumPasswordAge
, que indica que a senha nunca expira, caso o seu valor seja -1
;
Política de senhas do Domínio
Usuários
Enumerando as propriedades e métodos de Get-NetUser
Listando todos os usuários do AD
Quantidade total de usuários no AD
Enumerando usuários de outro Domínio
Pegando informações de um determinado usuário
Retornando todos os usuários que são administradores
Buscando usuários que não possuem o campo description
em branco
Buscando por usuários que não possuem a string pass
no campo description
Usuários que já fizeram login em alguma máquina do domínio
Retornando os usuários que já fizeram login em alguma máquina do domínio e a data do último login
Enumerando todas as máquinas do Domínio onde o usuário local possui acesso como Administrador local
Verificando sessões ativas no host atual
Localizando máquinas de Domínio nas quais os usuários estão conectados
Exportando informações de todos os usuários do domínio para um CSV
Verificando se o usuário atual tem direitos de administrador local em um host remoto
Verificando os usuários que estão logados em determinado computador ou no próprio computador (para isso, remova os parâmetos do comando abaixo). Para realizar com êxito o comando abaixo, é preciso ter privilégios de administrador
Pegando valores UAC de um determinado usuário
Usuário que possui informações no campo description
Enumerar usuário de outros Domínios com associação de grupo em qualquer grupo em nosso Domínio atual. Se comprometermos o domínio atual, podemos obter credenciais desse usuário do banco de dados NTDS e autenticar no Domínio que possui associção ao nosso Domínio atual
Note que na saída do comando acima, o campo MemberName
pode conter somente o SID do usuário, então devemos executar o comando abaixo para pegamos o seu name
Verificar usuários com Service Principal Names (SPNs) definidos em outros Domínios nos quais podemos autenticar por meio de relações de confiança de entrada ou bidirecionais com autenticação em toda a Floresta, permitindo que todos os usuários se autentiquem com uma configuração de confiança ou autenticação seletiva. Caso encontre algum Domínio, significa que pode ser aproveitada com Kerberoast devido a confiança da Floresta.
Buscando o nome de todos os usuários, a data de última alteração de senha e o último logon
O mesmo que o comando acima, porém definimos que pegar somente datas do campo pwdlastset
que tem mais de 90 dias de diferença (comparado a data atual). Isso é útil para pegarmos contas com muito tempo sem alteração, o que pode significar que uma senha fraca.
Data de altaração de senha MSSQL Server
Computadores
Enumerando computadores do AD
Enumerando computadores utilizando o ping
e verificando se é um Servidor
Filtrando pelo nome do Computador
Buscando por um computador onde um Domain Admin esteja logado e que o usuário atual possui acesso
Coletando nome do host, sistema operacional e atributos de Controle de Conta de Usuário (UAC).
Verificando por diretórios compartilhados em computadores do Domínio
Bucando por arquivos sensíveis em computadores do Domínio
Procurando por computadores que estão configurado para permitir Constrained Delegation
(Delegação Irrestrita)
Grupos
Obtém lista de grupos do domínio
Verificando todos os membros de um determinado grupo
Enumerando grupos de outro Domínio
Verificando os grupos que um determinado usuário pertence
Verificando os grupos que um determinado usuário (de outro domínio) pertence
Todos os grupos que possuem "admin" no nome
Todo os usuários que são Domain Admin
. Note que essa pesquisa está sendo executada de forma recursiva
Procurando por Grupos de Segurança gerenciadores. Esses grupos tem o direito de adicionar membros a grupos de segurança e grupos de Distribuição do AD são definidos modificando o atributo managedBy
Examinando o grupo de Security Operations
Enumerando os grupos locais. Por padrão, será efetuado a pesquisa utilizando o próprio host
Computadores
Obtém uma lista de todos os Sistemas Operacionais do Domínio
Pegando membros de um determinado grupo local. Note que se não informar o grupo, será retornado somente os membros do grupo Administrators.
Buscando por determinado computador
Buscando compartilhamentos por todos os computadores do AD
Verificando quantas máquinas os usuários do AD podem inserir no Domínio
Criando um computador no Domínio com senha aleatória
ACL/ACE
Mais detalhes a seguir em:
OU
Listando todos os computadores que fazem parte de uma OU.
GPO
Listando todas as GPO's
Pegando as GPO's que estão associadas a um determinado host
Listando todas as GPO's que estão sendo aplicadas em uma determinada OU. Substitua o hash abaixo, pelo valor de gplink
, que pode ser obtido ao executar o comando Get-NetOU
Retorna todos os GPOs que modificam a associação a grupos locais por meio de Restricted Groups
ou Group Policy Preferences
. Você pode então localizar manualmente a quais OUs e, por extensão, a quais computadores essas GPOs se aplicam. Isso pode ser útil para mostrar que um determinado grupo está recebendo algum tipo de acesso local nas máquinas às quais as GPOs se aplicam.
SPN (Service Principal Name)
Pegando SPN de serviços do AD
DICA: Note que, como podemos obter uma lista de todos os serviços (e seus respectivos hosts), não precisamos então de utilizar um nmap para descobrir portas abertas. Além de ter um resultado mais preciso com o SPN, também se torna extremamente difícil de ser detectado
Active Directory Rigths
GenericAll
= Usuário pode modificar a associação ao grupo, adicionando ou remover usuários
Verificando permissões
Relação de Confiança
Retorna todas as relações de confiança de Domínio para nosso Domínio atual.
Retorna todas as relações de confiança de Floresta para nosso Floresta atual.
Listando os relacionamentos de confiança do Domínio atual
Listando os relacionamentos de confiança do outros Domínio
Enumerando as relações de confiança de Floresta
Enumerando as relações de confiança de outra Floresta
Diretórios Compartilhados
Diretórios compartilhados no host atual
Scripts Automatizados
Acessa todas máquinas do Domínio (sem passar pelo DC), e verifica onde o usuários atual possui acesso de Administrador Local. Esse acesso é feito utilizando as portas do RPC e SMB, porém é possível utilizar outras portas.
Busca no DC a lista de computadores e depois verifica em cada máquina se o usuário atual possui acesso de Administrador Local. Esse acesso é feito utilizando as portas do RPC e SMB, porém é possível utilizar outras portas.
Técnica para verificar se possui acesso de Administrador Local e máquinas, porém de maneira mais furtiva. Para utilizá-lo antes deve enviar o dnshostname
das máquinas em um arquivo txt (get-netcomputer | select dnshostname
)
Enumeração de todos os administradores locais de todas as máquinas do Domínio. É necessário ter privilégio de administador das máquinas que não são o DC
Pesquisa no DC a lista de computadores e depois verifica o grupo de Administadores Locais
Retorna onde todos os membros de um determinado grupo (por padrão será pesquisado pelo Domain Admin) possuem sessão ativa e em quais computadores
Caso queira deixar ainda mais stealth, podemos enumerar o c:\users
e após pegar a lista de usuários (baseados no diretórios que foram criados), acessa o File Server em busca de sessões ativas
Para confirmar se o acesso é realmente válido, utilize o comando abaixo
SharpView
OBS.: Diferentemente do PowerView
e do ADModule
, este pode ser executado sem o Powershell, o que pode ser algo vantajoso dependendo da sua situação.
Help sobre determinado comando. No exemplo abaixo, utilizamos o Get-DomainUser
, porém pode ser qualquer outra função
Enumeração de usuários que não exigem pré-autenticação Kerberos e podem ser submetidos a um ataque ASREPRoast.
Usuários com delegação restrita de Kerberos
Enumerando usuários do AD
Enumerando computadores do AD
Coletando nome do host, sistema operacional e atributos de Controle de Conta de Usuário (UAC).
Procurando por computadores que estão configurado para permitir Unconstrained Delegation
(Delegação Irrestrita)
Procurando por todos os grupos do AD com o atributo AdminCount
definido como 1
, ou seja, este é um grupo protegido.
Mostrando membros de um determinado grupo do AD
Enumerando os grupos locais. Por padrão, será efetuado a pesquisa utilizando o próprio host
Coletando informações sobre usuários de domínio com tenham PreauthNotRequired
Pegando SID de um determinado usuário
Convertendo nome de um usuário a partir de um SID
Usuários que permitem delegação irrestrita
Enumerando usuário com ServicePrincipalName (SPN), que possam ser sujeitos a ataques de Kerberoasting
Informações sobre o Domínio, como DC, Floresta, Domínios filhos, Level do Domíonio, etc
Enumerando compartilhamentos abertos em um determinado host
Enumerando as OU's
Pegando o nome de todas as GPO's
ADModule
Importando o Módulo
Objetos
Retorna todos os objetos do AD
Floresta
Enumerando todos os Domínios da Floresta
Enumerando Floresta
Enumerando outra Floresta
Enumerando o Global Catalog da Floresta
Domínio
Enumerando o Domínio local
Enumerando outro Domínio
Identificando o SID do Domínio
Enumerando o DC
Enumerando outro DC
Usuários
Enumerando usuários de outro Domínio
Pegando informações de um determinado usuário
Buscando por usuários que possuem o campo description
com algum conteúdo
Buscando por usuários que não possuem a string pass
no campo description
Todo os usuários que faz parte de Domain Admin
. Note que essa pesquisa está sendo executada de forma recursiva
Grupos
Enumerando os grupos do Domínio
Verificando os grupos que um determinado usuário pertence
Todos os grupos que possuem "admin" no nome
Computadores
Enumerando computadores utilizando o ping
e verificando se é um Servidor
OU
Listando as OU's do Domínio
ACL/ACE
Mais detalhes a seguir em:
Relação de Confiança
Listando os relacionamentos de confiança do Domínio atual
Listando os relacionamentos de confiança do outros Domínio
ADSearch
Enumerando usuários do Domínio
Pesquisando por todos os grupos de domínio que terminam com a palavra admins
.
Pesquisando por todos os grupos de domínio que terminam com a palavra admins
.
Configurando a saída para o formato JSON
Enumeração do AD (Post Exploitation)
Na máquina alvo, execute os comandos abaixo. Note que o terminal ficará preso e será salvo um arquivo zip com alguns arquivos json dentro.
ps1
exe
Depois de realizar um dos métodos acima, envie o arquivo zip para o host atacante com o seu método de preferência e importe no Bloodhound
.
DICA: Atualmente as credenciais padrões para acessar o Neo4j via web é root:root
ou neo4j:neo4j
Feito isso, vamos importar o arquivo zip que foi gerado com o SharpHound
para o Bloodhound
, clicando no botão Import Graph
que fica no canto direito da janela. Em alguns casos esse import não funciona, então é necessário clicar e arrastar o arquivo zip para dentro do Bloodhound. Logo após poderá ver o desenho do AD, mapeando informações úteis.
NTDS Dump
crackmapexec
Realiza o dump do NTDS.dit
. Ao pegar um NTLM, utilize-a para testar acessos para os outros usuários.
Sites
Last updated