Niels Eriş

Het belang van SMB-signing

Hoe criminelen (mogelijk) het gehele netwerk over kunnen nemen wanneer SMB-signing ontbreekt

Bij beveiligingstests van Windows-omgevingen zien wij regelmatig dat het versleutelde wachtwoord van een gebruiker met hoge rechten over het netwerk wordt verstuurd. In combinatie met systemen waarop SMB-signing is uitgeschakeld kan een aanvaller of kwaadwillende, door middel van een NTLM relay attack, de rechten binnen het netwerk verhogen. Afhankelijk van de netwerk-omgeving kan een aanvaller de rechten verhogen tot het hoogste niveau.

Windows maakt gebruik van veel verschillende authenticatieprotocollen. Eén van die protocollen is Net-NTLM. Dit protocol authenticeert gebruikers over het netwerk. Er bestaan twee versies: Net-NTLMv1 en Net-NTLMv2. Beide versies berekenen een zogeheten Net-NTLM-hash door het versleutelde wachtwoord van een gebruiker te verwerken in een willekeurige string bestaande uit acht bytes. Net-NTLMv1 is vanzelfsprekend minder veilig dan Net-NTLMv2 en wordt sinds Windows Vista en Windows Server 2008 standaard uitgeschakeld. 

Aanvallers kunnen, wanneer zij zich in het interne netwerk bevinden, passief de Net-NTLM-hash van gebruikers opvangen door middel van het hulpprogramma Responder. De Net-NTLM-hash wordt namelijk verstuurd wanneer een client wil verbinden met een netwerkbron. Aanvallers kunnen ook op actieve wijze de hash verkrijgen. Hierbij forceert de aanvaller een client om te verbinden met Responder. Dit kan bijvoorbeeld door een speciaal bestand op een publieke netwerkschijf te plaatsen. Als gebruikers deze netwerkschijf benaderen, maakt hun onderliggende besturingssysteem verbinding met Responder waarbij de Net-NTLM-hash wordt meegestuurd. Tot slot kan de Net-NTLM-hash verkregen worden door gebruik te maken van een techniek genaamd LLMNR of NBT-NS poisoning. Hierbij maakt Responder misbruik van het LLMNR- en NBT-NS-protocol om de Net-NTLM-hash te verkrijgen.

In de afbeelding hieronder is te zien dat, met behulp van Responder, de Net-NTLM-hash van de gebruiker hackdefense is verkregen.

Net NTLM

Een aanvaller kan met deze hash twee dingen proberen te doen:

  1. Kraken met John the Ripper of Hashcat. De slagingskans is echter afhankelijk van de sterkte van het wachtwoord. Een sterk wachtwoord zal niet snel gekraakt worden.
  2. Met deze hash kan een aanvaller ook een NTLM Relay Attack” uitvoeren. 

NTLM Relay Attack

Een NTLM relay attack maakt misbruik van het Net-NTLM-protocol. Een aanvaller onderschept een legitiem authenticatieverzoek en stuurt deze door naar een computer. Dit authenticeert de aanvaller op het doelsysteem in de context van de gebruiker die het verzoek verstuurde. Hiermee zou de aanvaller netwerkschijven kunnen benaderen waar hij of zij geen toegang tot hoort te hebben of willekeurige code uit kunnen voeren op het onderliggende systeem. De afbeelding hieronder toont op hoog niveau de werking van een NTLM relay attack.

Ntlmrelaywerking

We maken gebruik van drie hulpprogramma’s om een NTLM relay attack uit te voeren: CrackMapExec, Responder en ntlmrelayx. Deze voeren wij normaliter uit vanaf een machine waarop Linux geïnstalleerd is. Omdat een NTLM relay attack alleen werkt op systemen waarop SMB-signing is uitgeschakeld, hebben we een lijst nodig met systemen waarop dit uitgeschakeld is. Deze lijst kan gegenereerd worden met CrackMapExec. Dit kan door het volgende commando uit te voeren: crackmapexec smb 192.168.126.0/24 --gen-relay-list targets.txt. Dit controleert de adresreeks 192.168.126.0/24 op machines waarop SMB open staat en SMB-signing uitgeschakeld is. De IP-adressen die hieraan voldoen worden weggeschreven naar het bestand targets.txt’.

Vervolgens maken we gebruik van de hulpprogramma’s Responder en ntlmrelayx. Responder is verantwoordelijk voor het opvangen van de Net-NTLM-hash en stuurt deze door naar ntlmrelayx, die zich vervolgens authenticeert op de opgegeven host(s) via SMB met de gekregen hash. Om dit te realiseren moeten de SMB- en HTTP-server uitgeschakeld worden in de configuratie van Responder. Dit kan door het configuratiebestand te openen en de waarden achter SMB en HTTP te veranderen naar Off’. Het configuratiebestand moet er als volgt uit zien:

Responderconf

Daarna moet Responder gestart worden op de actieve netwerkinterface, in dit geval eth0. Dit kan door het volgende commando uit te voeren: responder -I eth0 -r -d -w.

Tot slot gebruiken we het hulpprogramma ntlmrelayx om de inhoud van de SAM-database van de doelsystemen te extraheren. Hiervoor starten we ntlmrelayx met het volgende commando: python3 ntlmrelayx.py -tf targets.txt. Zodra ntlmrelayx een Net-NTLM-hash ontvangt van Responder, probeert ntlmrelayx zich te authenticeren op de systemen in het bestand targets.txt. Als de authenticatie succesvol is probeert ntlmrelayx vervolgens de inhoud van de SAM-database te extraheren. Hiervoor moeten de gebruiker, waarvan Responder de Net-NTLM-hash heeft opgevangen, lokale beheerrechten op het doelsysteem hebben. Naast het extraheren van de SAM-database is het ook mogelijk om andere systeemopdrachten uit te voeren. 

De afbeelding hieronder toont een succesvolle NTLM relay, waarbij de gebruiker lokale beheerrechten had op het doelsysteem en dus de inhoud van de SAM-database geëxtraheerd kon worden.

Ntlmrelay

Een aanvaller zou nu in het bezit zijn van het versleutelde wachtwoord van de lokale beheerder. Dit geeft een aanvaller lokale beheerrechten op dit systeem. Dit stelt de aanvaller in staat om de versleutelde wachtwoorden van gebruikers, die een sessie hebben of kortgeleden hadden, uit het geheugen te extraheren. In het geval dat hier een domeinbeheerder tussen zit, kan een aanvaller de rechten verhogen tot Domain Admin en zo het gehele domein overnemen. 

Regelmatig nemen we waar dat het wachtwoord voor de lokale Administrator gebruiker hergebruikt wordt op meerdere computers. Dit betekent dat een aanvaller met hetzelfde wachtwoord in kan loggen op meerdere computers als lokale beheerder. Dit verbreedt de aanvalsvector en vergroot de kans dat de aanvaller zijn of haar rechten kan verhogen. 

Aanbeveling: SMB Signing

Systemen zijn vatbaar voor een NTLM relay attack doordat de ontvanger de inhoud en de afkomst van het bericht niet controleert. De meeste effectieve manier om deze kwetsbaarheid te verhelpen is door bedrijfsbreed SMB-signing in te schakelen. 

SMB-signing is een beveiligingsmechanisme in het SMB-protocol. Als SMB-signing is ingeschakeld wordt elk SMB-bericht verstuurd met een handtekening in het SMB-header-veld. De handtekening bestaat uit de inhoud van het SMB-bericht, versleuteld met het AES-algoritme. Hiermee kan de ontvanger van het SMB-bericht controleren of de inhoud van het bericht is veranderd. Ook wordt de identiteit van de verzender geverifieerd. Als de inhoud van het bericht niet meer overeenkomt met de handtekening in het SMB-header-veld, dan weet de ontvanger dat er met het bericht geknoeid is. De ontvanger doet dan niks met dit SMB-bericht. Hierdoor is het onmogelijk om succesvol een NTLM relay attack uit te voeren. 

SMB-signing kan ingeschakeld worden door de inhoud van de registerwaarden RequireSecuritySignature en EnableSecuritySignature naar 1 te zetten. Dit moet zowel worden toegepast voor de LanManServer als de LanManWorkstation. Dit kan op twee manieren: via een systeemopdracht of via de grafische applicatie Local Group Policy Editor’ (gpedit.msc).

SMB-signing kan ingeschakeld worden door de volgende systeemopdrachten uit te voeren:

  • reg addHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters\/v EnableSecuritySignature /t REG_DWORD /d 1
  • reg addHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters\/v RequireSecuritySignature /t REG_DWORD /d 1
  • reg addHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\/v EnableSecuritySignature /t REG_DWORD /d 1
  • reg addHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\/v RequireSecuritySignature /t REG_DWORD /d 1

Hierbij wordt de huidige inhoud van de registerwaarde overschreven. Daarna dient het systeem opnieuw opgestart te worden.

Vanuit de grafische applicatie Local Group Policy Editor’ kan SMB-signing ook ingeschakeld worden. Navigeer in de applicatie naar Computer > Windows Settings > Local Policies > Security Options. Verander vervolgens de waarde van de onderstaande policies naar Enabled. Hierna dient het systeem opnieuw opgestart te worden.

  • Microsoft network client: Digitally sign communication (always)
  • Microsoft network client: Digitally sign communication (if server agrees)
  • Microsoft network server: Digitally sign communication (always)
  • Microsoft network server: Digitally sign communication (if client agrees)
Gpedit

Op Linux kan SMB-signing ingeschakeld worden door het configuratiebestand voor Samba te openen en de onderstaande regels toe te voegen onder globale instellingen. Hierna dient de SMB-service opnieuw opgestart worden.

  • client signing = mandatory
  • server signing = mandatory