Schützen abgeleiteter Domänenanmeldeinformationen mit Credential Guard

Die in Windows 10 Enterprise eingeführte Überwachung von Anmeldeinformationen verwendet die virtualisierungsbasierte Sicherheit, um geheime Schlüssel zu isolieren, damit nur privilegierte Systemsoftware darauf zugreifen kann. Ein nicht autorisierter Zugriff auf diese geheimen Schlüssel kann zu Angriffen mit dem Ziel des Diebstahls von Anmeldeinformationen, z. B. Pass-the-Hash oder Pass-The-Ticket, führen.

Die Überwachung von Anmeldeinformationen bietet die folgenden Features und Lösungen:

  • Hardware-Sicherheit Mit Credential Guard wird mithilfe von Plattformsicherheitsfeatures wie Sicherer Start und Virtualisierung die Sicherheit von abgeleiteten Anmeldeinformationen für Domänen erhöht.

  • Virtualisierungsbasierte Sicherheit Windows-Dienste, die abgeleitete Domänenanmeldeinformationen verwalten, können in einer geschützten Umgebung isoliert vom Betriebssystem ausgeführt werden.

  • Verbesserter Schutz gegen fortgeschrittene dauerhafte Bedrohungen Durch das Sichern von abgeleiteten Domänenanmeldeinformationen mit der virtualisierungsbasierten Sicherheit werden die Verfahren und Tools für den Diebstahl von Anmeldeinformationen blockiert, die bei vielen gezielten Angriffen eingesetzt werden. Im Betriebssystem ausgeführte Schadsoftware mit Administratorberechtigungen kann geheime Schlüssel, die durch die virtualisierungsbasierte Sicherheit geschützt sind, nicht extrahieren. Auch wenn Credential Guard eine leistungsstarke Lösung darstellt, werden für dauerhafte Bedrohungen neue Angriffstechniken eingesetzt werden, und Sie sollten daher auch Device Guard und andere Sicherheitsstrategien und -architekturen einbinden.

  • Verwaltbarkeit Sie können die Überwachung von Anmeldeinformationen mit Gruppenrichtlinien, mit WMI, aus einer Befehlszeile und mit Windows PowerShell verwalten.

Funktionsweise

Die Überwachung von Anmeldeinformationen isoliert geheime Schlüssel, die von früheren Windows-Versionen in der lokalen Sicherheitsautorität (Local Security Authority, LSA) mit virtualisierungsbasierter Sicherheit gespeichert wurden. Vor Windows 10 hat die LSA geheime Schlüssel, die vom Betriebssystem verwendet werden, im Prozessspeicher gespeichert. Mit Credential Guard kommuniziert der LSA-Prozess im Betriebssystem mit einer neuen Komponente, die als isolierter LSA-Prozess bezeichnet wird und in der diese geheimen Schlüssel gespeichert und geschützt werden. Im isolierten LSA-Prozess gespeicherte Daten werden durch die virtualisierungsbasierte Sicherheit geschützt, und das restliche Betriebssystem kann darauf nicht zugreifen. Die LSA verwendet Remoteprozeduraufrufe, um mit dem isolierten LSA-Prozess zu kommunizieren.

Aus Sicherheitsgründen hostet der isolierte LSA-Prozess keine Gerätetreiber. Stattdessen enthält er nur eine kleine Teilmenge der Binärdateien des Betriebssystems, die für die Sicherheit nötig sind, und sonst nichts. Alle diese Binärdateien werden mit einem Zertifikat signiert, dem die virtualisierungsbasierte Sicherheit vertraut, und diese Signaturen werden vor dem Starten der Datei in der geschützten Umgebung überprüft.

Credential Guard lässt außerdem ältere Varianten von NTLM- und Kerberos-Authentifizierungsprotokollen bei Verwendung von abgeleiteten Standardanmeldeinformationen, z. B. NTLMv1 und MS-CHAPv2, sowie schwächere Kerberos-Verschlüsselungsarten, z. B. DES, nicht zu.

Im Folgenden finden Sie eine grobe Übersicht darüber, wie die LSA mit der virtualisierungsbasierten Sicherheit isoliert wird:

Mt483740.credguard(de-de,VS.85).png

Neue und geänderte Funktionen

Informationen zu neuen oder geänderten Informationen in Credential Guard finden Sie unter Was ist neu in Credential Guard?.

Hardware- und Softwareanforderungen

Der PC muss die folgenden Hardware- und Softwareanforderungen für die Verwendung der Überwachung von Anmeldeinformationen erfüllen:

Anforderung Beschreibung

Windows 10 Enterprise

Auf dem PC muss Windows 10 Enterprise ausgeführt werden.

UEFI Firmware Version 2.3.1 oder höher sowie „Sicherer Start”

Um sicherzustellen, dass die Firmware UEFI Version 2.3.1 oder höher und den sicherer Start verwendet, können Sie sie mit der Windows-Hardwarekompatibilitätsprogramm-Anforderung System.Fundamentals.Firmware.CS.UEFISecureBoot.ConnectedStandby überprüfen.

Virtualisierungserweiterungen

Die folgenden Virtualisierungserweiterungen sind zur Unterstützung der virtualisierungsbasierten Sicherheit nötig:

  • Intel VT-x oder AMD-V
  • Adressübersetzung der zweiten Ebene

x64-Architektur

Die Features, die die virtualisierungsbasierte Sicherheit im Windows-Hypervisor verwendet, können nur auf einem 64-Bit-PC ausgeführt werden.

Eine VT-d- oder AMD Vi IOMMU (Input/Output Memory Management Unit, Speicherverwaltungseinheit für die Ein-/Ausgabe)

In Windows 10 verbessert eine IOMMU die Systemresilienz gegenüber Angriffen auf den Arbeitsspeicher. ¹

Trusted Platform Module (TPM) Version 1.2 oder 2.0

TPM 1.2 und 2.0 bieten Schutz für Verschlüsselungsschlüssel, die in der Firmware gespeichert sind. TPM 1.2 wird unter Windows 10 (Build 10240) nicht unterstützt. Unter Windows 10, Version 1511 (Build 10586) und höher ist diese Unterstützung aber vorhanden.

Hinweis  Wenn Sie kein TPM installiert haben, ist Credential Guard trotzdem aktiviert, aber die Schlüssel zum Verschlüsseln von Credential Guard werden nicht durch das TPM geschützt.
 

Prozess für ein sicheres Firmwareupdate

Um sicherzustellen, dass die Firmware dem sicheren Firmwareupdateprozess entspricht, können Sie sie mit der Windows-Hardwarekompatibilitätsprogramm-Anforderung System.Fundamentals.Firmware.UEFISecureBoot überprüfen.

Die Firmware wird für die Sichere MOR-Implementierung aktualisiert.

Für Credential Guard wird das sichere MOR-Bit benötigt, um bestimmte Speicherangriffe zu verhindern.

Physischer PC

Auf PCs unter Windows 10 kann Credential Guard nicht auf einem virtuellen Computer ausgeführt werden.

 

¹ Falls Sie in der Gruppenrichtlinieneinstellung die Option Sicherer Start und DMA-Schutz auswählen, ist eine IOMMU erforderlich. Die Gruppenrichtlinienoption Sicherer Start aktiviert die Überwachung von Anmeldeinformationen auf Geräten ohne eine IOMMU.

Verwalten der Überwachung von Anmeldeinformationen

Die Überwachung von Anmeldeinformationen verwendet virtualisierungsbasierte Sicherheitsfunktionen, die Sie auf allen PCs aktivieren müssen, bevor Sie sie verwenden können.

Aktivieren der Überwachung von Anmeldeinformationen mithilfe von Gruppenrichtlinien

Sie können mit Gruppenrichtlinien Credential Guard aktivieren, da hiermit die virtualisierungsbasierten Sicherheitsfunktionen hinzugefügt werden.

  1. Navigieren Sie aus der Gruppenrichtlinien-Verwaltungskonsole zu Computerkonfiguration -> Administrative Vorlagen -> System -> Device Guard.

  2. Doppelklicken Sie auf Virtualisierungsbasierte Sicherheit aktivieren, und klicken Sie dann auf die Option Aktiviert.

  3. Wählen Sie im Feld Plattform-Sicherheitsstufe auswählen Sicherer Start oder Sicherer Start und DMA-Schutz aus.

  4. Klicken Sie im Feld Credential Guard-Konfiguration auf Mit UEFI-Sperre aktiviert, und klicken Sie dann auf OK. Wenn Sie die Möglichkeit zur Remotedeaktivierung von Credential Guard haben möchten, wählen Sie Ohne Sperre aktiviert aus.

    Mt483740.CredGuard_GP(de-de,VS.85).png

  5. Schließen Sie die Gruppenrichtlinien-Verwaltungskonsole.

Hinzufügen der Überwachung von Anmeldeinformationen zu einem Image

Wenn Sie Credential Guard für ein Image hinzufügen möchten, fügen Sie die virtualisierungsbasierten Sicherheitsfunktionen hinzu, und aktivieren Sie dann Credential Guard.

Hinzufügen der virtualisierungsbasierten Sicherheitsfunktionen

Zuerst müssen Sie die virtualisierungsbasierten Sicherheitsfunktionen hinzufügen. Hierzu können Sie entweder die Systemsteuerung oder das DISM-Tool (Deployment Image Servicing and Management, Abbildverwaltung für die Bereitstellung verwenden.

Hinweis  Wenn Sie die Überwachung von Anmeldeinformationen über Gruppenrichtlinien aktivieren, sind diese Schritte nicht nötig. Die Gruppenrichtlinien installieren die Funktionen für Sie.

 

Mt483740.wedge(de-de,VS.85).gifHinzufügen der virtualisierungsbasierten Sicherheitsfunktionen mit „Programme und Funktionen”

  1. Öffnen Sie in der Systemsteuerung „Programme und Funktionen”.

  2. Klicken Sie auf die Option Windows-Funktionen ein- oder ausschalten.

  3. Aktiveren Sie das Kontrollkästchen Isolierter Benutzermodus.

  4. Wählen Sie Hyper-V -> Hyper-V-Plattform, und aktivieren Sie dann das Kontrollkästchen Hyper-V-Hypervisor.

  5. Klicken Sie auf OK.

Mt483740.wedge(de-de,VS.85).gifHinzufügen der virtualisierungsbasierten Sicherheitsfunktionen zu einem Offlineimage mit DISM

  1. Öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten.

  2. Fügen Sie den Hyper-V-Hypervisor mit dem folgenden Befehl hinzu:

    dism /image:<WIM file name> /Enable-Feature /FeatureName:Microsoft-Hyper-V-Hypervisor
    
  3. Fügen Sie den isolierten Benutzermodus mit dem folgenden Befehl hinzu:

    dism /image:<WIM file name> /Enable-Feature /FeatureName:IsolatedUserMode
    

Hinweis  

Sie können diese Features auch einem Onlineimage hinzufügen, indem Sie entweder DISM oder Configuration Manager nutzen.

 

Aktivieren der Überwachung von Anmeldeinformationen

Wenn Sie keine Gruppenrichtlinien verwenden, können Sie die Überwachung von Anmeldeinformationen in der Registrierung aktivieren.

Mt483740.wedge(de-de,VS.85).gifAktivieren der Überwachung von Anmeldeinformationen in der Registrierung

  1. Öffnen Sie den Registrierungs-Editor.

  2. Aktivieren Sie die virtualisierungsbasierte Sicherheit:

    • Suchen Sie den Eintrag HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\DeviceGuard.

    • Fügen Sie einen neuen DWORD-Wert mit dem Namen EnableVirtualizationBasedSecurity hinzu. Legen Sie den Wert dieser Registrierungseinstellung auf 1 fest, um die virtualisierungsbasierte Sicherheit zu aktivieren, und legen Sie den Wert auf 0 fest, um sie zu deaktivieren.

    • Fügen Sie einen neuen DWORD-Wert mit dem Namen RequirePlatformSecurityFeatures hinzu. Legen Sie den Wert dieser Registrierungseinstellung auf 1 fest, um nur Sicherer Start zu verwenden, oder legen Sie ihn auf 2 fest, um Sicherer Start und DMA-Schutz zu verwenden.

  3. Aktivieren Sie die Überwachung von Anmeldeinformationen:

    • Suchen Sie den Eintrag HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA.

    • Fügen Sie einen neuen DWORD-Wert mit dem Namen LsaCfgFlags hinzu. Legen Sie den Wert dieser Registrierungseinstellung auf 1 fest, um Credential Guard mit UEFI-Sperre zu aktivieren. Legen Sie ihn auf 2 fest, um Credential Guard ohne Sperre zu aktivieren, und legen Sie ihn zum Deaktivieren auf 0 fest.

  4. Schließen Sie den Registrierungs-Editor.

Hinweis  

Sie können Credential Guard auch aktivieren, indem Sie die Registrierungseinträge in der Einstellung FirstLogonCommands für die unbeaufsichtigte Installation festlegen.

 

Entfernen der Überwachung von Anmeldeinformationen

Wenn Sie die Überwachung von Anmeldeinformationen auf einem PC entfernen möchten, müssen Sie die folgenden Schritte ausführen:

  1. Wenn Sie Gruppenrichtlinien verwendet haben, deaktivieren Sie die Gruppenrichtlinien-Einstellung, die Sie für die Aktivierung der Überwachung von Anmeldeinformationen verwendet haben (Computerkonfiguration -> Administrative Vorlagen -> System -> Device Guard -> Virtualisierungsbasierte Sicherheit aktivieren).

  2. Löschen Sie die folgende Registrierungseinstellung: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\DeviceGuard\LsaCfgFlags

  3. Löschen Sie die EFI-Variablen der Überwachung von Anmeldeinformationen mithilfe von bcdedit.

Mt483740.wedge(de-de,VS.85).gifLöschen der EFI-Variablen der Überwachung von Anmeldeinformationen

  1. Geben Sie an einer Eingabeaufforderung mit erhöhten Rechten folgende Befehle ein:

    mountvol X: /s
    copy %WINDIR%\System32\SecConfig.efi X:\EFI\Microsoft\Boot\SecConfig.efi /Y
    bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader
    bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "\EFI\Microsoft\Boot\SecConfig.efi"
    bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}
    bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO
    bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=X:
    mountvol X: /d
    
  2. Starten Sie den PC neu.

  3. Stimmen Sie der Aufforderung zum Deaktivieren der Überwachung von Anmeldeinformationen zu.

  4. Alternativ können Sie die virtualisierungsbasierten Sicherheitsfunktionen deaktivieren, um die Überwachung von Anmeldeinformationen zu deaktivieren.

Hinweis  

Der PC benötigt einen einmaligen Zugriff auf einen Domänencontroller zur Entschlüsselung des Inhalts, z. B. Dateien, die mit EFS verschlüsselt wurden.

Wenn Sie Credential Guard und die virtualisierungsbasierte Sicherheit deaktivieren möchten, führen Sie den folgenden bcdedit-Befehl aus, nachdem Sie alle virtualisierungsbasierten Sicherheitsgruppenrichtlinien und Registrierungseinstellungen deaktiviert haben:

bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO,DISABLE-VBS

Weitere Informationen zur virtualisierungsbasierten Sicherheit und Device Guard finden Sie im Bereitstellungshandbuch für Device Guard.

 

Überprüfen, ob die Überwachung von Anmeldeinformationen ausgeführt wird

Über Systeminformationen können Sie sicherstellen, dass die Überwachung von Anmeldeinformationen auf einem PC ausgeführt wird.

  1. Klicken Sie auf Starten, geben Sie msinfo32.exe ein, und klicken Sie dann auf Systeminformationen.

  2. Klicken Sie auf Systemübersicht.

  3. Überprüfen Sie, ob Überwachung von Anmeldeinformationen neben Device Guard – ausgeführte Sicherheitsdienste angezeigt wird.

    Beispiel:

    Mt483740.CredGuard_MSInfo32(de-de,VS.85).png

Aspekte bei der Verwendung der Überwachung von Anmeldeinformationen

  • Wenn die Überwachung von Anmeldeinformationen auf einem Gerät aktiviert wird, nachdem es einer Domäne beigetreten ist, können die geheimen Schlüssel der Benutzer und Geräte bereits beeinträchtigt worden sein. Aktivieren Sie deshalb die Überwachung von Anmeldeinformationen, bevor der PC einer Domäne beitritt.

  • Sie sollten regelmäßige Überprüfungen der PCs durchführen, für die die Überwachung von Anmeldeinformationen aktiviert ist. Dies kann mit Sicherheitsüberwachungsrichtlinien oder WMI-Abfragen erfolgen. Suchen Sie nach den folgenden WinInit-Ereignis-IDs:

    • Ereignis-ID 13 Die Überwachung von Anmeldeinformationen(LsaIso.exe) wurde gestartet und schützt LSA-Anmeldeinformationen.

    • Ereignis-ID 14 Konfiguration der Überwachung von Anmeldeinformationen (LsaIso.exe): 0x1, 0

      • Der erste Variable, 0x1, bedeutet, dass Credential Guard für die Ausführung konfiguriert ist. 0x0 bedeutet, dass er nicht für die Ausführung konfiguriert ist.
      • Die zweite Variable, 0, bedeutet, dass die Überwachung von Anmeldeinformationen für die Ausführung im geschützten Modus konfiguriert ist. 1 bedeutet, dass sie für die Ausführung im Testmodus konfiguriert ist. Diese Variable sollte immer 0 sein.
    • Ereignis-ID 15 Die Überwachung von Anmeldeinformationen(LsaIso.exe) ist konfiguriert, aber der sichere Kernel wird nicht ausgeführt; es wird ohne die Überwachung von Anmeldeinformationen fortgefahren.

    • Ereignis-ID 16 Die Überwachung von Anmeldeinformationen (LsaIso.exe) konnte nicht gestartet werden: [Fehlercode]

    • Ereignis-ID 17 Fehler beim Lesen der UEFI-Konfiguration der Überwachung von Anmeldeinformationen (LsaIso.exe): [Fehlercode]

    Sie können auch sicherstellen, dass TPM für den Schlüsselschutz verwendet wird, indem Sie unter der Ereignisquelle Microsoft -> Windows -> Kernel-Boot das folgende Ereignis überprüfen. Wenn die Ausführung mit einem TPM erfolgt, hat der Wert der TPM-PCR-Maske einen anderen Wert als 0.

    • Ereignis-ID 51 VSM-Masterverschlüsselungsschlüssel. Der Status der zwischengespeicherten Kopie wird verwendet: 0x0. Die Versiegelung des Status der zwischengespeicherten Kopie wird aufgehoben: 0x1. Status der Generierung des neuen Schlüssels: 0x1. Versiegelungsstatus: 0x1. TPM-PCR-Maske: 0x0.
  • Kennwörter sind weiterhin unsicher. Wir empfehlen Ihnen daher, in Ihrer Organisation anstelle von Kennwörtern Credential Guard und andere Authentifizierungsmethoden zu verwenden, z. B. physische Smartcards, virtuelle Smartcards, Microsoft Passport oder Microsoft Passport for Work.

  • Einige Drittanbieter von Sicherheitsunterstützung (Security Support Provider, SSPs und Zugriffspunkte) sind möglicherweise nicht kompatibel mit der Überwachung von Anmeldeinformationen. Credential Guard erlaubt Drittanbieter-SSPs nicht, Kennworthashes von LSA abzufragen. SSPs und Zugriffspunkte werden aber weiterhin über das Kennwort informiert, wenn sich ein Benutzer anmeldet bzw. sein Kennwort ändert. Die Verwendung von undokumentierten APIs in benutzerdefinierten SSPs und Zugriffspunkten wird nicht unterstützt. Testen Sie benutzerdefinierte Implementierungen von SSPs/Zugriffspunkten für Credential Guard, um sicherzustellen, dass die SSPs und Zugriffspunkte nicht von undokumentierten oder nicht unterstützten Verhaltensweisen abhängig sind. Beispielsweise wird die Verwendung der KerbQuerySupplementalCredentialsMessage-API nicht unterstützt. Sie sollten die NTLM- oder Kerberos-SSPs nicht durch benutzerdefinierte SSPs und Zugriffspunkte ersetzen. Weitere Informationen finden Sie unter Beschränkungen für das Registrieren und Installieren eines Sicherheitspakets auf der MSDN-Website.

  • Da die Tiefe und der Umfang der Schutzmaßnahmen, die die Überwachung von Anmeldeinformationen bereitstellt, erweitert werden, können nachfolgende Versionen von Windows 10 mit Überwachung von Anmeldeinformationen Szenarien beeinträchtigen, die in der Vergangenheit funktioniert haben. Möglicherweise blockiert die Überwachung von Anmeldeinformationen die Verwendung eines bestimmten Typs von Anmeldeinformationen oder eine bestimmte Komponente, damit Schadsoftware keine Sicherheitslücken ausnutzen kann. Daher sollten Sie Szenarien, die für Vorgänge in einer Organisation wichtig sind, vor dem Upgrade eines Geräts, auf dem die Überwachung von Anmeldeinformationen ausgeführt wird, testen.

  • Wenn Sie WLAN und auf MS-CHAPv2 basierende VPN-Endpunkte verwenden, können diese von ähnlichen Angriffen wie NTLMv1 betroffen sein. Verwenden Sie in Ihrer Organisation eine zertifikatsbasierte Authentifizierung für WLAN- und VPN-Verbindungen.

  • Ab Windows 10, Version 1511, werden Domänenanmeldeinformationen, die mit der Anmeldeinformationsverwaltung gespeichert werden, per Credential Guard geschützt. Mit der Anmeldeinformationsverwaltung können Sie Anmeldeinformationen speichern, z. B. Benutzernamen und Kennwörter, mit denen Sie sich auf Websites oder auf anderen Computern im Netzwerk anmelden. Für den Credential Guard-Schutz für die Anmeldeinformationsverwaltung sollten Sie Folgendes berücksichtigen:

    • Von Remotedesktopdiensten gespeicherte Anmeldeinformationen können nicht für die Remoteverbindung mit einem anderen Computer verwendet werden, ohne das Kennwort anzugeben.

    • Anwendungen, die abgeleitete Domänenanmeldeinformationen aus der Anmeldeinformationsverwaltung extrahieren, können diese Anmeldeinformationen nicht mehr verwenden.

    • Sie können Anmeldeinformationen nicht mit der Systemsteuerung der Anmeldeinformationsverwaltung wiederherstellen, wenn diese von einem PC gesichert wurden, auf dem Credential Guard aktiviert ist. Wenn Sie Ihre Anmeldeinformationen sichern müssen, müssen Sie Folgendes tun, bevor Sie Credential Guard aktivieren. Andernfalls können Sie diese Anmeldeinformationen nicht wiederherstellen.

Nicht durch Credential Guard geschützte Szenarien

Einige Methoden zum Speichern von Anmeldeinformationen sind nicht durch die Überwachung von Anmeldeinformationen geschützt, zum Beispiel:

  • Software, mit der Anmeldeinformationen außerhalb des Schutzes durch Windows-Features verwaltet werden

  • Lokale Konten und Microsoft-Konten

  • Ein Windows Server 2016 Technical Preview-Server, auf dem bestimmte Serverrollen, wie z. B. ein Domänencontroller oder ein Remotedesktopgateway, ausgeführt werden. Wenn Sie einen Windows Server 2016 Technical Preview-Server als Client-PC verwenden, erhält er den gleichen Schutz, als ob Windows 10 Enterprise ausgeführt würde.

  • Keylogger

  • Physische Angriffe

  • Verhindert nicht, dass ein Angreifer mit Schadsoftware auf dem PC die Anmeldeinformationen zugeordneten Privilegien verwendet. Verwenden Sie dedizierte PCs für hochwertige Konten, z. B. IT-Spezialisten und Benutzer mit Zugriff auf hochwertige Ressourcen in Ihrer Organisation.

Weitere Risikominderungen

Credential Guard kann das Risiko von Angriffen auf abgeleitete Anmeldeinformationen mindern und die Verwendung von gestohlenen Anmeldeinformationen an anderer Stelle verhindern. PCs können aber trotzdem anfällig für bestimmte Angriffe sein, auch wenn die abgeleiteten Anmeldeinformationen durch Credential Guard geschützt werden. Zu diesen Angriffen zählen der Missbrauch von Berechtigungen und die Verwendung von abgeleiteten Anmeldeinformationen direkt von einem manipulierten Gerät, die erneute Verwendung von vor dem Einsatz von Device Guard gestohlenen Anmeldeinformationen sowie der Missbrauch von Verwaltungstools und unsichere Anwendungskonfigurationen. Aus diesem Grund müssen noch weitere Risikominderungen bereitgestellt werden, um die Domänenumgebung stabiler zu machen.

Angriffe mit dem Ziel des Diebstahls von Anmeldeinformationen ermöglichen dem Angreifer geheime Schlüssel von einem Gerät zu stehen und auf einem anderen Gerät zu verwenden. Durch die Bereitstellung von Authentifizierungsrichtlinien mit Verbundauthentifizierung in Windows Server 2012 R2 oder höheren Domänen können Benutzer auf die Anmeldung nur bei bestimmten Geräten, die in die Domäne eingebunden sind, beschränkt werden. Da Geräte zudem gemeinsame geheime Schlüssel für die Authentifizierung verwenden, können Angreifer diese Schlüssel auch stehlen. Durch die Bereitstellung von Gerätezertifikaten mit Überwachung von Anmeldeinformationen können Authentifizierungsrichtlinien erfordern, dass das Gerät sich mit dem privaten Schlüssel authentifiziert. Dies verhindert, dass gemeinsame geheime Schlüssel auf gestohlenen Geräten mit gestohlenen Benutzerkennwörtern oder geheimen Kerberos-Schlüsseln verwendet werden, um eine Benutzeranmeldung vorzunehmen.

Für eine Gerätezertifikatauthentifizierung ist Folgendes erforderlich:

  • Gerätedomänen sind Windows Server 2012 oder höher, und alle Domänencontroller haben Zertifikate, die eine strenge KDC-Überprüfung erfüllen (erweiterte Schlüsselverwendung für das KDC vorhanden und die DNS-Domänennamen entsprechen dem Feld DNSName der Erweiterung SubjectAltName (SAN)).

  • Windows 10-Geräte haben die Zertifizierungsstelle, die die Domänencontrollerzertifikate im Unternehmensspeicher ausstellt.

  • Ein Prozess wird eingerichtet, um die Identität und die Vertrauenswürdigkeit des Geräts auf ähnliche Weise sicherzustellen, wie Sie die Identität und Vertrauenswürdigkeit eines Benutzers feststellen würden, bevor Sie ihm eine Smartcard zuweisen.

Weitere Gruppenrichtlinieneinstellungen

Es gibt einige Gruppenrichtlinieneinstellungen, die Sie aktivieren können, um Anmeldeinformationen besser vor Angriffen zu schützen:

  • Konfigurieren Sie auf den Domänencontrollern mit Gruppenrichtlinien die KDC-Unterstützung für Ansprüche, Verbundauthentifizierung und Kerberos-Schutz. Legen Sie die Gruppenrichtlinieneinstellung Unterstützung des Kerberos-Domänencontrollers für Ansprüche, Verbundauthentifizierung und Kerberos-Schutz auf Unterstützt oder Immer Ansprüche liefern fest.

  • Auf Geräten mit Windows 10 können Sie diese Einstellung auch mit Gruppenrichtlinien aktivieren. Aktivieren Sie dazu die Gruppenrichtlinieneinstellungen Unterstützung des Kerberos-Clients für Ansprüche, Verbundauthentifizierung und Kerberos-Schutz & Verbundauthentifizierung immer zuerst senden unter Computerkonfiguration -> Administrative Vorlagen -> System -> Kerberos.

Verbundauthentifizierung

Die Verbundauthentifizierung fügt während der Authentifizierung bei der Domäne und den Ressourcen die Identität des Geräts der Identität des Benutzers hinzu. Ohne Verbundauthentifizierung werden nur die geheimen Schlüssel des Benutzers überprüft. Bei der Verbundauthentifizierung muss der Kerberos-Client über die geheimen Schlüssel des Benutzers und des Geräts verfügen.

Durch Aktivierung der Verbundauthentifizierung wird auch der Kerberos-Schutz ermöglicht, der zwei weitere Vorteile bietet:

  • Die Benutzerauthentifizierung auf Geräten mit Domänenzugehörigkeit wird geschützt. Dies bedeutet, dass Aufzeichnungen von Netzwerkaktivitäten die verschlüsselte erste Kerberos-Authentifizierung enthalten. Ohne den entsprechenden Geräteschlüssel sind Kerberos AS-REQs vor Offline-Wörterbuchangriffen geschützt.

  • KDC-Fehler sind signiert, was Schutz vor Fehlerspoofingangriffen bietet.

Bereitstellen von Computerzertifikaten

Wenn auf den Domänencontrollern in Ihrer Organisation Windows Server 2016 Technical Preview ausgeführt wird, registrieren Geräte mit Windows 10 automatisch ein Computerzertifikat, sofern die Überwachung von Anmeldeinformationen aktiviert ist und der PC der Domäne beigetreten ist.

Wenn auf den Domänencontrollern Windows Server 2012 R2 ausgeführt wird, müssen die Computerzertifikate manuell auf jedem Gerät bereitgestellt werden. Hierzu können Sie eine Zertifikatvorlage auf dem Domänencontroller oder der Zertifizierungsstelle erstellen und die Computerzertifikate auf jedem Gerät bereitstellen.

Die Sicherheitsverfahren für das Ausstellen von Smartcards für Benutzer sollten auch auf Computerzertifikate angewendet werden.

  1. Klicken Sie in der Zertifikatverwaltungs-Konsole mit der rechten Maustaste auf Zertifikatvorlagen, und klicken Sie dann auf Verwalten.

  2. Klicken Sie mit der rechten Maustaste auf Arbeitsstationsauthentifizierung, und klicken Sie dann auf Vorlage duplizieren.

  3. Klicken Sie mit der rechten Maustaste auf die neue Vorlage, und klicken Sie dann auf Eigenschaften.

  4. Klicken Sie auf der Registerkarte Erweiterungen auf Anwendungsrichtlinien und dann auf Bearbeiten.

  5. Klicken Sie auf Clientauthentifizierung und dann auf Entfernen.

  6. Fügen Sie die ID-PKInit-KPClientAuth EKU hinzu. Klicken Sie auf Hinzufügen, klicken Sie auf Neu, und geben Sie dann die folgenden Werte an:

    • Name: Kerberos Client Auth

    • Objekt-ID: 1.3.6.1.5.2.3.4

  7. Klicken Sie auf der Registerkarte Erweiterungen auf Ausstellungsrichtlinien und dann auf Bearbeiten.

  8. Klicken Sie unter Ausstellungsrichtlinien auf Hohe Zusicherung.

  9. Deaktivieren Sie auf der Registerkarte Antragstellername das Kontrollkästchen DNS-Name, und aktiveren Sie dann das Kontrollkästchen Benutzerprinzipalname (UPN).

Registrieren Sie auf Geräten, auf denen die Überwachung von Anmeldeinformationen ausgeführt wird, die Geräte mit dem Computerauthentifizierungszertifikat, indem Sie den folgenden Befehl ausführen:

CertReq -EnrollCredGuardCert MachineAuthentication

Hinweis  

Sie müssen das Gerät nach der Registrierung des Computerauthentifizierungszertifikats neu starten.

 

Verknüpfen der Ausstellungsrichtlinien mit einer Gruppe

Mit einer Authentifizierungsrichtlinie können Sie sicherstellen, dass Benutzer sich nur an Geräten anmelden, auf denen die Überwachung von Anmeldeinformationen ausgeführt wird. Bevor Sie die Authentifizierungsrichtlinie bereitstellen, müssen Sie aber zuerst eine Reihe von Skripts zur Einrichtung Ihrer Umgebung ausführen.

  • Das Skript get-IssuancePolicy.ps1 zeigt alle Ausstellungsrichtlinien, die bei der Zertifizierungsstelle verfügbar sind.

    Führen Sie in der Windows PowerShell-Eingabeaufforderung den folgenden Befehl aus:

    .\get-IssuancePolicy.ps1 –LinkedToGroup:All
    
  • Das Skript set-IssuancePolicyToGroupLink.ps1 erstellt eine universelle Sicherheitsgruppe sowie eine Organisationseinheit und verknüpft die Ausstellungsrichtlinie mit dieser universellen Sicherheitsgruppe.

    Führen Sie in der Windows PowerShell-Eingabeaufforderung den folgenden Befehl aus:

    .\set-IssuancePolicyToGroupLink.ps1 –IssuancePolicyName:”<name of issuance policy>” –groupOU:”<Name of OU to create>” –groupName:”<name of Universal security group to create>”
    

Bereitstellen der Authentifizierungsrichtlinie

Bevor Sie die Authentifizierungsrichtlinie einrichten, protokollieren Sie jeden fehlgeschlagenen Versuch, eine Authentifizierungsrichtlinie auf dem KDC anzuwenden. Navigieren Sie hierzu in der Ereignisanzeige zu Anwendungs- und Dienstprotokolle\Microsoft\Windows\Authentifizierung, klicken Sie mit der rechten Maustaste auf AuthenticationPolicyFailures-DomainController, und klicken Sie dann auf Protokoll aktivieren.

Jetzt können Sie eine Authentifizierungsrichtlinie für die Verwendung der Überwachung von Anmeldeinformationen einrichten.

Mt483740.wedge(de-de,VS.85).gifSo fügen Sie eine Authentifizierungsrichtlinie für die Überwachung von Anmeldeinformationen hinzu

  1. Stellen Sie sicher, dass Ihre Domänencontroller mindestens Windows Server 2012 R2 als Domänenfunktionsebene ausführen.

  2. Erstellen Sie eine Sicherheitsgruppe, mit der die PCs identifiziert werden, auf die diese Authentifizierungsrichtlinie angewendet wird.

  3. Fügen Sie dieser Sicherheitsgruppe das Computerkonto hinzu.

  4. Öffnen Sie das Active Directory-Verwaltungscenter.

  5. Klicken Sie auf Authentifizierung, klicken Sie auf Neu, und klicken Sie dann auf Authentifizierungsrichtlinie.

  6. Geben Sie in das Feld Anzeigename einen Namen für diese Authentifizierungsrichtlinie ein.

  7. Klicken Sie unter der Überschrift Konten auf Hinzufügen.

  8. Geben Sie im Dialogfeld Benutzer-, Computer- oder Dienstkonten auswählen den Namen des Benutzerkontos ein, und klicken Sie dann auf OK.

  9. Klicken Sie unter der Überschrift Benutzer auf die Schaltfläche Bearbeiten für das Benutzerkonto.

  10. Klicken Sie auf Bedingung hinzufügen.

  11. Überprüfen Sie, ob im Feld Zugriffssteuerungsbedingungen bearbeiten Benutzer > Gruppe > Mitglied von allen Elementen > Wert enthalten ist, und klicken Sie dann auf Elemente hinzufügen.

  12. Geben Sie im Dialogfeld Benutzer-, Computer- oder Dienstkonten auswählen den Namen der Sicherheitsgruppe ein, die Sie mit dem Skript set-IssuancePolicyToGroupLink erstellt haben, und klicken Sie dann auf OK.

  13. Klicken Sie auf OK, um das Feld Zugriffssteuerungsbedingungen bearbeiten zu schließen.

  14. Klicken Sie auf OK, um die Authentifizierungsrichtlinie zu erstellen.

  15. Schließen Sie das Active Directory-Verwaltungscenter.

Hinweis  

Wenn Authentifizierungsrichtlinien im Erzwingungsmodus mit Credential Guard bereitgestellt werden, können sich Benutzer nicht über Geräte anmelden, auf denen das Computerauthentifizierungszertifikat nicht bereitgestellt ist. Dies gilt für die lokale und die Remoteanmeldung.

 

Anhang: Skripts

Im Folgenden finden Sie eine Liste von Skripts, die in diesem Thema beschrieben werden.

Ermitteln der verfügbaren Ausstellungsrichtlinien für die Zertifizierungsstelle

Speichern Sie diese Skriptdatei unter dem Namen get-IssuancePolicy.ps1.

#######################################
##     Parameters to be defined      ##
##     by the user                   ##
#######################################

Param (
$Identity,
$LinkedToGroup
)

#######################################
##     Strings definitions           ##
#######################################
Data getIP_strings {
# culture=\"en-US\"
ConvertFrom-StringData -stringdata @'
help1 = This command can be used to retrieve all available Issuance Policies in a forest. The forest of the currently logged on user is targetted.
help2 = Usage:
help3 = The following parameter is mandatory:
help4 = -LinkedToGroup:<yes|no|all>
help5 = "yes" will return only Issuance Policies that are linked to groups. Checks that the linked Issuance Policies are linked to valid groups.
help6 = "no" will return only Issuance Policies that are not currently linked to any group. 
help7 = "all" will return all Issuance Policies defined in the forest. Checks that the linked Issuance policies are linked to valid groups.
help8 = The following parameter is optional:
help9 = -Identity:<Name, Distinguished Name or Display Name of the Issuance Policy that you want to retrieve>. If you specify an identity, the option specified in the "-LinkedToGroup" parameter is ignored.
help10 = Output: This script returns the Issuance Policy objects meeting the criteria defined by the above parameters.
help11 = Examples:
errorIPNotFound = Error: no Issuance Policy could be found with Identity "{0}"
ErrorNotSecurity = Error: Issuance Policy "{0}" is linked to group "{1}" which is not of type "Security".
ErrorNotUniversal = Error: Issuance Policy "{0}" is linked to group "{1}" whose scope is not "Universal".
ErrorHasMembers = Error: Issuance Policy "{0}" is linked to group "{1}" which has a non-empty membership. The group has the following members:
LinkedIPs = The following Issuance Policies are linked to groups:
displayName = displayName : {0}
Name = Name : {0}
dn = distinguishedName : {0}
        InfoName = Linked Group Name: {0} 
        InfoDN = Linked Group DN: {0}   
NonLinkedIPs = The following Issuance Policies are NOT linked to groups:
'@
}

##Import-LocalizedData getIP_strings


import-module ActiveDirectory


#######################################
##           Help                    ##
#######################################

function Display-Help {

    ""
    $getIP_strings.help1
    ""
$getIP_strings.help2
""
$getIP_strings.help3
"     " + $getIP_strings.help4
"             " + $getIP_strings.help5
    "             " + $getIP_strings.help6
    "             " + $getIP_strings.help7
""
$getIP_strings.help8
    "     " + $getIP_strings.help9
    ""
    $getIP_strings.help10
""
""    
$getIP_strings.help11
    "     " + '$' + "myIPs = .\get-IssuancePolicy.ps1 -LinkedToGroup:All"
    "     " + '$' + "myLinkedIPs = .\get-IssuancePolicy.ps1 -LinkedToGroup:yes"
    "     " + '$' + "myIP = .\get-IssuancePolicy.ps1 -Identity:""Medium Assurance"""
""
}


$root = get-adrootdse
$domain = get-addomain -current loggedonuser
$configNCDN = [String]$root.configurationNamingContext


if ( !($Identity) -and !($LinkedToGroup) ) {
display-Help
break
}

if ($Identity) {
    $OIDs = get-adobject -Filter {(objectclass -eq "msPKI-Enterprise-Oid") -and ((name -eq $Identity) -or (displayname -eq $Identity) -or (distinguishedName -like $Identity)) } -searchBase $configNCDN -properties *

    if ($OIDs -eq $null) {
$errormsg = $getIP_strings.ErrorIPNotFound -f $Identity
write-host $errormsg -ForegroundColor Red
    }
    
    foreach ($OID in $OIDs) {
    
        if ($OID."msDS-OIDToGroupLink") {
            # In case the Issuance Policy is linked to a group, it is good to check whether there is any problem with the mapping.
            $groupDN = $OID."msDS-OIDToGroupLink"
            $group = get-adgroup -Identity $groupDN
    $groupName = $group.Name
            
            # Analyze the group
            if ($group.groupCategory -ne "Security") {
$errormsg = $getIP_strings.ErrorNotSecurity -f $Identity, $groupName
                write-host $errormsg -ForegroundColor Red
            }
            if ($group.groupScope -ne "Universal") {
                $errormsg = $getIP_strings.ErrorNotUniversal -f $Identity, $groupName
write-host $errormsg -ForegroundColor Red
            }
            $members = Get-ADGroupMember -Identity $group
            if ($members) {
                $errormsg = $getIP_strings.ErrorHasMembers -f $Identity, $groupName
write-host $errormsg -ForegroundColor Red
                foreach ($member in $members) {
                    write-host "          "  $member -ForeGroundColor Red
                }
            }
        }
        
    }
    return $OIDs
    break
}

if (($LinkedToGroup -eq "yes") -or ($LinkedToGroup -eq "all")) {
    $LDAPFilter = "(&(objectClass=msPKI-Enterprise-Oid)(msDS-OIDToGroupLink=*)(flags=2))"
    $LinkedOIDs = get-adobject -searchBase $configNCDN -LDAPFilter $LDAPFilter -properties *

    write-host ""    
    write-host "*****************************************************"
    write-host $getIP_strings.LinkedIPs
    write-host "*****************************************************"
    write-host ""
    if ($LinkedOIDs -ne $null){
      foreach ($OID in $LinkedOIDs) {
  
          # Display basic information about the Issuance Policies
          ""
  $getIP_strings.displayName -f $OID.displayName
  $getIP_strings.Name -f $OID.Name
  $getIP_strings.dn -f $OID.distinguishedName
       
          
          # Get the linked group.
          $groupDN = $OID."msDS-OIDToGroupLink"
          $group = get-adgroup -Identity $groupDN
          $getIP_strings.InfoName -f $group.Name
          $getIP_strings.InfoDN -f $groupDN
          
          # Analyze the group
          $OIDName = $OID.displayName
    $groupName = $group.Name
          if ($group.groupCategory -ne "Security") {
          $errormsg = $getIP_strings.ErrorNotSecurity -f $OIDName, $groupName
          write-host $errormsg -ForegroundColor Red
          }
          if ($group.groupScope -ne "Universal") {
          $errormsg = $getIP_strings.ErrorNotUniversal -f $OIDName, $groupName
          write-host $errormsg -ForegroundColor Red
          }
          $members = Get-ADGroupMember -Identity $group
          if ($members) {
          $errormsg = $getIP_strings.ErrorHasMembers -f $OIDName, $groupName
          write-host $errormsg -ForegroundColor Red
              foreach ($member in $members) {
                  write-host "          "  $member -ForeGroundColor Red
              }
          }
          write-host ""
      }
    }else{
write-host "There are no issuance policies that are mapped to a group"
    }
    if ($LinkedToGroup -eq "yes") {
        return $LinkedOIDs
        break
    }
}    

if (($LinkedToGroup -eq "no") -or ($LinkedToGroup -eq "all")) {  
    $LDAPFilter = "(&(objectClass=msPKI-Enterprise-Oid)(!(msDS-OIDToGroupLink=*))(flags=2))"
    $NonLinkedOIDs = get-adobject -searchBase $configNCDN -LDAPFilter $LDAPFilter -properties *

    write-host ""    
    write-host "*********************************************************"
    write-host $getIP_strings.NonLinkedIPs
    write-host "*********************************************************"
    write-host ""
    if ($NonLinkedOIDs -ne $null) {
      foreach ($OID in $NonLinkedOIDs) {

# Display basic information about the Issuance Policies
write-host ""
$getIP_strings.displayName -f $OID.displayName
$getIP_strings.Name -f $OID.Name
$getIP_strings.dn -f $OID.distinguishedName
write-host ""
      }
    }else{
write-host "There are no issuance policies which are not mapped to groups"
    }
    if ($LinkedToGroup -eq "no") {
        return $NonLinkedOIDs
        break
    }
}

Hinweis  

Wenn bei der Ausführung dieses Skripts Probleme auftreten, sollten Sie das einfache Anführungszeichen nach dem Parameter ConvertFrom-StringData ersetzen.

 

Verknüpfen einer Ausstellungsrichtlinie mit einer Gruppe

Speichern Sie die Skriptdatei unter dem Namen set-IssuancePolicyToGroupLink.ps1.

#######################################
##     Parameters to be defined      ##
##     by the user                   ##
#######################################

Param (
$IssuancePolicyName,
$groupOU,
$groupName
)

#######################################
##     Strings definitions           ##
#######################################

Data ErrorMsg {
# culture=\"en-US\"
ConvertFrom-StringData -stringdata @'
help1 = This command can be used to set the link between a certificate issuance policy and a universal security group.
help2 = Usage:
help3 = The following parameters are required:
help4 = -IssuancePolicyName:<name or display name of the issuance policy that you want to link to a group>
help5 = -groupName:<name of the group you want to link the issuance policy to>. If no name is specified, any existing link to a group is removed from the Issuance Policy.
help6 = The following parameter is optional:
help7 = -groupOU:<Name of the Organizational Unit dedicated to the groups which are linked to issuance policies>. If this parameter is not specified, the group is looked for or created in the Users container.
help8 = Examples:
help9 = This command will link the issuance policy whose display name is "High Assurance" to the group "HighAssuranceGroup" in the Organizational Unit "OU_FOR_IPol_linked_groups". If the group or the Organizational Unit do not exist, you will be prompted to create them.
help10 = This command will unlink the issuance policy whose name is "402.164959C40F4A5C12C6302E31D5476062" from any group.
MultipleIPs = Error: Multiple Issuance Policies with name or display name "{0}" were found in the subtree of "{1}"
NoIP = Error: no issuance policy with name or display name "{0}" could be found in the subtree of "{1}".
IPFound = An Issuance Policy with name or display name "{0}" was successfully found: {1}
MultipleOUs = Error: more than 1 Organizational Unit with name "{0}" could be found in the subtree of "{1}".
confirmOUcreation = Warning: The Organizational Unit that you specified does not exist. Do you want to create it?
OUCreationSuccess = Organizational Unit "{0}" successfully created.
OUcreationError = Error: Organizational Unit "{0}" could not be created.
OUFoundSuccess = Organizational Unit "{0}" was successfully found.
multipleGroups = Error: More than one group with name "{0}" was found in Organizational Unit "{1}".  
confirmGroupCreation = Warning: The group that you specified does not exist. Do you want to create it?
groupCreationSuccess = Univeral Security group "{0}" successfully created.
groupCreationError = Error: Univeral Security group "{0}" could not be created.
GroupFound = Group "{0}" was successfully found.
confirmLinkDeletion = Warning: The Issuance Policy "{0}" is currently linked to group "{1}". Do you really want to remove the link?
UnlinkSuccess = Certificate issuance policy successfully unlinked from any group.
UnlinkError = Removing the link failed.
UnlinkExit = Exiting without removing the link from the issuance policy to the group.
IPNotLinked = The Certificate issuance policy is not currently linked to any group. If you want to link it to a group, you should specify the -groupName option when starting this script.
ErrorNotSecurity = Error: You cannot link issuance Policy "{0}" to group "{1}" because this group is not of type "Security".
ErrorNotUniversal = Error: You cannot link issuance Policy "{0}" to group "{1}" because the scope of this group is not "Universal".
ErrorHasMembers = Error: You cannot link issuance Policy "{0}" to group "{1}" because it has a non-empty membership. The group has the following members:
ConfirmLinkReplacement = Warning: The Issuance Policy "{0}" is currently linked to group "{1}". Do you really want to update the link to point to group "{2}"?
LinkSuccess = The certificate issuance policy was successfully linked to the specified group.
LinkError = The certificate issuance policy could not be linked to the specified group.
ExitNoLinkReplacement = Exiting without setting the new link.
'@
}

# import-localizeddata ErrorMsg

function Display-Help {
""
write-host $ErrorMsg.help1
""
write-host $ErrorMsg.help2
""
write-host $ErrorMsg.help3
write-host "`t" $ErrorMsg.help4
write-host "`t" $ErrorMsg.help5
""
write-host $ErrorMsg.help6
write-host "`t" $ErrorMsg.help7
""
""
write-host $ErrorMsg.help8
""
write-host $ErrorMsg.help9
".\Set-IssuancePolicyToGroupMapping.ps1 -IssuancePolicyName ""High Assurance"" -groupOU ""OU_FOR_IPol_linked_groups"" -groupName ""HighAssuranceGroup"" "
""
write-host $ErrorMsg.help10
'.\Set-IssuancePolicyToGroupMapping.ps1 -IssuancePolicyName "402.164959C40F4A5C12C6302E31D5476062" -groupName $null '
""
}



# Assumption:  The group to which the Issuance Policy is going 
#              to be linked is (or is going to be created) in 
#              the domain the user running this script is a member of.
import-module ActiveDirectory
$root = get-adrootdse
$domain = get-addomain -current loggedonuser


if ( !($IssuancePolicyName) ) {
display-Help
break
}

#######################################
##     Find the OID object           ##
##     (aka Issuance Policy)         ##
#######################################

$searchBase = [String]$root.configurationnamingcontext
$OID = get-adobject -searchBase $searchBase -Filter { ((displayname -eq $IssuancePolicyName) -or (name -eq $IssuancePolicyName)) -and (objectClass -eq "msPKI-Enterprise-Oid")} -properties *

if ($OID -eq $null) {
$tmp = $ErrorMsg.NoIP -f $IssuancePolicyName, $searchBase  
write-host $tmp -ForeGroundColor Red
break;
}
elseif ($OID.GetType().IsArray) {
$tmp = $ErrorMsg.MultipleIPs -f $IssuancePolicyName, $searchBase  
write-host $tmp -ForeGroundColor Red
break;
}
else {
$tmp = $ErrorMsg.IPFound -f $IssuancePolicyName, $OID.distinguishedName
write-host $tmp -ForeGroundColor Green
}



#######################################
##  Find the container of the group  ##
#######################################

if ($groupOU -eq $null) {
# default to the Users container
$groupContainer = $domain.UsersContainer
} 
else {
$searchBase = [string]$domain.DistinguishedName
$groupContainer = get-adobject -searchBase $searchBase -Filter { (Name -eq $groupOU) -and (objectClass -eq "organizationalUnit")}
if ($groupContainer.count -gt 1) {
$tmp = $ErrorMsg.MultipleOUs -f $groupOU, $searchBase
write-host $tmp -ForegroundColor Red
break;
}
elseif ($groupContainer -eq $null) {
$tmp = $ErrorMsg.confirmOUcreation
write-host $tmp " ( (y)es / (n)o )" -ForegroundColor Yellow -nonewline
$userChoice = read-host
if ( ($userChoice -eq "y") -or ($userChoice -eq "yes") ) {
new-adobject -Name $groupOU -displayName $groupOU -Type "organizationalUnit" -ProtectedFromAccidentalDeletion $true -path $domain.distinguishedName
if ($?){
$tmp = $ErrorMsg.OUCreationSuccess -f $groupOU
write-host $tmp -ForegroundColor Green
}
else{
$tmp = $ErrorMsg.OUCreationError -f $groupOU
write-host $tmp -ForeGroundColor Red 
break;
}
$groupContainer = get-adobject -searchBase $searchBase -Filter { (Name -eq $groupOU) -and (objectClass -eq "organizationalUnit")}
}
else {
break;
}
}
else {
$tmp = $ErrorMsg.OUFoundSuccess -f $groupContainer.name
write-host $tmp -ForegroundColor Green
}
}

#######################################
##  Find the group               ##
#######################################

if (($groupName -ne $null) -and ($groupName -ne "")){
##$searchBase = [String]$groupContainer.DistinguishedName
$searchBase = $groupContainer
$group = get-adgroup -Filter { (Name -eq $groupName) -and (objectClass -eq "group") } -searchBase $searchBase
if ($group -ne $null -and $group.gettype().isarray) {
$tmp = $ErrorMsg.multipleGroups -f $groupName, $searchBase
write-host $tmp -ForeGroundColor Red
break;
}
elseif ($group -eq $null) {
$tmp = $ErrorMsg.confirmGroupCreation
write-host $tmp " ( (y)es / (n)o )" -ForegroundColor Yellow -nonewline
$userChoice = read-host
if ( ($userChoice -eq "y") -or ($userChoice -eq "yes") ) {
new-adgroup -samAccountName $groupName -path $groupContainer.distinguishedName -GroupScope "Universal" -GroupCategory "Security"
if ($?){
$tmp = $ErrorMsg.GroupCreationSuccess -f $groupName
write-host $tmp -ForegroundColor Green
}else{
$tmp = $ErrorMsg.groupCreationError -f $groupName
write-host $tmp -ForeGroundColor Red 
break
}
$group = get-adgroup -Filter { (Name -eq $groupName) -and (objectClass -eq "group") } -searchBase $searchBase
}
else {
break;
}
}
else {
$tmp = $ErrorMsg.GroupFound -f $group.Name
write-host $tmp -ForegroundColor Green
}
} 
else {
## If the group is not specified, we should remove the link if any exists
if ($OID."msDS-OIDToGroupLink" -ne $null) {
$tmp = $ErrorMsg.confirmLinkDeletion -f $IssuancePolicyName, $OID."msDS-OIDToGroupLink"
write-host $tmp " ( (y)es / (n)o )" -ForegroundColor Yellow -nonewline
$userChoice = read-host
if ( ($userChoice -eq "y") -or ($userChoice -eq "yes") ) {
set-adobject -Identity $OID -Clear "msDS-OIDToGroupLink"
if ($?) {
$tmp = $ErrorMsg.UnlinkSuccess
write-host $tmp -ForeGroundColor Green
}else{
$tmp = $ErrorMsg.UnlinkError
write-host $tmp -ForeGroundColor Red
}
} 
else { 
$tmp = $ErrorMsg.UnlinkExit
write-host $tmp
break 
}
}
else {
$tmp = $ErrorMsg.IPNotLinked
write-host $tmp -ForeGroundColor Yellow
}
break;
}


#######################################
##  Verify that the group is         ##
##  Universal, Security, and         ## 
##  has no members                   ##
#######################################

if ($group.GroupScope -ne "Universal") {
$tmp = $ErrorMsg.ErrorNotUniversal -f $IssuancePolicyName, $groupName
write-host $tmp -ForeGroundColor Red
break;
}
if ($group.GroupCategory -ne "Security") {
$tmp = $ErrorMsg.ErrorNotSecurity -f $IssuancePolicyName, $groupName
write-host $tmp -ForeGroundColor Red
break;
}
$members = Get-ADGroupMember -Identity $group
if ($members -ne $null) {
$tmp = $ErrorMsg.ErrorHasMembers -f $IssuancePolicyName, $groupName
write-host $tmp -ForeGroundColor Red
foreach ($member in $members) {write-host "   $member.name" -ForeGroundColor Red}
break;
}


#######################################
##  We have verified everything. We  ##
##  can create the link from the     ## 
##  Issuance Policy to the group.    ##
#######################################

if ($OID."msDS-OIDToGroupLink" -ne $null) {
$tmp = $ErrorMsg.ConfirmLinkReplacement -f $IssuancePolicyName, $OID."msDS-OIDToGroupLink", $group.distinguishedName
write-host $tmp  "( (y)es / (n)o )" -ForegroundColor Yellow -nonewline
$userChoice = read-host
if ( ($userChoice -eq "y") -or ($userChoice -eq "yes") ) {
$tmp = @{'msDS-OIDToGroupLink'= $group.DistinguishedName}
set-adobject -Identity $OID -Replace $tmp
if ($?) {
$tmp = $Errormsg.LinkSuccess
write-host $tmp -Foreground Green
}else{
$tmp = $ErrorMsg.LinkError
write-host $tmp -Foreground Red
}
} else { 
$tmp = $Errormsg.ExitNoLinkReplacement
write-host $tmp
break 
}
}
else {
$tmp = @{'msDS-OIDToGroupLink'= $group.DistinguishedName}
set-adobject -Identity $OID -Add $tmp
if ($?) {
$tmp = $Errormsg.LinkSuccess
write-host $tmp -Foreground Green
}else{
$tmp = $ErrorMsg.LinkError
write-host $tmp -Foreground Red
}
}

Hinweis  

Wenn bei der Ausführung dieses Skripts Probleme auftreten, sollten Sie das einfache Anführungszeichen nach dem Parameter ConvertFrom-StringData ersetzen.

 

Verwandte Themen

Isolierter Benutzermodus in Windows 10 mit Dave Probert (Channel 9)

Isolierte Benutzermodusprozesse und -Features in Windows 10 mit Logan Gabriel (Channel 9)

Informationen zu Prozessen und Features im isolierten Benutzermodus von Windows 10 mit Dave Probert (Channel 9)

Verringern des Risikos des Diebstahls von Anmeldeinformationen mit dem isolierten Benutzermodus von Windows 10 (Channel 9)

Aktivieren der strengen KDC-Überprüfung in Windows-Kerberos

Neuerungen in der Kerberos-Authentifizierung für Windows Server 2012

Schrittweise Anleitung zur Authentifizierungsmechanismussicherung für AD DS unter Windows Server 2008 R2

Trusted Platform Module