775. Prime+Probe 기법 (Prime+Probe Technique)

핵심 인사이트 (3줄 요약)

  1. 본질: Prime+Probe는 공유 메모리 없이도 작동하는 가장 범용적인 캐시 타이밍 공격으로, 공격자가 **캐시 세트를 자신의 데이터로 미리 채우고(Prime), 피해자가 이를 쫓아냈는지(Evict) 측정(Probe)**하여 정보를 훔치는 기법이다.
  2. 가치: 클라우드 가상화 환경(Cross-VM)이나 멀티코어 환경에서 서로 다른 보안 영역에 있는 프로세스 간의 간섭을 통해 데이터를 유출할 수 있어 현대 마이크로아키텍처 보안의 핵심 위협이다.
  3. 판단 포인트: 공격자가 캐시의 '집합 연관성(Set-associativity)' 구조를 정확히 파악해야 성립하므로, 이를 방어하기 위해 랜덤 캐시 교체 정책이나 하드웨어 기반 캐시 격리 기술이 요구된다.

Ⅰ. 개요 및 필요성

1. Prime+Probe 기법의 정의

Prime+Probe는 캐시 메모리의 '경합(Contention)' 현상을 이용하는 부채널 공격 기법이다. 공격자는 피해자와 메모리를 공유할 필요가 없으며, 단지 동일한 CPU 캐시(주로 L1 또는 L3)를 공유하기만 하면 된다. 공격자가 특정 캐시 세트를 자신의 데이터로 가득 채워둔 상태에서 피해자가 실행될 때, 만약 피해자가 해당 세트를 사용한다면 공격자의 데이터 일부가 캐시에서 쫓겨나게 된다. 이후 공격자가 다시 자신의 데이터를 읽어봄으로써 발생하는 '지연 시간(Latency)'을 통해 피해자의 접근 패턴을 알아낸다.

2. 왜 Prime+Probe가 중요한가?

다른 캐시 공격(예: Flush+Reload)은 공격자와 피해자가 동일한 메모리 페이지(공유 라이브러리 등)를 공유해야 한다는 전제 조건이 있다. 하지만 Prime+Probe는 이러한 전제가 필요 없다.

  • 범용성: 공유 메모리가 차단된 샌드박스나 클라우드 환경에서도 공격이 가능하다.
  • 교차 계층 공격: 가상 머신(VM) 간, 프로세스 간, 심지어 커널과 유저 모드 간에도 공격이 성립한다.
  • 마이크로아키텍처의 근본적 취약성: 캐시가 유한한 용량을 가지고 '세트(Set)' 단위로 관리되는 한 피하기 어려운 물리적 현상이다.

3. 기술적 배경 (Set-Associative Cache)

현대 캐시는 대부분 '집합 연관(Set-associative)' 방식이다. 특정 메모리 주소는 캐시 내의 정해진 세트(Set) 중 하나에만 들어갈 수 있다. Prime+Probe는 바로 이 '자리의 주인 찾기' 싸움을 이용한다.

  • 💡 비유: 공용 주차장(캐시 세트)에 내 차들(공격자 데이터)을 빈틈없이 주차해 놓는 것과 같습니다. 나중에 와보니 내 차 중 하나가 견인되고 다른 차(피해자 데이터)가 주차되어 있다면, 누군가 그 자리에 차를 댔다는 사실을 알 수 있습니다.
┌──────────────────────────────────────────────────────────────┐
│           Prime+Probe의 3단계 프로세스: "자리를 선점하라"            │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  [ 1단계: Prime ]                                             │
│  공격자가 특정 캐시 세트(Set X)를 자신의 데이터(A, B, C, D)로 채움 │
│  Cache Set X: [ A ][ B ][ C ][ D ] (공격자의 차들)              │
│                                                              │
│  [ 2단계: Victim Execution ]                                  │
│  피해자가 실행되면서 비밀 데이터를 위해 Set X를 사용함              │
│  Cache Set X: [ A ][ B ][ V ][ D ] (C가 쫓겨나고 V가 들어옴)      │
│                                                              │
│  [ 3단계: Probe ]                                             │
│  공격자가 다시 자신의 데이터(A, B, C, D)를 읽어봄                 │
│  - A, B, D 읽기: 빠름 (Hit)                                   │
│  - C 읽기: 느림 (Miss! ◀── 누군가 내 자리를 뺏었음 확인)           │
│                                                              │
└──────────────────────────────────────────────────────────────┘
  • 📢 섹션 요약 비유: Prime+Probe는 의자 뺏기 게임과 같습니다. 내가 의자를 다 차지하고 있다가, 게임이 끝난 뒤 누가 내 의자 중 하나를 뺏어 앉았는지 확인하여 상대방의 움직임을 알아내는 것입니다.

Ⅱ. 아키텍처 및 핵심 원리

1. Eviction Set의 구성 (핵심 난제)

공격자가 특정 캐시 세트를 정확히 공략하려면, 해당 세트에 매핑되는 메모리 주소들의 집합인 **'Eviction Set'**을 미리 찾아내야 한다.

  • L1/L2 캐시: 가상 주소의 하위 비트(Index)가 물리 주소와 같아 찾기 쉽다.
  • L3(LLC) 캐시: 현대 CPU는 보안과 성능을 위해 물리 주소를 'Complex Hash Function'을 통해 여러 Slice에 분산시킨다. 이 해시 함수를 역공학(Reverse Engineering)하여 Eviction Set을 구성하는 것이 공격의 핵심 기술이다.

2. 공격 메커니즘 상세

단계수행 상세하드웨어 반응
1. Prime (준비)공격자가 Eviction Set에 속하는 N개의 데이터를 순차적으로 읽음 (N = 캐시 Way 수)대상 캐시 세트의 모든 라인이 공격자 데이터로 가득 참
2. Wait (대기)피해자가 암호화 연산 등을 수행하도록 유도피해자가 특정 주소를 참조하면 공격자 데이터 하나가 축출(Evict)됨
3. Probe (측정)공격자가 다시 Prime 단계의 데이터를 읽으며 시간 측정rdtsc 타이머로 각 라인의 접근 시간 기록. Miss 발생 시 정보 유출

3. 타이밍 해상도와 노이즈 제거

  • 타이머: rdtsc (Read Time-Step Counter)를 사용하여 나노초 단위의 차이를 식별한다.
  • 노이즈: 운영체제의 스케줄링이나 인터럽트로 인해 발생하는 가짜 Miss를 제거하기 위해, 동일한 공격을 수만 번 반복하여 통계적으로 유의미한 패턴을 추출한다.
┌──────────────────────────────────────────────────────────────┐
│             LLC(Last Level Cache) Slice 구조와 해시              │
├──────────────────────────────────────────────────────────────┤
│  물리 주소(PA) ───▶ [ Hash Function ] ───▶ Slice 0, 1, 2, 3   │
│                                                              │
│  공격자는 많은 수의 페이지를 할당받은 뒤, 같은 Slice 및          │
│  같은 Set에 매핑되는 주소들만 골라내어 '공격용 리스트'를 만듦.      │
└──────────────────────────────────────────────────────────────┘
  • 📢 섹션 요약 비유: 복잡한 아파트 단지(캐시)에서 특정 호수(세트)에 들어가는 열쇠(주소)들을 모으는 과정입니다. 열쇠 뭉치를 충분히 확보해야 해당 집을 완벽하게 점거(Prime)할 수 있습니다.

Ⅲ. 비교 및 연결

1. Prime+Probe vs Flush+Reload

가장 흔히 비교되는 두 기법은 '공유 메모리' 유무에 따라 갈린다.

항목Prime+ProbeFlush+Reload
공유 메모리필요 없음 (자원 경합 기반)필요 (동일 페이지 참조 기반)
정밀도캐시 세트 단위 (64B * Way)메모리 라인 단위 (64B)
탐지 난이도어려움 (정상적인 메모리 읽기)비교적 쉬움 (clflush 명령어 빈도)
적용 범위L1, L2, L3(LLC) 전체주로 L3 (공유 캐시)

2. 하드웨어 환경에 따른 변화

  • Inclusive Cache: L3에 데이터가 있으면 L1/L2에도 반드시 있는 구조. 이 경우 L3만 Prime해도 L1에 있는 피해자 데이터를 쫓아낼 수 있어 공격이 더 강력해진다. (Intel 모델 등)
  • Non-inclusive Cache: 계층 간 독립적인 구조. 공격이 좀 더 복잡해진다. (최신 AMD 등)

3. 융합 공격: Spectre-PHT

분기 예측 오류를 유도하는 Spectre 공격에서, 예측 실행 중 접근한 데이터를 나중에 확인하는 '추출(Extraction)' 단계의 도구로 Prime+Probe가 널리 사용된다.

  • 📢 섹션 요약 비유: Flush+Reload가 상대방의 일기장을 직접 들여다보는(공유) 것이라면, Prime+Probe는 상대방의 방에 가구가 바뀌었는지 밖에서 짐차(캐시)의 움직임을 관찰하는 것입니다.

Ⅳ. 실무 적용 및 기술사 판단

1. 기술적 방어 전략

A. 하드웨어 레벨 방어

  • 캐시 파티셔닝 (Way-based Isolation): Intel CAT 등을 사용하여 보안 프로세스와 일반 프로세스가 사용하는 캐시 Way를 물리적으로 분리한다. (가장 확실한 방어)
  • 랜덤 교체 (Random Replacement): LRU 대신 랜덤하게 데이터를 쫓아내어 공격자가 어떤 데이터가 나갔는지 예측하기 어렵게 만든다.
  • Skylake 해시 강화: LLC 슬라이스 해시 함수를 복잡하게 하여 Eviction Set 구성을 어렵게 만든다.

B. 소프트웨어/운영체제 레벨 방어

  • 페이지 컬러링 (Page Coloring): 가상 주소를 물리 주소에 매핑할 때, 특정 프로세스가 사용하는 물리적 캐시 세트를 겹치지 않게 강제한다.
  • 타이머 해상도 제한: 유저 모드에서 rdtsc의 정밀도를 떨어뜨리거나 지터를 추가하여 미세한 타이밍 차이를 읽지 못하게 한다.

2. 실무적 판단 및 가이드

  • 클라우드 보안: 멀티테넌트 환경에서 민감한 워크로드를 처리할 때는 반드시 하드웨어 격리 기술(Intel SGX, AMD SEV)과 캐시 파티셔닝(CAT)이 적용된 인스턴스를 선택해야 한다.
  • 코드 레벨: 암호 연산 시 메모리 접근이 키 값에 따라 변하지 않도록 하는 'Constant-time' 라이브러리 사용을 의무화해야 한다.

3. 안티패턴 및 체크리스트

  • 안티패턴: 같은 물리 코어 내에서 하이퍼스레딩(SMT)을 켠 채로, 하나는 신뢰할 수 없는 프로세스를 돌리고 하나는 보안 연산을 수행하는 환경. (L1 캐시를 직접 공유하므로 최악의 설정)

  • 체크리스트:

    • rdtsc 사용 빈도를 모니터링하고 있는가?
    • 캐시 미스율(Cache Miss Rate)의 급격한 변동을 감지하는 IDS가 있는가?
  • 📢 섹션 요약 비유: 방어 전략은 마치 공용 주차장에 칸막이를 설치하는 것과 같습니다. 내 차와 남의 차가 섞이지 않게 칸을 나눠버리면, 아무리 주차를 많이 해도 서로에게 영향을 줄 수 없습니다.


Ⅴ. 기대효과 및 결론

1. 기대효과

  • 보안 가시성 확보: 마이크로아키텍처 레벨의 위협을 이해함으로써 클라우드 인프라의 실제 보안 수준을 정밀하게 평가할 수 있다.
  • 고신뢰 컴퓨팅 구현: 하드웨어 격리와 소프트웨어 상수 시간 구현이 결합된 진정한 보안 시스템 구축이 가능해진다.

2. 한계 및 도전 과제

하드웨어의 복잡도가 증가함에 따라(예: 프리패처, 복잡한 해시, 디렉토리 구조), 공격 기술 또한 머신러닝 등을 활용하여 더 정교하게 Eviction Set을 찾아내는 방향으로 진화하고 있다. 방어자 역시 단순한 차단을 넘어 성능 저하를 최소화하는 적응형 방어 기술을 개발해야 한다.

3. 최종 결론

Prime+Probe는 **"공유하지 않아도 간섭할 수 있다"**는 현대 컴퓨팅의 역설을 보여준다. 자원의 효율적 공유가 성능의 핵심이지만, 바로 그 공유가 보안의 구멍이 된다. 기술사는 시스템의 처리량(Throughput)만을 쫓는 설계자에서 벗어나, 자원 공유로 인한 '정보의 누수'를 통제할 수 있는 보안 아키텍트가 되어야 한다.

  • 📢 섹션 요약 비유: Prime+Probe에 대한 연구는 우리에게 '보이지 않는 연결'을 경고합니다. 담장 너머의 그림자만 보고도 집 안의 일을 알 수 있듯이, 기술사는 하드웨어의 모든 물리적 신호를 보안의 관점에서 재해석해야 합니다.

📌 관련 개념 맵

개념 명칭연결 포인트 및 시너지
Eviction SetPrime+Probe 공격을 위해 특정 캐시 세트를 공략하는 주소 뭉치.
Intel CAT캐시를 하드웨어적으로 칸막이 쳐서 이 공격을 근본적으로 막는 기술.
Inclusive CacheL3 상태가 L1에 영향을 미쳐 Prime+Probe를 더 쉽게 만드는 특성.
Complex Hash주소를 여러 캐시 슬라이스로 흩뿌려 공격을 어렵게 만드는 설계.
Side-channel Analysis통계적 기법을 통해 노이즈 섞인 타이밍 데이터에서 키를 추출하는 과정.

👶 어린이를 위한 3줄 비유 설명

  1. Prime+Probe는 친구의 가방에 내 장난감을 가득 채워놓는 장난이에요.
  2. 나중에 가방을 열었을 때 내 장난감이 하나 없어졌다면, 친구가 자기 물건을 넣으려고 내 것을 뺐다는 걸 알 수 있죠.
  3. 이 장난을 통해 친구가 가방에 무엇을 넣었는지(무슨 공부를 했는지) 몰래 알아내는 기술이랍니다.