
AMD AmdTools64.sys의 MSR 읽기/쓰기 IOCTL을 악용하여 IA32_LSTAR를 덮어쓰고, SMEP를 우회하며, Windows 10 x64에서 관리자에서 SYSTEM으로 권한을 상승시키는 개념 증명(PoC)입니다.
안녕 해커들.
AmdTools64.sys는 AMD uProf와 함께 제공되는 서명된 Special Tools 드라이버입니다. UAC 우회도 없고, 표준 사용자 경계도 없습니다. 핸들만 확보하면 MSR 인덱스에 대한 화이트리스트가 없으므로 원하는 MSR을 마음대로 읽고 쓸 수 있습니다.
읽기 쪽은 그 자체로 이미 KASLR을 깨뜨립니다. IA32_LSTAR(0xC0000082)를 읽으면 드라이버가 ntoskrnl!KiSystemCall64를 공짜로 넘겨줍니다. 진짜 문제는 쓰기 쪽입니다. IA32_LSTAR는 모든 syscall에서 CPU가 점프하는 주소이며, 드라이버는 일반 사용자가 이를 덮어쓸 수 있게 해줍니다. 이를 자신이 제어하는 코드로 지정하면 다음 syscall이 CPL0에서 여러분의 코드를 실행합니다. 방해물은 SMEP뿐이므로, 익스플로잇은 먼저 IA32_LSTAR를 읽어 ntoskrnl을 찾고, 디스크에서 임포트 디렉터리를 파싱하고, mov cr4, rax로 SMEP를 해제할 가젯 몇 개를 찾은 뒤, SYSTEM 토큰을 현재 프로세스에 복사하는 작은 셸코드를 실행하고, 빠져나오면서 IA32_LSTAR를 복원해 머신이 계속 동작하도록 합니다.
IOCTL은 두 개뿐이며 그게 전부입니다. 0xFFF02804는 MSR을 읽고 0xFFF02808은 MSR을 쓰며, 둘 다 20바이트 버퍼를 사용하고 인덱스 검증이 없습니다. 디스패처는 버퍼 길이만 확인합니다. 물리 메모리 읽기/쓰기와 사용자 모드 물리 매핑(0xFFF0281C, 0xFFF02820, 0xFFF028A4)도 있지만, 매핑 경로는 임의의 RAM에서 PFN_LIST_CORRUPT를 유발할 수 있으므로 여기서는 MSR 경로를 사용합니다.
Windows 10 x64 22H2(빌드 19045.6456)와 AMD uProf 5.3.521.0에서 테스트했습니다. 드라이버 버전은 1.7.16.218입니다. 레이스도 힙 그루밍도 없이 실행할 때마다 매번 성공했습니다. 이 드라이버는 uProf와 함께 제공되며 많은 AMD 머신에 설치되어 있으므로 이미 로드되어 있습니다. 스크린샷은 Win10 박스입니다. whoami가 이전에는 subhan\windows10이었고 이후에는 nt authority\system입니다.

Windows 11 26300에서는 드라이버를 설치하고 IA32_LSTAR를 읽을 수 있었지만, Memory Integrity가 켜져 있으면 LSTAR에 대한 wrmsr이 실패합니다. VBS/HVCI가 이를 가로챕니다. 알려진 Win11 EPROCESS 레이아웃은 UniqueProcessId 0x1D0, ActiveProcessLinks 0x1D8, Token 0x248, ImageFileName 0x338이며, 해당 빌드의 PsGetProcessId, PsReferenceProcessToken, PsGetProcessImageFileName과 대조해 확인했습니다.
핵심 가치는 서명된 드라이버와 커널 프리미티브입니다. 관리자가 AMD 드라이버를 로드해 링 0 코드 실행을 얻을 수 있습니다. 여기서의 LSTAR-to-SYSTEM 체인은 익스플로잇 부분이며, 새로운 드라이버 발견이 아닙니다.
2026-08-17에 AMD PSIRT에 보고했습니다. 그러나 그들은 이 격차를 인정하지 않기 위해 할 수 있는 모든 일을 했고, 심지어 제 주소에서 더 이상 이메일을 보낼 수 없도록 Gmail에서 저를 차단했습니다. 이것은 시작에 불과합니다. 앞으로 AMD 제품에 관한 제 발견을 그들과 직접 또는 그들의 다른 채널을 통해 공유하지 않을 것입니다. 계속해서 바로 여기에서 모든 것을 공유하겠습니다. 계속 지켜봐 주시고, 해킹을 계속하세요!