Simovits

Hitta sårbarheter i Active Directory Certificate Services

En introduktion till sårbara certifikatsmallar i Active Directory Certificate Services (AD CS) och hur de kan identifieras med Certipy.

Introduktion

Certifikatsmallar används i AD CS för att skapa certifikat som används för kryptering och autentisering i organisationer världen över. Det är inte ovanligt att dessa mallar är felkonfigurerade vilket gör att de kan användas vid cyberangrepp.

Men vad är certifikatsmallar och hur kan man identifiera om de är sårbara? För att svara på detta tänkte jag ge en introduktion till Public Key Infrastructure (PKI) och AD CS för att sedan förklara vad felkonfigurerade certifikatsmallar är och hur man kan identifierar dem.

Public Key Infrastructure

PKI är grunden för modern informationssäkerhet och är det underliggande ramverk som används för att säkert utbyta information på internet genom digitala certifikat [1]. Du använder dig av ett digitalt certifikat just nu när du läser denna blogg då ett TLS certifikat används för att kryptera din internettrafik till www.simovits.com.

PKI bygger på par av asymmetriska-nycklar där den ena används för att kryptering och den andra används för dekryptering. Då information krypterats med en nyckel kan den endast dekrypteras med den andra. Genom att skapa ett nyckelpar och dela ut den ena till omvärlden och behålla den andra kan information delas på ett säkert sätt. Nyckeln som delas ut till omvärlden kallas för en publik nyckel och den som behålls kallas för en privat nyckel. Den publika nyckeln används av en avsändare för att kryptera information som skickas till mottagaren med den privata nyckeln. Då informationen som krypterats endast kan dekrypteras med den privata nyckeln säkerställs att endast mottagaren kan dekryptera informationen som skickats.

För att hantera dessa nyckelpar används digitala certifikat, elektroniska dokument som kopplar samman publika nycklar med enheter så som hemsidor, servrar och användare. Dessa certifikat innehåller information om vem certifikatet är utfärdat för, hur länge certifikatet är giltigt och vad certifikatet är menat att användas till. Det innehåller även en digital signatur av den så kallade Certificate Authority (CA) som utfärdat certifikatet.

CA:s är enheter så som företag, organisationer eller servrar som utfärdar certifikat och validerar att den som begär ut ett certifikat är den som de utger sig för att vara. Då ett certifikat utfärdas innehåller det en digital signatur av den CA som utfärdat det. Denna signatur fungerar som ett kvitto på att CA:n har validerat informationen i certifikatet.

Det är CA:s som skapar tillit till systemet då en okänd enhet, till exempel en hemsida, uppvisar ett certifikat. Om certifikatet signerats av en CA som vi litar på kan vi lita på att informationen i certifikatet är korrekt. Om certifikatet signerats av en icke-betrodd CA är vi inte säkra på att informationen i certifikatet är korrekt. Denna princip med en betrodd enhet som validerar certifikat används även i andra sammanhang än när vi surfar på internet, till exempel i Microsofts PKI-lösning AD CS.

Active Directory Certificate Services

AD CS är Microsofts PKI implementation som möjliggör funktionalitet så som utfärdandet av TLS certifikat till hemsidor och certifikatsbaserad autentisering [2]. Tjänsten kan användas i Active Directory (AD), en katalogtjänst som vanligtvis används för åtkomstkontroll till resurser så som mejl, laptops och interna system i organisationer.

I AD CS utfärdas certifikat utifrån certifikatsmallar som beskriver vilka certifikat som får utfärdas och vem som får utfärda dem. Certifikatsmallarna innehåller information så som ”Vad kan certifikatet användas till?”, ”Vem har rättigheter att begära certifikatet?” och ”Hur länge är certifikatet giltigt?”. Den enhet som utfärdar certifikaten kallas för Enterprise CA och är en betrodd server vars syfte är att utfärda certifikat.

För att begära ut ett certifikat skickas en så kallad Certificate Signing Request (CSR) till Enterprise CA som signerar certifikatet med en privat nyckel. I CSR finns information om användaren som skickat begäran och information om vad för certifikat som begärts. Enterprise CA validerar informationen i CSR mot den certifikatsmall som begärts och om informationen i CSR matchar certifikatsmallen delas ett certifikat ut till användaren.

En certifikatsmall innehåller många fält och det händer att en mall menad för ett syfte kan användas i ett annat. Till exempel kan en mall menad för att skapa TLS certifikat till interna hemsidor användas vid ett angrepp för autentisering som en administratör.

Sårbara certifikatsmallar

Forskare på SpectreOps har undersökt AD CS och identifierat ett flertal vanliga misskonfigurationer och sårbarheter som kan användas vid angrepp [3]. Dessa misskonfigurationer har namngivits av forskarna och blivit en branschstandard vid simulerade cyberangrepp, så kallade penetrationstester, mot AD CS.

En vanlig misskonfiguration som kan användas av en angripare för att tillskansa sig höga privilegier har namngivits ESC1. Denna misskonfiguration bygger på en certifikatsmall som konfigurerats med följande:

  1. Lågprivilegierade användare tillåts begära ut certifikat.
  2. Ingen signering eller godkännande från chef krävs innan utfärdandet.
  3. Certifikatet tillåts användas för autentisering.
  4. Certifikatet tillåts begäras ut åt godtycklig användare.

Ovanstående konfigurationer innebär inte en säkerhetsrisk var och en för sig men tillsammans tillåts följande:

”Hej, jag vill ha ett certifikat för ett administratörskonto och använda det för autentisering.” – Lågprivilegierad användare

”Din begäran matchar certifikatsmallen och kräver ingen signering eller godkännande. Varsågod här är ditt certifikat.” – Enterprise CA

Denna certifikatsmall tillåter alltså en lågprivilegierad användare att begära ut certifikat som kan användas för autentisering som en högprivilegierad användare. Notera att ett certifikat som utfärdats med denna misskonfiguration är fullt giltigt och även betrott av andra enheter i AD då det signerats av Enterprise CA. Detta är en allvarlig säkerhetsrisk.

Ovanstående sårbarhet är bara en av ett flertal vanliga misskonfigurationer som forskarna på SpectreOps identifierat. Att gå genom en organisations alla certifikatsmallar och korsreferera dessa mot kända sårbara konfigurationer skulle ta mycket tid och risken att missa en konfiguration är stor. I stället för att göra detta manuellt kan automatiserade verktyg användas för att identifiera sårbara certifikatsmallar.

Identifiera sårbara certifikatsmallar

Flera verktyg kan användas för att identifiera sårbara certifikatsmallar och i denna guide kommer verktyget Certipy att användas [4]. Börja med att installera Certipy enligt dokumentationen.

I skrivande stund kan Certipy installeras med Pythons pakethanterare, pip3 [5]. Starta en kommandotolk, till exempel PowerShell på Windows, och installera Certipy med pip3.

pip3 install certipy-ad


Kör Certipy från kommandotolken för att identifiera sårbara certifikatsmallar.

certipy find -u användarnamn@domän.se -password lösenord -dc-ip x.x.x.x


Byt ut användarnamn, lösenord, domän.se och x.x.x.x mot autentiseringsuppgifter för ett domänanslutet konto, namnet på AD domänen och IP-adressen för en domänkontrollant.

Resultatet från ovanstående kommando kommer att skapa tre filer och likna exempeloutputen nedan.

PS C:\> certipy -u användarnamn@domain.se -password lösenord -dc-ip x.x.x.x
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Finding certificate templates
[*] Found 34 certificate templates
[*] Finding certificate authorities
[*] Found 1 certificate authority
[*] Found 12 enabled certificate templates
[*] Trying to get CA configuration for 'DC-CA' via CSRA
[*] Got CA configuration for 'DC-CA'
[*] Saved BloodHound data to '20241201001337_Certipy.zip'.
[*] Saved text output to '20241201001337_Certipy.txt'
[*] Saved JSON output to '20241201001337_Certipy.json'


Genom att öppna textfilen, 20241201001337_certipy.txt i detta exempel, och söka på Vulnerabilities kan sårbara certifikatsmallar identifieras likt nedanstående.

  Template Name 	: CertifikatsmallNr3
  Display Name 	        : Certifikatsmall Nummer 3

  … trimmad output för bloggens skull …

  [!] Vulnerabilities	:
    ESC1 		: ’DOMÄN.SE\\Domain Users’ can enroll, enrollee supplies subject and template allows client authentication


Från ovanstående kan det utläsas att medlemmar i gruppen Domain Users har möjlighet att utnyttja sårbarheten ESC1 i certifikatsmall CertifikatsmallNr3. Detta är en säkerhetsbrist som bör åtgärdas.

Notera att resultatet kommer se olika ut beroende på hur certifikatsmallarna konfigurerats i den AD domän som du utvärderar. Ibland identifieras många sårbarheter och ibland identifieras inga. Oavsett resultat så vet du hur sårbarheter kan identifieras med Certipy.

Mer information

För mer information och andra missbruk av AD CS se Certified Pre-Owned: Abusing Active Directory Certificate Services [3]. Om du tycker det är för mycket att läsa rekommenderas följande blogginlägg eller presentation från Black Hat 2021 [6][7].

För mer information om verktyget Certipy och hur det kan användas rekommenderas dokumentationen på GitHub [4]. Om du är intresserade av att testa sårbarheter i AD CS rekommenderas The Hacker Recipes och HackTricks [8][9].

Referenser

[1] https://www.techtarget.com/searchsecurity/definition/PKI

[2] https://learn.microsoft.com/en-us/windows-server/identity/ad-cs/active-directory-certificate-services-overview

[3] https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf

[4] https://github.com/ly4k/Certipy

[5] https://pypi.org/project/pip/

[6] https://posts.specterops.io/certified-pre-owned-d95910965cd2

[7] https://i.blackhat.com/USA21/Wednesday-Handouts/us-21-Certified-Pre-Owned-Abusing-Active-Directory-Certificate-Services.pdf

[8] https://www.thehacker.recipes/ad/movement/adcs/

[9] https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/ad-certificates