Sichern der TPM-Wiederherstellungsinformationen auf AD DS
Dieses Thema für IT-Experten beschreibt, wie die TPM(Trusted Platform Module)-Informationen in den Active Directory-Domänendiensten (AD DS) gesichert werden, damit Sie AD DS für die Verwaltung von TPM von einem entfernten Computer aus verwenden können.
Zur gerätefernen Verwaltung von TPM
Die Sicherung der TPM-Besitzerinformationen für einen Computer ermöglicht Administratoren in einer Domäne die geräteferne Konfiguration der TPM-Sicherheitshardware auf dem lokalen Computer. So können Administratoren etwa das TPM auf die Voreinstellungen des Herstellers zurücksetzen wollen, wenn Computer außer Betrieb genommen oder einem anderen Zweck zugeführt werden, ohne dass sie dazu persönlich an dem jeweiligen Computer anwesend sein müssen.
Mit AD DS können Sie TPM-Besitzerinformationen zur Verwendung in Wiederherstellungssituationen speichern, etwa wenn der TPM-Eigentümer das Kennwort vergessen hat, oder wenn Sie die Kontrolle über das TPM übernehmen müssen. Es gibt nur ein TPM-Besitzerkennwort pro Computer; daher kann der Hashwert dieses Kennworts als Attribut des Computerobjekts in AD DS gespeichert werden. Das Attribut hat den allgemeinen Namen (Common Name, CN) von ms-TPM-OwnerInformation.
Hinweis
Der TPM-Besitzerautorisierungswert wird in AD DS gespeichert und ist in der TP-Besitzerkennwortdatei als SHA-1-Hash des TPM-Besitzerkennworts (Base 64-Kodierung) vorhanden. Das eigentliche Besitzerkennwort wird nicht gespeichert.
Domänencontroller unter Windows Server 2012 R2 oder Windows Server 2012 enthalten standardmäßig die erforderlichen AD DS-Schemaobjekte. Wenn Ihr Domänencontroller jedoch Windows Server 2008 R2 ausführt, müssen Sie das Schema wie unter AD DS-Schemaerweiterungen zur Unterstützung der TPM-Sicherung beschrieben aktualisieren.
Dieses Thema enthält Verfahren (einige davon auf der Grundlage von Visual Basic-Skripts) zur Wiederherstellung von TPM-Informationen und zur Außerbetriebnahme von TPM auf Remotecomputern. Es sind Beispielskripts verfügbar, die Sie an die Anforderungen Ihrer Umgebung anpassen können.
Inhalt dieses Themas:
Überprüfen des Status der Voraussetzungen
Festlegen von Berechtigungen zum Sichern von Kennwortinformationen
Konfigurieren von Gruppenrichtlinien zum Sichern der TPM-Wiederherstellungsinformationen in AD DS
Verwenden von AD DS zur Wiederherstellung von TPM-Informationen
Beispielskripts
Überprüfen des Status der Voraussetzungen
Bevor Sie mit der Sicherung beginnen, stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind:
Alle Domänencontroller, auf die von Clientcomputern mit TPM-Diensten aus zugegriffen werden kann, laufen unter Windows Server 2012 R2, Windows Server 2012 oder Windows Server 2008 R2 mit dem aktualisierten Schema.
Tipp
Weitere Informationen zu den Schemaerweiterungen, die für eine TPM-Sicherung in Active Directory-Domänen mit Windows Server 2008 R2 erforderlich sind, finden Sie unter AD DS-Schemaerweiterungen zur Unterstützung der TPM-Sicherung.
Sie verfügen über Domänenadministratorrechte in der Zielgesamtstruktur, oder Sie verwenden ein Konto, das über die erforderlichen Berechtigungen zur Erweiterung des Schemas für die Zielgesamtstruktur verfügt. Beispiele für Konten mit den erforderlichen Berechtigungen sind Mitglieder der Gruppen „Enterprise-Administratoren“ oder „Schema-Administratoren“.
Festlegen von Berechtigungen zum Sichern von Kennwortinformationen
Dieses Verfahren verwendet das Beispielskript Add-TPMSelfWriteACE.vbs zum Hinzufügen eines ACE(Access Control Entry)- Zugriffssteuerungseintrags, damit die Sicherung der TPM-Wiederherstellungsinformationen möglich ist. Ein Clientcomputer kann TPM-Besitzerinformationen erst dann sichern, wenn dieser ACE hinzugefügt wurde.
Dieses Skript wird auf dem Domänencontroller ausgeführt, den Sie für die Verwaltung der TPM-Wiederherstellungsinformationen verwenden, und dies geschieht unter den folgenden Annahmen:
Sie verfügen über Domänenadministratorrechte zum Einrichten von Berechtigungen für das Domänenobjekt auf höchster Ebene.
Ihre Zieldomäne ist identisch mit der Domäne für das Benutzerkonto, auf dem das Skript ausgeführt wird. Beispiel: Die Ausführung des Skripts als TESTDOMAIN\admin erweitert die Berechtigungen für TESTDOMAIN.
Hinweis
Möglicherweise müssen Sie das Beispielskript ändern, wenn Sie Berechtigungen für mehrere Domänen einrichten möchten, Sie benötigen aber keine Domänenadministratorkonten für jede dieser Domänen. Suchen Sie die Variable strPathToDomain im Skript, und ändern Sie sie für Ihre Zieldomäne, beispielsweise:
LDAP://DC=testdomain,DC=nttest,DC=microsoft,DC=com
Ihre Domäne ist so konfiguriert, dass die Berechtigungen vom Domänenobjekt der höchsten Ebene zu den Zielcomputerobjekten vererbt werden.
Die Berechtigungen werden nicht wirksam, wenn ein Container in der Hierarchie keine vererbten Berechtigungen zulässt. Standardmäßig wird die Vererbung von Berechtigungen in AD DS festgelegt. Wenn Sie nicht sicher sind, ob Ihre Konfiguration von diesem Standard abweicht, können Sie mit den Schritten für die Einrichtung der Berechtigungen fortfahren. Sie können Ihre Konfiguration wie weiter unten in diesem Thema beschrieben überprüfen. Sie können auch auf die Schaltfläche Effektive Berechtigungen klicken, während Sie die Eigenschaften eines Computerobjekts anzeigen, und dann prüfen, ob Selbst für das Schreiben des Attributs msTPM-OwnerInformation genehmigt ist.
So fügen Sie einen ACE hinzu, um die Sicherung der TPM-Wiederherstellungsinformationen zuzulassen
Öffnen Sie das Beispielskript Add-TPMSelfWriteACE.vbs.
Das Skript enthält eine Berechtigungserweiterung, und Sie müssen den Wert von strPathToDomain mit Ihrem Domänennamen ändern.
Speichern Sie Ihre Änderungen an dem Skript.
Geben Sie an der Eingabeaufforderung Folgendes ein, und betätigen Sie dann die EINGABETASTE:
cscript Add-TPMSelfWriteACE.vbs
Dieses Skript fügt einen einzelnen ACE dem Domänenobjekt der obersten Ebene hinzu. Der ACE ist eine vererbbare Berechtigung, die dem Computer (SELBST) erlaubt, das ms-TPM-OwnerInformation-Attribut für Computerobjekte in der Domäne zu schreiben.
Führen Sie das folgende Verfahren durch, um zu prüfen, ob die korrekten Berechtigungen eingerichtet wurden, und um TPM- und BitLocker-ACEs bei Bedarf aus der Domäne der obersten Ebene zu entfernen.
Verwalten von auf TPM-Schemaobjekten konfigurierten ACEs
Öffnen Sie das Beispielskript List-ACEs.vbs.
Ändern Sie List-ACEs.vbs.
Sie müssen Folgendes ändern:
Wert von strPathToDomain: Verwenden Sie Ihren Domänennamen.
Filteroptionen: Das Skript setzt einen Filter für BitLocker- und TPM-Schemaobjekte. Sie müssen daher If IsFilterActive () ändern, wenn Sie andere Schemaobjekte auflisten oder entfernen möchten.
Speichern Sie Ihre Änderungen an dem Skript.
Geben Sie an der Eingabeaufforderung Folgendes ein, und betätigen Sie dann die EINGABETASTE:
cscript List-ACEs.vbs
Mit diesem Skript können Sie optional ACEs aus BitLocker- und TPM-Schemaobjekten in der Domäne der obersten Ebene entfernen.
Konfigurieren von Gruppenrichtlinien zum Sichern der TPM-Wiederherstellungsinformationen in AD DS
Verwenden Sie diese Verfahren, um die Richtlinieneinstellung TPM-Gruppenrichtlinieneinstellungen auf einem lokalen Computer zu konfigurieren. In einer Produktionsumgebung besteht eine effiziente Vorgehensweise dafür darin, ein Gruppenrichtlinienobjekt (GPO) zu erstellen oder zu bearbeiten, das sich auf Clientcomputer in der Domäne richten kann.
So aktivieren Sie eine lokale Richtlinieneinstellung zur Sicherung der TPM-Wiederherstellungsinformationen auf AD DS
Melden Sie sich auf einem Computer mit Domänenzugehörigkeit mit einem Domänenkonto an, das Mitglied der lokalen Administratorgruppe ist.
Öffnen Sie den Editor für lokale Gruppenrichtlinien (gpedit.msc), und navigieren Sie in der Konsolenstruktur zu Computerkonfiguration\Administrative Vorlagen\System.
Klicken Sie auf Trusted Platform Module-Dienste.
Doppelklicken Sie auf TPM-Sicherung in Active Directory-Domänendienste aktivieren.
Klicken Sie auf Aktiviert, und dann auf OK.
Wichtig
Wenn diese Einstellung aktiviert ist, kann das TPM-Besitzerkennwort nicht festgelegt oder geändert werden, ohne dass der Computer mit der Domäne verbunden ist und die AD DS-Sicherung der TPM-Wiederherstellungsinformationen erfolgreich durchgeführt wird.
Verwenden von AD DS zur Wiederherstellung von TPM-Informationen
Wenn Sie TPM-Besitzerinformationen aus AD DS wiederherstellen und zur TPM-Verwaltung verwenden müssen, müssen Sie das ms-TPM-OwnerInformation-Objekt von AD DS lesen und dann manuell eine TPM-Besitzerkennwortsicherungsdatei erstellen, die bereitgestellt werden kann, wenn TPM-Besitzeranmeldedaten benötigt werden.
So rufen Sie TPM-Besitzersicherungsinformationen aus AD DS ab und erstellen eine Kennwortdatei
Melden Sie sich mithilfe Ihrer Domänenadministrator-Anmeldeinformationen an einem Domänencontroller an.
Kopieren Sie die Beispielskriptdatei Get-TPMOwnerInfo.vbs an einen Speicherort auf Ihrem Computer.
Öffnen Sie ein Eingabeaufforderungsfenster, und ändern Sie den Standardspeicherort auf den Speicherort der Beispielskriptdateien, die Sie im vorherigen Schritt gespeichert haben.
Geben Sie an der Eingabeaufforderung cscript Get-TPMOwnerInfo.vbs ein.
Die erwartete Ausgabe ist eine Zeichenfolge, die den Hash des Kennworts entspricht, das Sie zuvor erstellt haben.
Hinweis
Wenn die Fehlermeldung „Active Directory: Die Verzeichniseigenschaft wurden nicht im Cache gefunden“ angezeigt wird, stellen Sie sicher, dass Sie ein Domänenadministratorkonto verwenden, das erforderlich ist, um das ms-TPM-OwnerInformation-Attribut zu lesen.
Die einzige Ausnahme dazu sind Fälle, bei denen Benutzer der Erstellerbesitzer der Computerobjekte sind, die sie der Domäne hinzufügen. Dann können Sie möglicherweise die TPM-Besitzerinformationen für ihre Computerobjekte lesen.
Öffnen Sie Editor oder einen anderen Texteditor, kopieren Sie das folgende Beispiel in die Datei, und ersetzen Sie TpmOwnerPasswordHash durch die Zeichenfolge, die Sie im vorherigen Schritt aufgezeichnet haben.
<?xml version="1.0" encoding="UTF-8"?> <!-- This page is a backup of Trusted Platform Module (TPM) owner authorization information. Upon request, use the authorization information to prove ownership of the computer's TPM. IMPORTANT: Please keep this file in a secure location away from your computer's local hard drive. --> <tpmOwnerData version="1.0" softwareAuthor="Microsoft Windows [Version 6.1.7600]" creationDate="2009-11-11T14:39:29-08:00" creationUser="DOMAIN\username" machineName="mymachine"> <tpmInfo manufacturerId="1096043852"/> <ownerAuth>TpmOwnerPasswordHash</ownerAuth> </tpmOwnerData>
Speichern Sie diese Datei mit der Erweiterung .tpm auf einem Wechseldatenträger, wie z. B. einen USB-Speicherstick. Wenn Sie auf das TPM zugreifen und das TPM-Besitzerkennwort eingeben müssen, wählen Sie die Option für das Lesen des Kennwort aus einer Datei, und geben Sie den Pfad zu dieser Datei an.
Beispielskripts
Sie können die folgenden Beispielskripts, die in den oben erläuterten Verfahren verwendet werden, ganz oder teilweise verwenden, um AD DS für die Sicherung von TPM-Wiederherstellungsinformationen zu konfigurieren. Je nach der Konfiguration Ihrer Umgebung können individuelle Anpassungen erforderlich sein.
Add-TPMSelfWriteACE.vbs: Zum Hinzufügen des ACR für das TPM zu AD DS
List-ACEs.vbs: Zum Auflisten oder Entfernen der ACEs, die auf BitLocker- und TPM-Schemaobjekten konfiguriert sind
Get-TPMOwnerInfo.vbs: Zum Abrufen der TPM-Wiederherstellungsinformationen aus AD DS für einen bestimmten Computer
Add-TPMSelfWriteACE.vbs
Dieses Skript fügt den Zugriffssteuerungseintrag (ACE) für das TPM zu AD DS hinzu, damit der Computer TPM-Wiederherstellungsinformationen in AD DS sichern kann.
'===============================================================================
'
' This script demonstrates the addition of an Access Control Entry (ACE)
' to allow computers to write Trusted Platform Module (TPM)
' recovery information to Active Directory.
'
' This script creates a SELF ACE on the top-level domain object, and
' assumes that inheritance of ACL's from the top-level domain object to
' down-level computer objects are enabled.
'
'
'
' Last Updated: 12/05/2012
' Last Reviewed: 12/05/2012
' Microsoft Corporation
'
' Disclaimer
'
' The sample scripts are not supported under any Microsoft standard support program
' or service. The sample scripts are provided AS IS without warranty of any kind.
' Microsoft further disclaims all implied warranties including, without limitation,
' any implied warranties of merchantability or of fitness for a particular purpose.
' The entire risk arising out of the use or performance of the sample scripts and
' documentation remains with you. In no event shall Microsoft, its authors, or
' anyone else involved in the creation, production, or delivery of the scripts be
' liable for any damages whatsoever (including, without limitation, damages for loss
' of business profits, business interruption, loss of business information, or
' other pecuniary loss) arising out of the use of or inability to use the sample
' scripts or documentation, even if Microsoft has been advised of the possibility
' of such damages.
'
' Version 1.0.2 - Tested and re-released for Windows 8 and Windows Server 2012
'
'===============================================================================
' --------------------------------------------------------------------------------
' Access Control Entry (ACE) constants
' --------------------------------------------------------------------------------
'- From the ADS_ACETYPE_ENUM enumeration
Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &H5 'Allows an object to do something
'- From the ADS_ACEFLAG_ENUM enumeration
Const ADS_ACEFLAG_INHERIT_ACE = &H2 'ACE can be inherited to child objects
Const ADS_ACEFLAG_INHERIT_ONLY_ACE = &H8 'ACE does NOT apply to target (parent) object
'- From the ADS_RIGHTS_ENUM enumeration
Const ADS_RIGHT_DS_WRITE_PROP = &H20 'The right to write object properties
Const ADS_RIGHT_DS_CREATE_CHILD = &H1 'The right to create child objects
'- From the ADS_FLAGTYPE_ENUM enumeration
Const ADS_FLAG_OBJECT_TYPE_PRESENT = &H1 'Target object type is present in the ACE
Const ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT = &H2 'Target inherited object type is present in the ACE
' --------------------------------------------------------------------------------
' TPM and FVE schema object GUID's
' --------------------------------------------------------------------------------
'- ms-TPM-OwnerInformation attribute
SCHEMA_GUID_MS_TPM_OWNERINFORMATION = "{AA4E1A6D-550D-4E05-8C35-4AFCB917A9FE}"
'- ms-FVE-RecoveryInformation object
SCHEMA_GUID_MS_FVE_RECOVERYINFORMATION = "{EA715D30-8F53-40D0-BD1E-6109186D782C}"
'- Computer object
SCHEMA_GUID_COMPUTER = "{BF967A86-0DE6-11D0-A285-00AA003049E2}"
'Reference: "Platform SDK: Active Directory Schema"
' --------------------------------------------------------------------------------
' Set up the ACE to allow write of TPM owner information
' --------------------------------------------------------------------------------
Set objAce1 = createObject("AccessControlEntry")
objAce1.AceFlags = ADS_ACEFLAG_INHERIT_ACE + ADS_ACEFLAG_INHERIT_ONLY_ACE
objAce1.AceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objAce1.Flags = ADS_FLAG_OBJECT_TYPE_PRESENT + ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT
objAce1.Trustee = "SELF"
objAce1.AccessMask = ADS_RIGHT_DS_WRITE_PROP
objAce1.ObjectType = SCHEMA_GUID_MS_TPM_OWNERINFORMATION
objAce1.InheritedObjectType = SCHEMA_GUID_COMPUTER
' --------------------------------------------------------------------------------
' NOTE: BY default, the "SELF" computer account can create
' BitLocker recovery information objects and write BitLocker recovery properties
'
' No additional ACE's are needed.
' --------------------------------------------------------------------------------
' --------------------------------------------------------------------------------
' Connect to Discretional ACL (DACL) for domain object
' --------------------------------------------------------------------------------
Set objRootLDAP = GetObject("LDAP://rootDSE")
strPathToDomain = "LDAP://" & objRootLDAP.Get("defaultNamingContext") ' e.g. string dc=fabrikam,dc=com
Set objDomain = GetObject(strPathToDomain)
WScript.Echo "Accessing object: " + objDomain.Get("distinguishedName")
Set objDescriptor = objDomain.Get("ntSecurityDescriptor")
Set objDacl = objDescriptor.DiscretionaryAcl
' --------------------------------------------------------------------------------
' Add the ACEs to the Discretionary ACL (DACL) and set the DACL
' --------------------------------------------------------------------------------
objDacl.AddAce objAce1
objDescriptor.DiscretionaryAcl = objDacl
objDomain.Put "ntSecurityDescriptor", Array(objDescriptor)
objDomain.SetInfo
WScript.Echo "SUCCESS!"
List-ACEs.vbs
Dieses Skript führt ACE-Einträge auf oder entfernt sie, die für BitLocker und TPM-Schemaobjekte für die Domäne der obersten Ebene konfiguriert sind. Damit können Sie prüfen, ob die erwarteten ACEs korrekt hinzugefügt wurden, oder bei Bedarf auf BitLocker oder das TPM bezogene ACEs entfernen.
'===============================================================================
'
' This script lists the access control entries (ACE's) configured on
' Trusted Platform Module (TPM) and BitLocker Drive Encryption (BDE) schema objects
' for the top-level domain.
'
' You can use this script to check that the correct permissions have been set and
' to remove TPM and BitLocker ACE's from the top-level domain.
'
'
' Last Updated: 12/05/2012
' Last Reviewed: 12/02/2012
'
' Microsoft Corporation
'
' Disclaimer
'
' The sample scripts are not supported under any Microsoft standard support program
' or service. The sample scripts are provided AS IS without warranty of any kind.
' Microsoft further disclaims all implied warranties including, without limitation,
' any implied warranties of merchantability or of fitness for a particular purpose.
' The entire risk arising out of the use or performance of the sample scripts and
' documentation remains with you. In no event shall Microsoft, its authors, or
' anyone else involved in the creation, production, or delivery of the scripts be
' liable for any damages whatsoever (including, without limitation, damages for loss
' of business profits, business interruption, loss of business information, or
' other pecuniary loss) arising out of the use of or inability to use the sample
' scripts or documentation, even if Microsoft has been advised of the possibility
' of such damages.
'
' Version 1.0.2 - Tested and re-released for Windows 8 and Windows Server 2012
'
'===============================================================================
' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------
Sub ShowUsage
Wscript.Echo "USAGE: List-ACEs"
Wscript.Echo "List access permissions for BitLocker and TPM schema objects"
Wscript.Echo ""
Wscript.Echo "USAGE: List-ACEs -remove"
Wscript.Echo "Removes access permissions for BitLocker and TPM schema objects"
WScript.Quit
End Sub
' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------
Set args = WScript.Arguments
Select Case args.Count
Case 0
' do nothing - checks for ACE's
removeACE = False
Case 1
If args(0) = "/?" Or args(0) = "-?" Then
ShowUsage
Else
If UCase(args(0)) = "-REMOVE" Then
removeACE = True
End If
End If
Case Else
ShowUsage
End Select
' --------------------------------------------------------------------------------
' Configuration of the filter to show/remove only ACE's for BDE and TPM objects
' --------------------------------------------------------------------------------
'- ms-TPM-OwnerInformation attribute
SCHEMA_GUID_MS_TPM_OWNERINFORMATION = "{AA4E1A6D-550D-4E05-8C35-4AFCB917A9FE}"
'- ms-FVE-RecoveryInformation object
SCHEMA_GUID_MS_FVE_RECOVERYINFORMATION = "{EA715D30-8F53-40D0-BD1E-6109186D782C}"
' Use this filter to list/remove only ACEs related to TPM and BitLocker
aceGuidFilter = Array(SCHEMA_GUID_MS_TPM_OWNERINFORMATION, _
SCHEMA_GUID_MS_FVE_RECOVERYINFORMATION)
' Note to script source reader:
' Uncomment the following line to turn off the filter and list all ACEs
'aceGuidFilter = Array()
' --------------------------------------------------------------------------------
' Helper functions related to the list filter for listing or removing ACE's
' --------------------------------------------------------------------------------
Function IsFilterActive()
If Join(aceGuidFilter) = "" Then
IsFilterActive = False
Else
IsFilterActive = True
End If
End Function
Function isAceWithinFilter(ace)
aceWithinFilter = False ' assume first not pass the filter
For Each guid In aceGuidFilter
If ace.ObjectType = guid Or ace.InheritedObjectType = guid Then
isAceWithinFilter = True
End If
Next
End Function
Sub displayFilter
For Each guid In aceGuidFilter
WScript.echo guid
Next
End Sub
' --------------------------------------------------------------------------------
' Connect to Discretional ACL (DACL) for domain object
' --------------------------------------------------------------------------------
Set objRootLDAP = GetObject("LDAP://rootDSE")
strPathToDomain = "LDAP://" & objRootLDAP.Get("defaultNamingContext") ' e.g. dc=fabrikam,dc=com
Set domain = GetObject(strPathToDomain)
WScript.Echo "Accessing object: " + domain.Get("distinguishedName")
WScript.Echo ""
Set descriptor = domain.Get("ntSecurityDescriptor")
Set dacl = descriptor.DiscretionaryAcl
' --------------------------------------------------------------------------------
' Show Access Control Entries (ACE's)
' --------------------------------------------------------------------------------
' Loop through the existing ACEs, including all ACEs if the filter is not active
i = 1 ' global index
c = 0 ' found count - relevant if filter is active
For Each ace In dacl
If IsFilterActive() = False or isAceWithinFilter(ace) = True Then
' note to script source reader:
' echo i to show the index of the ACE
WScript.echo "> AceFlags: " & ace.AceFlags
WScript.echo "> AceType: " & ace.AceType
WScript.echo "> Flags: " & ace.Flags
WScript.echo "> AccessMask: " & ace.AccessMask
WScript.echo "> ObjectType: " & ace.ObjectType
WScript.echo "> InheritedObjectType: " & ace.InheritedObjectType
WScript.echo "> Trustee: " & ace.Trustee
WScript.echo ""
if IsFilterActive() = True Then
c = c + 1
' optionally include this ACE in removal list if configured
' note that the filter being active is a requirement since we don't
' want to accidentally remove all ACEs
If removeACE = True Then
dacl.RemoveAce ace
End If
end if
End If
i = i + 1
Next
' Display number of ACEs found
If IsFilterActive() = True Then
WScript.echo c & " ACE(s) found in " & domain.Get("distinguishedName") _
& " related to BitLocker and TPM" 'note to script source reader: change this line if you configure your own
filter
' note to script source reader:
' uncomment the following lines if you configure your own filter
'WScript.echo ""
'WScript.echo "The following filter was active: "
'displayFilter
'Wscript.echo ""
Else
i = i - 1
WScript.echo i & " total ACE(s) found in " & domain.Get("distinguishedName")
End If
' --------------------------------------------------------------------------------
' Optionally remove ACE's on a filtered list
' --------------------------------------------------------------------------------
if removeACE = True and IsFilterActive() = True then
descriptor.DiscretionaryAcl = dacl
domain.Put "ntSecurityDescriptor", Array(descriptor)
domain.setInfo
WScript.echo c & " ACE(s) removed from " & domain.Get("distinguishedName")
else
if removeACE = True then
WScript.echo "You must specify a filter to remove ACEs from " & domain.Get("distinguishedName")
end if
end if
Get-TPMOwnerInfo.vbs
Dieses Skript ruft TPM-Wiederherstellungsinformationen aus AD DS für einen bestimmten Computer ab, damit Sie überprüfen können, ob nur Domänenadministratoren (oder delegierte Rollen) gesicherte TPM-Wiederherstellungsinformationen lesen können, und ob diese Informationen in korrekter Weise gesichert werden.
'=================================================================================
'
' This script demonstrates the retrieval of Trusted Platform Module (TPM)
' recovery information from Active Directory for a particular computer.
'
' It returns the TPM owner information stored as an attribute of a
' computer object.
'
' Last Updated: 12/05/2012
' Last Reviewed: 12/05/2012
'
' Microsoft Corporation
'
' Disclaimer
'
' The sample scripts are not supported under any Microsoft standard support program
' or service. The sample scripts are provided AS IS without warranty of any kind.
' Microsoft further disclaims all implied warranties including, without limitation,
' any implied warranties of merchantability or of fitness for a particular purpose.
' The entire risk arising out of the use or performance of the sample scripts and
' documentation remains with you. In no event shall Microsoft, its authors, or
' anyone else involved in the creation, production, or delivery of the scripts be
' liable for any damages whatsoever (including, without limitation, damages for loss
' of business profits, business interruption, loss of business information, or
' other pecuniary loss) arising out of the use of or inability to use the sample
' scripts or documentation, even if Microsoft has been advised of the possibility
' of such damages.
'
' Version 1.0 - Initial release
' Version 1.1 - Updated GetStrPathToComputer to search the global catalog.
' Version 1.1.2 - Tested and re-released for Windows 8 and Windows Server 2012
'
'=================================================================================
' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------
Sub ShowUsage
Wscript.Echo "USAGE: Get-TpmOwnerInfo [Optional Computer Name]"
Wscript.Echo "If no computer name is specified, the local computer is assumed."
WScript.Quit
End Sub
' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------
Set args = WScript.Arguments
Select Case args.Count
Case 0
' Get the name of the local computer
Set objNetwork = CreateObject("WScript.Network")
strComputerName = objNetwork.ComputerName
Case 1
If args(0) = "/?" Or args(0) = "-?" Then
ShowUsage
Else
strComputerName = args(0)
End If
Case Else
ShowUsage
End Select
' --------------------------------------------------------------------------------
' Get path to Active Directory computer object associated with the computer name
' --------------------------------------------------------------------------------
Function GetStrPathToComputer(strComputerName)
' Uses the global catalog to find the computer in the forest
' Search also includes deleted computers in the tombstone
Set objRootLDAP = GetObject("LDAP://rootDSE")
namingContext = objRootLDAP.Get("defaultNamingContext") ' e.g. string dc=fabrikam,dc=com
strBase = "<GC://" & namingContext & ">"
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOOBject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
strFilter = "(&(objectCategory=Computer)(cn=" & strComputerName & "))"
strQuery = strBase & ";" & strFilter & ";distinguishedName;subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 100
objCommand.Properties("Cache Results") = False
' Enumerate all objects found.
Set objRecordSet = objCommand.Execute
If objRecordSet.EOF Then
WScript.echo "The computer name '" & strComputerName & "' cannot be found."
WScript.Quit 1
End If
' Found object matching name
Do Until objRecordSet.EOF
dnFound = objRecordSet.Fields("distinguishedName")
GetStrPathToComputer = "LDAP://" & dnFound
objRecordSet.MoveNext
Loop
' Clean up.
Set objConnection = Nothing
Set objCommand = Nothing
Set objRecordSet = Nothing
End Function
' --------------------------------------------------------------------------------
' Securely access the Active Directory computer object using Kerberos
' --------------------------------------------------------------------------------
Set objDSO = GetObject("LDAP:")
strPath = GetStrPathToComputer(strComputerName)
WScript.Echo "Accessing object: " + strPath
Const ADS_SECURE_AUTHENTICATION = 1
Const ADS_USE_SEALING = 64 '0x40
Const ADS_USE_SIGNING = 128 '0x80
Set objComputer = objDSO.OpenDSObject(strPath, vbNullString, vbNullString, _
ADS_SECURE_AUTHENTICATION + ADS_USE_SEALING + ADS_USE_SIGNING)
' --------------------------------------------------------------------------------
' Get the TPM owner information from the Active Directory computer object
' --------------------------------------------------------------------------------
strOwnerInformation = objComputer.Get("msTPM-OwnerInformation")
WScript.echo "msTPM-OwnerInformation: " + strOwnerInformation
Weitere Ressourcen
Trusted Platform Module – Technologieübersicht
Grundlagen zu Trusted Platform Module
TPM-Gruppenrichtlinieneinstellungen
TPM-Cmdlets in Windows PowerShell
AD DS-Schemaerweiterungen zur Unterstützung der TPM-Sicherung
Bereiten Sie Ihre Organisation für BitLocker vor: Planen und Richtlinien, vgl. TPM-Hinweise