Noções básicas de reconhecimento LDAP com PowerShell
Aug 31, 2022
No post introdutório desta série, revisamos o que é uma conta de serviço do Active Directory (AD), explicamos por que essas contas privilegiadas representam um sério risco à segurança e prometemos detalhar 4 tipos de ataques a contas de serviço em publicações futuras. Este post explora o primeiro desses ataques: reconhecimento LDAP, que os atacantes podem usar para descobrir contas de serviço em um ambiente de TI enquanto evitam detecção.
Conteúdo relacionado selecionado:
Especificamente, neste post, vamos explorar como um atacante sem permissões especiais, como de Administrador de Domínio ou mesmo direitos de Administrador local, pode usar consultas simples de PowerShell para encontrar contas de serviço, sem ter que instalar ou aprender ferramentas especializadas como Bloodhound.
Encontrando contas privilegiadas
O Active Directory oferece muitos benefícios de segurança e gerenciamento, mas também pode facilitar demais para um atacante curioso. Devido à arquitetura do AD, uma vez que um atacante tenha infiltrado em qualquer computador integrado ao domínio, ele pode consultar o diretório e seus objetos. E porque por padrão o Active Directory não fornece um mecanismo para auditar e alertar sobre atividades suspeitas, muitas vezes eles conseguem evitar a detecção.
Conteúdo relacionado selecionado:
Aqui estão algumas das maneiras como um invasor pode descobrir contas de serviço consultando LDAP.
Descoberta do Service Principal Name (SPN)
Contas de serviço utilizam SPNs para suportar a autenticação Kerberos. Embora isso proporcione uma segurança aprimorada, também deixa um rastro exato de onde essas contas são usadas e para que são utilizadas. Essas informações podem ser facilmente exploradas por um atacante. SPNs são comumente usados para executar serviços que suportam aplicações como Microsoft SQL Server e SharePoint.
Em outro blog post, demonstramos como realizar reconhecimento avançado do AD; no entanto, existem maneiras mais simples de obter as informações de que precisamos para nossos propósitos aqui. Usando a seguinte consulta LDAP simples, um atacante pode obter uma lista de contas do AD que registraram SPNs, bem como os computadores, aplicativos e dados aos quais eles fornecem acesso:
#Build LDAP filters to look for users with SPN values registered for current domain
$ldapFilter = "(&(objectclass=user)(objectcategory=user)(servicePrincipalName=*))"
$domain = New-Object System.DirectoryServices.DirectoryEntry
$search = New-Object System.DirectoryServices.DirectorySearcher
$search.SearchRoot = $domain
$search.PageSize = 1000
$search.Filter = $ldapFilter
$search.SearchScope = "Subtree"
#Execute Search
$results = $search.FindAll()
#Display SPN values from the returned objects
foreach ($result in $results)
{
$userEntry = $result.GetDirectoryEntry()
Write-Host "User Name = " $userEntry.name
foreach ($SPN in $userEntry.servicePrincipalName)
{
Write-Host "SPN = " $SPN
}
Write-Host ""
}
Os valores de SPN nos resultados revelarão onde cada conta está registrada e para qual serviço ela está registrada naquele sistema. Por exemplo, aqui está o valor de SPN para uma conta de serviço SQL:
Descoberta de contas de serviço usando atributos genéricos de objeto
Embora os SPNs sejam muito confiáveis e informativos, eles não produzirão uma lista abrangente de contas de serviço porque muitas contas não se integram com o Kerberos através dos SPNs e não terão valores de SPN definidos. No entanto, atacantes sem direitos de domínio muitas vezes ainda podem descobrir contas de serviço por outros meios. Em particular, a maioria das organizações utiliza convenções de nomenclatura, como iniciar todos os nomes de contas de serviço com “SVC” ou algo semelhante, e as contas de serviço são tipicamente colocadas em suas próprias unidades organizacionais (OUs) ou grupos.
Encontrando contas de serviço com base em convenções de nomenclatura de contas
Aqui está um script PowerShell que encontrará todas as contas que contêm “svc” no nome:
#Build LDAP filter to find service accounts based on naming conventions
$ldapFilter = "(&(objectclass=Person)(cn=*svc*))"
$domain = New-Object System.DirectoryServices.DirectoryEntry
$search = New-Object System.DirectoryServices.DirectorySearcher
$search.SearchRoot = $domain
$search.PageSize = 1000
$search.Filter = $ldapFilter
$search.SearchScope = "Subtree"
#Add list of properties to search for
$objProperties = "name"
Foreach ($i in $objProperties){$search.PropertiesToLoad.Add($i)}
#Execute Search
$results = $search.FindAll()
#Display values from the returned objects
foreach ($result in $results)
{
$userEntry = $result.GetDirectoryEntry()
Write-Host "User Name = " $userEntry.name
Write-Host ""
}
Encontrando contas de serviço com base na OU
E aqui está um filtro LDAP que pode ser substituído no script anterior para encontrar quaisquer OUs que contenham “Service” ou “svc” no nome:
$ldapFilter = "(&(objectClass=organizationalUnit)(|name=*Service*)(name=*svc*)))"
The attacker can then search those OUs for all user objects to find your service accounts. This script focuses on one OU with “Service” in its name:
$search = New-Object System,DirecoryServices.DirectorySearcher
$search.SearchRoot = "LDAP://OU=Service Accounts,OU=JEFFLAB,DC=local"
$search.PageSize = 1000
$search.Filter = $ldapFilter
$search.SearchScope = "Subtree"
Descoberta de conta de serviço através do controle de conta de usuário
Outra maneira astuta de pesquisar no Active Directory por contas de serviço é investigar as configurações de controle de conta, pois as contas de serviço frequentemente têm configurações diferentes das contas de usuários comuns. O melhor exemplo disso é a configuração “password never expires” — contas de serviço podem ter senhas configuradas para nunca expirar porque o ato de redefini-las pode ser tedioso e resultar em interrupções de aplicativos ou serviços.
Com o PowerShell, é possível encontrar todas as contas com esse valor ativado, utilizando um filtro LDAP um pouco mais complicado:
$ldapFilter = "(&(objectclass=user)(objectcategory=user)(useraccountcontrol:1.2.840.113556.1.4.803:=65536))"
Descoberta de Privileged Access Management
Embora esta publicação tenha se concentrado exclusivamente em maneiras de encontrar contas de serviço sem aproveitar quaisquer privilégios, se um invasor encontrar uma conta que tenha privilégios em um ou mais sistemas dentro da rede, existem muitas outras maneiras eficazes de descobrir contas de serviço. Elas incluem:
- Enumerando serviços nos endpoints e extraindo a conta startname
- Procurando por strings de conexão em web.config, scripts e outros locais onde contas de serviço podem estar codificadas de forma fixa
- Explorando a política local para usuários concedidos o direito de “Log on as a Service”
- Extraindo logs de eventos para tipos de logon não interativos
- Encontrando contas de serviço de pool de aplicativos e outras contas de serviço de aplicativos web
Explorando as contas descobertas
Uma vez que um adversário tenha uma lista de contas de serviço, o próximo passo é explorá-las. Descubra algumas das opções deles nos seguintes posts:
- Extração de Senhas de Contas de Serviço com Kerberoasting
- Exploração Direcionada de Contas de Serviço com Silver Tickets
- Explorando a conta de serviço KRBTGT para Golden Tickets
Saiba mais sobre reconhecimento LDAP e outras técnicas de ataque no Netwrix attack catalog.
Compartilhar em
Saiba Mais
Sobre o autor
Jeff Warren
Diretor de Produto
Jeff Warren supervisiona o portfólio de produtos da Netwrix, trazendo mais de uma década de experiência em gestão e desenvolvimento de produtos focados em segurança. Antes de se juntar à Netwrix, Jeff liderou a organização de produtos na Stealthbits Technologies, onde utilizou sua experiência como engenheiro de software para desenvolver soluções de segurança inovadoras em escala empresarial. Com uma abordagem prática e um talento para resolver desafios de segurança complexos, Jeff está focado em construir soluções práticas que funcionam. Ele possui um BS em Sistemas de Informação pela Universidade de Delaware.
Saiba mais sobre este assunto
Leis de Privacidade de Dados por Estado: Abordagens Diferentes para a Proteção da Privacidade
Exemplo de Análise de Risco: Como Avaliar Riscos
O Triângulo da CIA e Sua Aplicação no Mundo Real
O que é Gerenciamento de Registros Eletrônicos?
Análise de Risco Quantitativa: Expectativa de Perda Anual