Simovits

Håll koll på grupperna

Bakgrund

I en AD-domän styrs en hel del behörigheter av säkerhetsgrupper, och med diverse arv och stort antal grupper etc. blir det snabbt oöverskådligt vilka grupper varje användare är med i.

För att bibehålla en god säkerhetshälsa bör man regelbundet gå igenom behörigheter och verifiera att de fortfarande är aktuella, och rensa bort de som inte är det.

En företagsledning eller andra i verksamheten som beslutar om behörigheter har ofta inte själva tillgång till de administrationsverktyg som behövs för att kika direkt i AD:t (exempelvis ”Users & Computers”).

I det syftet fick jag tidigare i uppdrag av vår företagsledning att ta ut en överskådlig lista på alla användares gruppmedlemskaper i AD.

Ett problem med de flesta skript och beskrivningar som jag sett på nätet är att de oftast bara tittar på användarens direkta medlemskap, och inte tar hänsyn till nästlade grupper, alltså såna grupper som är medlem i en eller fler andra grupper vars medlemskap därmed ärvs till användaren. Såna grupper kan även lätt missas när man använder de vanliga administrationsverktygen.


I bilden ovan syns att användaren Hjulben är medlem i två grupper. För att upptäcka nästlade grupper måste man klicka vidare till varje av de aktuella gruppernas egenskaper och titta på om de är medlemmar i annan grupp. I Hjulbens fall fanns exempelvis Testgrupp 1, som när man kikar vidare är medlem i Testgrupp 2, som man i sin tur får titta vidare på osv. Att manuellt sitta och klicka vidare för att följa alla sådana nästlingar blir lätt förvirrande och oöverskådligt (om den som tittar ens inser att man måste göra den kontrollen).

Så jag tänkte dela med mig av mitt powershell-skript som är ganska enkelt och inte på något sätt banbrytande eller innovativt, men det kan kanske vara till hjälp för någon som behöver göra en behörighetskontroll i sitt (eller kunds) AD.

Skriptet kollar alltså upp alla användares grupptillhörigheter (inklusive nästlade sådana), skapar en överskådlig lista av detta samt exporterar resultatet till en Excel-fil med färdiga filtreringsbara kolumner, direkt redo att lämnas över till berörda behörighetsansvariga. Man kan även exportera till CSV-fil om man skulle föredra det.

Skriptet kan även vara till hjälp i penetrationstest och granskningar av AD-miljöer, om man inte har möjlighet eller tillstånd att använda mer avancerade verktyg såsom Bloodhound[1] eller liknande, utan behöver köra något enklare och mer windowsnativt.

Förhandskrav

Skriptet använder Powershell-modulerna:

ActiveDirectory-modulen kräver installation av RSAT-verktyget för ADDS[2]. Detta görs (på moderna Windows) på inställningssidan för valfria funktioner:


Därefter kan man som admin köra kommandot:

ImportExcel-modulen kan hämtas och installeras via kommandot:

Om man ska köra skriptet på icke internetansluten dator eller av annan anledning föredrar manuell installation, finns en länk till modulfilen på PowerShell Gallery via länk i referens [3].

Anpassa/köra skriptet

I princip går det att bara köra skriptet som det är på en dator medlem i den domän som ska granskas, så länge förhandskraven är uppfyllda och då framför allt att AD-modulen fungerar.

Det rekommenderas dock starkt att köra som eleverad användare för att undvika konstiga resultat. Av någon anledning tillåts exempelvis inte vanliga användare använda flaggan ”enabled” i just filtret i kommandot Get-ADUser, även om man får läsa den i övrigt. Givetvis kan det även finnas behörighetsbegränsningar satta i organisationen som ger en administratör bättre möjligheter att få ut mer kompletta resultat.

Tips på anpassningar:

Om Excel-fil med samma sökväg/namn redan finns läggs det till en ny flik med dagens datum till den gamla filen. På så sätt kan man ha historik från tidigare körningar i samma fil. För csv-filerna innehåller filnamnet aktuellt datum istället.

Exempel

Min demokörning gav resultatet nedan.


Kolumnen ”Nästling” visar hur medlemskap leder fram till den aktuella slutgruppen i Gruppnamn-kolumnen. Om Nästling-kolumnen är tom har användaren direkt medlemskap i den aktuella gruppen. Övriga kolumner förklarar sig själva.

I standard AD-verktygen ser användaren Rick Astleys medlemskap vid första anblick rätt ointressant ut om man inte tittar vidare, men i den genererade listan kan man exempelvis lätt kan se att Rick är medlem i fler grupper som på olika sätt indirekt ger honom åtkomst till SuperDuperDomänAdmin-kontot. Så även om man exempelvis skulle ta bort hans medlemskap i Testgrupp 1, som via Testgrupp 2 leder till Domänadmin, så leder fortfarande medlemskapet i Testgrupp 3 till samma behörighet via två olika vägar.

Här visas en av vägarna man lätt hittar i den skriptgenererade listan:



Det något friskt kommenterade skriptet finns att ladda ned här:


Eller kopiera texten här och klistra in i egen ps1-fil:


Referenser

  1. BloodHound https://github.com/BloodHoundAD/BloodHound
  2. Microsoft ActiveDirectory Powershell Module
    https://learn.microsoft.com/en-us/powershell/module/activedirectory/?view=windowsserver2022-ps
  3. ImportExcel Powershell Module
    https://www.powershellgallery.com/packages/ImportExcel/