Windows Mitigations – understanding, tactics and tools

최근 Windows Mitigation 테크놀로지 자체가 너무 방대해 지고 있습니다. 이해를 높이기 위해서 종류를 나누자면, 먼저 많은 리서쳐들이 그 동안 공부해 왔고 관심이 많았던, exploit-focused mitigation들이 있습니다. 메모리 커럽션등에 대항해서 만들어진 ASLR, DEP, CFG, CET 같은 기술들이 이 범주에 들어 갑니다. 두번째로 Post-exploit mitigation들이 있습니다. 이 mitigation들은 exploiting 자체에 집중하기 보다는 exploit 성공후의 행위들, 즉 쉘코드나 프로세스 인젝션등의 behavior에 집중합니다. 대표적으로 EMET이나 WDEG, ASR, ACG 등을 들 수 있습니다. 세번째로는 하드웨어적인 가상화 기술에 기반한 VBS (Virtualization Based Security)가 있습니다. VBS는 사실 mitigation의 끝판왕으로 볼 수 있고 마이크로소프트에서 최근 몇년간 굉장히 심혈을 기울이고 있는 부분이기도 합니다. 그 외에 domain-specific한 mitigation들 (SMBv3)이나 PPL처럼 process의 self-protection과 관련된 mitigation 등등도 존재합니다.

Category Methods
Exploit-focused mitigation ASLR/DEP/CFG/CET/…
Post-exploit mitigation EMET/WDEG/ASR/ACG
VBS (Virtualization Based Security) UMCI/KMCI/HVCI/HyperGuard/Credential Guard
Process protection/isolation PPL/WDAG/Windows Sandbox
Domain-specific mitigation SMBv3

Exploit-specific Mitigations

위의 도표와 같이 Exploit-focused mitigations들의 상관 관계는 해커들과 벤더 사이의 지난 15년에서 20년 사이의 전쟁을 잘 보여 줍니다. 사실 해킹이나 exploit이라는 개념 자체가 처음 1988년 모리스웜으로부터 시작되었습니다. 센드메일 서버의 스택 오버 플로우 취약점을 통해서 전파된 이 웜은 위의 도표에서 Stack Overflow 와 Return Address Overwrite 두가지 방법을 통해서 Control Flow를 획득한 것으로 볼 수 있습니다. 그 당시 DEP라는 개념이 없었으므로 쉘코드는 바로 스택에서 사용할 수 있었고 이는 바로 Default +X Memory 방식이 될 것입니다. 또한 ASLR이 존재하지 않으니 Memory Contents Weakness 카테고리에서는 Instruction Address Prediction을 썼을 것입니다.

그 이후 30년의 시간이 흘렀지만, exploit과 mitigation 사이의 전쟁은 계속 되고 있습니다. Microsoft가 ASLR을 윈도우즈에 도입한 것도 2007년에 출시한 Windows Vista를 통해서 였습니다. 놀랍게도 이미 Morris Worm이 나온지 20여년이나 흐른 후였습니다. 그마저도 여러가지 엔트로피 문제 등으로 인해서 정말로 어느 정도 안전하다고 볼수 있는 ASLR은 Windows 8 이후에 구현 되었습니다.

중간의 길고 긴 여러 역사들을 건너 뛰어 지금의 상황은 Windows 8.1 과 Windows 10 플랫폼에 CFG가 도입 된지 시간이 좀 되었고, 중요 윈도우즈 프로그램들은 CFG가 모두 enable된 상태로 나옵니다. 2019년 상반기 현제 Edge 브라우저는 CFG가 도입 된지 조금 되었고, Office 제품군의 경우 64비트의 경우 CFG가 도입 되었습니다.

최근 몇년간 CFG로 인해서 그나마 많은 효과를 본 제품은 Adobe Flash Player이었다. 2010년대 초반 3-4년 정도 그리고 2016년 경 이후로 급격히 많은 Flash Player 0-day 들이 양산 되었는데, 사실 CFG를 도입하면서 이러한 0-day 들이 상당수 컨트롤이 되었습니다. 이후에는 CFG bypass를 하는 exploit들이 종종 나왔지만, 그 전에 비해서 상당히 고난이도의 exploit 방법론을 사용하지 않으면 안되었고, 그 만큼 exploit을 제작할 수 있는 공격자들의 범위도 줄어 들게 되었습니다. 이 과정에 직접 참여하여 실제 데이타와 리버스 엔지니어링 결과 등을 제공하면서 결과적으로 Adobe Flash Player 자체의 보안성을 강화 시키는 작업과 동시에 결국 Adobe Flash Player 자체를 업계에서 퇴출시킬 수 있는 여러 데이타를 제공하는데에 일조를 하기도 했습니다. 이러한 사례는 리버스 엔지니어링과 정확한 분석이 어떻게 현실 보안에 영향을 줄 수 있는지에 대한 흥미로운 사례가 될 것입니다.

지금 가장 큰 윈도우즈 exploit mitigation의 아킬레스건은 아이러닉칼하게도 “Return Address Overwrite”와 ROP입니다. 두가지 exploit 방법론의 역사는 너무나도 깁니다. ROP가 가장 먼저 언급된 논문은 2008년 UCSD생들이 내어 놓은 Return-oriented Programming: Exploitation without Code Injection입니다. 하지만, 사실 ROP는 1997년 발표된 Solar Designer의 return-into-libc 방법의 개념적 확장으로도 볼수도 있기 때문에 거의 20년 이상의 역사가 있다고 볼 수 있습니다. 아직까지 하드웨어, 소프트웨어적으로 “Return Address Overwrite”과 ROP를 직접적으로 방어할 수 있는 좋은 방법은 없습니다. 지금까지 제시된 방법들은 모두 ROP의 side-effect를 탐지하거나 방어하는 방법들이다. 이러한 두가지 문제는 Intel이 앞으로 출시할 CPU들에 탑재될 CET(Control-flow Enforcement Technology)를 통해서 해결 될 것으로 기대하고 있다. 하지만, 벌써 CET에 대한 많은 개념적인 취약점들이 블랙햇 등의 컨퍼런스를 통해서 논의되고 있는 실정이다.

그렇다면, Windows Mitigations 트레이닝에서 제공하는 가치는 무엇일까요? 일단 이러한 여러 exploit 방법론과 mitigation 방법론에 대한 정확한 정보와 최신 트렌드를 제공할 것입니다. 또한 hands-on을 통해서 실제 exploit이나 유사한 mock-up exploit을 통해서 어떻게 mitigation bypass들이 일어 나고, bypass를 어떻게 다시 mitigate하는지에 대해서도 논의해 볼 예정입니다. 만약 소프트웨어를 개발하는 벤더라면 이러한 유형의 정보는 굉장히 중요할 수 있습니다.

현실적으로 소프트웨어의 모든 취약점을 없앨 수 있는 실용적인 방법은 존재하지 않습니다. 취약점은 많은 경우 취약점 자체를 모두 제거하는 것보다는 취약점을 사용할 수 없는 환경을 만드는 mitigation을 통해서 중화 시키는 것이 때로는 효율적인 방법입니다. 중화 시키는 과정에서는 항상 그에 상응하는 리소스 사용과 프로세스 상의 비용이 따르게 됩니다. ASLR도 도입 초기 얼마나 많은 compatibility issue와 그것을 걱정하는 많은 개발자들의 저항에 부딪혔습니다. CFG를 지금 가지고 있는 자사의 코드 베이스에 적용시키려고 한다면, 한번에 모든 코드들이 제대로 작동할 것인가하는 질문들도 중요합니다. 아니면, compatibility issue가 생길 가능성이 있는가? 생긴다면, 어떻게 해결해야 할까? 이러한 질문들도 필요합니다.

또한 많은 mitigation들의 최대 약점은 어떠한 mitigation들이 100% 모든 mitigation target들에 적용되어야 한다는 것입니다. CFG를 예로 들면 99%의 indirect call을 instrument해서 call target check 루틴을 넣어도, 단 1개의 instrument 되지 않은 indirect call 만 찾으면 바이패스가 되는 경우가 많습니다. 이러한 mitigation miss를 어떻게 찾아 내고 검증할 것인가? 그렇다면 이렇게 번거로운 CFG를 도입하는 것이 과연 앞으로 자사 소프트웨어가 가질 exploit 문제들을 모두 해결해 줄 수 있을까? 기술적인 디테일과 방법론을 알지 못한다면, 이러한 질문에 답하기 힘듭니다. 이러한 의사 결정은 프러덕 시큐리티를 위한 리소스를 효율적으로 사용할 수 있는 토대가 됩니다. Mitigation이라는 것에 벤더들이 눈을 돌리면서 그나마 해커들과 벤더들의 게임은 해볼만 한 것이 되었다라는 점을 잘 상기해 볼 필요가 있습니다. 또한 이 코스는 이러한 mitigation에 대한 기술적인 이해를 제공합니다.

Time table

The following is the overall schedule over 5 day training course.

Day 1 - Exploit-focused Mitigations

Start End Name Description
10:00 10:30 Introduction Introduction, overview of the courses and hands-on preparations
10:30 10:40 Memory Corruption Methods Stack Overflow
10:40 11:30 Control Flow Hijack Return Address Overwrite/SEH Overwrite/SafeSEH/RFG/Shadow Stack
11:30 13:00 Lunch Group Lunch
13:00 13:20 Memory Corruption Methods Heap Overflow/UAF/ASLR
13:20 13:50 Memory Contents Weakness RW Primitives/Object Corruption/Heap Mitigations
14:00 17:00 Hands-on Adobe Flash Exploit Code Analysis - RW Primitives

Day 2 - Post-exploit Mitigations

Start End Name Description
10:00 10:50 Control Flow Hijack Vftable Corruption/CFG
11:00 11:50 Hands-on Adobe Flash Exploit Code Analysis - CFG Bypass
12:00 13:00 Lunch Group Lunch
13:00 13:50 Payload Execution Default +X Memory/DEP/+X Shellcode Via Virtual*/ACG/ROP/CET
14:00 14:50 Hands-on Word Exploit Analysis - ROP and syscall
15:00 15:50 Memory Threats Shellcode/Process Injection/Reflective DLL Injection/Process Hollowing
16:00 16:50 Hands-on Adobe Flash Exploit Code Analysis - Multi-stage Shellcode

Day 3 - Kernel

Start End Name Description
10:00 10:50 Memory Contents Weakness kASLR/Information Leak/RW Primitives/Tactical Mitigations/Vftable Corruption/kCFG
11:00 11:50 Code Execution Kernel to Userland Code Execution/SMEP/PTE Corruption/PTE Randomization/SMAP
12:00 13:00 Lunch Group Lunch
13:00 13:50 Hands-on Advanced Kernel Threat Analysis - RW Primitivies
14:00 14:50 Hands-on Advanced Kernel Threat Analysis - RW Primitivies
15:00 15:50 Hands-on Advanced Kernel Threat Analysis - Token Swapping
16:00 16:50 Hands-on Advanced Kernel Threat Analysis - Token Swapping

Day 4 - Rootkis/Application Whitelisting

Start End Name Description
10:00 10:50 Whitelisting Rootkits and SecureBoot
11:00 11:50 Whitelisting Application Whitelisting
12:00 13:00 Lunch Group Lunch
13:00 13:50 Hands-on Windows Rootkit Analysis
14:00 14:50 Hands-on Windows Rootkit Analysis
15:00 15:50 Hands-on Windows Rootkit Analysis
16:00 16:50 Hands-on Windows Rootkit Analysis

Day 5 - VBS (Virtualization Based Security)/Container/Self-protection/SMB

Start End Name Description
10:00 10:50 Container VBS (Virtualization Based Security)/WDAG/Windows Sandbox/PPL
11:00 11:50 SMB WannaCry vs SMBv3
12:00 13:00 Lunch Group Lunch
13:00 13:50 Hands-on Debugging & Analyzing WannaCry
14:00 14:50 Hands-on Debugging & Analyzing WannaCry
15:00 15:50 Hands-on Debugging & Analyzing WannaCry
16:00 16:50 Hands-on Debugging & Analyzing WannaCry

등록 정보