🛠️ GitHub 레포지토리
프로젝트: sumin-world/rust-security-suminworld
디렉토리 구조:
poCs/cache/ # Flush+Reload PoC (C 코드)
docs/ # Legal Notice, 설명 문서
tools/ # 분석 도구 (Rust)
examples/run.sh # 실행 스크립트
현대 컴퓨터 보안에서 암호화 알고리즘 자체는 수학적으로 견고하게 설계되어 있습니다. 하지만 실제 구현 과정에서 의도치 않게 새어나오는 **부수적인 정보(side channel)**를 통해 비밀 정보가 유출될 수 있습니다. 이번 글에서는 캐시 기반 Flush+Reload 공격을 직접 실험하고, 수집된 데이터를 분석해보겠습니다.
사이드 채널 공격(Side Channel Attack)이란?
사이드 채널 공격은 프로그램 실행 중 발생하는 물리적/시간적 특성을 관찰하여 비밀 정보를 추출하는 공격 기법입니다.
주요 사이드 채널 유형
- 시간(Timing): 연산 속도 차이 측정
- 캐시(Cache): 메모리 접근 시간 차이 분석
- 전력(Power): 소비 전력 패턴 관찰
- 전자기파(EM): 전자기 방출 패턴 측정
구성
- Victim 프로그램: 특정 메모리 인덱스를 반복적으로 접근
- Attacker 프로그램: clflush + rdtscp 조합으로 메모리 접근 시간 측정
데이터 수집 과정
실행 스크립트
# victim 프로세스 백그라운드 실행
./poCs/cache/victim_sim &
# attacker 실행하여 CSV 저장
./poCs/cache/flush_reload_attacker_csv > /tmp/flush_reload_data.csv
# victim 프로세스 종료
kill $VICTIM_PID
수집된 CSV 데이터 구조
iter,cycles
0,158000
1,1000
2,1000
3,1000
4,1000
5,0
사이클 수 의미:
- 작은 값 (~1000): 캐시 히트 - 데이터가 캐시에 존재
- 큰 값 (~158000): 캐시 미스 - 메인 메모리에서 데이터 로드 필요
📊 통계 분석
데이터 요약
# 총 샘플 수 확인
wc -l /tmp/flush_reload_data.csv
# 평균 사이클 계산
awk -F, 'NR>1{n++; sum+=$2} END{print "샘플수="n, "평균="sum/n}' /tmp/flush_reload_data.csv
분석 결과:
- 총 샘플 수: 20,000개
- 평균 사이클: 약 420 cycles
분포 특성
- 0 cycles: 측정 루틴 최적화 또는 즉시 반환 케이스
- ~1000 cycles: 캐시 히트 (victim이 해당 메모리 사용)
- 100,000+ cycles: 캐시 미스, 컨텍스트 스위칭, 인터럽트 등
시각화 결과
1. 전체 분포 히스토그램 (로그 스케일)

로그 스케일을 사용하여 전체 데이터 분포를 확인할 수 있습니다. 대부분의 값이 저지연 영역에 집중되어 있으며, 희귀한 고지연 값들도 명확히 관찰됩니다.
2. 5000 Cycles 이하 확대 뷰

실제 캐시 히트/미스의 핵심 클러스터를 명확히 보여줍니다.
두 개의 뚜렷한 피크:
- 0 cycles 근처: 약 12,000회 - 즉시 반환 케이스
- ~1000 cycles: 약 7,700회 - 실제 캐시 히트
3. 선형 스케일 히스토그램

선형 스케일에서는 대부분의 측정값이 0 근처에 집중되어 있어, 캐시 히트의 압도적 비율을 시각적으로 확인할 수 있습니다.
실험 결과 해석
캐시 접근 패턴 분석
그래프에서 관찰되는 이중 클러스터(Bimodal Distribution):
- 저지연 클러스터 (0~1000 cycles)
- Victim이 해당 메모리를 최근 사용
- 데이터가 L3 캐시에 로드된 상태
- 공격자의 메모리 접근이 빠르게 완료
- 고지연 값 (158000+ cycles)
- 캐시 미스 발생
- 메인 메모리에서 데이터 fetch 필요
- 인터럽트, 컨텍스트 스위칭 등 외부 요인
공격 메커니즘
Flush+Reload의 작동 원리:
- Flush: clflush로 특정 메모리 라인을 캐시에서 제거
- Wait: Victim이 해당 메모리 접근할 시간 부여
- Reload: 동일 메모리 접근 시간 측정
- Analyze: 빠르면 victim이 사용, 느리면 미사용으로 판단
보안적 시사점
실제 공격 시나리오
AES 암호화 공격:
- S-box 테이블 접근 패턴 추적
- 각 라운드별 키 바이트 추출
- 전체 암호화 키 복구 가능
RSA 개인키 추출:
- Modular exponentiation 중 분기 패턴
- Square-and-multiply 알고리즘의 비밀 지수 추적
웹 브라우저 공격:
- 방문한 웹사이트 추적
- 입력한 패스워드 길이 유추
대응 방안
- 상수 시간(Constant-Time) 알고리즘
- 입력값에 관계없이 동일한 실행 시간
- 조건 분기 최소화
- 캐시 파티셔닝
- Intel CAT (Cache Allocation Technology)
- 프로세스별 캐시 영역 격리
- 소프트웨어 대응
- 랜덤 딜레이 삽입
- 블라인딩 기법 적용
- 메모리 접근 패턴 난독화
결론
Flush+Reload는 단순하지만 단지 "메모리 접근 시간"만으로도 victim 프로세스의 행동을 정확히 추적할 수 있었습니다.
현대 프로세서의 성능 최적화 기능(캐싱)이 오히려 보안 취약점이 될 수 있다는 역설적인 상황을 보여주는 사례입니다. 보안 크리티컬한 애플리케이션 개발 시 반드시 사이드채널 공격을 고려한 설계가 필요합니다.
⚠️ Legal Notice
본 실험은 순수 학습 및 연구 목적으로 진행되었습니다. 실제 시스템에 대한 무단 공격은 명백한 불법 행위이며, 형사처벌 대상입니다. 보안 연구는 항상 적법한 범위 내에서 수행되어야 합니다.
🔗 실험 코드: GitHub - rust-security-suminworld
'system' 카테고리의 다른 글
[리눅스 프로그래밍 · DevOps] GitHub Actions로 C Signal Handling Demo CI/CD 구축기 (0) | 2025.09.18 |
---|---|
🛡️SGI 서울보증 랜섬웨어 사건 정리 & 리눅스 백신 실습 (1) | 2025.09.16 |
[Linux Signal] - 쉘, 프로세스 제어, 시그널 핸들링 (0) | 2025.09.14 |
[시스템 프로그래밍] myshell.c 코드 분석 - 2 (1) | 2025.09.12 |
[시스템 프로그래밍] myshell.c 코드 분석 - 1 (1) | 2025.09.11 |