Exporter (0) Imprimer
Développer tout

Annexe F : Exemples de scripts de test

S'applique à: Windows Server 2008,Windows Vista

Cette annexe présente le contenu de trois exemples de scripts de test qui peuvent être utilisés pour vérifier que votre configuration Active Directory prend en charge la sauvegarde des informations de récupération pour BitLocker et du mot de passe du propriétaire du module de plateforme sécurisée (TPM) dans Active Directory.

Vous pouvez obtenir des informations concernant le mode d’utilisation de chaque script en exécutant ce dernier avec le paramètre -?.

noteRemarques
Pour télécharger ces fichiers, voir http://go.microsoft.com/fwlink/?LinkId=78953 (éventuellement en anglais).

List-ACEs.vbs

Ce script liste ou supprime les entrées de contrôle d’accès configurées sur les objets Schéma de BitLocker et du module de plateforme sécurisée (TPM) pour le domaine de premier niveau. Vous pouvez l’utiliser pour vérifier que les entrées de contrôle d’accès voulues ont été correctement ajoutées ou pour supprimer les entrées de contrôle d’accès liées à BitLocker ou au module de plateforme sécurisée.

noteRemarques
Une configuration réalisée sans délégation d’autorisations ne doit contenir qu’une seule entrée de contrôle d’accès pour le module de plateforme sécurisée.

Contenu du fichier

'=============================================================================== ' ' Ce script répertorie les entrées ACE configurées sur les objets Schéma du ' chiffrement de lecteur BitLocker et du module de plateforme sécurisée (TPM) ' pour le domaine de premier niveau. ' ' Utilisez ce script pour vérifier que les autorisations appropriées ont été définies. ' Utilisez également ce script pour supprimer les entrées ACE de BitLocker et du TPM du domaine de premier niveau. ' ' Référence : "Utilisation de scripts pour gérer la sécurité Active Directory" ' http://www.microsoft.com/technet/scriptcenter/topics/security/exrights.mspx ' et documentation MSDN. ' ' Dernière mise à jour : 30/01/2006 ' Microsoft Corporation ' ' Clause d’exclusion de responsabilité ' ' Les exemples de scripts ne sont pas pris en charge dans le cadre des programmes ou ' services de support Microsoft standard. Les exemples de scripts sont fournis « en l’état », sans garantie d’aucune sorte. ' Microsoft exclut toute autre garantie implicite, notamment toute garantie ' implicite de qualité ou d’adéquation à un usage particulier. ' Vous acceptez de prendre l’entière responsabilité des risques résultant de l’exécution des exemples de scripts et ' de l’utilisation de la documentation. En aucun cas la société Microsoft, ses auteurs ou toute personne ' impliquée dans la création, la production ou l’émission des scripts, ne pourront être ' tenus pour responsables de tout autre dommage de quelque nature ' que ce soit (y compris, mais de manière non limitative, toute perte de ' bénéfices, interruption d’activité, perte d’informations commerciales ' ou toute autre perte pécuniaire) résultant de l’utilisation ou de l’impossibilité d’utiliser ' les exemples de scripts ou la documentation, même si la société ' Microsoft a été prévenue de la possibilité de tels dommages. ' '===============================================================================

' -------------------------------------------------------------------------------- ' Utilisation ' --------------------------------------------------------------------------------

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


' -------------------------------------------------------------------------------- ' Analyse des 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 du filtre pour afficher/supprimer uniquement les entrées ACE des objets du chiffrement de lecteur BitLocker et du module de plateforme sécurisée ' --------------------------------------------------------------------------------

'- 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()


' -------------------------------------------------------------------------------- ' Fonctions d’assistance liées au filtre de liste pour répertorier ou supprimer les entrées ACE ' --------------------------------------------------------------------------------

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 filte

    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


' -------------------------------------------------------------------------------- ' Connexion à une ACL discrétionnaire pour l’objet de domaine ' --------------------------------------------------------------------------------

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


' -------------------------------------------------------------------------------- ' Affichage des entrées ACE ' --------------------------------------------------------------------------------

' 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: ' renvoyer i pour afficher l’index de l’entrée 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 accidentially 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


' -------------------------------------------------------------------------------- ' Suppression facultative des entrées ACE d’une liste filtrée ' --------------------------------------------------------------------------------

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

Ce script démontre comment récupérer les informations de récupération du module de plateforme sécurisée à partir d’Active Directory pour un ordinateur particulier. Vous pouvez l’utiliser pour vérifier que seuls les administrateurs de domaine (ou des rôles délégués) peuvent lire les informations de récupération de module de plateforme sécurisée sauvegardées et que ces dernières sont correctement sauvegardées.

Contenu du fichier

'================================================================================= ' ' Ce script présente l’extraction des données de récupération du ' module de plateforme sécurisée (TPM) à partir d’Active Directory pour un ordinateur spécifique. ' ' Il retourne les informations du propriétaire du module de plateforme sécurisée stockées en tant ' qu’attribut d’un objet ordinateur. ' ' Historique des modifications : '  30/01/2006 - Version initiale '  15/05/2006 - Mise à jour de GetStrPathToComputer pour les recherches dans le catalogue global. ' ' Microsoft Corporation ' '  Clause d’exclusion de responsabilité ' ' Les exemples de scripts ne sont pas pris en charge dans le cadre des programmes ou ' services de prise en charge Microsoft standard. Les exemples de scripts sont fournis « en l’état », sans garantie d’aucune sorte. ' Microsoft exclut toute autre garantie implicite, notamment toute garantie ' implicite de qualité ou d’adéquation à un usage particulier. ' Vous reconnaissez assumer tous les risques liés à l’exécution des exemples de scripts et ' à l’utilisation de la documentation. En aucun cas la société Microsoft, ses auteurs ou toute personne ' impliquée dans la création, la production ou l’émission des scripts, ne pourront être ' tenus pour responsables de tout autre dommage de quelque nature ' que ce soit (y compris, mais de manière non limitative, toute perte de ' bénéfices, interruption d’activité, perte d’informations commerciales ' ou toute autre perte pécuniaire) résultant de l’utilisation ou de l’impossibilité d’utiliser ' les exemples de scripts ou la documentation, même si la société ' Microsoft a été prévenue de la possibilité de tels dommages. ' '=================================================================================


' -------------------------------------------------------------------------------- ' Utilisation ' --------------------------------------------------------------------------------

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

' -------------------------------------------------------------------------------- ' Analyse des 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


' -------------------------------------------------------------------------------- ' Obtention du chemin de l’objet ordinateur Active Directory associé au nom de l’ordinateur ' --------------------------------------------------------------------------------

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

' -------------------------------------------------------------------------------- ' Accès sécurisé à l’objet ordinateur Active Directory à l’aide de 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)

' -------------------------------------------------------------------------------- ' Obtention des informations du propriétaire du module de plateforme sécurisée à partir de l’objet ordinateur Active Directory ' --------------------------------------------------------------------------------

strOwnerInformation = objComputer.Get("msTPM-OwnerInformation") WScript.echo "msTPM-OwnerInformation: " + strOwnerInformation

Get-BitLockerRecoveryInfo.vbs

Ce script démontre comment récupérer les informations de récupération de BitLocker à partir d’Active Directory pour un ordinateur particulier. Vous pouvez l’utiliser pour vérifier que seuls les administrateurs de domaine (ou des rôles délégués) peuvent lire les informations de récupération de BitLocker sauvegardées dans Active Directory et qu’elles y sont correctement sauvegardées.

Contenu du fichier

'================================================================================= ' ' Ce script présente l’extraction des informations de récupération du chiffrement ' de lecteur BitLocker à partir d’Active Directory pour un ordinateur spécifique. ' ' Il retourne tous les mots de passe de récupération et les GUID associés pour un ' objet ordinateur spécifique. ' ' Historique des modifications : '  30/010/2006 - Version initiale '  15/05/2006 - Ajout de ConvertOctetGuidToHexString pour supprimer les dépendances à ADs.DLL '              et conversion des GUID pour corriger l’ordre des octets avant l’impression. '            - Mise à jour de GetStrPathToComputer pour les recherches dans le catalogue global. ' ' Microsoft Corporation ' '  Clause d’exclusion de responsabilité ' ' Les exemples de scripts ne sont pas pris en charge dans le cadre des programmes ou ' services de prise en charge Microsoft standard. Les exemples de scripts sont fournis « en l’état », sans garantie d’aucune sorte. ' Microsoft exclut toute autre garantie implicite, notamment toute garantie ' implicite de qualité ou d’adéquation à un usage particulier. ' Vous reconnaissez assumer tous les risques liés à l’exécution des exemples de scripts et ' à l’utilisation de la documentation. En aucun cas la société Microsoft, ses auteurs ou toute personne ' impliquée dans la création, la production ou l’émission des scripts, ne pourront être ' tenus pour responsables de tout autre dommage de quelque nature ' que ce soit (y compris, mais de manière non limitative, toute perte de ' bénéfices, interruption d’activité, perte d’informations commerciales ' ou toute autre perte pécuniaire) résultant de l’utilisation ou de l’impossibilité d’utiliser ' les exemples de scripts ou la documentation, même si la société ' Microsoft a été prévenue de la possibilité de tels dommages. ' '===============================================================================


' -------------------------------------------------------------------------------- ' Utilisation ' --------------------------------------------------------------------------------

Sub ShowUsage Wscript.Echo "USAGE: Get-BitLockerRecoveryInfo [Optional Computer Name]" Wscript.Echo "If no computer name is specified, the local computer is assumed." WScript.Quit End Sub

' -------------------------------------------------------------------------------- ' Analyse des 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

' -------------------------------------------------------------------------------- ' Fonctions d’assistance : Conversion de la chaîne GUID (tableau d’octets) en chaîne hex ' --------------------------------------------------------------------------------

'Reference: http://blogs.msdn.com/ericlippert/archive/2004/05/25/141525.aspx

Function HexByte(b) HexByte = Right("0" & Hex(b), 2) End Function 

Function ConvertOctetGuidToHexString(ByteArray) Dim Binary, S Binary = CStr(ByteArray)

  On Error Resume Next

  S = "{" S = S & HexByte(AscB(MidB(Binary, 4, 1))) S = S & HexByte(AscB(MidB(Binary, 3, 1))) S = S & HexByte(AscB(MidB(Binary, 2, 1))) S = S & HexByte(AscB(MidB(Binary, 1, 1))) S = S & "-" S = S & HexByte(AscB(MidB(Binary, 6, 1))) S = S & HexByte(AscB(MidB(Binary, 5, 1))) S = S & "-" S = S & HexByte(AscB(MidB(Binary, 8, 1))) S = S & HexByte(AscB(MidB(Binary, 7, 1))) S = S & "-" S = S & HexByte(AscB(MidB(Binary, 9, 1))) S = S & HexByte(AscB(MidB(Binary, 10, 1))) S = S & "-" S = S & HexByte(AscB(MidB(Binary, 11, 1))) S = S & HexByte(AscB(MidB(Binary, 12, 1))) S = S & HexByte(AscB(MidB(Binary, 13, 1))) S = S & HexByte(AscB(MidB(Binary, 14, 1))) S = S & HexByte(AscB(MidB(Binary, 15, 1))) S = S & HexByte(AscB(MidB(Binary, 16, 1))) S = S & "}"

  On Error GoTo 0

  ConvertOctetGuidToHexString = S End Function 


' -------------------------------------------------------------------------------- ' Obtention du chemin de l’objet ordinateur Active Directory associé au nom de l’ordinateur ' --------------------------------------------------------------------------------

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


' -------------------------------------------------------------------------------- ' Accès sécurisé à l’objet ordinateur Active Directory à l’aide de Kerberos ' --------------------------------------------------------------------------------


Set objDSO = GetObject("LDAP:") strPathToComputer = GetStrPathToComputer(strComputerName)

WScript.Echo "Accessing object: " + strPathToComputer

Const ADS_SECURE_AUTHENTICATION = 1 Const ADS_USE_SEALING = 64 '0x40 Const ADS_USE_SIGNING = 128 '0x80


' -------------------------------------------------------------------------------- ' Obtention de toutes les informations de récupération BitLocker à partir de l’objet ordinateur Active Directory ' --------------------------------------------------------------------------------

' Get all the recovery information child objects of the computer object

Set objFveInfos = objDSO.OpenDSObject(strPathToComputer, vbNullString, vbNullString, _ ADS_SECURE_AUTHENTICATION + ADS_USE_SEALING + ADS_USE_SIGNING)

objFveInfos.Filter = Array("msFVE-RecoveryInformation")

' Iterate through each recovery information object 

For Each objFveInfo in objFveInfos

   strName = objFveInfo.Get("name")

   strRecoveryGuidOctet = objFveInfo.Get("msFVE-RecoveryGuid") strRecoveryGuid = ConvertOctetGuidToHexString(strRecoveryGuidOctet)

   strRecoveryPassword = objFveInfo.Get("msFVE-RecoveryPassword")

   WScript.echo WScript.echo "name: " + strName WScript.echo "msFVE-RecoveryGuid: " + strRecoveryGuid WScript.echo "msFVE-RecoveryPassword: " + strRecoveryPassword
   

   If len(strRecoveryGuid) <> 38 Then WScript.echo "WARNING: '" & strRecoveryGuid & "' does not appear to be a valid GUID." End If

Next

WScript.Quit

Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.

Ajouts de la communauté

Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft