EFLAGS 레지스터와 Jcc를 이용한 side-channel

dusty
8 min readMay 18, 2023

(Velog에 작성한 글을 옮긴 아티클입니다.)

Side-channel attack은 프로토콜이나 알고리즘 자체의 취약점이 아닌, 구현 방식에 의해 수집 가능한 추가적인 정보에 기반한 공격입니다. Timing, Power-monitoring (eg. Differential Power Analysis), Differential Fault Analysis (eg. Fault Injection) 어떤 방식으로 정보를 수집하는지에 따라 다양한 종류가 존재합니다.

CPU에 대한 side-channel attack은 2018년 발표된 Spectre와 Meltdown 공격 이후 주목을 받기 시작했습니다. Spectre의 경우 이후에 많은 variant들이 발견되었으며, 이외에도 Foreshadow, RIDL 등 다양한 공격이 발견되었습니다. CPU의 설계 및 구조적 특성에 의해 발생하는 이러한 취약점을 transient execution vulnerability라고 부릅니다.
Spectre와 Meltdown을 통해 데이터를 획득한 다음, 주로 cache side-channel을 이용하여 획득한 데이터를 추출하게
됩니다. [1][2]

이번 아티클에서는 cache side-channel 외에 일부 Intel CPU에서 사용 가능한 timing side-channel을 발견한 논문에 대해 간단하게 다뤄보려 합니다.

1. Backgrounds

1.1 현대적인 CPU의 구조

현대적인 CPU는 Speculative Execution, Out-of-order Execution 등 다양한 기법을 사용합니다.

Speculative Execution은 (Branch Predictor 등 다양한 하드웨어를 사용하여) 추후에 실행될 명령을 예측하여 미리 실행하는 최적화 기법입니다.

Out-of-Order Execution의 경우, 프로세서가 명령어를 순차적으로 실행하지 않고, 명령어 (및 데이터) 간의 종속성과 사용 가능한 하드웨어 자원의 상태 등에 따라 명령어를 재배치하여 실행하여, 하드웨어 자원의 낭비를 막는 등의 최적화 기법입니다.

Fig 1. Intel Sunny Cove의 Block Diagram

Fig.1은 Intel의 Sunny Cove의 블록 다이어그램입니다. [3] 메모리에 관련된 하드웨어를 제외하면, opcode 실행에 관련된 부분이 명령어를 읽고, 이를 uOp (micro-operations)으로 나누어 Execution Engine에 전달하는 Front End와, uOp을 재배치하여 실행하는 Execution Engine 크게 두 가지로 나뉘는 것을 확인할 수 있습니다.

1.2 TSX

TSX (Transactional Synchronization Extension, TSX-NI로도 칭함)은 Transactional Memory를 하드웨어로 구현한 ISA extension입니다. Intel의 Haswell CPU 일부부터 탑재되었으며, TAA (TSX Asynchronous Abort) 취약점 등으로 인해 마이크로코드 업데이트 등을 이용해 비활성화 되다가 데스크탑 10세대 CPU (Comet Lake 및 Ice Lake)부터 지원을 중단했습니다.

Fig 2. TSX를 이용하는 minial code snippet [4]

TSX를 사용하여 transaction을 진행하던 중, Synchronous Exception (#GP, #PF 등)이 발생하면 해당 exception은 발생하지 않은 것으로 처리되면서, 등록된 abort handler를 실행하게 됩니다. [4][5]

2. 새로운 Timing Side-channel

Fig 3. ZF와 JZ를 이용한 timing side-channel의 개요 [6]
Fig 4. (TSX를 활용한) 새로운 side-channel 공격 예시 코드 [6]

[6]에서는 Transient Execution의 결과로 변화한 ZF의 상태에 따라, JZ 명령어의 실행 시간에 차이가 발생하는 현상을 다룹니다. ZF가 0에서 1로 변하는 경우, 뒤따르는 JZ 명령어의 실행 시간이 그렇지 않을 때보다 길어지게 됩니다. 다만 이러한 현상은 cache side channel에 비해 지속 시간이 훨씬 짧아, 6–9 사이클 이후에는 side-channel을 구축할 수 없을 정도이며, 높은 정확도를 위해서는 수천 번의 시도가 필요하다고 합니다.

논문 저자들은 가능한 mitigation으로 하드웨어 구현 변경, (약 10 사이클 정도) 후속 Jcc 명령어 실행 지연, LAHF 및 SAHF 명령어 등을 이용한 EFLAGS 덮어쓰기 등을 제시합니다.

3. Future works

저자들은 인텔 Skylake 및 Kaby Lake CPU에 대해서만 이러한 현상을 확인했는데, 보다 최신의 Intel CPU 및 AMD의 x86–64 구현에서는 유사한 현상이 발생하지 않는지 실험해볼 수 있을 것 같습니다.

또한 x86–64 이외의 다른 아키텍쳐 구현에서는 이러한 현상이 발생하지 않는지에 대한 실험도 흥미로울 것 같습니다. (eg. Apple A 및 M 시리즈, Ampere 등의 고성능 arm64 CPU)

See Also

Canella, Claudio, Jo Van Bulck, Michael Schwarz, Moritz Lipp, Benjamin Von Berg, Philipp Ortner, Frank Piessens, Dmitry Evtyushkin, and Daniel Gruss. “A Systematic Evaluation of Transient Execution Attacks and Defenses.” In USENIX Security Symposium, pp. 249–266. 2019.(https://transient.fail/)

Yarom, Yuval, and Katrina Falkner. “FLUSH+ RELOAD: A high resolution, low noise, L3 cache side-channel attack.” In 23rd {USENIX} Security Symposium ({USENIX} Security 14), pp. 719–732. 2014.

References

[1] P. Kocher et al., “Spectre Attacks: Exploiting Speculative Execution,” 2019 IEEE Symposium on Security and Privacy (SP), San Francisco, CA, USA, 2019, pp. 1–19, doi: 10.1109/SP.2019.00002.
[2] Lipp, Moritz, Michael Schwarz, Daniel Gruss, Thomas Prescher, Werner Haas, Stefan Mangard, Paul Kocher, Daniel Genkin, Yuval Yarom, and Mike Hamburg. “Meltdown.” arXiv preprint arXiv:1801.01207 (2018).
[3] https://en.wikipedia.org/wiki/Sunny_Cove_(microarchitecture)
[4] Yeongjin Jang, Sangho Lee, and Taesoo Kim. 2016. Breaking Kernel Address Space Layout Randomization with Intel TSX. In Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security (CCS ‘16). Association for Computing Machinery, New York, NY, USA, 380–392. https://doi.org/10.1145/2976749.2978321
[5] Intel® 64 and IA-32 Architectures Software Developer Manuals (https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html)
[6] Jin, Yu, Pengfei Qiu, Chunlu Wang, Yihao Yang, Dongsheng Wang, and Gang Qu. “Timing the Transient Execution: A New Side-Channel Attack on Intel CPUs.” arXiv preprint arXiv:2304.10877 (2023).

--

--