Health & Security
Ein gut funktionierendes Environment ist die Basis für ein reibungsloses Business.
Aus diesem Grund sollten regelmäßige Checks laufen, um den guten und gesunden Zustand im Netzwerk weiterhin aufrecht erhalten zu können.
Frühzeitig erkannte Probleme oder Fehlerkonfigurationen vermeiden unnötige Betriebsstörungen.
Folgende Komponenten sollten bei einem turnusmäßigen Check-up berücksichtig werden
Gruppenrichtlinien:
Mit dem Skript GP_Link_Reporter bekommen wir einen detaillierten Bericht über die vorhandenen Gruppenrichtlinien und deren Verlinkung.
Skript Download: GP_Link_Reporter
Mit dem Befehl Backup-GPO -All -Path C:\GPOBackup erstellen wir ein Backup unserer Gruppenrichtlinien.
Prüfen als nächstes ob der Pfad zu den Gruppenrichtlinienvorlagen erreichbar ist.
Test-Path \\dwp.local\SYSVOL\dwp.local\Policies\PolicyDefinitions
Prüfen die Konsistenz des Ordners SysVol > Jetzt ermitteln
Prüfen mit dem Tool Get-WinADDFSHealth den DFS Zustand.
Geprüft werden könnte auch die Konfiguration zur automatischen DFSR-Wiederherstellung. Normalerweise ist diese Option deaktiviert, um Datenverlust durch nicht synchronisierten Upstreams zu vermeiden.
Get-ItemProperty “HKLM:\SYSTEM\CurrentControlSet\Services\DFSR\Parameters\” | select StopReplicationOnAutoRecovery
Prüfen der Gruppenrichtlinien und der Owner-Eigenschaften.
Get-GPO -All | Select DisplayName,Owner
oder mit dem Powershell-Skript Get-NetGPO
Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | select ObjectDN, IdentityReference, ActiveDirectoryRights > C:\Temp\GP_Permissions.txt
Der PolicyAnalyzer hilft dabei zu prüfen, ob die Microsoft Empfehlungen zur Härtung eingesetzt wurden.
Verwaiste Gruppenrichtlinie aufspüren
Skript Download: verwaistegpos
Die Kennwortrichtlinie sollte auch überprüft werden. Eventuell sind die Anforderungen mittlerweile auch zu schwach. Dann empfehle ich den Anixis Passwor Policy Enforcer.
Domänen-Controller:
Halten die vorhandenen Domain Controller auch den GlobalCatalog und wie sind die Details?
Get-ADDomainController -Filter * | Select Domain,Name,IPv4Address,IsGlobalCatalog,Site,OperatingSystem
Nicht verwendete Netzwerkadapter sollten deaktiviert werden.
netsh interface ipv4 show interfaces
Sind die DNS-Server auch über Kreuz eingetragen?
netsh interface ipv4 show dnsservers
Kontroller der Event-Logs auf Fehler oder Warnungen
Welche Windows Dienste laufen?
Get-Service | where {$_.Status -eq “Running”}
Welche Dienste laufen mit Dienstkosten wie z.B. System oder Netzwerk?
Get-WmiObject win32_service | where {($_.startname -ne “LocalSystem”) -and ($_.startname -ne “NT AUTHORITY\NetworkService”) -and ($_.startname -ne “NT AUTHORITY\NETWORK SERVICE”) -and ($_.startname -ne “NT AUTHORITY\LocalService”) } | FT name, startname, startmode
Sind noch alle installierten Windows Feature im Einsatz?
Import-Module ServerManager
Get-WindowsFeature | Where-Object {$_. installstate -eq “installed”} | Format-List Name,Installstate
Welche Drittanbieter Software ist noch installiert, ist diese aktuell und wird sie noch benötigt?
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | select DisplayName,Publisher,InstallDate | Sort DisplayName
Das DSRM Kennwort falls nicht mehr bekannt sollte geändert werden.
Ist die Zeit korrekt eingestellt und der Provider?
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\ | select Type, NtpServer
w32tm /query /status
w32tm /query /configuration
Die Replikationsüberprüfung eines der wichtigsten Instrumente!
dcdiag /v /c /d /e /s:DC_Name
dcdiag /e /test:DNS /DNSAll
repadmin /queue
repadmin /replsummary
repadmin /showrepl
Get-ADReplicationFailure -Target dwp.local -Scope Domain
Nicht benötige Dienste sollte nach dem NIST-Standard deaktiviert werden.
https://nvd.nist.gov/ncp/repository
Active Directory
Zuerst erstellen wir eine kurze Zusammenfassung.
Skript Download: Domain_Audit_Summary.
Dann kann man einen Schnappschuss der AD-Objekte erstellen. Dient zum späteren Vergleich.
https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer
Überprüfung der Tombstone-Lifetime
Überprüfen ob es Konten gibt die zur Anmeldung noch nicht eingesetzt wurden. Prüfen und bei Bedarf deaktivieren
Get-ADUser -Filter {(lastlogontimestamp -notlike “*”) -and (enabled -eq $true)} | Select Name,DistinguishedName
Überprüfen welche Kennwörter nicht ablaufen. Bei Bedarf anpassen.
Get-ADUser -filter * -properties Name, PasswordNeverExpires | where { $_.passwordNeverExpires -eq “true” } | where {$_.enabled -eq “true”} | fl Name,SamAccountName,PasswordNeverExpires
Überprüfen der Group Managed Services Accounts. Werden noch alle benötigt?
Get-ADServiceAccount -Filter * -Properties *
Überprüfung der Accounts die durch den AdminSDHolder geschützt werden.
Get-ADUser -filter {AdminCount -eq 1} -Properties * | select Name,DistinguishedName,LastLogonDate,Enabled,PasswordNeverExpires,MemberOf
Welche Benutzer oder Gruppen mit dem Namen *admin* bestehen eigentlich?
Get-ADUser -Filter {name -like “*adm*”} -Properties name | Select-Object Name
Get-ADGroup -Filter {name -like “*adm*”} -Properties name | Select-Object Name
Prüfen der Gruppenmitgliedschaften von privilegierten Gruppen!
Get-NetGroup “Enterprise Admins” | Get-NetGroupMember | Select GroupName,MemberName
Get-NetGroup “Schema Admins” | Get-NetGroupMember | Select GroupName,MemberName
Get-NetGroup “Domain Admins” | Get-NetGroupMember | Select GroupName,MemberName
Get-NetGroup “Administrators” | Get-NetGroupMember | Select GroupName,MemberName
Get-NetGroup “Backup Operators” | Get-NetGroupMember | Select GroupName,MemberName
Get-NetGroup “Account Operators” | Get-NetGroupMember | Select GroupName,MemberName
Get-NetGroup “DNS Admins” | Get-NetGroupMember | Select GroupName,MemberName
Get-NetGroup “Print Operators” | Get-NetGroupMember | Select GroupName,MemberName
Get-NetGroup “Server Operators” | Get-NetGroupMember | Select GroupName,MemberName
Get-NetGroup “Group Policy Creator Owners” | Get-NetGroupMember | Select GroupName,MemberName
Get-NetGroup “Protected Users” | Get-NetGroupMember | Select GroupName,MemberName
Nicht mehr benutze AD-Konten ermitteln und bei Bedarf löschen. Natürlich auch delegierte Admin Konten.
Domain Name System
Replikationspartitionen prüfen
dnscmd /enumzones
Überprüfen der bedingten Weiterleitungen (Conditonal forwarders). Bei Bedarf entfernen.
Get-DnsServerZone
Ist das Scavenging Interval eingestellt?
dnscmd DC1 /info
Dann prüfen wir noch, ob NetBios auf den Netzwerkkarten deaktiviert ist
Weitere wichtige Prüfungen
Sind auf allen Maschinen die Protokolle LLMNR, WDigest, LM & NTLM auth deaktiviert? Am Besten lässt sich das über eine Gruppenrichtlinie umsetzen und steuern.
Ist LAPS Local Administrator Password Solution ausgerollt, um die Kennwörter der lokalen Administratoren zu steuern?
Ist die Powershell aktuell? Mindestens v5 oder höher aktuell 7.1.1. Sind die Ausführungsrichtlinien korrekt gesetzt?
msiexec.exe /package PowerShell-7.1.1-win-x64.msi /quiet ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1
Überprüfen aller SPNs Service Principal Names. Gibt es doppelte oder verwaiste Einträge?
Download Skript: Check all SPNs
Ist das KRBTGT Kennwort seit der Installation der Domäne schon einmal zurückgesetzt worden?
Wurde das schwache SMBv1 Protokoll domänenweit deaktiviert?
Ist Bitlocker oder eine Alternative auf den Clientsystemen zum Schutz ausgerollt worden?
Wird das Prinzip Least Privilege umgesetzt. Arbeit ein Administrator wirklich mit mindestens 2 unterschiedlichen Accounts?
Wird neben dem Passwort auch Multi-Faktor eingesetzt, z.B. zur Anmeldung an Windows Servern oder schützenswerten Applikationen?
Wurde die Firewall auf Windows Servern und Clientsystemen angepasst bzw. überprüft?
Wird Credential Guard zur Isolierung von LSASS benötigt?