Atacant el Directori Actiu: Base de dades

A entrades anteriors he parlat sobre la base de dades del domini i alguns objectes que s’hi emmagatzemen, com usuaris, ordinadors, grups o serveis. A aquesta entrada entraré amb més detalls per conèixer-la millor.

Primer de tot, mencionar que la base de dades la trobaràs al directori C:\Windows\NTDS\ntds.dit, fitxer que es guarda als Controladors de Domini. Cada controlador té el seu fitxer NTDS que està sincronitzat amb tots els altres DCs.

Classes

Abans de res però, vull explicar una mica l’estructura de la base de dades. La base de dades del Directori Actiu té un esquema que defineix les diferents classes dels objectes. Cada classe té les seves propietats i que compleixen diferents finalitat. Per exemple, hi ha la classe User, Computer o Group.

A més a més, cada classe pot ser una subclasse d’una classe pare determinada que permet heretar les seves propietats. Per exemple, la classe Computer és una subclasse de User, per tant els objectes computer poden tenir les mateixes propietats que els objectes user.

Totes les classes són subclasses d’una classe anomenada Top, que defineix les propietats essencials com ObjectClass o ObjectGUID. La primera conté una llista de les classes d’un objecte, formada normalment per la classe actual i totes les classes pares. La segona, ObjectGUID és un GUID (globally unique identifier) que s’utilitza per identificar cada objecte de la base de dades. No l’has de confondre amb el SID (SecurityIdentifier), que és un identificador relacionat amb els principis de seguretat, com els usuaris o grups.

També és important tenir en compte que les classes es poden adjuntar amb classes auxiliars amb l’objectiu d’aconseguir les seves propietats. Les classes auxiliars no apareixeran a la propietat ObjectClass. Per exemple, moltes de les classes importants quan es fa un pentest, com User o Group, estan adjuntes a la classe auxiliar Security-Principal, la classe que defineix les propietats SAMAccountsName i SID.

PS C:\> . .\PowerView.ps1
PS C:\> Get-NetComputer dc01 -Properties objectclass | select -ExpandProperty objectclass
top
person
organizationalPerson
user
computer

Propietats

Tal i com hem vist, cada classe pot tenir diverses propietats o atributs. Normalment, les propietats guarden un cadenes de text, com Name o un número com UserAccountControl.

Generalment, qualsevol usuari del domini pot llegir l’informació de qualsevol objecte del domini, amb algunes excepcions. La primera excepció són les contrasenyes d’usuaris que no es poden aconseguir de cap manera.

La base de dades defineix UserPassword i UnicodePwd, però aquestes propietats no es poden llegir, només escriure. Quan una contrasenya s’ha de canviar, es modifiquen aquestes propietats per a poder-la actualitzar.

A més a més, hi ha certes propietats que poden tenir informació sensible que només podrà ser llegida per usuaris autoritzats. Per aconseguir això, aquesta propietat està marcada com a propietat confidencial dins de l’esquema de la base de dades (habilitat l’atribut 128 de SearchFlag). Per tant, per tal de poder llegir propietats confidencials, a part de tenir permís de lectura, l’usuari ha de tenir el privilegi CONTROL_ACCESS a la propietat en qüestió.

PS C:\Users\Administrator> Get-ADObject -LDAPFilter "(searchflags:1.2.840.113556.1.4.803:=128)" -SearchBase "CN=Schema,CN=Configuration,DC=projectenadki,DC=local" | Select Name

Name
----
ms-TPM-Owner-Information-Temp
ms-Kds-KDF-AlgorithmID
ms-Kds-KDF-Param
ms-Kds-SecretAgreement-AlgorithmID
ms-Kds-SecretAgreement-Param
ms-Kds-PublicKey-Length
ms-Kds-PrivateKey-Length
ms-Kds-RootKeyData
ms-Kds-Version
ms-Kds-DomainID
ms-Kds-UseStartTime
ms-Kds-CreateTime
ms-FVE-RecoveryPassword
ms-FVE-KeyPackage
ms-TPM-OwnerInformation
ms-DS-Transformation-Rules-Compiled
ms-PKI-Credential-Roaming-Tokens
ms-DS-Issuer-Certificates
ms-PKI-RoamingTimeStamp
ms-PKI-DPAPIMasterKeys
ms-PKI-AccountCredentials
UnixUserPassword

Addicionalment, hi ha certes propietats que han de complir certes condicions abans de que puguin ser escrites. Això està controlat per Validated Writes, per exemple editar el compte d’un servei.

Per últim, per tal de poder gestionar conjunts de propietats relacionades, s’utilitzen grups de propietats en lloc de editar cada propietat individualment.

Principis de seguretat

Un terme que t’hauria de sonar és el de principis de seguretat. Al directori actiu, els principis de seguretat són una entitat. El principi més comú són els usuaris, grups i ordinadors. Aquesta terminologia també s’utilitza a altres àrees com Kerberos.

SID

Per tal d’identificar els principis, a cada un se li assigna un SID (Security Identifier). Al Directory Actiu pots trobar tres tipus de SIDs.

SID del Domini

El SID del Domini s’utilitza per identificar el domini:

PS C:\> $(Get-ADDomain).DomainSID.Value
S-1-5-21-1372086773-2238746523-2939299801

SID dels Principis

El SID dels Principis s’utilitza per identificar els principis de seguretat. Està compost pel SID del domini i pel RID del principi (Relative Identifier):

PS C:\> $(Get-ADUser Nadki).SID.Value
S-1-5-21-1372086773-2238746523-2939299801-1103

A aquest exemple, pots veure que el SID de l’usuari és el SID del domini més el RID (1103).

SID coneguts

Finalment, al Directory Actiu hi ha molts SIDs coneguts que identifiquen entitats abstractes en situacions especials. Aquestes són els més comuns:

  • S-1-5-11: Usuaris autenticats. Els usuaris que han iniciat sessió al sistema pertanyen a aquest grup.
  • S-1-5-10: Principal Self. Utilitzat com a descriptor de seguretat per referenciar-se al seu mateix objecte.
PS C:\> . .\PowerView.ps1
PS C:\> $(Get-DomainObjectAcl Nadki)[41]


ObjectDN               : CN=Nadki,CN=Users,DC=projectenadki,DC=local
ObjectSID              : S-1-5-21-1372086773-2238746523-2939299801-1103
ActiveDirectoryRights  : WriteProperty
ObjectAceFlags         : ObjectAceTypePresent, InheritedObjectAceTypePresent
ObjectAceType          : ea1b7b93-5e48-46d5-bc6c-4df4fda78a35
InheritedObjectAceType : bf967a86-0de6-11d0-a285-00aa003049e2
BinaryLength           : 56
AceQualifier           : AccessAllowed
IsCallback             : False
OpaqueLength           : 0
AccessMask             : 32
SecurityIdentifier     : S-1-5-10
AceType                : AccessAllowedObject
AceFlags               : ContainerInherit, InheritOnly, Inherited
IsInherited            : True
InheritanceFlags       : ContainerInherit
PropagationFlags       : InheritOnly
AuditFlags             : None

També hi ha SIDs coneguts que estan definits com a principis de seguretat del domini/forest:

  • Administrator: S-1-5-21-domain-500
  • Domain Admins: S-1-5-21-domain-512
  • Domain Users: S-1-5-21-domain-513
  • Enterprise Admins: S-1-5-21-root domain-519
PS C:\> $(Get-ADUser Administrator).SID.Value
S-1-5-21-1372086773-2238746523-2939299801-500

Distinguished Names

També és important entendre la propietat DistinguishedName, que indica la posició de l’objecte dins de la jerarquia d ela base de dades.

PS C:\> Get-ADComputer dc01 | select -ExpandProperty DistinguishedName
CN=DC01,OU=Domain Controllers,DC=projectenadki,DC=local

Amb freqüència s’utilitzen els identificadors dels objectes a la base de dades per referenciar altres objectes dins d’aquesta. Per exemple, els membres d’un grup són referenciats pel seu DistinguishedName.

PS C:\> Get-ADGroup "Domain Admins" -Properties member | select -ExpandProperty Member
CN=leia,CN=Users,DC=projectenadki,DC=local
CN=Administrator,CN=Users,DC=projectenadki,DC=local

Els Distinguished Names estan formats per diverses parts:

  • Component de Domini (DC): normalment identifica les parts del domini de la base de dades. Per exemple, per it.projectenadki.local la part DC seria DC=it,DC=projectenadki,DC=local.
  • Unitat Organitzativa (OU): identifica contenidors que s’utilitzen per agrupar diversos objectes relacionats. Cal destacar que encara que les OUs són similars als grups, la seva finalitat és diferent. La finalitat de les OUs és la d’organitzar objectes dins de la base de dades, mentre que la dels grups de seguretat s’utilitzen per organitzar els permisos al domini/forest. Algunes vegades, les empreses relacionen directament les OUs amb els grups de seguretat. Aquests grups es coneixen com a shadow groups. Organitzar les objectes amb OUs és útil perquè pots aplicar la GPO a les OU que afectarà a tots els objectes de cop.
  • Common Name (CN): és el nom que identifica a l’objecte. Algunes vegades veuràs més d’un CN perquè alguns objectes també actuen com a contenidors. Per exemple, a CN=Administrator,CN=Users,DC=projectenadki,DC=local, CN=Users identifica el contenidor Users.

Particions

A part de les OU i els contenidors, la base de dades també està dividida en particions. Cada base de dades té les següent:

  • Domain: conté els objectes del domini.
  • Configuration: guarda la configuració del domini, com el servei HOST o els SID coneguts que hem vist abans.
  • Schema: guarda les definicions de les classes i les seves propietats utilitzades per la base de dades.
  • Domain DNS Zones: guarda els registres DNS dels dominis i subdominis.
  • Forest DNS Zones: guarda els registres DNS del forest.
PS C:\> Import-Module ActiveDirectory
PS C:\> cd AD:
PS AD:\> ls

Name                 ObjectClass          DistinguishedName
----                 -----------          -----------------
projectenadki        domainDNS            DC=projectenadki,DC=local
Configuration        configuration        CN=Configuration,DC=projectenadki,DC=local
Schema               dMD                  CN=Schema,CN=Configuration,DC=projectenadki,DC=local
DomainDnsZones       domainDNS            DC=DomainDnsZones,DC=projectenadki,DC=local
ForestDnsZones       domainDNS            DC=ForestDnsZones,DC=projectenadki,DC=local

Normalment, només utilitzaràs la partició del domini, però és important conèixer com està organitzada la base de dades per si en algun moment ho necessites.

Hi ha eines com adidnsdump o dns-dump que utilitzen les particions DNS Zones per aconseguir tota l’informació del domini.

Global Catalog

La base de dades del domini conté tots els objectes del domini actual, però per incrementar la velocitat de les cerques d’altres dominis, alguns controladors del domini tenen un subconjunt d’objectes de dominis d’altres forests.

Aquests controladors del domini s’anomenen Global Catalogs i tenen un conjunt de particions extres amb objectes de dominis externs.

PS C:\> Get-ADForest |select -ExpandProperty GlobalCatalogs
dc01.bcn.oficina
itdc01.it.bcn.oficina

Si vols consultar el Global Catalog, has d’especificar un port diferent al del servei del Global Catalog que escolta pel 3268 (LDAP):

PS C:\> Get-ADUser -Server "bcn.oficina:3268" -Filter * | select DistinguishedName

DistinguishedName
-----------------
CN=Administrator,CN=Users,DC=bcn,DC=oficina
CN=Guest,CN=Users,DC=bcn,DC=oficina
CN=krbtgt,CN=Users,DC=bcn,DC=oficina
CN=Nadki$,CN=Users,DC=bcn,DC=oficina
CN=maria,CN=Users,DC=bcn,DC=oficina
CN=IT$,CN=Users,DC=bcn,DC=oficina
CN=Administrator,CN=Users,DC=it,DC=bcn,DC=oficina
CN=Guest,CN=Users,DC=it,DC=bcn,DC=oficina
CN=krbtgt,CN=Users,DC=it,DC=bcn,DC=oficina
CN=toni$,CN=Users,DC=it,DC=bcn,DC=oficina
CN=miquel,CN=Users,DC=it,DC=bcn,DC=oficina

Com fer peticions a la base de dades

Per tal d’interactuar amb la base de dades, els controladors del domini ofereixen diverses opcions depenent dels protocols i serveis amb els que són compatibles.

LDAP

El primer és el protocol LDAP. Amb LDAP és possible accedir a la base de dades del domini de la mateixa manera que amb el Global Catalog.

LADP té els següents ports reservats:

  • 389: LDAP TCP
  • 636: LDAPS SSL
  • 3268: LDAP Global Catalog
  • 3269: LDAP Global Catalog SSL

LDAP defineix un sintaxis que et permet filtrar els objectes que vols llegir o editar de la base de dades. Pots filtrar objectes segons les seves propietats. Per exemple, llegir els grups del domini que tinguin usuaris:

(&(objectsclass=group)(members=*))

A part dels filtres, LDAP també et permet especificar les propietats que vols llegir de cada objectes, com per exemple el nom. Pots consultar la wiki de LDAP si vols veure més exemples de com aconseguir informació del Directori Actiu.

~$ ldapsearch -H ldap://192.168.1.5 -x -LLL -W -D "nadki@projectenadki.local" -b "dc=projectenadki,dc=local" "(&(objectclass=group)(member=*))" "samaccountname"
Enter LDAP Password: 
dn: CN=Administrators,CN=Builtin,DC=projectenadki,DC=local
sAMAccountName: Administrators

dn: CN=Users,CN=Builtin,DC=projectenadki,DC=local
sAMAccountName: Users

dn: CN=Guests,CN=Builtin,DC=projectenadki,DC=local
sAMAccountName: Guests

dn: CN=Remote Desktop Users,CN=Builtin,DC=projectenadki,DC=local
sAMAccountName: Remote Desktop Users

dn: CN=IIS_IUSRS,CN=Builtin,DC=projectenadki,DC=local
sAMAccountName: IIS_IUSRS

dn: CN=Schema Admins,CN=Users,DC=projectenadki,DC=local
sAMAccountName: Schema Admins

dn: CN=Enterprise Admins,CN=Users,DC=projectenadki,DC=local
sAMAccountName: Enterprise Admins

dn: CN=Domain Admins,CN=Users,DC=projectenadki,DC=local
sAMAccountName: Domain Admins

dn: CN=Group Policy Creator Owners,CN=Users,DC=projectenadki,DC=local
sAMAccountName: Group Policy Creator Owners

dn: CN=Pre-Windows 2000 Compatible Access,CN=Builtin,DC=projectenadki,DC=local
sAMAccountName: Pre-Windows 2000 Compatible Access

dn: CN=Windows Authorization Access Group,CN=Builtin,DC=projectenadki,DC=local
sAMAccountName: Windows Authorization Access Group

dn: CN=Denied RODC Password Replication Group,CN=Users,DC=projectenadki,DC=local
sAMAccountName: Denied RODC Password Replication Group

Gaire bé qualsevol objecte i propietat del Directori Actiu es llegir o editar amb LDAP. Hi ha algunes excepcions, com atributs sensibles que contenen credencials d’usuaris.

Moltes eines que segurament coneixaràs, com PowerView o ADExplorer utilitzen petitcions LDAP. Si per qualsevol motiu, no pots utilitzar eines, sempre podràs fer-ho amb Powershell utilitznt .NET.

ADWS

Una alternativa a LDAP, a Windows Server 2008 R2, és ADWS (Active Directory Web Services), un protocol bast en SOAP que permet demanar i manipular objectes del domini.

Té plena competabilitat amb els filtres de LDAP, per tant es possible realitzar peticions molt específiques. De fet, els controladors del domini utilitzen ADWS internament quan volen realitzar peticions LDAP.

ADWS utilitza el port 9389 per comunicar-se.

El protocol ADWS també l’utiltizaa el mòdul de Directori Actiu de Powershell:

PS C:\Users\Administrator> Get-ADUser -Filter * | select name

name
----
Administrator
Guest
krbtgt
Nadki
IT$

Altres protocols

A part de LDAP i ADWS, hi ha molts altres protocols que permeten aconseguir informació de la base de dades. Tot i que aquests protocols no permeten peticions tant específiques i de tota la base de dades:

  • DNS: protocol utiltizat per resoldre les adreces IPs dels ordinadors. Obté aquesta informació de la base de dades.
  • SAMR (Security Account Manager Remote): protocol que permet fer i editar informació bàsica dels usuaris i grups. És el protocol utiltizat per comandes com net user /domain.
  • DRSR (Directory Replication Service Remote): protocol utilitzat pels controladors del domini per sincronitzar les seves basaes de dades. A través d’quest protocol es poden aconseguir inclús les contrasenyes dels usuaris, sempre que tinguis permisos suficients, i el que s’utiltiza pels atacs dcsync.
  • Kerberos: és el protocol d’autenticació que també utiltiza la base de dades per generar els tiquets. També l’utilitza el servei kpasswd (port 464) que serveix per canviar les contrasenyes dels usuaris.
  • Netlogon: protocol utilitzat pels equips per aunteticar els usuaris del domini. Aquest protocol va quedar afectat per la vulnerabilitat Zerologon.

N’hi ha molts més que interactuen amb la base de dades, però aquesta és una petita llista dels més importants.

Deixa un comentari