
Win10Pcap 드라이버를 악용하여 프로세스 토큰에서 일부 권한을 활성화 (로컬 권한 상승)
크레딧
https://twitter.com/R00tkitSMM ([email protected]) 텔레그램 사용자 이름 : https://telegram.me/firozi
며칠 전 저는 win10pcap 드라이버에서 권한 상승으로 이어질 수 있는 취약점을 발견했습니다. 취약점을 보고했고 이제 버그는 수정되었습니다:
그래서 샘플 익스플로잇을 공개하기로 결정했습니다.
Win10Pcap은 WinPcap 기반의 새로운 이더넷 패킷 캡처 라이브러리입니다. 원래 WinPcap과 달리 Win10Pcap은 Windows 10에서 안정적으로 작동하도록 NDIS 6.x 드라이버 모델과 호환됩니다. Win10Pcap은 또한 IEEE802.1Q VLAN 태그 캡처를 지원합니다.
그러니 Windows 10에 Wireshark를 설치한다면 이게 필요합니다 :)
Win10Pcap 커널 모드 드라이버는 사용자 모드에서 전달된 가상 주소를 확인하지 않았습니다. IOCTL은 Neither Buffered Nor Direct I/O를 사용하며 전달된 주소를 검증하기 위한 ProbeForWrite 없이 동작했습니다.
IOCTL을 보내려면 런타임에 정확한 장치 이름을 찾아야 합니다. 하드코딩된 장치 이름은 취약한 코드에 도달하지 못합니다.
IOCTL 핸들러는 전달된 주소에 문자열을 씁니다. 그 문자열은 "Global\WTCAP_EVENT_3889023063_1" 같은 형태입니다.
이 취약점을 악용하는 방법은 여러 가지가 있었습니다. 저는 _SEP_TOKEN_PRIVILEGES를 덮어써서 프로세스 TOKEN에 권한을 설정하기로 결정했습니다.
주소 0x034의 토큰을 "Global\WTCAP_EVENT" 문자열로 덮어쓰면 민감한 필드를 손상시키지 않고 SeDebugPrivilege를 설정할 수 있습니다.
81687cf8 cc int 3
2: kd> dt nt!_TOken
+0x000 TokenSource : _TOKEN_SOURCE
+0x010 TokenId : _LUID
+0x018 AuthenticationId : _LUID
+0x020 ParentTokenId : _LUID
+0x028 ExpirationTime : _LARGE_INTEGER
+0x030 TokenLock : Ptr32 _ERESOURCE
+0x034 ModifiedId : _LUID
+0x040 Privileges : _SEP_TOKEN_PRIVILEGES
+0x058 AuditPolicy : _SEP_AUDIT_POLICY
