Granulare Berechtigungen für Server und Clients über Active Directory steuern - mit Gruppenrichtlinien und PowerShell!
Lokale Active Directory-Infrastrukturen sind nach wie vor weit verbreitet und daher ein beliebtes Ziel für Angreifer. Um Angriffsflächen wirkungsvoll zu reduzieren und die Infrastruktur so gegen Angriffe zu härten, gibt es mittlerweile zahlreiche Ratgeber und Artikel. Grob zusammengefasst, lassen sich die Empfehlungen in die folgenden Themenbereiche einteilen:
| Themenbereich | Empfehlung(en) |
|---|---|
| Zero Trust | - Es wird keinem System oder Benutzer pauschal vertraut, alle Zugriffe müssen verifiziert werden. - Benutzername und Kennwort sind für die Authentifizierung nicht mehr ausreichend, es muss eine zusätzliche Verifikation erfolgen (MFA). |
| Sicherheitsebenen | - Systeme werden je nach Kritikalität und Typ in Sicherheitsebenen unterteilt. - Kein Benutzer darf über Berechtigungen verfügen, die über Sicherheitsgrenzen/-ebenen hinweg reichen. |
| Administrationsprinzipien | - Zugriffe dürfen ausschließlich für den notwendigen Zweck eingerichtet bzw. angefordert werden (Minimalprinzip oder auch Just Enough Administration) - Zugriffe dürfen ausschließlich für den erforderlichen Zeitraum eingerichtet bzw. angefordert werden (Minimalprinzip oder auch Just-in-Time Administration) |
Dieser Artikel geht darauf ein, wie Active Directory-Sicherheitsgruppen dazu eingesetzt werden können, um die in der Tabelle genannten Administrationsprinzipien zu unterstützen.
Verfahrensweisen
Standardmäßig wird in einem Active Directory die Gruppe "Domänen-Admins" in die lokale Gruppe "Administratoren" auf jedem Server bzw. Client eingefügt, der in die Domäne aufgenommen wird. Dies wird üblicherweise spätestens im Rahmen der Einführung von Sicherheitsebenen geändert, da die "Domänen-Admins" der Ebene 0 angehören und Mitgliedsserver und Clients in den meisten Fällen einer anderen Ebene zugeordnet werden.
Je nach Sicherheitsanforderungen und ggf. auch Größe der IT-Abteilung des Unternehmens werden Administratoren auf unterschiedliche Weise für den Zugriff berechtigt:
- Kleine Organisationen: Erstellung einer Sicherheitsgruppe pro Ebene und Hinzufügen dieser Gruppe bei allen Systemen einer Ebene über ein Gruppenrichtlinienobjekt (GPO)
- Mittlere Organisationen: Erstellung von Sicherheitsgruppen pro Server/Client und Hinzufügen dieser Gruppen beim jeweiligen System über ein Gruppenrichtlinienobjekt (GPO)
- Große Organisationen: Erstellung von Sicherheitsgruppen pro Serverdienst bzw. Client und Hinzufügen dieser Gruppen beim jeweiligen System über PowerShell Just Enough Administration
Die zweite Variante stellt einen guten Kompromiss dar, da hier Rechte ohne größeren Aufwand individuell pro System vergeben werden können. Allerdings kann es recht aufwändig und fehleranfällig sein, die dafür notwendigen Gruppen manuell anzulegen, da dies bei jeder Neuaufnahme eines Systems berücksichtigt werden muss.
Sehr viel schöner und effizienter ist es, die notwendigen Gruppen automatisiert anlegen zu lassen - und zwar idealerweise bei Aufnahme eines neuen Systems in die Domäne! Dies ist über eine Kombination aus Gruppenrichtlinien und PowerShell problemlos möglich. Und es muss hierzu nichts auf den Geräten installiert werden. Wie das geht? Lies weiter!
Vorbereitungen
Bevor das Skript funktioniert, müssen einige Vorbereitungen getroffen werden. Diese werden in der Folge beschrieben.
Berechtigungen auf Active Directory
Das Skript wird im Kontext des Computerkontos ausgeführt (SYSTEM). Dementsprechend muss das Computerkonto die Berechtigung erhalten, Gruppen im Active Directory zu erstellen. Dies kann über unterschiedliche Wege realisiert werden:
- Verwendung der Standardgruppe "Domänencomputer", in der automatisch alle Computerkonten Mitglied sind
- Erstellung einer eigenen Gruppe (oder auch mehrerer) und Hinzufügen neuer Computerkonten über ein separates und automatisch ablaufendes Skript (das Skript kann bspw. ereignisbasiert ausgeführt werden)
Unabhängig vom Gruppen-Typ werden die notwendigen Berechtigungen wie folgt eingerichtet:

- "Active Directory-Benutzer und -Computer" öffnen
- Zu Organisationseinheit navigieren, in der die Gruppen erstellt werden sollen
- Rechtsklick auf OU, "Objektverwaltung zuweisen..." auswählen
- Die zu berechtigende Gruppe auswählen
- Berechtigung "Erstellt, löscht und verwaltet Gruppen" auswählen oder alternativ nur die gewünschten granularen Berechtigungen über die Option "Benutzerdefinierte Aufgaben..." zuweisen
- Schritte ggf. für weitere OU(s) wiederholen
Skript-Richtlinien
Standardmäßig ist Windows so eingestellt, dass im Kontext des SYSTEM-Kontos nur signierte Skripte ausgeführt werden dürfen. Es ist auch grundsätzlich sinnvoll, dies so beizubehalten. Allerdings muss das Skript dementsprechend digital signiert werden, damit es beim Starten des Computers ausgeführt werden kann.
Hierfür wird ein Zertifikat mit dem Zweck "Codesignatur" benötigt, welches entweder von einer internen oder öffentlichen Zertifizierungsstelle bezogen werden kann. Des Weiteren müssen die Systeme dem Zertifikat vertrauen. Liegt ein entsprechendes Zertifikat vor, kann das Skript wie folgt signiert werden:
# Codesignatur-Zertifikat einlesen
$cert = Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
# Skript signieren
Set-AuthenticodeSignature -FilePath <Pfad>\<zum>\<Skript>.ps1 -Certificate $certPowerShellIn kleineren Umgebungen mag dies nicht möglich sein. In diesem Fall kann die Ausführungsrichtlinie über eine Gruppenrichtlinie so eingestellt werden, dass die Ausführung von Skripten generell erlaubt wird:
Computerkonfiguration > Richtlinien > Administrative Vorlagen > Windows-Komponenten > Windows PowerShell > Skriptausführung aktivieren > Aktiviert, Alle Skripts zulassen
Dies reduziert jedoch die Sicherheit erheblich, da so beliebige Skripte im SYSTEM-Kontext ausgeführt werden können. Daher wird hiervon generell abgeraten.
Skript für automatische Erstellung von Sicherheitsgruppen
Sind alle Voraussetzungen erfüllt, kann das Skript über ein Gruppenrichtlinienobjekt auf alle Computerobjekte ausgerollt werden.
Computerkonfiguration > Richtlinien > Windows-Einstellungen > Skripts (Start/Herunterfahren) > Starten > PowerShell-Skripts > Hinzufügen...
Das vollständige Skript findest Du in meinem Skriptnest. In der Folge wird erklärt, wie das Skript genau funktioniert.
Das Skript muss zunächst wie folgt an die eigene Umgebung angepasst werden:
- Verwendete Sprache im Active Directory.
- Pfade zur Client- und Server-OU.
- Namen der zu erstellenden Rollengruppen und deren Beschreibung. Hier können bei Bedarf nach dem gleichen Schema auch weitere Gruppen ergänzt werden.
Wichtig: der Name der Gruppen MUSS den Namen des Servers enthalten, damit über die Gruppenrichtlinie oder die entsprechende Skript-Funktion eine dynamische/individuelle Zuordnung der Gruppen zum System möglich ist!
# Variables which must be defined manually
$Script:Language = 1 # Choose language: 1=DE 2=EN
$Script:ClientOUPath = 'OU=Workstations,OU=Rollen,OU=Gruppen,OU=ADMINISTRATION,' # Example - modify to your needs
$Script:ServerOUPath = 'OU=Server,OU=Rollen,OU=Gruppen,OU=ADMINISTRATION,' # Example - modify to your needs
# Set groups which should be created - modify groups, names and descriptions to your need
if ($Language -eq 1)
{
# German
$Script:AdminsGroup = 'ROL-SEC-' + $env:COMPUTERNAME + '-Admins'
$Script:AdminsDesc = 'Mitglieder dieser Gruppe erhalten administrativen Zugriff auf dem genannten System'
$Script:LocalAdmGroup = 'Administratoren'
$Script:RDUsersGroup = 'ROL-SEC-' + $env:COMPUTERNAME + '-RD-Benutzer'
$Script:RDUsersDesc= 'Mitglieder dieser Gruppe sind berechtigt, sich via RDP auf dem System anzumelden'
$Script:LocalRDGroup = 'Remotedesktopbenutzer'
}
if ($Language -eq 2)
{
# English
$Script:AdminsGroup = 'ROL-SEC-' + $ENV:ComputerName + '-Admins'
$Script:AdminsDesc = 'Members of this group are assigned administrative permissions for the given system'
$Script:LocalAdmGroup = 'Administrators'
$Script:RDUsersGroup = 'ROL-SEC-' + $env:computername + '-RD-Benutzer'
$Script:RDUsersDesc= 'Members of this group are allowed to login to the given system via RDP'
$Script:LocalRDGroup = 'Remote Desktop Users'
}
# Summarize groups - add groups as needed
$GroupNames = $AdminsGroup,$RDUsersGroup
$GroupDescriptions = $AdminsDesc,$RDUsersDesc
$LocalGroups = $LocalAdmGroup,$LocalRDGroupPowerShellAuf dieser Basis wird dann eine Tabelle erstellt, die im weiteren Verlauf schrittweise durchgearbeitet wird:
# Summarize groups - add groups as needed
$GroupNames = $AdminsGroup,$RDUsersGroup
$GroupDescriptions = $AdminsDesc,$RDUsersDesc
$LocalGroups = $LocalAdmGroup,$LocalRDGroup
# Build table from variables
$Script:AccessGroups = For ($i = 0;$i -lt $GroupNames.Count;$i++)
{
[PSCustomObject]@{
GroupName = $GroupNames[$i]
Description = $GroupDescriptions[$i]
LocalGroup = $LocalGroups[$i]
}
}PowerShellIn der Folge werden einige Funktionen definiert und ausgeführt:
| Funktion | Beschreibung |
|---|---|
| GetADInfo | Stellt Befehle für die Ermittlung der für die Skript-Ausführung notwendigen Informationen aus dem Active Directory auf Basis von in Windows integrierten Funktionen. Auf diese Weise muss kein zusätzliches PowerShell-Modul installiert werden (z.B. die Active Directory-PowerShell). |
| DefineVariables | Ermittelt die notwendigen Informationen aus dem Active Directory und vom System und baut entsprechende Variablen zusammen. |
| CreateGroups | Erstellt die Gruppen in den zuvor definierten Pfaden im Active Directory. |
| NestGroups | OPTIONAL - Verschachtelt die zuvor erstellten Gruppen direkt in die lokalen Gruppen des Systems. Dies kann die Nutzbarkeit beschleunigen, da das Skript nur bei einem (Neu)Start des Systems ausgeführt wird. |
Wurde alles richtig konfiguriert, sollten in der im Skript definierten Organisationseinheit die definierten Sicherheitsgruppen automatisch erstellt werden.
Verschachtelung der neuen Gruppen auf den Systemen
Als letztes ist noch die automatische Verschachtelung der neuen Gruppen auf den Systemen einzurichten. Hierfür kann das gleiche Gruppenrichtlinienobjekt wie für die Ausführung des Skripts verwendet werden. Alternativ kann auch ein anderes GPO verwendet werden, falls die Steuerung lokaler Gruppen bereits über ein anderes GPO (ggf. zentral) gesteuert wird.
Computerkonfiguration > Einstellungen > Systemsteuerungseinstellungen > Lokale Benutzer und Gruppen > Neu > Lokale Gruppe
Gruppenname: <entsprechende lokale Gruppe auswählen>
Beschreibung: <Beschreibung der Gruppe aus dem Active Directory kopieren>.
Mitglieder: Gruppe nicht auswählen, sondern manuell wie folgt in das Feld eingeben:<Domänenname>\<Gruppenname mit Variable für Computernamen>, z.B. MICROWSOFT\ROL-SEC-%COMPUTERNAME%-Admins
Auf diese Weise wird die jeweilige Gruppe beim jeweiligen System dynamisch verschachtelt.
Tipp: Bei der Beschreibung "[GPO] " voranstellen, so dass auf dem System direkt ersichtlich ist, dass die Gruppe über Gruppenrichtlinien gesteuert wird.
Hat Dir der Beitrag gefallen? Lass es andere wissen!

