인텔 CPU 보안 기능과 공격의 역사
최근 인텔에서 2020년 하반기를 목표로 Tiger Lake 출시를 선언했습니다. 이 CPU에는 그 동안 기대에 부풀어 있었던 인텔 CET가 탑재 될 예정입니다. 이 CPU는 기본적으로 Shadow Stack과 Control Flow Enforcement를 통해서 ROP와 함께 Stack Return Address Overwrite을 근본적으로 막을 수 있는 기능을 탑재하고 있습니다. 이로서 여러 주변적인 방어 장치들에 의존했던 기존의 인텔 플랫폼에서의 보안 시스템이 조금 더 근원적인 방어책을 가지게 되었습니다.
이 아티클에서는 지금까지 인텔 CPU에 어떠한 방어 장치들이 어떻게 도입 되었고, 어떠한 공격들이 진행 되어 왔는지에 대해서 간략하게 정리해 보겠습니다.
Prescott (2004/2)
지금 관점에서는 놀랍게도 2004년 이전까지는 인텔의 CPU에 메모리 페이지에 접근 권한 특히 실행 권한을 설정할 수 있는 기능이 없었습니다. 그래서, 데이타와 코드가 CPU의 관점에서 정확하게 구별이 되지 않았고, 데이타의 형태로 쉘코드를 세팅하고 코드의 콘트롤 플로우를 넘기면 바로 쉘코드가 실행되는 것이 가능했습니다.
AMD64에서 Page Table에 XN (Execute Never) 비트를 도입한 후에 인텔 CPU에 최초로 XD 비트가 도입된 CPU가 바로 Prescott입니다. 이로서 인텔 플랫폼에서 시스템들이 익스플로잇과의 경쟁에서 한단계 우위를 점유할 수 있다라는 믿음이 널리 퍼지기 시작했습니다.
Nehalem (2008/11/11) - 1st Generation Core
Nehalem에서는 Hyper-threading이 도입 되었고, IOMMU Directed I/O (VT-d)와 Extended Page Table (EPT) 등이 도입 되면서 본격적으로 하드웨어 기반의 가상화 기술이 도입되게 됩니다. 이는 향후 가상화에 기반한 여러 보안 테크놀로지의 발전의 시초가 됩니다.
- Hyper-threading reintroduced
- Second-generation Intel Virtualization Technology, which introduced Extended Page Table support, etc
- IOMMU Directed I/O (VT-d) introduced
또한 MSR에 LBR 레코딩을 위한 레지스터들이 추가 되었습니다. LBR을 통해서 코드가 어떠한 브랜치를 타고 컨트롤 플로우가 움직이는지 추적이 가능하게 되었습니다.
- Provides 16 pairs of MSR to record LBR (Last Branch Record) information
Sandy Bridge (2011) - 2nd generation core
Sandy Bridge에서는 vPro remote-control기능이 추가 되어서 AMT를 통해서 CPU에 원격 접근이 가능해 졌습니다. 향후 AMT의 경우 많은 취약점들이 많이 발견되는 시초가 되었습니다.
Ivy Bridge (2012/4/29) - 3rd Generation Core
3세대 CPU로서 SMEP과 Itenl Secure Key가 도입 되었습니다. SMEP은 커널 익스플로잇들이 유저랜드의 코드를 실햏하는 것을 막을 수 있도록 고안된 Ring 0와 3 사이의 메모리 권한을 분리하는 장치입니다. 이로서 커널 익스플로잇들은 기존에 유저랜드에 쉘코드를 심었던 방식에서 탈피하여 더 어려운 접근 방법을 선택해야 했습니다.
Haswell (2013/6/5) - 4th Generation Core
-
Intel Boot Guard가 도입 되어서 부트로더의 변조를 방지합니다. CPU 내부에 트러스트하는 부트 로더 발행자의 인증서 해쉬값을 인각하여 물리적으로 CPU를 교체하기 전까지 해당 시스템에서 변조된 부트로더가 올라 오는 것을 막습니다.
-
Transactional Synchronization Extensions (TSX-NI)가 도입 되었습니다.
Broadwell (2014/10/27) - 5th Generation Core
-
SMAP이 도입되었습니다. 이로서 커널 익스플로잇이 유저랜드의 데이타를 억세스하는 것을 방지하게 되었습니다.
-
Processor Trace가 도입 되었습니다. Intel Architecture Software Developer Manuals Volume 3, Chapter 36 에 상세한 기술적인 내용이 기술 되었습니다.
Skylake (2015/8) - 6th Generation Core
-
Windows 10 이전 오퍼레이팅 시스템이 공식적으로 서포트하는 CPU 모델입니다.
-
Mode-Based Execute (MBE)가 도입되었습니다. 이전 Extended Page Tables (EPT)보다 더 세밀한 실행 권한 설정이 가능해 졌습니다.
-
이전에 도입된 PT 기능이 성숙되어 실제로 사용 가능한 첫번째 프로세서입니다. Windows 10 RS5 이후에는 윈도우즈 자체에서 Intel PT를 이용한 트레이싱 기능을 제공합니다.
-
Intel SGX (Software Guard Extensions)가 도입 되었습니다. SGX는 일종의 프라이빗 메모리 기술로서 슈퍼 유저 권한을 가진 코드들도 그 내용을 억세스 할 수 없는 일종의 enclave 저장 장치로서 구현되었습니다. 하지만, 이후 사이드 채널 어택등 수많은 공격 방법들이 발표 됨으로 인해서 실용적인 측면에서의 적용은 어려움을 겪고 있습니다.
-
Xeon Scalable Family에서는 Protection Key (aka MPK)가 도입되었습니다.
Kaby Lake (2016/8/30) - 7th Generation Core
-
Windows HVCI (Hypevisor Code Integrity)가 서포트하는 첫번째 CPU입니다. HVCI를 통해서 가상화된 환경에서 말웨어와 익스프로잇에 대한 방어가 강화되었습니다.
-
PTWRITE 인스트럭션이 도입 되었습니다. 이 명령을 사용하여 Intel PT 데이타 스트립에 데이타를 써 넣는 작업이 가능해졌습니다.
TLB Side Channel Attack using TSX Disclosed (2016/8/3)
- DrK: Breaking Kernel Address Space Layout Randomization with Intel TSX - TSX를 이용한 커널 ASLR 우회에 대한 논문이 발표 되었습니다.
Control-flow Enforcement Technology Preview Released (2016/6)
-
인텔의 차세대 CPU 패밀리의 보안 강화책에 대한 백서인 Control-flow Enforcement Technology Preview가 발표 되었습니다. 여러 보안 기능 추가 중에서 다음 두가지 기능으로 인해서 보안상의 여러 강점을 가질 것으로 예상 됩니다.
-
Shadow Stack: 기존 스택의 카피본을 공격자가 억세스 할 수 없는 장소에 보관하여 스택을 참조한 컨트롤 플로우 변화(ex. ret 명령어)가 일어날 경우 이를 탐지하고 중지합니다.
-
Indirect Branch Tracking: 메모리의 컨텐츠를 참조하여 컨트롤 플로우를 변경하는 여러 명령어들에 대해서 새로운 마커 인스트럭션들을 도입하여 의도 되지 않은 주소로의 컨트롤 플로우 변경을 방지합니다.
-
RFG Dropped (2017/1)
- 마이크로소프트에서 인텔의 Shadow Stack과 비슷한 개념의 RFG를 개발하다가 중지를 선언하게 됩니다.
- Jan 31, 2017: Return Flow Guard experimental mitigation was removed from the list of in scope mitigations - Mitigation Bypass and Bounty for Defense Terms
- 이후 발표를 통해서 근본적인 레이스 컨디션으로 인해서 소프트웨어적인 Shadow Stack의 근원적인 문제가 공개 되었고, 차후 Intel CET만이 이를 해결할 수 있음이 인정 되었습니다.
AMT SOL 백도어 발견 (2017/6/7)
-
마이크로소프트의 WDATP 팀에 의해서 주로 동남아시아를 대상으로 활동하는 APT그룹인 PLATINUM이라는 그룹이 Intel AMT의 SOL (Serial-Over-Lan)을 통해서 통신하는 말웨어를 발견했다고 발표했습니다. 이는 여러 디텍션 툴과 엔드포인트툴의 네트워크 트래픽 탐지 기능 회피를 위한 것으로 보입니다.
Coffee Lake (2017/10) - 8th Generation Core
GCC 8 introduced CET code generation (2017/10)
이 시기부터 Control-Flow Enforcement Technology Begins To Land In GCC 8에서 보는 바와 같이 CET 서포트 코드가 체크인 되기 시작합니다. 실물 CPU가 존재하지 않기 때문에 에뮬레이터를 통해서 테스트가 진행 됩니다.
Memory Encryption Technologies Specification Released (2017/12)
-
MET 에 대한 스펙 문서들이 공개 됩니다.
Meltdown and Spectre Attacks Disclosed (2018/1)
- Meltdown and Spectre 공격 방법에 대한 리서치가 발표 됩니다.
- 초기 Meltdown 이슈가 많이 문제였지만, 차차 Spectre 이슈를 쉽게 픽스할 수 있는 방법이 없다라는 사실이 알려지게 됩니다.
Retpoline and KPTI mitigation details disclosed (2018/1/4)
- 멜트 다운과 스펙터 이슈에 대한 여러가지 소프트웨어적인 패치들이 발표 됩니다.
CET code is noticed in Windows 10 RS5 (2018/5/29)
지금은 삭제된 Alex Ionescu의 CET is coming in RS5 ;-)이라는 트윗을 통해서 Windows RS5에 CET와 관련된 코드가 탑재 되었음이 알려집니다.
Retpoline mitigation rolling out to Windows 10 preview (2018/12)
- Windows 10 프리뷰에 구글에서 제시했던 Retpoline 미티게이션이 탑재 됩니다.
Retpoline mitigation rolling out to Windows 10 releases (2019/2)
- Windows 10 정식 릴리즈에 Retpoline 미티게이션이 포함됩니다.
Intel CET에 대한 공격 방법 발표 (2019/3)
- 아직 정확한 하드웨어 구현체가 나오지 않은 상태에서 CET에 대한 이론적인 공격 방법들이 발표 되기 시작합니다.
Intel Tiger Lake Announcement (2020/6/15)
- 드디어 2020년 하반기 Tiger Lake에 Intel CET 기술이 탑재 될 것이 발표됩니다.
- Intel CET는 다음과 같은 두가지 핵심 기술을 구현하여 말웨어와 익스플로잇으로부터의 공격을 CPU 레벨에서 막아 줍니다.
-
IBT (Indirect Branch Tracking): ENDBRANCH 명령이 도입되어, indirect jump는 ENDBRANCH 명령으로만 점프가 가능해집니다. 이 공격 방법은 vtable corruption이나 ROP 등의 공격 방법에 대한 근원적인 해결책이 될 수 있습니다.
-
SS (Shadow Stack): 기존 스택에 대한 카피를 안전한 장소에 항상 보관해 놓고, 리턴 인스트럭션 (ret) 등이 실행 될 때에 스택의 변조를 확인하는 방법으로 ROP나 Return Address Overwrite 등의 공격에 대해서 방어합니다. 1980년대 말 처음 발견 되었던 스택 리턴 주소 corruption 기법에 대한 근원적인 해결책이 드디어 구현될 예정입니다.
-
트레이닝 정보
다른그림은 Threat 인텔리젼스와 지식 제공 회사로서 다음과 같은 Windows Mitigation과 관련된 트레이닝을 제공합니다. 많은 관심 바랍니다.