av Bhabesh Raj Rai, Security Research

Under månadens Patch Tuesday åtgärdade Microsoft en privilegieeskaleringssårbarhet med hög allvarlighetsgrad (CVE-2022-26923) i AD-domäntjänster med en CVSS-poäng på 8,8 som är nära kritisk. Denna sårbarhet gör det möjligt för en autentiserad användare med låg behörighet att erhålla ett certifikat för privilegierade konton såsom domänkontrollanter från AD Certificate Services, vilket gör det möjligt att höja den egna behörigheten.

En dag efter Patch Tuesday publicerade Oliver Lyak – forskaren som upptäckte sårbarheten – tekniska detaljer om sårbarheten på sin blogg. Han har även uppdaterat verktyget certipy för att underlätta enkel exploatering av denna sårbarhet.

För att kunna utnyttja denna sårbarhet bör det finnas en Active Directory Certificate Services-server (AD CS) i domänen. AD CS är Microsofts lösning för PKI-certifikat (Public Key Infrastructure). Domänanvändare kan begära ett certifikat från AD CS-servern baserat på en fördefinierad certifikatmall. Det certifikatet kan användas för olika ändamål, framförallt klientautentisering. Det innebär att användare kan begära Kerberos TGT (Ticket Granting Ticket) med certifikatet som autentiseringsmedium.

AD CS har separata certifikatmallar för användare och datorer och båda kan användas för klientautentisering. Vid användarautentisering via certifikat försöker domänkontrollanten mappa UPN (User Principle Name) från certifikatet till en användare, medan domänkontrollanten – när det gäller datorautentisering via certifikat– försöker mappa dNSHostName istället, eftersom datorkonton inte har något UPN. Skaparen av datorkontot har behörighet att ändra egenskapsvärdet dNSHostName. Till skillnad från UPN behöver dNSHostName inte vara unikt i en domän. Men när vi ändrar värdet dNSHostName uppdateras även värdet servicePrincipalName för att återspegla det nya dNSHostName-värdet. Om vi uppdaterar egenskapen dNSHostName för ett datorkonto för att spegla en domänkontrollant, försöker domänkontrollanten uppdatera servicePrincipalName, som då skulle krocka med domänkontrollantens eget servicePrincipalName och på så vis skapa ett indirekt begränsningsfel.

Skaparen av datorkontot har dock även behörighet att ändra servicePrincipalName. De nya värdena måste följa standarden för dNSHostName. Vi kan kringgå denna begränsningskontroll genom att helt enkelt raderar de servicePrincipalName-värden som innehåller dNSHostName. Slutligen låter domänkontrollanten oss uppdatera dNSHostName för det nyligen skapade datorkontot till en av domänkontrollanterna. Domänkontrollanten behöver inte uppdatera servicePrincipalName eftersom vi raderat de värden som innehöll dNSHostName-värdet.

Nu kan vi begära ett certifikat för det nyligen skapade datorkontot till AD CS-servern med hjälp av Machine-mallen. Domänkontrollanten bör bädda in egenskapen dNSHostName som identifiering. Vi kan sedan autentisera med hjälp av det certifikatet till domänkontrollanten för att erhålla hashvärdet för domänkontrollantens maskinkonto. Med hjälp av detta hashvärde kan vi antingen direkt använda DCSync-attacken för att dumpa alla hashvärden från domänkontrollanten eller erhålla Kerberos TGT från domänkontrollanten.

Den sista delen av denna attackkedja liknar till stor del  reläattacken från Petitpotam där angriparen vidarebefordrar det erhållna hashvärdet för en entitet till en AD CS-server och erhåller den entitetens certifikat. Låt oss se hur vi kan identifiera exploatering av denna privilegieeskaleringssårbarhet i Logpoint.

Loggkällor som krävs

  • Windows AD
  • Windows AD CS
  • Zeek

Administratörer bör säkerställa att de har aktiverat följande inställningar eftersom de är inaktiverade som standard.

  • Underkategorin granskning (audit) för Certificate Services
  • ”Issue and manage certificate requests”granskning på AD CS-servern

Identifiering av intrång med LogPoint

Analytiker bör söka efter nyligen skapade datorkonton där dns_host-värdet är inställt för att förfalska en av domänkontrollanterna. WINDOWS_DC är en lista som måste innehålla alla FQDN-värden för domänkontrollanterna som används i din domän.

1norm_id=WinServer label=Computer label=Account label=Create dns_host IN WINDOWS_DC

Searching for new computer account creations

Söka efter nyligen skapade datorkonton

Analytiker kan också söka efter ovanliga SPN-värden i datorkonton som angripare ställer in för nyligen skapade konton för att kringgå dNSHostName -valideringskontrollen enligt den tidigare beskrivningen.

1norm_id=WinServer label=Computer label=Account label=Create 2
service="HOST/*RestrictedKrbHost/*"

Searching for SPN manipulations

Söka efter SPN-manipuleringar

Sök sedan efter en felmatchning mellan dator– och dns_hosts-värden i händelseloggar för kontoskapande. I frågesatsen nedan är domännamnet knowledgebase.local. Analytiker måste ersätta det värdet med sitt eget domännamn innan frågesatsen används.

1norm_id=WinServer label=Computer label=Account label=Create dns_host=* 2
| process eval("computer_name=rtrim(computer, '$')") 3
| process eval("dns_name=rtrim(dns_host, '.knowledgebase.local')") 4
| process compare(computer_name, dns_name) as result 5
| search result=*

Söka efter en felmatchning mellan dator- och dns_host-värden i händelseloggar för kontoskapande

Vi rekommenderar att analytiker granskar lyckande certifikatförfrågningar för Machine-mallen kring tidpunkten när det nya datorkontot skapades.

1norm_id=WinServer label=Certificate label=Request label=Approve 2
attributes="CertificateTemplate:Machine"

Searching for successful certificate requests for Machine template

Söka efter lyckade certifikatförfrågningar för Machine-mallen

Vi kan korrelera de två händelserna genom att larma när ett nyskapat datorkonto som förfalskar en domänkontrollant lyckas begära ett Machine-mallcertifikat.

1[ norm_id=WinServer label=Computer label=Account label=Create dns_host IN WINDOWS_DC ] as s1 2
followed by [ norm_id=WinServer label=Certificate label=Request label=Approve attributes="CertificateTemplate:Machine" 3
| norm on requester \<requester_account:'\S+'> ] as s2 4
within 1 hour on s1.computer=s2.requester_account 5
| rename s1.log_ts as account_creation_ts, s1.computer as computer, s1.user as user, s1.service as service, s1.dns_host as dns_host, s2.subject as certificate_subject 6
| chart count() by account_creation_ts, computer, user, service, dns_host, certificate_subject

Correlating computer account creation with successful Machine template certificate request

Korrelera skapande av datorkonto med lyckad certifikatbegäran för Machine-mall

Angripare kan direkt använda DCSync-attack för att dumpa alla hashvärden från domänkontrollanten efter att erhållit dess hashvärde. Analytiker kan använda Zeek för att söka efter katalogreplikeringstrafik som härstammar från system som inte är domänkontrollanter. WINDOWS_DC_IPS är en lista som måste innehålla alla IP-adresser för domänkontrollanterna som används i din domän.

1norm_id=Zeek event_category=dce_rpc endpoint=drsuapi 2
operation IN ["DRSGetNCChanges", "DRSReplicaSync"] -source_address IN WINDOWS_DC_IPS

Searching for DCSync artifacts in Zeek events

Söka efter DCSync-artefakter i Zeek-händelser

Distribuera patcharna och begränsningsåtgärderna så snart som möjligt

Vi rekommenderar att administratörer läser Microsofts riktlinjer (KB5014754) om hur man helt åtgärdar denna sårbarhet. Vi rekommenderar starkt att administratörer patchar alla servrar som kör Active Directory Certificate Services och Windows domänkontrollanter som betjänar certifikatbaserad autentisering med uppdateringen från den 10 maj 2022. Efter uppdateringen för maj kommer systemen att vara i kompatibilitetsläge. Om ett certifikat kan mappas starkt eller svagt till en användare kommer autentisering att ske som förväntat. En larm kommer dock att registreras såvida inte certifikatet är äldre än användaren. Om certifikatet är äldre än användaren misslyckas autentisering och ett fel registreras.

Efter patchning har rekommenderar Microsoft administratörer att uppmärksamma på varningar som kan uppstå efter omkring en månad eller mer. Om inga varningar förekommer, rekommenderar Microsoft starkt att fullt tvingande läge (Full Enforcement Mode) aktiveras på alla domänkontrollanter som använder certifikatbaserad autentisering. Microsoft kommer att uppdatera alla enheter till fullt tvingande läge senast 9 maj 2023.

Incidenthantering vid äkta larm

Administratörer kan vidta följande åtgärder när de får ett äkta larm.

  1. Identifiera det komprometterade användarkontot.
  2. Identifiera berörd domänkontrollant och CA-server.
  3. Undersök spår av DCSync-attack.
  4. Undersök skapandet av nya användarkonton kring tidpunkten för persistens.

Kunder kan använda sina SOAR-playbooks för att åtgärda komprometterade användarkonton och rensa berörda system.

 Isolate Host playbook in Logpoint SOAR

Isolera Host Playbook i Logpoint SOAR

Om en angripare lyckas kompromettera domänen måste administratörerna rensa och bygga upp hela Active Directory från grunden. Att göra detta är en komplicerad och manuell uppgift och kan i regel inte automatiseras helt. För att återuppbygga AD kan administratörer implementera följande åtgärdssteg.

  • Skapa nya inloggningsuppgifter för alla konton.
  • Initiera rutiner för återställning av KRBTGT kontolösenord.
  • Kontrollera om det finns ändringar i gruppolicy (GPO) och inloggningsskript.
  • Driftsätt ”färska” nya servrar som domänkontrollanter och överför FSMO-rollerna till dem så att de gamla domänkontrollanterna kan tas ur drift.

På senare tid har det förekommit många privilegieeskaleringssårbarheter som påverkar både Windows och Linux. Ransomware-aktörer börjar använda dem så snart som möjligt för att minimera tiden för distribution av ransomware. Vi rekommenderar att IT-säkerhetsansvariga undersöker om deras AD-miljö är sårbar, tillämpar nödvändiga patchar och vidtar lämpliga begräsningsåtgärder.

Kunder kan hämta Windows-programmetfrån hjälpcentret som även tillhandahåller praktiskt detekteringsinnehåll.

Detecting high severity AD privilege escalation vulnerability blog visual

Contact Logpoint

Contact us and learn why
industry-leading companies
choose Logpoint:

Contact Logpoint