Skip to content

Commit c49f24c

Browse files
authored
Create README.md
1 parent 520bcf8 commit c49f24c

File tree

1 file changed

+151
-0
lines changed

1 file changed

+151
-0
lines changed

poCs/cache/README.md

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
🔎 Side-Channel Research — Flush+Reload (Cache) PoC
2+
3+
📋 개요
4+
사이드 채널 공격은 연산의 시간, 전력 소비, 캐시 동작 등 부수적인 정보를 분석하여 비밀 정보를 유추하는 기법입니다. 이 저장소에는 캐시 기반의 대표적인 공격 기법인 Flush+Reload 개념 증명(PoC)이 포함되어 있습니다.
5+
Flush+Reload는 공유 메모리의 캐시 상태를 조작하고 측정하여 다른 프로세스의 메모리 접근 패턴을 감지하는 기법입니다. 모든 실험 코드는 poCs/cache/ 디렉터리에 위치합니다.
6+
📁 디렉터리 구조
7+
poCs/cache/
8+
├── victim_sim.c # Victim: 특정 메모리 인덱스 반복 접근 (C)
9+
├── flush_reload_attacker.c # Attacker: clflush + rdtscp로 접근시간 측정 (C)
10+
├── run.sh # 실험 자동화 스크립트 (start/collect/stop)
11+
└── README.md # PoC 사용법 및 안전 주의사항
12+
🚀 실행 방법
13+
1. 기본 실행 예시
14+
bash# 1) Victim 프로세스를 백그라운드로 실행
15+
./poCs/cache/victim_sim &
16+
VICTIM_PID=$!
17+
18+
# 2) Attacker 실행하여 측정 데이터를 CSV로 저장
19+
./poCs/cache/flush_reload_attacker > /tmp/flush_reload_data.csv
20+
21+
# 3) 실험 종료
22+
kill $VICTIM_PID
23+
2. 자동화 스크립트 사용
24+
bash# run.sh를 사용한 전체 실험 자동화
25+
./poCs/cache/run.sh
26+
📊 데이터 형식 및 해석
27+
CSV 출력 형식
28+
csviter,cycles
29+
0,158000
30+
1,1000
31+
2,1000
32+
3,155000
33+
4,1000
34+
...
35+
측정값 해석
36+
37+
작은 값 (약 1,000 cycles): 캐시 히트 - Victim이 해당 메모리에 접근함
38+
큰 값 (100,000+ cycles): 캐시 미스 - Victim이 해당 메모리에 접근하지 않음 또는 인터럽트/컨텍스트 스위치 발생
39+
40+
📈 데이터 분석
41+
간단한 통계 분석
42+
bash# 샘플 수 확인
43+
wc -l /tmp/flush_reload_data.csv
44+
45+
# 평균 계산
46+
awk -F, 'NR>1{n++; sum+=$2} END{print "Samples:", n, "Mean:", sum/n}' /tmp/flush_reload_data.csv
47+
48+
# 샘플 수, 평균, 중앙값 계산
49+
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
52+
import csv
53+
import numpy as np
54+
import matplotlib.pyplot as plt
55+
56+
xs = []
57+
with open('/tmp/flush_reload_data.csv') as f:
58+
r = csv.reader(f)
59+
next(r) # skip header
60+
for _, cycles in r:
61+
xs.append(int(cycles))
62+
63+
xs = np.array(xs)
64+
plt.hist(xs, bins=200, log=True)
65+
plt.xlabel('Cycles')
66+
plt.ylabel('Count (log scale)')
67+
plt.title('Flush+Reload Distribution')
68+
plt.yscale('log')
69+
plt.show()
70+
🔍 결과 해석
71+
이중 분포 (Bimodal Distribution)
72+
데이터는 일반적으로 이중 분포를 보입니다:
73+
74+
저지연 피크: 캐시 히트 (Victim이 메모리 접근)
75+
고지연 피크: 캐시 미스 (Victim이 메모리 미접근)
76+
77+
보안 영향
78+
Flush+Reload 공격은 다음과 같은 실질적인 위협이 될 수 있습니다:
79+
80+
AES S-box 접근 추적: 암호화 키 추출 가능
81+
RSA 키 비트 유추: 제곱-곱셈 패턴 분석
82+
사용자 입력 패턴 추적: 키보드/마우스 입력 타이밍 분석
83+
84+
🛡️ 대응 및 완화 방안
85+
소프트웨어 차원
86+
87+
상수 시간(Constant-time) 구현
88+
89+
비밀 정보에 독립적인 실행 시간 보장
90+
분기문과 메모리 접근 패턴 균일화
91+
92+
93+
메모리 접근 패턴 난독화
94+
95+
더미 접근 추가
96+
블라인딩 기법 적용
97+
98+
99+
100+
하드웨어/시스템 차원
101+
102+
캐시 파티셔닝
103+
104+
Intel CAT (Cache Allocation Technology)
105+
ARM 캐시 컬러링
106+
107+
108+
프로세스 격리
109+
110+
코어 격리 (Core isolation)
111+
전용 캐시 할당
112+
113+
114+
115+
⚖️ 법적 · 윤리적 고지
116+
중요 공지
117+
이 실험은 연구 및 교육 목적으로만 제공됩니다:
118+
119+
❌ 무단 테스트 금지: 허가되지 않은 시스템에 대한 테스트는 불법입니다
120+
✅ 적법한 환경: 모든 실험은 법적 허가를 확보한 환경에서만 진행하세요
121+
📋 책임 소재: 모든 사용에 따른 책임은 전적으로 사용자에게 있습니다
122+
123+
권장 실험 환경
124+
125+
개인 소유의 로컬 머신
126+
격리된 가상 머신 (VM)
127+
명시적 허가를 받은 테스트 환경
128+
교육 기관의 승인된 실습 환경
129+
130+
📚 추가 리소스
131+
관련 논문
132+
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)
135+
136+
추가 학습 자료
137+
138+
Cache-timing attacks on AES
139+
Intel Software Guard Extensions (SGX) and Side-Channels
140+
141+
142+
🔧 권장 추가 파일
143+
리포지토리에 다음 파일들을 추가하는 것을 권장합니다:
144+
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 — 법적 고지 전문
150+
151+
⚠️ 경고: 이 섹션의 코드와 실험은 교육 목적으로만 제공됩니다. 반드시 로컬 VM 또는 실험 전용 장비에서, 그리고 명시적 허가가 있는 환경에서만 실행하세요.

0 commit comments

Comments
 (0)