Auslesen der Konfiguration der Zertifizierungsstelle durch unprivilegierte Konten unterbinden

Während Penetration Tests und auch für Angreifer, die das Netzwerk nach potentiellen Angriffszielen durchsuchen, sind Einblicke in die Konfiguration der Zertifizierungsstelle hochinteressant.

Nebst eventuellen Fehlkonfigurationen können Angreifer Informationen über das auf der Zertifizierungsstelle verwendete Policy-Modul erlangen.

Kennen Sie TameMyCerts? TameMyCerts ist ein Add-On für die Microsoft Zertifizierungsstelle (Active Directory Certificate Services). Es erweitert die Funktion der Zertifizierungsstelle und ermöglicht die Anwendung von Regelwerken, um die sichere Automatisierung von Zertifikat-Ausstellungen zu realisieren. TameMyCerts ist einzigartig im Microsoft-Ökosystem, hat sich bereits in unzähligen Unternehmen auf der ganzen Welt bewährt und steht unter einer freien Lizenz. Es kann über GitHub heruntergeladen und kostenlos verwendet werden. Professionelle Wartung wird ebenfalls angeboten.

Welche Zertifizierungsstellen es im Netzwerk gibt, können wir mit der Eingabe von certutil ohne Angabe von Argumenten herausfinden:

certutil

Mit dieser Information können wir uns mit einem weiteren certutil-Befehl die Einstellungen der Zertifizierungsstelle anzeigen lassen:

certutil -v -config "{DNS-Name-CA}\{Common-Name-CA}" -getreg CA

Um die Einstellungen des aktiven Policy Moduls auszulesen kann dieser Befehl verwendet werden:

certutil -v -config "{DNS-Name-CA}\{Common-Name-CA}" -getreg Policy

Hier kann unter Anderem ausgelesen werden, welches Policy Modul eingesetzt wird, und ob auf der Zertifizierungsstelle das hochgefährliche Flag EDITF_ATTRIBUTESUBJECTALTNAME2 gesetzt ist.

Diese Informationen können in der Standardeinstellung von jedem authentifizierten Benutzer im Netzwerk ausgelesen werden.

Eine einfache Methode, das Auslesen der Zertifizierungsstellen-Konfiguration zu unterbinden

Abseits des in Windows integrierten certutil nutzen auch alternative Werkzeuge wie das Penetration-Testing-Tool certipy das ICertAdmin Interface, um an diese Informationen heranzukommen.

Wie wir wissen, ist das ICertAdmin Interface der Zertifizierungsstelle für den täglichen Zertifizierungsstellen-Betrieb nicht erforderlich. Er wird zur Remote-Administration der Zertifizierungsstelle sowie für einige Spezialfälle wie die Installation eines NDES-Servers benötigt.

Bereits im Artikel "Benötigte Firewallregeln für Active Directory Certificate Services" habe ich daher empfohlen, den Zugriff auf diesen Port per Firewall zu unterbinden. Da dieser Port auch für das Dateiserver-Protokoll SMD eingesetzt wird, schließt es somit auch andere Angriffsvektoren (wer erinnert sich noch an WannyCry?).

Die Windows-Firewall hat hierfür eine vordefinierte Regel, die in der Standardeinstellung aktiviert ist. Er kann – da der TCP-Port 445 auch von anderen Diensten (die üblicherweise auf einer Zertifizierungsstelle nichts zu suchen haben) verwendet werden kann – jedoch durch andere Firewallregeln aktiviert sein.

Typischerweise sind dies folgende Firewallregeln:

  • Certification Authority Enrollment and Management Protocol (CERTSVC-RPC-NP-IN)
  • Remote Service Management (NP-In)
  • Netlogon Service (NP-In)
  • File and Printer Sharing (SMB-In)
  • Remote Event Log Management (NP-In)
  • File Server Remote Management (SMB-In)
  • File and Printer Sharing (SMB-In)

Mit einem einfachen PowerShell-Befehl können wir alle lokalen Firewallregeln, die den TCP-Port 445 öffnen finden und deaktivieren.

Get-NetFirewallPortFilter | Where-Object {$_.LocalPort -like "445"} | Disable-NetFirewallRule

Noch besser wäre natürlich eine Netzwerk-Firewall vor der Zertifizierungsstelle zu platzieren. Für die lokale Firewall-Konfiguration einer Zertifizierungsstelle sollte eine Gruppenrichtlinie konfiguriert werden, die grundsätzlich alles außer den absolut notwendigen Ports (siehe hier) blockiert.

Rufen wir unseren Befehl erneut aus, werden wir ins Leere laufen.

CertUtil: -getreg command FAILED: 0x80070035 (WIN32: 53 ERROR_BAD_NETPATH)
CertUtil: The network path was not found.

Weitere Möglichkeit zum Auslesen: Remote-Registrierung

Ein weiterer Weg, die Einstellungen der Zertifizierungsstelle auszulesen ist die Remote-Registrierung, welche in der Standardeinstellung auf jedem Windows Server aktiviert ist.

Eine Remote-Abfrage gegen die Einstellungen auf der Zertifizierungsstelle kann wie folgt erfolgen:

reg query "\\{DNS-Name-CA}\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\{Common-Name-CA}"

Dies kann unter Anderem dadurch unterbunden werden, dass der Dienst "Remote-Registrierung" auf der Zertifizierungsstelle deaktiviert und beendet wird.

Get-Service -Name RemoteRegistry | Set-Service -StartupType Disabled
Get-Service -Name RemoteRegistry | Stop-Service

Einschränkungen

Auch wenn kein Zugriff mehr auf das ICertAdmin Interface und Remote-Registrierung besteht, können einige Informationen – wie etwa zum aktiven Policy Modul – noch ausgelesen werden:

certutil -v -config "{DNS-Name-CA}\{Common-Name-CA}" -CAInfo Policy

Vollständige Isolation der Zertifizierungsstelle

Eine Möglichkeit, das Auslesen der Zertifizierungsstellen-Konfiguration noch weiter einzuschränken wäre, sie komplett vom Netzwerk zu isolieren nur über eine Instanz der Zertifikatbeantragungs-Webdienste zugänglich zu machen. Hierdurch handelt man sich aber eine deutlich erhöhte Komplexität der Infrastruktur und weitere Herausforderungen wie Kerberos-Delegierung ein.

Weiterführende Links:

Externe Quellen

de_DEDeutsch