Kerberos delegation

Kerberos delegation

In dit artikel wil ik wat dieper in gaan op unconstrained delegation en constrained delegation. Wat betekend dit precies? en wat betekend het voor jouw active directory domein?

Unconstrained delegation

Deze vorm van delegation is het minst beveiligd, eigenlijk wat er gebeurd onder de schermen is dat een gebruikersaccount bepaalde vlaggen heeft. Deze vlaggen kunnen gezet worden naar True or False.

Er is een vlag genaamd ‘Trusted_for_delegation’ en zoals de naam waarschijnlijk al verteld is dit dus de vlag die jouw als gebruiker toegang geeft voor delegation of niet. Wanneer een object (gebruiker, bestand, computer) authenticeert met een bepaalde machine met unconstrained delegation geconfigureerd, word de TGT (Ticket granting ticket) opgeslagen in het geheugen of ook wel LSASS genoemd.

Stel jezelf eens voor dat een toegestane account zich authenticeert naar een machine met unconstrained delegation geconfigureerd, dit betekend dat jij als gebruiker toegang kan krijgen tot elk geconfigureerde service binnen het domein als deze gebruiker.

Wat nou als er bepaalde manieren zijn om ervoor te zorgen dat geprivilegde accounts zich moeten authenticeren naar jouw machine en dat dit automatisch gebeurd? Dit kan met een bug genaamd de ‘printer bug’. Met deze bug kan jij ervoor zorgen dat een domain controller zich authenticeert naar jouw machine. Hierbij laat hij zijn TGT achter in het geheugen wat jij als aanvaller weer leuk kan misbruiken.

Constrained delegation

In tegenstelling tot unconstrained delegation is het bij constrained delegation mogelijk om te configureren welke service account kan worden gedelegeerd. Dit in theorie zou de beveiliging moeten versterken, wat het op zich ook wel doet maar toch nog niet helemaal voldoende. Daarnaast werkt constrained delegation niet over verschillende forests.

Misbruik maken van constrained delegatie is iets anders dan misbruik maken van unconstrained delegatie. Een veel voorkomende manier waarop het kan worden misbruikt, is als u het wachtwoord in platte tekst of de NTLM-hash van een gebruikersaccount kunt compromitteren dat is geconfigureerd voor beperkte delegatie

Printer bug

Indien jij two-way trust ingeschakeld hebt, kan een aanvaller gebruik maken van MS-RPRN printer bug in een gecomprimeerde domein om vervolgens een machine in een andere forest die “unconstrained delegation” aan heeft staan te bemachtigen (bijvoorbeeld een domain controller).

De bug zorgt ervoor dat de domain controller authenticatie informatie terug stuurt naar de aanvaller, vervolgens kan de aanvaller deze informatie misbruiken om de authenticatie uit het geheugen te halen. Waarna de aanvaller gebruik kan maken van DCSync aanval om de vertrouwde domein te bemachtigen.

Stel je voor dat je een groot bedrijf bent en je koopt een klein bedrijf en op een gegeven moment voeg je hun domein toe aan het jouwe. Als een systeem in de kleine omgeving wordt gecompromitteerd, kan het worden gebruikt om het hele bos van het grote bedrijf over te nemen. Niet goed.

Commands

Om systemen te identificeren die unconstrained delegation aan hebben staan kan de volgende commando worden uitgevoerd:

Get-DomainComputer -Unconstrained 

Indien ‘TRUSTED_FOR_DELEGATION’ erbij staat, betekend dit dat unconstrained delegation mogelijk is.

Om dit te kunnen misbruiken hebben wij een aantal tools beschikbaar, vandaag gebruik ik Rubeus.exe. Wij zetten Rubeus.exe in monitor mode, dit betekend dat hij gaat luisteren of er tickets worden verstuurd of bemachtigd.

Nu maken wij gebruik van een bestand genaamd ‘MS-RPN.exe’. Nadat wij Rubeus.exe in monitor aan hebben gezet voeren wij MS-RPN.exe uit als volgt:

.\MS-RPN.exe \\DC01.local \\MACHINE01.local

Als de commando werkt zou u hetzelfde resultaat moeten zijn zoals u in bovenstaande afbeelding ziet. Vergeet niet dat MACHINE01 een account moet zijn met domain admin rechten anders werkt het niet!

Als het goed is ziet u nu in de sessie waar Rubeues.exe draait iets binnen komen. Als het goed is ook een grote base64 encoded string, nu moeten wij met behulp van Rubeues.exe de ticket injecteren als volgt:

.\Rubeus.exe ptt /ticket:

Als dat goed gaat ziet u het volgende

Nu zouden wij bijvoorbeeld een DCSync aanval kunnen uitvoeren met bijvoorbeeld mimikatz. Dit doen wij als volgt:

Invoke-Mimikatz -Command '"lsadump::dcsync /user:DC01\krbtgt"'

Als bovenstaande commando werkt dan zou jij nu de NTLM hash van de KRBTGT gebruiker moeten zien

 

Please share and spread
NederlandsEnglish