1- 🔎 Side-Channel Research — Flush+Reload (Cache) PoC
1+ # 🔎 Side-Channel Research — Flush+Reload (Cache) PoC
22
3- 📋 개요
4- 사이드 채널 공격은 연산의 시간, 전력 소비, 캐시 동작 등 부수적인 정보를 분석하여 비밀 정보를 유추하는 기법입니다. 이 저장소에는 캐시 기반의 대표적인 공격 기법인 Flush+Reload 개념 증명(PoC)이 포함되어 있습니다.
5- Flush+Reload는 공유 메모리의 캐시 상태를 조작하고 측정하여 다른 프로세스의 메모리 접근 패턴을 감지하는 기법입니다. 모든 실험 코드는 poCs/cache/ 디렉터리에 위치합니다.
6- 📁 디렉터리 구조
3+ ## 📋 개요
4+
5+ 사이드 채널 공격은 연산의 시간, 전력 소비, 캐시 동작 등 부수적인 정보를 분석하여 비밀 정보를 유추하는 기법입니다. 이 저장소에는 캐시 기반의 대표적인 공격 기법인 ** Flush+Reload** 개념 증명(PoC)이 포함되어 있습니다.
6+
7+ Flush+Reload는 공유 메모리의 캐시 상태를 조작하고 측정하여 다른 프로세스의 메모리 접근 패턴을 감지하는 기법입니다. 모든 실험 코드는 ` poCs/cache/ ` 디렉터리에 위치합니다.
8+
9+ ## 📁 디렉터리 구조
10+
11+ ```
712poCs/cache/
813├── victim_sim.c # Victim: 특정 메모리 인덱스 반복 접근 (C)
914├── flush_reload_attacker.c # Attacker: clflush + rdtscp로 접근시간 측정 (C)
1015├── run.sh # 실험 자동화 스크립트 (start/collect/stop)
1116└── README.md # PoC 사용법 및 안전 주의사항
12- 🚀 실행 방법
13- 1 . 기본 실행 예시
14- bash# 1) Victim 프로세스를 백그라운드로 실행
17+ ```
18+
19+ ## 🚀 실행 방법
20+
21+ ### 1. 기본 실행 예시
22+
23+ ``` bash
24+ # 1) Victim 프로세스를 백그라운드로 실행
1525./poCs/cache/victim_sim &
1626VICTIM_PID=$!
1727
@@ -20,35 +30,53 @@ VICTIM_PID=$!
2030
2131# 3) 실험 종료
2232kill $VICTIM_PID
23- 2 . 자동화 스크립트 사용
24- bash# run.sh를 사용한 전체 실험 자동화
33+ ```
34+
35+ ### 2. 자동화 스크립트 사용
36+
37+ ``` bash
38+ # run.sh를 사용한 전체 실험 자동화
2539./poCs/cache/run.sh
26- 📊 데이터 형식 및 해석
27- CSV 출력 형식
28- csviter,cycles
40+ ```
41+
42+ ## 📊 데이터 형식 및 해석
43+
44+ ### CSV 출력 형식
45+
46+ ``` csv
47+ iter,cycles
29480,158000
30491,1000
31502,1000
32513,155000
33524,1000
3453...
35- 측정값 해석
54+ ```
3655
37- 작은 값 (약 1,000 cycles): 캐시 히트 - Victim이 해당 메모리에 접근함
38- 큰 값 (100,000+ cycles): 캐시 미스 - Victim이 해당 메모리에 접근하지 않음 또는 인터럽트/컨텍스트 스위치 발생
56+ ### 측정값 해석
3957
40- 📈 데이터 분석
41- 간단한 통계 분석
42- bash# 샘플 수 확인
58+ - ** 작은 값 (약 1,000 cycles)** : 캐시 히트 - Victim이 해당 메모리에 접근함
59+ - ** 큰 값 (100,000+ cycles)** : 캐시 미스 - Victim이 해당 메모리에 접근하지 않음 또는 인터럽트/컨텍스트 스위치 발생
60+
61+ ## 📈 데이터 분석
62+
63+ ### 간단한 통계 분석
64+
65+ ``` bash
66+ # 샘플 수 확인
4367wc -l /tmp/flush_reload_data.csv
4468
4569# 평균 계산
4670awk -F, ' NR>1{n++; sum+=$2} END{print "Samples:", n, "Mean:", sum/n}' /tmp/flush_reload_data.csv
4771
4872# 샘플 수, 평균, 중앙값 계산
4973awk -F, ' NR>1{a[NR-1]=$2; n++; sum+=$2} END{print "n="n, "mean="sum/n; asort(a); print "median=" a[int(n/2)]; }' /tmp/flush_reload_data.csv
50- Python을 이용한 시각화
51- python# save as plot_flush_reload.py
74+ ```
75+
76+ ### Python을 이용한 시각화
77+
78+ ``` python
79+ # save as plot_flush_reload.py
5280import csv
5381import numpy as np
5482import matplotlib.pyplot as plt
@@ -67,85 +95,86 @@ plt.ylabel('Count (log scale)')
6795plt.title(' Flush+Reload Distribution' )
6896plt.yscale(' log' )
6997plt.show()
70- 🔍 결과 해석
71- 이중 분포 (Bimodal Distribution)
72- 데이터는 일반적으로 이중 분포를 보입니다:
98+ ```
7399
74- 저지연 피크: 캐시 히트 (Victim이 메모리 접근)
75- 고지연 피크: 캐시 미스 (Victim이 메모리 미접근)
100+ ## 🔍 결과 해석
76101
77- 보안 영향
78- Flush+Reload 공격은 다음과 같은 실질적인 위협이 될 수 있습니다:
102+ ### 이중 분포 (Bimodal Distribution)
79103
80- AES S-box 접근 추적: 암호화 키 추출 가능
81- RSA 키 비트 유추: 제곱-곱셈 패턴 분석
82- 사용자 입력 패턴 추적: 키보드/마우스 입력 타이밍 분석
104+ 데이터는 일반적으로 ** 이중 분포 ** 를 보입니다:
105+ - ** 저지연 피크 ** : 캐시 히트 (Victim이 메모리 접근)
106+ - ** 고지연 피크 ** : 캐시 미스 (Victim이 메모리 미접근)
83107
84- 🛡️ 대응 및 완화 방안
85- 소프트웨어 차원
108+ ### 보안 영향
86109
87- 상수 시간(Constant-time) 구현
88-
89- 비밀 정보에 독립적인 실행 시간 보장
90- 분기문과 메모리 접근 패턴 균일화
91-
92-
93- 메모리 접근 패턴 난독화
110+ Flush+Reload 공격은 다음과 같은 실질적인 위협이 될 수 있습니다:
111+ - ** AES S-box 접근 추적** : 암호화 키 추출 가능
112+ - ** RSA 키 비트 유추** : 제곱-곱셈 패턴 분석
113+ - ** 사용자 입력 패턴 추적** : 키보드/마우스 입력 타이밍 분석
94114
95- 더미 접근 추가
96- 블라인딩 기법 적용
115+ ## 🛡️ 대응 및 완화 방안
97116
117+ ### 소프트웨어 차원
98118
119+ 1 . ** 상수 시간(Constant-time) 구현**
120+ - 비밀 정보에 독립적인 실행 시간 보장
121+ - 분기문과 메모리 접근 패턴 균일화
99122
100- 하드웨어/시스템 차원
123+ 2 . ** 메모리 접근 패턴 난독화**
124+ - 더미 접근 추가
125+ - 블라인딩 기법 적용
101126
102- 캐시 파티셔닝
127+ ### 하드웨어/시스템 차원
103128
104- Intel CAT (Cache Allocation Technology)
105- ARM 캐시 컬러링
129+ 1 . ** 캐시 파티셔닝**
130+ - Intel CAT (Cache Allocation Technology)
131+ - ARM 캐시 컬러링
106132
133+ 2 . ** 프로세스 격리**
134+ - 코어 격리 (Core isolation)
135+ - 전용 캐시 할당
107136
108- 프로세스 격리
137+ ## ⚖️ 법적 · 윤리적 고지
109138
110- 코어 격리 (Core isolation)
111- 전용 캐시 할당
139+ ### 중요 공지
112140
141+ 이 실험은 ** 연구 및 교육 목적** 으로만 제공됩니다:
113142
143+ - ❌ ** 무단 테스트 금지** : 허가되지 않은 시스템에 대한 테스트는 불법입니다
144+ - ✅ ** 적법한 환경** : 모든 실험은 법적 허가를 확보한 환경에서만 진행하세요
145+ - 📋 ** 책임 소재** : 모든 사용에 따른 책임은 전적으로 사용자에게 있습니다
114146
115- ⚖️ 법적 · 윤리적 고지
116- 중요 공지
117- 이 실험은 연구 및 교육 목적으로만 제공됩니다:
147+ ### 권장 실험 환경
118148
119- ❌ 무단 테스트 금지: 허가되지 않은 시스템에 대한 테스트는 불법입니다
120- ✅ 적법한 환경: 모든 실험은 법적 허가를 확보한 환경에서만 진행하세요
121- 📋 책임 소재: 모든 사용에 따른 책임은 전적으로 사용자에게 있습니다
149+ - 개인 소유의 로컬 머신
150+ - 격리된 가상 머신 (VM)
151+ - 명시적 허가를 받은 테스트 환경
152+ - 교육 기관의 승인된 실습 환경
122153
123- 권장 실험 환경
154+ ## 📚 추가 리소스
124155
125- 개인 소유의 로컬 머신
126- 격리된 가상 머신 (VM)
127- 명시적 허가를 받은 테스트 환경
128- 교육 기관의 승인된 실습 환경
156+ ### 관련 논문
129157
130- 📚 추가 리소스
131- 관련 논문
158+ - Yuval Yarom and Katrina Falkner, "FLUSH+RELOAD: A High Resolution, Low Noise, L3 Cache Side-Channel Attack" (USENIX Security 2014)
159+ - Daniel Gruss et al., "Flush+Flush: A Fast and Stealthy Cache Attack" (DIMVA 2016)
132160
133- Yuval Yarom and Katrina Falkner, "FLUSH+RELOAD: A High Resolution, Low Noise, L3 Cache Side-Channel Attack" (USENIX Security 2014)
134- Daniel Gruss et al., "Flush+Flush: A Fast and Stealthy Cache Attack" (DIMVA 2016)
161+ ### 추가 학습 자료
135162
136- 추가 학습 자료
163+ - [ Cache-timing attacks on AES] ( https://cr.yp.to/antiforgery/cachetiming-20050414.pdf )
164+ - [ Intel Software Guard Extensions (SGX) and Side-Channels] ( https://software.intel.com/content/www/us/en/develop/topics/software-guard-extensions.html )
137165
138- Cache-timing attacks on AES
139- Intel Software Guard Extensions (SGX) and Side-Channels
166+ ---
140167
168+ ## 🔧 권장 추가 파일
141169
142- 🔧 권장 추가 파일
143170리포지토리에 다음 파일들을 추가하는 것을 권장합니다:
144171
145- poCs/cache/victim_sim.c — 간단한 C 구현 (주기적으로 특정 배열 인덱스 접근)
146- poCs/cache/flush_reload_attacker.c — clflush + rdtscp 측정, CSV 출력
147- poCs/cache/README.md — PoC 상세 사용법, 기대되는 출력, 안전·법적 안내
148- poCs/cache/run.sh — 실험 자동화 (백그라운드 시작, 데이터 수집, 종료)
149- docs/LEGAL_NOTICE.md — 법적 고지 전문
172+ - ` poCs/cache/victim_sim.c ` — 간단한 C 구현 (주기적으로 특정 배열 인덱스 접근)
173+ - ` poCs/cache/flush_reload_attacker.c ` — clflush + rdtscp 측정, CSV 출력
174+ - ` poCs/cache/README.md ` — PoC 상세 사용법, 기대되는 출력, 안전·법적 안내
175+ - ` poCs/cache/run.sh ` — 실험 자동화 (백그라운드 시작, 데이터 수집, 종료)
176+ - ` docs/LEGAL_NOTICE.md ` — 법적 고지 전문
177+
178+ ---
150179
151- ⚠️ 경고: 이 섹션의 코드와 실험은 교육 목적으로만 제공됩니다. 반드시 로컬 VM 또는 실험 전용 장비에서, 그리고 명시적 허가가 있는 환경에서만 실행하세요.
180+ ** ⚠️ 경고:** 이 섹션의 코드와 실험은 ** 교육 목적 ** 으로만 제공됩니다. 반드시 ** 로컬 VM** 또는 실험 전용 장비에서, 그리고 ** 명시적 허가 ** 가 있는 환경에서만 실행하세요.
0 commit comments