
정밀한 엔클레이브 실행 제어를 위한 실용적인 공격 프레임워크
SGX-Step은 Intel x86 프로세서, 특히 Intel SGX 플랫폼에서의 부채널 공격 연구를 용이하게 하기 위한 오픈소스 프레임워크입니다. SGX-Step은 적대적 Linux 커널 드라이버와 사용자 공간에서 신뢰할 수 없는 페이지 테이블 엔트리 및/또는 x86 APIC 타이머 인터럽트를 완전히 구성할 수 있는 작은 사용자 공간 운영 체제 라이브러리로 구성됩니다. SGX-Step은 우리의 연구뿐만 아니라 독립적인 연구자들에 의해 활용되어, 최대 시간 해상도(즉, 모든 단일 명령어 후에 피해자 엔클레이브를 인터럽트)에서 부채널 관찰을 수집하는 여러 가지 새롭고 개선된 엔클레이브 실행 공격을 가능하게 했습니다.
라이선스. SGX-Step은 GPLv3 하에 라이선스된 자유 소프트웨어입니다. SGX-Step 로고는 Eadweard Muybridge의 상징적인 퍼블릭 도메인 "Sallie Gardner at a Gallop" 사진 시리즈에서 파생되었으며, 이는 엔클레이브 단일 스테핑 목표와 마찬가지로, 질주하는 말의 역학을 일련의 개별 사진 프레임으로 분해하여 말의 보행 특성을 드러냅니다.
| SGX-Step 릴리스 | 변경 로그 기능 |
|---|---|
| v1.5.0 | 안정화 수정(KPTI, 커널 ISR 매핑); (실험적) Gramine 포트; IPI 지원. |
| v1.4.0 | 권한 있는 인터럽트/호출 게이트(Plundervolt). |
| v1.3.0 | 일시적 실행 지원(Foreshadow). |
| v1.2.0 | 사용자 공간 인터럽트 처리 및 결정론적 제로-스텝 필터링(Nemesis). |
| v1.1.0 | IA32 지원. |
| v1.0.0 | 사용자 공간 페이지 테이블 조작 및 APIC 타이머 단일 스테핑. |
출판물. SGX-Step은 여러 독립적인 연구 그룹에 의해 사용되었으며, 고해상도 SGX 공격의 새로운 라인을 가능하게 했습니다. SGX-Step을 사용하는 알려진 프로젝트의 전체 최신 목록은 이 README의 하단에 포함되어 있습니다. 원본 논문의 사본은 여기에서 확인할 수 있습니다.``` @inproceedings{vanbulck2017sgxstep, title = {{SGX-Step}: A Practical Attack Framework for Precise Enclave Execution Control}, author = {Van Bulck, Jo and Piessens, Frank and Strackx, Raoul}, booktitle = {2nd Workshop on System Software for Trusted Execution {(SysTEX)}}, publisher = {{ACM}}, pages = {4:1--4:6}, month = Oct, year = 2017, }
**데모.** [app/memcmp](https://github.com/jovanbulck/sgx-step/blob/HEAD/app/memcmp) 디렉터리에는 SGX-Step 공격의 강력함을 보여주는 소형 데모 애플리케이션이 포함되어 있습니다. 이 애플리케이션은 미묘하고 non-constant-time `memcmp` 비밀번호 비교 로직을 포함하는 샘플 enclave를 단일 스텝(single-stepping)으로 실행합니다. 기존의 노이즈가 심한 타이밍 공격과 달리 SGX-Step은 비밀번호를 문자별로 _선형_ 시간에 결정론적으로 무차별 대입(brute-force)할 수 있습니다:

## 개요
SGX-Step 설계의 핵심은 이전의 enclave 선점 제안과 달리, 페이지 테이블 엔트리를 보유한 물리적 메모리 위치, 로컬 APIC 메모리 매핑 I/O 설정 레지스터, 그리고 x86 인터럽트 기술 테이블(IDT)에 대한 사용자 공간 가상 메모리 매핑을 생성하는 데 있습니다. 이를 통해 신뢰할 수 없는 공격자 제어 호스트 프로세스는 사용자 공간 _내에서_ (i) enclave 페이지 테이블 엔트리를 쉽게 추적하거나 수정하고, (ii) APIC 타이머의 단발/주기적 인터럽트 소스를 설정하며, (iii) 프로세서 간 인터럽트를 트리거하고, (iv) 커스텀 인터럽트 핸들러를 등록할 수 있습니다.

위 그림은 우리의 프레임워크를 통해 SGX enclave를 인터럽트하고 재개할 때의 하드웨어 및 소프트웨어 단계 시퀀스를 요약합니다.
1. 로컬 APIC 타이머 인터럽트가 enclave 명령어 내에 도착합니다.
2. 프로세서는 AEX 절차를 실행하여 enclave의 SSA 프레임에 실행 컨텍스트를 안전하게 저장하고, CPU 레지스터를 초기화한 후, IDT에 등록된 (사용자 공간) 인터럽트 핸들러로 벡터링합니다.
3. 이 시점에서 공격별 스파이 코드(spy code)를 쉽게 플러그인할 수 있습니다.
4. 라이브러리는 사용자 공간 AEP 트램펄린으로 돌아갑니다. 우리는 공식 SGX SDK의 신뢰할 수 없는 런타임을 수정하여 커스텀 AEP 스텁(stub)을 쉽게 등록할 수 있도록 했습니다. 또한 공격자가 제어하는 벤치마크 디버그 enclave에서 우리의 접근 방식을 정밀하게 평가할 수 있도록, SGX-Step은 _선택적으로_ 계측되어 인터럽트된 enclave의 SSA 프레임에서 저장된 명령어 포인터를 검색할 수 있습니다 (리눅스의 `/proc/self/mem` 인터페이스와 `EDBGRD` 명령어 사용).
5. 그 다음, 초기 카운트 메모리 매핑 I/O 레지스터에 쓰기 직전에 (6) `ERESUME`을 실행하기 전에 다음 인터럽트를 위한 로컬 APIC 타이머를 설정합니다.
## 소스 코드 개요
이 리포지토리는 다음과 같이 구성되어 있습니다:```
.
├── app -- Collection of sample client applications using SGX-Step to
│ attack different victim enclave scenarios.
├── doc -- Papers and reference material.
├── kernel -- Minimal dynamically loadable Linux kernel driver to export
│ physical memory to user space and bootstrap `libsgxstep`.
├── libsgxstep -- Small user-space operating system library that implements the
│ actual SGX-Step functionality, including x86 page-table and
│ APIC timer manipulations.
└── sdk -- Bindings to use SGX-Step with different SGX SDKs and libOSs.
SGX-Step은 피해자 엔클레이브 명령어를 임의의 공격자 코드와 정밀하게 인터리빙할 수 있는 범용 실행 제어 프레임워크입니다. SGX-Step 프레임워크의 주요 사용 사례 중 일부는 아래 그림에 요약되어 있습니다 (SGX-Step을 사용하는 최신 출판물 목록은 이 README의 하단을 참조하십시오).

SGX-Step은 SGX 지원 Intel 프로세서와 일반 Linux 커널이 필요합니다. 원래 평가는 i7-6500U/6700 CPU, Ubuntu 18.04, 기본 Linux 4.15.0 커널에서 수행되었습니다. 최신 Linux 커널 및 배포판도 지원됩니다. 아래에 Linux 커널 매개변수를 요약합니다.
다음과 같이 원하는 부트 매개변수를 커널에 전달합니다:```bash
$ sudo vim /etc/default/grub
$ sudo update-grub && reboot
현재 실행 중인 커널이 올바르게 구성되었는지 확인하려면 다음을 실행하세요:```bash
$ sudo ./check_sys.sh
.. Checking recommended SGX-Step parameters [OK]
.. Checking unknown kernel parameters [OK]
.. Checking CPU features [OK]
.. Checking kernel page-table isolation [OK]
Finally, to improve overall execution time stability, you may opt to additionally disable C-States and SpeedStep technology in the BIOS configuration.
/dev/sgx-stepSGX-Step comes with a loadable kernel module that exports an IOCTL interface to
the libsgxstep user-space library. The driver is mainly responsible for (i)
hooking the APIC timer interrupt handler, (ii) collecting untrusted page table
mappings, and optionally (iii) fetching the interrupted instruction pointer for
benchmark enclaves.
To build and load the /dev/sgx-step driver, execute:
cd kernel
make
sudo make load```bash
$ cd kernel/ $ ./install_SGX_driver.sh # tested on Ubuntu 20.04/22.04 $ make clean load
**참고 (/dev/sgx_enclave).** SGX-Step은 모든 플랫폼에서 작동해야 하는 레거시 Intel `/dev/isgx` 아웃오브트리 드라이버와 최신 Linux 커널 >5.11 및 유연한 실행 제어를 위한 하드웨어 지원이 있는 플랫폼을 위한 업스트림 `/dev/sgx_enclave` 드라이버를 모두 지원합니다. `install_SGX_driver.sh` 스크립트는 in-tree `/dev/sgx_enclave` 드라이버가 사용 가능한지 자동으로 감지하고, 그렇지 않은 경우 수정되지 않은 v2.14 [linux-sgx-driver](https://github.com/intel/linux-sgx-driver)를 가리키는 git 서브모듈을 통해 out-of-tree `/dev/isgx` 드라이버를 빌드 및 로드합니다.
**참고 (/dev/mem).** APIC 물리적 메모리 매핑 I/O 레지스터와 관심 있는 페이지 테이블 항목에 대한 사용자 수준 가상 메모리 매핑을 구성하기 위해 Linux의 가상 `/dev/mem` 디바이스에 의존합니다. 그러나 최신 Linux 배포판은 일반적으로 `CONFIG_STRICT_DEVMEM` 옵션을 활성화하여 이러한 사용을 방지합니다. 따라서 `/dev/sgx-step` 드라이버에는 커널을 다시 컴파일하지 않고 `devmem_is_allowed` 검사를 우회하는 [approach](https://www.libcrack.so/index.php/2012/09/02/bypassing-devmem_is_allowed-with-kprobes/)가 포함되어 있습니다.
### 2. SGX SDK 패치 및 설치
사용자 정의 비동기 종료 포인터(AEP) 스텁의 쉬운 등록을 위해 공식 Intel SGX SDK의 신뢰할 수 없는 런타임을 수정했습니다. 다음과 같이 진행하여 [linux-sgx](https://github.com/01org/linux-sgx) v2.29를 체크아웃하고 패치를 적용합니다.```bash
$ cd sdk/intel-sdk/
$ ./install_SGX_SDK.sh # tested on Ubuntu 20.04/22.04
$ source /opt/intel/sgxsdk/environment # add to ~/.bashrc to preserve across terminal sessions
$ sudo service aesmd status # stop/start aesmd service if needed
위의 설치 스크립트는 Ubuntu 22.04 LTS에서 테스트되었습니다. 다른 GNU/Linux 배포판의 경우 linux-sgx 프로젝트의 지침에 따라 Intel SGX SDK 및 PSW 패키지를 빌드하고 설치하시기 바랍니다. 또한 SGX-Step을 사용하려면 (수정되지 않은) linux-sgx-driver SGX 커널 모듈을 빌드하고 로드해야 합니다.
참고 (로컬 설치). 패치된 SGX SDK 및 PSW 패키지는 호환되는 시스템 전체 'linux-sgx' 설치에 영향을 주지 않고 로컬에 설치할 수 있습니다. 이를 위해 예제 Makefile은 로컬 SDK 설치 디렉터리를 가리키는 SGX_SDK 환경 변수를 지원합니다. 기본이 아닌 SDK 경로(즉, /opt/intel/sgxsdk가 아닌 경우)를 감지하면 "run" Makefile 대상은 추가로 로컬 linux-sgx 디렉터리에 빌드된 패치된 libsgx_urts.so 신뢰할 수 없는 런타임에 대해 동적 링크를 수행합니다(LD_LIBRARY_PATH 환경 변수 사용).
참고 (32비트 지원). SGX SDK 및 SGX-Step의 32비트 버전 빌드에 대한 지침(오래되어 유지 관리되지 않음!)은 README-m32.md에서 확인할 수 있습니다.
사용자 공간 애플리케이션은 libsgxstep 라이브러리에 링크하여 SGX-Step의 단일 단계 실행 및 페이지 테이블 조작 기능을 사용할 수 있습니다. "app" 디렉터리의 예제 애플리케이션을 확인하세요.

먼저, APIC 및 인터럽트 디스크립터 테이블 설정을 확인하세요:```bash $ cd app/selftest/idt $ make run # fires interrupts in an infinite loop to stress-test stability; exit with CTRL-C
예를 들어, 페이지 테이블 조작 기능과 SDK 패치를 테스트하기 위한 기본 예제 애플리케이션을 빌드하고 실행하려면:```bash
$ cd app/aep-redirect
$ make run
타이머 단일 스테핑 기능을 테스트하려면, 예를 들어 벤치마크 enclave를 빌드하고 실행하여 100개의 연속적인 nop 명령어 슬라이드를 단일 스텝으로 실행해 보세요:```bash
$ cd app/bench
$ NUM=100 make parse # alternatively vary NUM and use STRLEN=1 or ZIGZAG=1
The above command builds `libsgxstep`, the benchmark victim enclave, and the
untrusted attacker host process, where the attack scenario and instance size
are configured via the corresponding environment variables. The same command
also runs the resulting binary non-interactively (to ensure deterministic timer
intervals), and finally calls an attack-specific post-processing Python script
to parse the resulting enclave instruction pointer benchmark results.
**Note (performance).** Single-stepping enclaved execution incurs a substantial
slowdown. We measured execution times of up to 15 minutes for the experiments
described in the paper. SGX-Step's page table manipulation features allow to
initiate single-stepping for selected functions only, for instance by revoking
access rights on specific code or data pages of interest.
**Note (timer interval).** The exact timer interval value depends on CPU
frequency, and hence remains inherently platform-specific (see also
[app/selftest/apic](https://github.com/jovanbulck/sgx-step/blob/HEAD/app/selftest/apic) for detailed microbenchmarks assessing the accuracy of
various APIC timer modes). Configure a suitable value in `/app/bench/main.c`.
We established precise timer intervals for our evaluation platforms (see table
below) by tweaking and observing the NOP microbenchmark enclave instruction
pointer trace results, as further outlined below.
**Note (stability).** In order to avoid the Linux kernel getting stuck or
panicking, SGX-Step should automatically restore the interrupt-descriptor table
and local APIC timer after exiting the `libsgxstep` process. You can check if
the APIC timer is still firing on all cores as follows:```bash
$ watch -n0.1 "cat /proc/interrupts | grep 'Local timer interrupts'"
아래 표는 현재 지원되는 Intel CPU와 해당 CPU의 단일 스텝 APIC 타이머 간격(libsgxstep/config.h)을 나열합니다. 정확한 단일 스텝 간격은 최신 transient-execution attack 완화 조치가 적용된 프로세서의 마이크로코드 버전에 따라 달라질 수 있습니다. 이러한 완화 조치는 인클레이브 진입/종료 시 마이크로아키텍처 버퍼를 플러시합니다. 아래 표에는 참고용으로 몇 가지 다른 마이크로코드 버전이 제공됩니다.
참고 (캘리브레이션). 현재 안정적인 타이머 간격을 구성하는 가장 쉬운 방법은 긴 NOP 슬라이드와 함께 app/bench 벤치마킹 도구를 사용하고 SGX_STEP_TIMER_INTERVAL을 점진적으로 증가/감소시키는 것입니다. 대략 20에서 시작하여 NUM=100 make parse를 실행하여 100개 명령어의 NOP 슬라이드에 대한 단일 스텝, 제로 스텝, 다중 스텝 요약을 얻을 수 있습니다(어느 정도 안정적인 간격을 얻은 후에는 더 긴 슬라이드로 전환할 수 있습니다). 제로 스텝이 너무 많으면 타이머 간격을 늘려야 함을 나타내고, 다중 스텝은 타이머 간격을 낮추어야 함을 나타냅니다.
참고 (제로 스텝 걸러내기). 중요: 일부 제로 스텝이 남아 있어도 걱정하지 마십시오. 진행할 수 있으면 항상 인클레이브의 코드 PTE 접근 비트를 확인하여 제로 스텝을 결정론적으로 걸러낼 수 있습니다(이 비트는 명령어가 실제로 완료되고 단일 스텝이 발생한 경우에만 설정됩니다). 따라서 다중 스텝을 항상 방지하는 보수적인 타이머 간격을 구성한 후에는 SGX-Step이 완벽한 명령어 수준의 세분성으로 잡음 없는 단일 스텝을 달성할 수 있습니다.
참고 (인터럽트 "랜딩 윈도우" 확장). 아래의 근본 원인 분석에서 설명한 바와 같이, ERESUME 이후 첫 번째 인클레이브 명령어의 (코드) 주소를 해결하기 위한 페이지 테이블 워크가 느릴수록 인터럽트 "랜딩 윈도우"가 길어지고, 따라서 SGX-Step의 단일 스텝율이 더 신뢰할 수 있게 됩니다. 예를 들어, 인클레이브의 PMD 접근 비트를 지우는 것 외에도, ERESUME 전에 CPU 캐시에서 보호되지 않은 페이지 테이블 엔트리 중 하나 이상을 플러시하면 랜딩 윈도우를 더욱 확장할 수 있음을 발견했습니다. 이는 사실상 CPU가 페이지 테이블 워크 중 느린 메모리를 기다리도록 강제합니다. 따라서 신뢰할 수 있는 타이머 간격 구성을 찾을 수 없는 경우, (i) 인클레이브의 코드 PTE/PMD "접근" 비트를 지우고 (ii) AEP 핸들러에서 하나 이상의 인클레이브 페이지 테이블 엔트리를 플러시(CLFLUSH)하십시오.
참고 (마이크로코드). 또 다른 주의 사항은 최근 Foreshadow/ZombieLoad/RIDL 등의 마이크로코드 완화 조치와 관련이 있습니다. 이러한 완화 조치는 인클레이브 진입/종료 시 누출되는 uarch 버퍼를 플러시합니다. 이러한 완화 조치가 활성화되면 인클레이브 진입 시간이 길어지므로 타이머 간격을 늘려야 합니다(예: i7-8650U CPU의 경우, 사전 Foreshadow 마이크로코드에서는 34였던 단일 스텝 타이머 간격이 최신 마이크로코드에서는 54로 증가했습니다). 추가적인 플러시 작업은 또한 인클레이브 진입 시간의 변동성을 다소 증가시킬 수 있으며, 이는 더 많은 제로 스텝(위에서 설명한 대로 결정론적으로 걸러낼 수 있음)으로 타이머를 더 보수적으로 구성해야 할 수 있음을 의미합니다.
SGX-Step이 악명 높게 복잡한 ERESUME 명령어 다음의 첫 번째 (아마도 매우 짧은!) 인클레이브 명령어를 안정적으로 중단하는 방법에 대한 자세한 근본 원인 분석은 AEX-Notify 논문에 설명되어 있습니다. SGX-Step의 성공 비결은 "접근"(A) 비트를 사용하는 것에 있음을 발견했습니다. 구체적으로, SGX-Step은 APIC이 한 번의 인터럽트를 발생시키도록 준비하기 전에 항상 대상 인클레이브의 페이지 중간 디렉터리(PMD)에서 A-비트를 지웁니다. A-비트는 프로세서에 의해 인클레이브가 적어도 하나의 명령어를 실행한 경우에만 설정되며, 따라서 제로 스텝과 단일 스텝을 결정론적으로 구별하는 데 사용할 수 있습니다.

중요한 점은, 프로세서의 페이지 미스 핸들러가 일반적인 빠른 경로에 최적화되어 있고 PMD 또는 PTE를 수정해야 하는 덜 빈번하고 더 복잡한 경우를 처리하기 위해 훨씬 느린 "마이크로코드 어시스트"를 사용한다는 것입니다. 이 어시스트는 ERESUME 이후 첫 번째 인클레이브 명령어의 실행을 수백 사이클 연장하는 효과가 있습니다. 따라서 이 "어시스트 윈도우"는 거친 입도의 정규 분포 APIC 타이머 인터럽트가 높은 정확도로 도달할 수 있는 넓은 착륙 공간을 효과적으로 열어줍니다.
자신의 프로젝트에서 SGX-Step 프레임워크를 사용하기 시작하는 가장 쉬운 방법은 git submodules를 통하는 것입니다:```bash
$ cd my/git/project
$ git submodule add https://github.com/jovanbulck/sgx-step.git
$ cd sgx-step # Now build /dev/sgx-step and libsgxstep as described above
Have a look at the Makefiles in the `app` directory to see how a client
application can link to `libsgxstep` plus any local SGX SDK/PSW packages.
<a name="bottom"></a>
The following is a list of known projects that use SGX-Step. Feel free to open
a pull request if your project uses SGX-Step but is not included below.
| 제목 | 발행 세부 정보 | 소스 코드 | 사용된 SGX-Step 기능 |
| ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------- |
| AEX-NStep: 인텔 SGX에 대한 확률적 인터럽트 카운팅 공격 | [S&P'26](https://arxiv.org/pdf/2510.14675) | [Zenodo](https://zenodo.org/records/17338383) | Page faults, IPIs, WRMSR Interrupt Gate |
| MDPeek: 메모리 명확화 유닛 사이드 채널을 사용한 SGX의 균형 분기 깨기 | [ASPLOS'25](https://www.comp.nus.edu.sg/~tcarlson/pdfs/liu2025mbbbiswmdusc.pdf) | [GitHub (Artifact Evaluated & Functional)](https://github.com/CPU-THU/MDPeek) | Page faults |
| 활성화 함수는 해롭다: 제어된 채널을 통한 신경망 가중치 복구 | [RAID'25](https://ieeexplore.ieee.org/document/11352487) | [Github Artifact](https://github.com/heavyimage/afch_paper) | Single-stepping, PTE A/D |
| TLBlur: 상용 인텔 SGX 플랫폼에서 제어된 채널에 대한 컴파일러 지원 자동 강화 | [USEC'25](https://vanbulck.net/files/usenix25-tlblur.pdf) | [GitHub (full)](https://github.com/TLBlur-SGX) | Single-stepping, PTE A/D, page faults |
| POSTER: PMU를 통한 SGX 실행 추론 가능성에 관하여 | [AsiaCCS'24](https://dl.acm.org/doi/pdf/10.1145/3634737.3659434) | - | Single-stepping, zero-stepping|
| SIGY: 악의적인 예외 및 신호로 인텔 SGX 엔클레이브 깨기 | [ArXiv'24](https://arxiv.org/abs/2404.13998) | - | Timer interrupts, page faults |
| 신뢰 실행 환경에서 코드 기밀성 부재에 관하여 | [S&P24](https://ivanpuddu.com/files/papers/TEE_WASM_code_Leakage.pdf) | [GitHub (empty)](https://github.com/dn0sar/TEE-WASM-Code-Extraction) | Single-stepping |
| TeeJam: 서브 캐시 라인 누출의 역습 | [CHES24](https://doi.org/10.46586/tches.v2024.i1.457-500) | [Github (full)](https://github.com/UzL-ITS/teejam) | Single-stepping interrupt latency, PTE A/D |
| AEX-Notify: 인텔 SGX 엔클레이브를 위한 인터럽트 인식을 통한 정밀 단일 스테핑 공격 차단 | [USEC23](https://jovanbulck.github.io/files/usenix23-aexnotify.pdf) | [GitHub (SGX SDK mitigation)](https://github.com/intel/linux-sgx/blob/master/sdk/trts/linux/trts_mitigation.S) | Single-Stepping, PTE A/D
| 엔클레이브의 제어된 데이터 경쟁: 공격 및 탐지 | [USEC23](https://www.usenix.org/system/files/usenixsecurity23-chen-sanchuan.pdf) | [GitHub (non-attack)](https://github.com/OSUSecLab/SGXRacer) | Single-stepping, APIC |
| BunnyHop: 명령어 프리페처 악용 | [USEC23](https://www.usenix.org/system/files/usenixsecurity23-zhang-zhiyuan-bunnyhop.pdf) | [GitHub (non-SGX PoC)](https://github.com/0xADE1A1DE/BunnyHop) | Single-stepping, PTE A/D |
| Downfall: 추측 데이터 수집 악용 | [USEC23](https://www.usenix.org/system/files/usenixsecurity23-moghimi.pdf) | [GitHub (non-SGX PoC)](https://github.com/flowyroll/downfall/tree/main/POC) | Single-stepping, zero-stepping |
| 모든 PC는 우리의 것이다: 비제어 전송 명령어 BTB 업데이트를 통한 동적 PC 추출 | [ISCA23](https://dl.acm.org/doi/pdf/10.1145/3579371.3589100?casa_token=Q5jf5nOgiLIAAAAA:cT0ltJh7vk943buODuR4oMFKmuhg2Tp-djFm2kUu6DzlxtBhNhEw2WteRggn0k99D7ft-P6pluVrFA) | - | Single-stepping |
| HQC에 대한 캐시 타이밍 공격 | [CHES23](https://eprint.iacr.org/2023/102.pdf) | - | Single-stepping, PTE A/D |
| FaultMorse: 가장 긴 반복 시퀀스를 통한 자동화된 제어 채널 공격 | [ComSec23](https://www.sciencedirect.com/science/article/pii/S0167404822003959) | [GitHub (post processing)](https://github.com/Ezekiel-1998/FaultMorse) | Page fault |
| AEPIC Leak: 마이크로아키텍처에서 초기화되지 않은 데이터의 아키텍처적 누출 | [USEC22](https://www.usenix.org/system/files/sec22-borrello.pdf) | [GitHub (full)](https://github.com/IAIK/AEPIC) | Single-Stepping, PTE A/D |
| MoLE: 동적 데이터 위치 이스케이프를 통한 SGX에 대한 사이드 채널 공격 완화 | [ACSAC22](https://dl.acm.org/doi/fullHtml/10.1145/3564625.3568002) | - | Single-Stepping, page fault, transient execution |
| WIP: TEE로 보호된 로봇 차량에 대한 인터럽트 공격 | [AutoSec22](https://www.ndss-symposium.org/wp-content/uploads/autosec2022_23001_paper.pdf) | - | Single-stepping, multi-stepping |
| 자기 모니터링 엔클레이브를 향하여: 성능 카운터를 사용한 사이드 채널 탐지 | [NordSec22](https://link.springer.com/chapter/10.1007/978-3-031-22295-5_7) | - | Page fault, LVI. |
| ENCLYZER: 인텔 SGX의 일시적 데이터 누출 자동 분석 | [SEED22](https://ieeexplore.ieee.org/document/9935016) | [GitHub (full)](https://github.com/bloaryth/enclyser) | Page-table manipulation |
| Kalyna 키 확장의 사이드 채널링 | [CT-RSA22](https://cs.adelaide.edu.au/~yval/pdfs/ChuengsatiansupGYZ22.pdf) | - | Single-Stepping, PTE A/D |
| 마이크로아키텍처 공격을 위한 신속한 프로토타이핑 | [USENIX22](https://www.usenix.org/system/files/sec22summer_easdon.pdf) | [GitHub (full)](https://github.com/libtea/frameworks) | Single-stepping, page fault, PTE A/D, etc. |
| Util::Lookup: 암호화 라이브러리에서 키 디코딩 악용 | [CCS21](https://dl.acm.org/doi/abs/10.1145/3460120.3484783) | [GitHub (full)](https://github.com/UzL-ITS/util-lookup) | Single-Stepping, PTE A/D |
| SmashEx: 예외를 사용하여 SGX 엔클레이브 분쇄 | [CCS21](https://dl.acm.org/doi/pdf/10.1145/3460120.3484821) | - | Single-Stepping |
| 온라인 템플릿 공격: 재검토 | [CHES21](https://tches.iacr.org/index.php/TCHES/article/view/8967/8545) | [Zenodo (simulation)](https://zenodo.org/record/4680071) | Single-stepping, page fault, PTE A/D |
| Aion Attacks: 신뢰 실행 환경에서 소프트웨어 타이머 조작 | [DIMVA21](http://individual.utoronto.ca/shengjiexu/publication/whuang-dimva2021-aion_v2.pdf) | - | Single-stepping, interrupts(?) |
| Platypus: x86에서 소프트웨어 기반 전력 사이드 채널 공격 | [S&P21](https://platypusattack.com/platypus.pdf) | [GitHub (simulated PoC)](https://github.com/0xhilbert/Platypus) | Single-stepping, zero-stepping |
| CrossTalk: 코어 간 추측 데이터 누출은 실제다 | [S&P21](https://download.vusec.net/papers/crosstalk_sp21.pdf) | - | Single-stepping, page fault |
| Frontal Attack: CPU 프론트엔드를 통한 SGX의 제어 흐름 누출 | [USEC21](https://www.usenix.org/system/files/sec21-puddu.pdf) | [GitHub (full, artifact evaluated)](https://github.com/dn0sar/frontal_poc) | Single-stepping interrupt latency, PTE A/D |
| PThammer: 암시적 접근을 통한 사용자-커널 경계 Rowhammer | - | [MICRO20](https://arxiv.org/pdf/2007.08707v2.pdf) | Page table walk |
| SpeechMiner: 추측 실행 취약점 조사 및 측정을 위한 프레임워크 | [NDSS20](https://www.ndss-symposium.org/wp-content/uploads/2020/02/23105-paper.pdf) | [GitHub (full)](https://github.com/teecert/SpeechMiner) | Page-table manipulation |
| Déjà Vu: Mozilla의 NSS에 대한 사이드 채널 분석 | [CCS20](https://dl.acm.org/doi/pdf/10.1145/3372297.3421761) | - | Page fault |
| A부터 Z까지: 실제 환경에서의 사영 좌표 누출 | [CHES20](https://eprint.iacr.org/2020/432.pdf) | - | Page fault |
| LVI: 마이크로아키텍처 로드 값 주입을 통한 일시적 실행 하이재킹 | [S&P20](https://lviattack.eu/lvi.pdf) | [GitHub (PoC)](https://github.com/jovanbulck/sgx-step-lvi/tree/master/app/lvi) | Single-stepping, page-table manipulation |
| CopyCat: 엔클레이브에 대한 제어된 명령어 수준 공격 | [USEC20](https://arxiv.org/pdf/2002.08437.pdf) | - | Single-stepping, page fault, PTE A/D |
| 하나의 취약한 원시 요소가 바이러스처럼 퍼질 때: ECDSA 및 RSA에 대한 새로운 단일 추적 공격 | [CHES20](https://eprint.iacr.org/2020/055.pdf) | - | Single-stepping, page fault, PTE A/D |
| 큰 숫자 - 큰 문제: (EC)DSA 구현에서 논스 누출 체계적 분석 | [USEC20](https://www.usenix.org/system/files/sec20summer_weiser_prepub_0.pdf) | - | Page fault |
| Plundervolt: 인텔 SGX에 대한 소프트웨어 기반 오류 주입 공격 | [S&P20](https://plundervolt.com/doc/plundervolt.pdf) | [GitHub (full)](https://github.com/KitMurdock/plundervolt) | Privileged interrupt/call gates, MSR |
| Bluethunder: SGX에 대한 2단계 방향 예측기 기반 사이드 채널 공격 | [CHES20](https://heartever.github.io/files/bluethunder_sgx_ches.pdf) | - | Single-stepping |
| Fallout: Meltdown 저항 CPU의 데이터 누출 | [CCS19](https://mdsattacks.com/files/fallout.pdf) | - | PTE A/D |
| 두 세계 이야기: 엔클레이브 차폐 런타임의 취약성 평가 | [CCS19](https://people.cs.kuleuven.be/~jo.vanbulck/ccs19-tale.pdf) | [GitHub (full)](https://github.com/jovanbulck/0xbadc0de) | Single-stepping, page fault, PTE A/D |
| ZombieLoad: 교차 권한 경계 데이터 샘플링 | [CCS19](https://zombieloadattack.com/zombieload.pdf) | [GitHub (PoC)](https://github.com/IAIK/ZombieLoad/) | Single-stepping, zero-stepping, page-table manipulation |
| SPOILER: 추측 로드 위험이 Rowhammer 및 캐시 공격 강화 | [USEC19](https://arxiv.org/pdf/1903.00446.pdf) | - | Single-stepping interrupt latency |
| Nemesis: 기본 CPU 인터럽트 로직의 마이크로아키텍처 타이밍 누출 연구 | [CCS18](https://people.cs.kuleuven.be/~jo.vanbulck/ccs18.pdf) | [GitHub (full)](https://github.com/jovanbulck/nemesis) | Single-stepping interrupt latency, page fault, PTE A/D |
| Foreshadow: 일시적 비순차 실행으로 인텔 SGX 왕국의 키 추출 | [USEC18](https://foreshadowattack.eu/foreshadow.pdf) | [GitHub (PoC)](https://github.com/jovanbulck/sgx-step/tree/master/app/foreshadow) | Single-stepping, zero-stepping, page-table manipulation |
| 인텔 SGX SSL의 RSA 키 생성에 대한 단일 추적 공격 | [AsiaCCS18](https://rspreitzer.github.io/publications/proc/asiaccs-2018-paper-1.pdf) | - | Page fault |
| Off-Limits: 레거시 x86 메모리 세그멘테이션을 남용하여 엔클레이브 실행 염탐 | [ESSoS18](https://people.cs.kuleuven.be/~jo.vanbulck/essos18.pdf) | [link (full, artifact evaluated)](https://distrinet.cs.kuleuven.be/software/off-limits/) | Single-stepping, IA32 segmentation, page fault |
| SGX-Step: 정밀 엔클레이브 실행 제어를 위한 실용적 공격 프레임워크 | [SysTEX17](https://people.cs.kuleuven.be/~jo.vanbulck/systex17.pdf) | [GitHub (full)](https://github.com/jovanbulck/sgx-step/tree/master/app/bench) | Single-stepping, page fault, PTE A/D |
| Linux 커널 매개변수 | 설명 |
|---|
nox2apic | 메모리 매핑 I/O 모드에서 로컬 APIC 장치를 선택적으로 구성합니다 (SGX-Step의 정밀 단일 스테핑 기능을 활용하기 위해). 설정한 경우 libsgxstep/config.h에서 X2APIC을 0으로 설정해야 합니다. 대안으로 CPU를 x2APIC 모드로 유지할 수 있으며 최신 SGX-Step 배포판도 호환되어야 합니다. |
iomem=relaxed no_timer_check | 커널 로그에서 불필요한 경고 메시지를 표시하지 않습니다. |
nmi_watchdog=0 | 커널 NMI 워치독을 비활성화합니다. |
isolcpus=1 | 피해자 프로세스를 격리된 CPU 코어에 고정합니다. |
clearcpuid=308,295,514 | 수퍼바이저 모드 액세스 방지(SMAP, 비트 295), 수퍼바이저 모드 실행 방지(SMEP, 비트 308) 및 사용자 모드 명령어 방지(UMIP, 비트 514) 기능을 비활성화합니다. |
pti=off | 커널 페이지 테이블 격리를 비활성화합니다 (사용자 IRQ 핸들러로 인한 커널 패닉 방지). |
rcupdate.rcu_cpu_stall_suppress=1 | 커널의 읽기-복사 업데이트(RCU) CPU 스톨 탐지기를 비활성화합니다 (커널의 타이머 인터럽트 핸들러를 호출하지 않고 오랫동안 단일 스테핑할 때 경고를 방지하기 위해). |
msr.allow_writes=on | SGX-Step에 의한 모델별 레지스터(MSR) 쓰기에 대한 커널 경고 메시지를 표시하지 않습니다. |
vdso=0 | 최신 Linux 커널에서만: vdso_sgx_enter_enclave 라이브러리를 비활성화합니다 (AEP 인터셉션 패치와 호환되지 않음). |
dis_ucode_ldr | 선택적으로 CPU 마이크로코드 업데이트를 비활성화합니다 (최근 transient-execution 공격 완화 조치로 인해 단일 스테핑 간격 재보정이 필요할 수 있음). |
| 모델명 | CPU | 기본 주파수 | 마이크로코드 (날짜) | APIC 타이머 간격 |
|---|
| Skylake | i7-6700 | 3.4 GHz | ? | 19 |
| Skylake | i7-6500U | 2.5 GHz | ? | 25 |
| Skylake | i5-6200U | 2.3 GHz | ? | 28 |
| Kaby Lake R | i7-8650U | 1.9 GHz | ? | 34 |
| Kaby Lake R | i7-8650U | 1.9 GHz | 0xca (2019-10-03) | 54 |
| Coffee Lake R | i7-9700 | 3 GHz | 0xf4 (2022-07-31) | 26 |
| Coffee Lake R | i9-9900K | 3.6 GHz | ? | 21 |
| Coffee Lake HR | i7-9750H | 2.6 GHz | 0xf4 (2023-02-23) | 37 |
| Ice Lake | i5-1035G1 | 1.00 GHz | 0x32 (2019-07-05) | 135 |
| Ice Lake | i5-1035G1 | 1.00 GHz | 0xb0 (2022-03-09) | 255 |
| Comet Lake | i9-10900K | 3.70 GHz | 0xfc (2024-02-01) | 24 |
| Emerald Rapids | Xeon Gold 5515+ | 3.2 GHz | 0x21000230 (2024-02-05) | 32 |