Andariel 공격 그룹이 활용하는 RID Hijacking 공격 기법
ASEC(AhnLab SEcurity intelligence Center)은 Andariel 공격 그룹이 침해 과정에서 악성 파일을 이용해 RID Hijacking 공격을 수행하는 것을 확인했다.
RID Hijacking은 일반 사용자나 게스트 계정과 같이 제한된 권한을 가진 계정의 RID(상대 식별자)값을 관리자와 같이 높은 권한을 가진 계정의 RID 값으로 변조하는 공격 기법이다. 한국인터넷진흥원에서 공개한 “TTPs #11: Operation An Octopus – 중앙 집중형 관리 솔루션을 노리는 공격전략 분석” 에서도 Andariel 공격 그룹이 운영체제 내 백도어 계정을 생성할 때 RID Hijacking 기법을 사용한다고 언급했다. RID Hijacking 공격은 숨김 계정을 생성하고 해당 계정의 RID 값을 수정하기 때문에 피해 기업에서 행위를 탐지하기 어렵다.
본 블로그에서는 RID Hijacking 공격 과정과 침해 사고에서 활용된 기법에 대해 설명한다.
1. RID Hijacking 개념
RID Hijacking이란, 일반 사용자 또는 게스트 계정 등 낮은 권한의 계정 RID 값을 상위 권한(관리자)을 가지고 있는 계정의 RID 값으로 변조하는 공격 기법이다. 공격자는 RID 값을 변조함으로써 해당 계정이 관리자 권한을 가진 것처럼 시스템을 속일 수 있다. RID Hijacking을 수행할 때 공격자는 여러가지 계정을 이용할 수 있으며 유형은 다음과 같다.
- 시스템 내 존재하는 일반 사용자 계정 이용
- Guest 계정 활성화
- 새로운 계정 생성
RID Hijacking은 주로 SAM(Security Account Manager) 데이터베이스 조작을 통해 이루어진다. 공격자는 관리자 계정을 생성하거나 비밀번호를 알아내지 않고도 관리자 권한으로 권한 상승을 할 수 있게 된다.
2. RID Hijacking 공격 과정
침해사고 사례에서 확인된 RID Hijacking 공격 과정은 다음과 같다.

그림 1. RID Hijacking 공격 과정
2.1 SYSTEM 권한 상승
SAM 레지스트리는 Windows 내 인증과 권한 부여를 관리하고 사용자 계정 정보를 저장하고 있어 일반 관리자 권한으로는 접근할 수 없으며, SYSTEM 권한이 있어야만 접근 및 수정이 가능하다.
공격자들은 침투한 시스템의 SYSTEM 권한을 얻기 위해 권한 상승 도구인 PsExec, JuicyPotato 등을 사용한다. 이번 사례에서 공격자는 PsExec를 이용해 원격 명령으로 악성 파일을 실행했으며, 악성 파일은 SYSTEM 권한으로 동작했다.

그림 2. PsExec 명령 이용시 실행되는 파일 권한 예시 (SYSTEM)
2.2 로컬 사용자 계정 생성
공격자들은 시스템에 존재하는 사용자 계정을 이용하거나, 새로운 계정을 생성한다. 이번 사례에서 공격자는 계정을 생성해 RID Hijacking 공격을 수행했다.
공격자는 ‘net user’ 명령을 이용해 계정을 생성했다. 계정을 생성할 때 계정명에 끝에 $를 붙이면 해당 계정은 숨김 속성으로 생성되며, 이 경우 ‘net user’ 명령으로는 계정이 확인되지 않고 SAM 레지스트리에서 확인이 가능하다.

그림 3. 계정 생성 결과 확인(net user, registry)
이후, 공격자는 생성한 계정에 ‘net localgroup’ 명령으로 Remote Desktop Users 그룹 및 Administrators 그룹에 추가한다. Remote Desktop Users 그룹에 계정이 추가되면 RDP를 이용해 해당 계정으로 접근할 수 있다.
2.3 레지스트리 값 수정을 통한 RID 변경
RID Hijacking 공격은 SAM 레지스트리에 있는 계정의 RID 값을 수정해 Windows 운영체제에서 변경된 RID로 인지 하도록 하는 것이다. 따라서, 공격자들은 RID 값을 변경하기 위해 SAM 레지스트리의 값을 수정한다.
Windows 운영체제에서 사용자 계정과 관련된 레지스트리 키는 ‘HKEY_LOCAL_MACHINE\ SAM\SAM\Domains\Account\Users’ 경로에 저장되어 있으며, 사용자 계정의 RID는 각 계정 Key 하위 ‘F’ 값의 오프셋 0x30 – 0x33 영역에 리틀 엔디안 형식으로 4bytes가 기록되어 있다. 공격자는 해당 오프셋의 값을 Hijacking할 대상의 RID로 변경한다.

그림 4. SAM Registry의 계정 관련 Key

그림 5. 악성코드 내 RID 변경 기능
RID 값 변경이 완료되면, Windows OS에서는 공격자가 생성한 계정을 타깃 계정의 권한으로 인지해 권한 상승이 가능하다.
3. 공격자가 활용한 악성 파일
Andariel 공격 그룹은 RID Hijacking 공격을 수행하기 위해 직접 제작한 악성 파일과 오픈소스 도구를 활용했다. 두 악성 파일은 모두 ‘RID Hijacking 공격 과정’에서 설명한 공격 과정을 포함하고 있으나, 일부 기능의 차이점이 확인됐다.
|
Andariel 공격 그룹의 악성 파일 |
오픈 소스 도구 CreateHiddenAccount |
|
|---|---|---|
| 파일 구분 |
공격자 직접 제작 |
오픈 소스 |
| 권한 |
시스템 권한으로 실행 |
관리자 권한으로 실행 |
| 동작 과정 | 1. 계정 생성 및 그룹 추가(원격 데스크톱 사용자) 2. 생성한 계정 및 타깃 계정의 RID 가져오기 3. 생성한 계정의 레지스트리 F키 접근 및 타깃 계정의 RID 값으로 수정 4. 레지스트리 추출 5. 생성한 계정 삭제 6. 레지스트리 추가 |
1. 계정 생성 및 그룹 추가(관리자) 2. regini를 이용해 SAM 레지스트리 접근 3. 생성한 계정 및 타깃 계정의 RID 가져오기 4. 생성한 계정 삭제 5. reg 파일을 생성하고 기존 사용자의 레지스트리 값 복제 6. 레지스트리 추가 7. 계정 활성화 |
| 타깃 계정 |
피해 기업에 환경에 맞게 하드코딩 |
인자 값으로 지정 |
표 1. RID Hijacking 공격을 수행하는 악성 파일 비교
3.1 SAM 레지스트리 접근 권한 수정
RID Hijacking은 SAM 레지스트리 키에 대한 접근이 필요해 SYSTEM 권한이 필요하다. Andariel 공격 그룹이 직접 제작한 샘플은 시스템 권한이 없을 경우, 정상적으로 기능을 수행할 수 없다. 오픈 소스 도구 CreateHiddenAccount는 관리자 권한으로도 모든 기능이 동작한다. 해당 도구의 동작 과정을 분석한 결과, Windows 기본 프로그램인 regini를 사용해 권한을 부여하는 것으로 확인됐다.

그림 6. Administrators 권한으로 레지스트리에 접근하기 위해 regini.exe를 이용
regini는 Microsoft에서 제공하는 CLI 도구로, 텍스트 파일을 통해 Windows 레지스트리를 편집할 수 있는 도구다. 텍스트 파일 내 레지스트리 키 경로 및 권한을 지정해주면 레지스트리 키 생성, 수정, 삭제, 권한 변경 등 행위를 수행할 수 있다. CreateHiddenAccount에서 확인된 ini 파일은 RID Hijacking 공격을 위해 필요한 SAM 레지스트리의 접근 권한을 수정했다. 이 때 SAM 레지스트리 경로에 기본 권한 17(시스템 권한) 외 1(관리자 권한) 옵션을 추가해 관리자 권한으로 SAM 레지스트리 키 수정을 가능하도록 했다.

그림 7. ini 파일 내용 예시
3.2 레지스트리 추가 행위
Andariel 공격 그룹이 사용한 악성 파일은 숨겨진 계정을 생성하기 위해 계정명에 ‘$’를 포함하는 것 외에도 노출을 최소화하기 위한 추가적인 행위를 수행한다. 먼저, RID Hijacking 완료 후 ‘reg export’ 명령을 이용해 계정 관련 레지스트리 키를 추출한다.
|
행위 |
명령어 |
|---|---|
| 사용자 이름과 RID를 매핑하는 역할을 수행하는 키 추출 |
|
| 사용자 계정에 대한 모든 세부 정보 및 설정이 포함된 레지스트리 키 추출 |
|
표 2. 계정 관련 레지스트리 키 추출 행위 및 명령어
이후, 공격자 계정을 삭제하고 앞서 추출한 REG 파일을 이용해 레지스트리 키를 다시 추가한다. 이 과정을 거치게 되면 시스템 내 계정 목록을 확인하는 명령어 및 도구에서 해당 계정이 보이지 않는다. 다만, 시스템을 재부팅하게 되면 컴퓨터 관리의 ‘로컬 사용자 및 그룹’은 다른 방법들과 달리 계정이 다시 조회되며, 계정 여부를 확인할 수 있게 된다.
위 방법을 이용해 생성된 계정을 완벽하게 숨길 수는 없다. 하지만 공격자의 이러한 행위는 사용자에게 계정 노출을 최소화해 지속성을 유지하기 위한 의도로 해석된다.
|
구분 |
구분 상세 |
계정 확인 가능 여부 |
|
|---|---|---|---|
|
레지스트리 |
레지스트리 |
||
|
제어판 |
사용자 계정 |
O |
X |
|
컴퓨터 관리 |
로컬 사용자 및 그룹 |
O |
X |
|
명령 프롬프트(cmd) |
net user 명령 |
X |
X |
|
PowerShell |
Get-LocalUser 명령 |
O |
O |
|
WMIC |
useraccount 명령 |
O |
O |
|
레지스트리 편집기 |
HKEY_LOCAL_MACHINE\SOFTWARE\ |
X |
X |
|
HKEY_LOCAL_MACHINE\SAM\SAM\ |
O |
O |
|
표 3. 계정 목록 확인 방법과 재부팅 전, 후 계정 확인 가능 여부 비교