Skip to content

Commit 9df2ac2

Browse files
authored
Update README.md
1 parent c49f24c commit 9df2ac2

File tree

1 file changed

+103
-74
lines changed

1 file changed

+103
-74
lines changed

poCs/cache/README.md

Lines changed: 103 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,27 @@
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+
```
712
poCs/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 &
1626
VICTIM_PID=$!
1727

@@ -20,35 +30,53 @@ VICTIM_PID=$!
2030

2131
# 3) 실험 종료
2232
kill $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
2948
0,158000
3049
1,1000
3150
2,1000
3251
3,155000
3352
4,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+
# 샘플 수 확인
4367
wc -l /tmp/flush_reload_data.csv
4468

4569
# 평균 계산
4670
awk -F, 'NR>1{n++; sum+=$2} END{print "Samples:", n, "Mean:", sum/n}' /tmp/flush_reload_data.csv
4771

4872
# 샘플 수, 평균, 중앙값 계산
4973
awk -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
5280
import csv
5381
import numpy as np
5482
import matplotlib.pyplot as plt
@@ -67,85 +95,86 @@ plt.ylabel('Count (log scale)')
6795
plt.title('Flush+Reload Distribution')
6896
plt.yscale('log')
6997
plt.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

Comments
 (0)