Windows 보호 프로세스 보호
이 짧은 블로그는 James Forshaw 와 Alex Ionescu가 처음 공개한 사용자 영역 Windows 익스플로잇을 다루는 2부작 시리즈 중 첫 번째 글입니다. 이 익스플로잇을 통해 공격자는 일반적으로 커널 드라이버가 필요한 높은 권한의 작업을 수행할 수 있습니다.
Protected Process Light
Windows 8.1은 Protected Process Light(PPL) 개념을 도입했습니다. 이 개념을 통해 특별히 서명된 프로그램은 관리자 사용자조차도 변조하거나 종료할 수 없도록 실행됩니다. 그 목적은 악성 코드가 제멋대로 실행되어 중요한 시스템 프로세스를 변조하거나 안티멀웨어 애플리케이션을 종료하지 못하도록 하는 것입니다. PPL에는 “레벨” 계층 구조가 있으며, 권한이 높은 레벨은 권한이 낮은 레벨에 의한 변조로부터 보호되지만 그 반대는 성립하지 않습니다.
PPL 프로세스에 대한 자세한 내용은 다음 리소스를 참조하십시오:
익스플로잇
상위 수준에서 볼 때, 이 익스플로잇 은 공격자가 KnownDlls 캐시(Windows DLL의 신뢰할 수 있는 목록)에 DLL을 추가할 수 있는 캐시 포이즈닝 공격입니다. KnownDlls는 PPL의 최고 형태인 WinTcb 프로세스만 쓸 수 있지만, DefineDosDevice API 구현의 버그로 인해 공격자가 WinTcb 프로세스인 CSRSS를 속여 자신을 대신해 캐시 항목을 생성하게 할 수 있습니다. KnownDlls는 Windows 로더가 신뢰하므로 PPL 프로세스 내부에서도 KnownDlls가 로드될 때 추가적인 보안 검사가 수행되지 않습니다. 캐시를 오염시킨 후, 공격자는 보호된 프로세스를 시작하여 결국 자신의 DLL을 로드하고 페이로드를 실행하게 합니다.
이 익스플로잇을 통해 공격자는 원하는 DLL을 PPL 프로세스에 주입할 수 있으므로 WinTcb 권한으로 모든 작업을 수행할 수 있습니다. Microsoft는 이 취약점 을 서비스할 의사가 없음 을 밝혔습니다. 이 취약점은 Windows 10 21H1 버전 10.0.19043.985에서 작동하는 것으로 확인되었습니다.
오픈 소스
당사가 파악한 최초의 공개 익스플로잇 POC는 최근 출시된 PPLDump입니다. 이는 도구 로, RunAsPPL 모드의 LSASS와 같은 모든 PPL 프로세스를 덤프할 수 있습니다. PPLDump가 출시된 지 몇 주 후, Sealighter-TI 가 출시되었습니다. 이 도구는 PPLDump 익스플로잇 코드를 재사용하여 일반적으로 NDA 하의 안티멀웨어(AntiMalware) 기업에만 제한적으로 제공되는 Threat-Intelligence ETW 피드에 대한 액세스 권한을 부여합니다. Sealighter-TI의 빠른 전환은 익스플로잇 코드를 재사용하여 새로운 페이로드를 실행하는 것이 얼마나 쉬운지를 보여줍니다.
익스플로잇 코드가 공개됨에 따라 공격용 도구가 이를 빠르게 활용하여 WinTcb PPL로 페이로드를 실행할 것으로 예상됩니다. 이를 통해 다음이 가능해집니다:
- LSASS가 PPL로 실행되도록 강화된 경우에도 엔터프라이즈 자격 증명을 덤프합니다.
- 보안 제품과 같은 PPL 프로세스를 종료하거나 조용히 비활성화합니다.
- 전체 임플란트를 WinTcb PPL 프로세스로 실행합니다. 이러한 임플란트는 사용자 모드 보안 제품으로 검사하거나 종료할 수 없습니다. Microsoft는 보안 제품을 WinTcb보다 권한이 낮은 AntiMalware PPL로 제한합니다.
- 기존 PPL 프로세스에 코드를 주입합니다. Windows Defender 내부에서 Cobalt Strike의 비컨(beacon) 페이로드를 실행한다고 상상해 보십시오.
취약점 차단
공개된 완화 조치가 없는 이 취약점을 확인하고, 이를 차단하기 위해 PPLGuard라는 도구를 출시합니다. 허가를 받아 PPLDump 코드 베이스를 기반으로 제작된 PPLGuard는 익스플로잇을 사용하여 먼저 WinTcb PPL로 권한을 상승시킨 다음, KnownDlls 개체 디렉터리를 읽기 전용으로 만드는 DACL 을 적용합니다. 이는 CSRSS가 새로운 항목을 추가하지 못하도록 하여 익스플로잇을 차단하며, 이는 익스플로잇 체인에서 중요한 단계입니다. 이 DACL은 메모리에만 존재하므로 재부팅 시 삭제됩니다.
PPLGuard가 익스플로잇이 의존하는 취약점을 차단하므로, 이후의 실행은 실패하게 됩니다.
C:\git\PPLGuard>x64\Release\PPLGuard.exe [+] KnownDlls 강화 성공! :) C:\git\PPLGuard>x64\Release\PPLGuard.exe [-] DefineDosDevice가 오류 코드 5로 실패했습니다 - 액세스가 거부되었습니다.
PPLGuard 개념 증명 도구는 여기에서 찾을 수 있습니다.
결론
이 블로그에서는 Windows 권한 상승 익스플로잇을 다루고 악용된 취약점을 완화하는 오픈 소스 도구를 제공했습니다. 이 블로그의 2부에서는 Elastic Security를 사용하여 이러한 유형의 공격을 탐색하는 방법을 다룰 예정입니다. 계속 지켜봐 주십시오.
그동안 Elastic Cloud의 Elasticsearch 서비스 에서 최신 버전을 체험해 보시기 바랍니다. 또한 성공을 위한 준비를 위해 빠른 시작 교육 을 활용해 보십시오.
업데이트 2021. 6. 3.: 이 블로그가 작성된 후, 누군가가 PPLDump 익스플로잇을 .NET으로 포팅하여 Cobalt Strike 비콘을 WinTCB PPL로 실행했습니다.