Teilen:

Microsoft Security Kompakt – wichtige Tipps in Kürze (Teil 4)

GPO-Chaos: Dein stilles Sicherheitsleck

Gruppenrichtlinien (GPOs) sind eines der mächtigsten Werkzeuge in Active Directory. Sie steuern alles – von Passwortrichtlinien über Firewall-Einstellungen bis hin zu Software-Deployments.

Doch in vielen Umgebungen sind GPOs ein gewachsenes Chaos:

  • Jahrzehnte alte Richtlinien wurden nie gelöscht
  • Vererbungen sind unübersichtlich
  • Sicherheitsfilter fehlen oder sind falsch gesetzt
  • Legacy-Einstellungen öffnen Angreifern Tür und Tor

Was als Ordnungsinstrument gedacht war, wird so schnell zum Sicherheitsleck.

Typische Risiken durch GPOs

  • Verwaiste GPOs
  • – GPOs, die an keine OU, Site oder Domain mehr gebunden sind

    – Enthalten oft noch unsichere Einstellungen (z. B. alte Skripte oder Registry Keys)

  • Fehlende Sicherheitsfilterung
  • – GPO wirkt auf mehr Systeme oder Benutzer als nötig
    – Angreifer profitieren von zu breiter Anwendung

  • Komplexe Vererbung
  • – Verschachtelte OUs + „Block Inheritance“ + „Enforced“ = niemand weiß mehr, was wirklich greift

  • Unsichere Legacy-Settings
  • – Alte Passwort-Policies (LM/NTLMv1 zulassen)

    – Unsichere Anmeldeskripte

    – Offen konfigurierte Firewall-Regeln

Schritt 1: Überblick schaffen

Alle GPOs auflisten

Get-GPO -All | Select-Object DisplayName, CreationTime, ModificationTime

GPO-Gesamtbericht erzeugen (HTML)


Get-GPOReport -All -ReportType HTML -Path "C:\Temp\AllGPOs.html"

Ergebnis: Komplette Übersicht aller Richtlinien in einem HTML-Bericht.

Schritt 2: Verwaiste (“unlinked”) GPOs identifizieren

Variante A – sauber per XML analysieren


$reports = Get-GPO -All | ForEach-Object {
  [pscustomobject]@{
    Guid = $_.Id
    Name = $_.DisplayName
    Xml  = [xml](Get-GPOReport -Guid $_.Id -ReportType Xml)
  }
}

$unlinked = $reports | Where-Object { -not $_.Xml.GPO.LinksTo }
$unlinked | Select-Object Name, Guid | Sort-Object Name | Format-Table -AutoSize


Variante B – Quick & Dirty (Stringsuche)


Get-GPO -All | Where-Object {
  -not (Get-GPOReport -Guid $_.Id -ReportType Xml | Select-String '')
} | Select-Object DisplayName, Id | Sort-Object DisplayName

Schritt 3: Sicherheitsfilterung prüfen

Standardfehler: “Authenticated Users” hat Apply-Rechte → GPO greift breit
Besser: Nur benötigte Gruppen oder Computer gezielt berechtigen

Berechtigungen (Security Filtering) anzeigen


Get-GPPermission -Guid  -All | Select-Object Trustee, Permission, Type

Prüfen, ob „Authenticated Users“ noch Apply-Rechte hat:


$gpo = '<GPO-GUID-HIER>'
Get-GPPermission -Guid $gpo -All |
  Where-Object { $_.Trustee.Name -eq 'Authenticated Users' } |
  Select-Object Trustee, Permission, Type

Schritt 4: Unsichere Einstellungen bereinigen

  • Kennwortrichtlinien: LM/NTLMv1 deaktivieren; sichere Mindestlänge/Komplexität
  • Skripte: Alte Logon-Skripte (Batch, VBS) ablösen; signierte PowerShell-Skripte, AppLocker/WDAC & ggf. Constrained Language Mode nutzen
  • Firewall: Keine „Any Any“; eingehende Regeln auf das Minimum beschränken, ausgehende Regeln prüfen
  • Registry Settings: Nur dokumentierte, aktuelle Werte verwenden; Altlasten entfernen

Get-GPResultantSetOfPolicy -ReportType Html -Path "C:\Temp\RSOP.html"

# oder klassisch:


gpresult /H C:\Temp\RSOP.html

Best Practices für saubere GPOs

  1. Dokumentation einführen
  2. – Jede GPO braucht einen Owner, Erstellungsdatum, Zweck und Zielgruppe

  3. Namenskonventionen verwenden
  4. – Beispiel:

     SEC-PasswordPolicy, WSUS-Clients, APP-OfficeSettings 
  5. Minimalprinzip anwenden
  6. – Lieber mehrere kleine, gezielte GPOs statt einer „All-in-One-Richtlinie“

  7. Regelmäßige Reviews
  8. – Mindestens jährlich alle GPOs durchgehen, veraltete löschen oder archivieren (Backup + Disabled)

  9. Automatisches Reporting
  10. – Monatliche GPO-Berichte per Scheduled Task generieren und an das Admin-Team senden

Checkliste: GPO-Health-Audit

  • Unlinked GPOs gelöscht oder archiviert
  • Sicherheitsfilterung geprüft – keine unnötige Breite
  • Passwort- und Kerberos-Policies auf aktuelle Standards gesetzt
  • Alte Skripte entfernt oder ersetzt
  • Firewall- und Registry-Einstellungen überprüft
  • Namenskonventionen und Dokumentation umgesetzt

Fazit

Gruppenrichtlinien sind ein Machtinstrument – aber ohne Pflege werden sie schnell zum Sicherheitsrisiko.
Alte, unübersichtliche oder falsch konfigurierte GPOs bieten Angreifern oft einfache Einstiegspunkte.

Mit etwas Konsequenz und den richtigen Cmdlets lässt sich das Chaos schnell in den Griff bekommen – und das AD gewinnt massiv an Stabilität und Sicherheit.

Teilen: