Das folgende Beispiel schildert eine Lösung für die
Konfiguration von Clients mit Hilfe von Group Policy Preferences und
LDAP-Filtern. Ähnliche Vorgehensweisen können auch für andere Aufgaben
verwendet werden, so kann z.B. die Richtlinieneinstellung Ordner nur auf primären Computern umleiten,
die ab Windows 8 verfügbar ist,
mit den gleichen Methoden auch für ältere Betriebssysteme implementiert werden.
Das Problem
Ab Windows Vista wird für Kerberos AES als Standard-Verschlüsselungsverfahrenverwendet.
Dieser Blogbeitrag beschreibt einen Schönheitsfehler, wenn Windows 7/8 Clients in einer
Domäne betrieben werden, deren Domain Controller noch unter Windows Server 2003
(R2) betrieben werden.
Windows 7 verwendet für Kerberos AES als
Standardverschlüsselung, Windows Server 2003 kennt aber nur RC4. Der erste
Anmeldeversuch schlägt daher stets fehl, und auf dem DC wird ein Event 675
protokolliert. Windows 7 wiederholt den Anmeldeversuch dann mit RC4. Das ist
zwar nur ein Schönheitsfehler, aber in einer verwalteten Umgebung, in der die
Security-Eventlogs überwacht werden, führt das zu vielen unnötigen Einträgen. Der
Blogbeitrag verrät uns auch gleich die Lösung: Durch Setzen von DefaultEncryptionType (REG_DWORD)
auf 0x17 können wir Windows zwingen, RC4 als Standardverschlüsselung zu
verwenden.
Anmerkung: Wenn Clients RC4 gegen 2008 DCs verwenden, führt
das ebenfalls zum Fehlschlagen des ersten Anmeldeversuchs, da 2008 RC4
standardmäßig verweigert. Auch unschön…
Die Aufgabe
In unseren Domänen befinden sich derzeit noch DCs mit Windows
Server 2003. Daher sollen Clients mit Windows Vista und neuer RC4 verwenden.
Wenn kein 2003 DC (mehr) vorhanden ist, sollen Clients AES verwenden.
Natürlich könnten wir den zugehörigen Registrierungswert mit
SCCM oder ähnlichem verteilen. Dazu müssten wir aber manuell tätig werden,
nachdem wir den letzten 2003 DC dekommissioniert haben. Schöner wäre es, wenn
unsere Clients das automatisch erkennen würden und sich dann passend konfigurieren.
Die Lösung
Wir suchen nach einem Weg, wie wir auf unseren Clients
ermitteln können, ob es in der Domäne noch DCs mit 2003 gibt. Wenn ja, sollen
sie DefaultEncryptionType=0x17 verwenden
(also RC4), wenn nein, soll DefaultEncryptionType
gelöscht und damit wieder AES verwendet werden. Das können wir recht einfach
erreichen mit Hilfe von Group Policy Preferences
und LDAP-Filtern.
Mit Hilfe der LDAP-Filter können wir nach Computern suchen,
die im Attribut operatingSystem den Wert „Windows
Server 2003“ enthalten. Wenn wir diese Suche auf OU=Domain
Controllers beschränken, sind wir schon fast am Ziel.
Alles, was wir benötigen, konfigurieren wir in einem
Gruppenrichtlinienobjekt, das wir anschließend mit den erforderlichen OUs
verknüpfen, in denen sich unsere Clients befinden (Arbeitsplätze und ggf.
Mitgliedsserver).
Schritt 1: Ermitteln des Distinguished Name der Domäne
LDAP-Filter in Group Policy Preferences bieten uns keine
direkte Möglichkeit, eine OU auszuwählen, in der wir suchen wollen. Wir müssen
die Bindung (Search Base) in der Form LDAP://OU=Domain
Controllers,DC=corp,DC=contoso,DC=com angeben. Den Domain DN können
wir natürlich statisch eintragen, aber da wir mehr als eine Domäne verwalten,
ist das nicht ideal. Wir holen uns daher den Domain DN in eine
Umgebungsvariable, und diese Variable verwenden wir später in der Suche nach 2003
DCs.
Zunächst erstellen wir im Pfad Computerkonfiguration
– Einstellungen – Windows-Einstellungen – Umgebung eine neue
Umgebungsvariable ComputerDomainDN.
Abbildung 1: Umgebungsvariable ComputerDomainDN erstellen
Den Wert %DomainDN% der
Variablen gibt es allerdings noch nicht – diese zweite Variable füllen wir mit
Hilfe der Zielgruppenadressierung auf Elementebene
auf der Registerkarte Gemeinsame Optionen.
Abbildung 2: Gemeinsame Optionen
konfigurieren
Mit der Schaltfläche Zielgruppenadressierung…
öffnen wir den Zielgruppenadressierungseditor.
Hier erstellen wir im Menü Neues Element eine
LDAP-Abfrage, die das Attribut distinguishedName der Domäne
ermittelt und den Inhalt in der Variablen DomainDN zurückgibt.
Abbildung 3: Filtern und DomainDN ermitteln
Hinweis: Auch wenn in Abbildung
3
Umgebungsvariablenname steht,
existiert die hier angegebene Variable nur temporär innerhalb der Group Policy
Preferences. Wir müssen daher eine echte Umgebungsvariable definieren, die wir
später auch anderweitig verwenden können.
Schritt 2: Ermitteln von 2003 Domain Controllern
Auch für das Vorhandensein von 2003 DCs verwenden wir eine
Umgebungsvariable. Das hat den Vorteil, dass wir in Schritt 3, wenn wir DefaultEncryptionType setzen bzw.
löschen, keine zwei LDAP-Filter benötigen, sondern lokal gegen diese Variable
filtern können. Damit entlasten wir die Domain Controller von unnötigen LDAP-Abfragen.
Wir erstellen eine zweite Umgebungsvariable DomainContains2003DCs mit dem Wert
1 und der Aktion Ersetzen.
Abbildung 4: Umgebungsvariable DomainContains2003DCs erstellen
Auf der Registerkarte Gemeinsame Optionen
aktivieren wir Element entfernen, wenn es nicht mehr
angewendet wird und Zielgruppenadressierung auf
Elementebene.
Abbildung 5: Gemeinsame Optionen festlegen
Wichtig ist hier die Option Element
entfernen, wenn es nicht mehr angewendet wird. Damit sorgen wir
dafür, dass diese Umgebungsvariable nur existiert (und 1 enthält), wenn die
Zielgruppenadressierung wahr ist.
Im Zielgruppenadressierungseditor
erstellen wir wieder einen LDAP-Filter.
Abbildung 6: Ermitteln von 2003 DCs in der Domäne
Ist diese Abfrage wahr (wurden also Computer mit operatingSystem=Windows Server 2003*
gefunden), existiert anschließend eine Umgebungsvariable DomainContains2003DCs=1. Ist die
Abfrage falsch, existiert die Variable nicht (deshalb haben wir den Modus Ersetzen gewählt und Element entfernen, wenn es nicht mehr
angewendet wird aktiviert).
Schritt 3: Konfigurieren von DefaultEncryptionType
Im Pfad Computerkonfiguration –
Einstellungen – Windows-Einstellungen – Registrierung erstellen wir
ein neues Registrierungselement. Die erforderlichen Werte finden wir im oben
verknüpften Blogbeitrag.
Abbildung 7: Festlegen von DefaultEncryptionType
Damit dieser Wert nur erstellt wird, wenn 2003 DCs vorhanden
sind, erstellen wir eine Zielgruppenadressierung für Umgebungsvariablen. Um DefaultEncryptionType nur auf Vista
und neuer zu konfigurieren, fügen wir eine zweite Zielgruppenadressierung
hinzu. Hier können wir leider nicht das verfügbare Element Betriebssystem verwenden, da dieses
Element nur genau ein Betriebssystem filtern kann – wir benötigen aber einen
Filter für alle Versionen ab Vista und neuer. Deshalb verwenden wir stattdessen
die WMI-Abfrage Select * from Win32_OperatingSystem where
BuildNumber > 6000.
Abbildung 8: Filtern von DefaultEncryptionType
Wir benötigen jetzt noch ein zweites Registrierungselement,
das DefaultEncryptionType löscht, wenn
keine 2003 DCs vorhanden sind. Hier wählen wir als Aktion
daher Löschen.
Abbildung 9: Löschen von DefaultEncryptionType
Die Zielgruppenadressierung ist fast gleich wie die
vorherige, allerdings mit der Option Ist nicht bei der
Umgebungsvariablen.
Abbildung 10: Filter für Umgebungsvariable
invertieren
Dieser Filter ist also wahr, wenn %DomainContains2003DCs% nicht 1
enthält oder nicht existiert.
Das war’s auch schon. Verknüpfen wir diese GPO mit unseren
Clients, so ermitteln diese bei jedem Neustart und bei jeder Hintergrundaktualisierung
von GPOs selbständig, ob sich in der Domäne noch 2003 DCs befinden, und
konfigurieren DefaultEncryptionType entsprechend.