← 최신 논문
💻 computer science

One (Thread) Can Keep a (PRNG) Secret, but not Two

이 논문은 XNU 커널의 IPv6 Fragment ID PRNG에 존재하는 레이스 컨디션을 악용하여 시퀀스 번호를 예측하고 TCP 및 UDP 트래픽의 오프 패스 스푸핑을 가능하게 하는 최초의 암호 해독 공격을 제시하며, 이 취약점은 현재 애플에 의해 CVE-2024-27823로 패치되었습니다.

원저자: Ehood Porat, Amit Klein, Benny Pinkas

게시일 2026-06-03
📖 4 분 읽기☕ 가벼운 읽기

원저자: Ehood Porat, Amit Klein, Benny Pinkas

원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

당신이 친구에게 크고 중요한 편지를 보내고 있다고 상상해 보세요. 편지가 너무 커서 단일 봉투에 들어가지 않기 때문에, 우체국(네트워크)은 이를 더 작은 조각들, 즉 **파편(fragments)**으로 자릅니다. 이 조각들이 올바른 순서로 다시 합쳐질 수 있도록, 각 조각에는 고유한 티켓 번호(Fragment ID라고 불림)가 부여됩니다.

당신이 읽고 있는 이 논문은 해커가 어떻게 이 티켓 번호를 미리 예측하여, 당신이나 당신의 친구가 눈치채지 못하는 사이에 당신의 편지 한 조각을 가짜로 바꿔치기할 수 있는지에 대한 영리한 방법을 설명합니다.

다음은 이 공격에 대한 쉬운 설명입니다:

1. 비밀 티켓 기계 (PRNG)

Apple의 컴퓨터(macOS 및 iOS)는 이 티켓 번호를 생성하기 위해 그들의 두뇌(커널) 내부에서 작동하는 특별한 "티켓 기계"를 사용합니다. 이 기계는 주사위를 던지는 것처럼 예측 불가능해야 합니다. 만약 숫자가 진정으로 무작위라면, 다음 티켓을 예측할 수 없습니다.

하지만 연구자들은 이 기계가 바쁠 때 작동하는 방식에 결함이 있다는 것을 발견했습니다.

2. "두 사람이 하나의 기계를 사용하는" 문제 (Race Condition)

마치 매우 바쁜 티켓 카운터에서 두 사람(두 개의 컴퓨터 스레드)이 정확히 같은 밀리초(millisecond)에 티켓을 잡으려고 시도하는 것과 같습니다.

  • 정상적인 경우: 기계는 A에게 티켓을 준 다음, B에게 다른 티키를 줍니다.
  • 글리치(Glitch): 기계가 "스레드 안전(thread-safe)"하지 않기 때문에(즉, 동시에 티켓을 잡지 못하게 막는 잠금 장치가 없기 때문에), 두 사람 모두 동일한 시작 번호를 잡을 수도 있습니다. 두 사람 모두 계산을 수행하지만, 시작 번호가 같고 단계가 약간씩 다르기 때문에 기묘한 패턴을 만들어냅니다.

패턴: 연구자들은 이 "경합(race)"을 유발하면 기계가 A, B, C, B와 같은 특정 숫자 시퀀스를 생성한다는 것을 발견했습니다. 주목하세요, BC에 의해 분리된 채 두 번 나타납니다. 이 "B-C-B" 패턴은 결정적인 증거입니다. 이것은 공격자에게 "헤이! 방금 기계에서 경합 상태(race condition)가 발생했어! 이제 기계의 내부 톱니바퀴가 어떻게 돌아가는지 볼 수 있어"라고 말해주는 것입니다.

3. 암호 해독 (Cryptanalysis)

공격자가 이러한 "B-C-B" 패턴을 충분히 수집하면, 기계를 역설계(reverse-engineer)할 수 있습니다.

  • 기계를 조합형 자물쇠라고 생각해 보세요. "B-C-B" 패턴은 공격자에게 자물쇠 내부의 핀(tumbler)이 현재 어떤 위치에 있는지에 대한 단서를 제공합니다.
  • 이러한 단서들을 충분히 모으면, 공격자는 기계의 **전체 내부 상태(internal state)**를 파악할 수 있습니다.
  • 내부 상태를 알게 되면, 다음에 나올 티켓 번호가 무엇일지 정확히 예측할 수 있습니다.

4. 바꿔치기 (The Attack)

이제 공격자는 티켓 번호를 예측할 수 있으므로, 중간에 끼어들지 않고도 "중간자 공격(man-in-the-middle)"을 수행할 수 있습니다.

  • 시나리오: 당신은 대용량 파일(예: 코드 백업본)을 서버로 보내고 있습니다. 파일은 여러 조각으로 나뉩니다.
  • 보호 장치: 파일의 첫 번째 조각에는 당신의 비밀번호와 서명(인증)이 포함되어 있습니다. 서버는 당신이 누구인지 확인하기 위해 이 첫 번째 조각을 먼저 검사합니다.
  • 수법: 공격자는 첫 번째 조각이 도착하기를 기다립니다. 그런 다음, 자신의 예측을 사용하여 두 번째 조각에 대한 티켓 번호를 추측합니다. 공격자는 올바른 티켓 번호를 가진 가짜 두 번째 조각(악성 메시지나 바이러스가 담긴 파일)을 빠르게 보냅니다.
  • 결과: 서버는 진짜 첫 번째 조각(유효한 비밀번호가 포함된)과 가짜 두 번째 조각(바이러스가 포함된)을 받습니다. 서버는 이 둘을 합쳐서 아무 문제가 없다고 생각하고 감염된 파일을 저장합니다. 공격자는 보안 검사가 첫 번째 조각에서만 이루어졌다는 점을 이용해 보안을 우회했습니다.

논문에 나온 실제 사례

연구자들은 이 공격을 두 가지 특정 상황에서 테스트했습니다:

  1. NFS (Network File System): 공격자가 서버로 백업되는 파일을 어떻게 변경할 수 있는지 보여주었습니다. 예를 들어, 표준 컴퓨터 코드 파일에 "트로이 목마"를 삽입할 수 있습니다. 이후 개발자가 이 코드를 컴파일할 때 바이러스가 실행됩니다.
  2. HTTP (웹 브라우징): 공격자가 네트워크를 통해 이동하는 웹 요청(로그인이나 양식 제출 등)을 어떻게 변경할 수 있는지 보여주었습니다.

이것이 왜 중요한가

  • 새로운 방식입니다: 이는 "경합 조건(race condition, 타이밍 글리치)"을 사용하여 난수 생성기를 깨뜨린 첫 번째 사례입니다. 보통 경합 조건은 단순히 시스템 충돌을 일으키지만, 여기서는 데이터를 훔치는 데 사용되었습니다.
  • 실제적입니다: 이 공격은 다양한 버전의 macOS 및 iOS가 실행되는 실제 Apple 기기(M1, M2 칩, Intel Mac)에서 작동합니다.
  • 해결책: Apple은 이미 이 문제를 패치했습니다. 이 결함에는 CVE-2024-27823이라는 ID가 부여되었습니다. 해결 방법은 티켓 기계를 "스레드 안전(thread-safe)"하게 만들어 두 작업이 동시에 시작 번호를 잡지 못하도록 하는 것입니다.

요약하자면: 이 논문은 컴퓨터의 난수 생성기가 동시에 일어나는 두 가지 사건 때문에 혼란을 겪게 되면, 해커가 그 혼란을 이용해 미래를 예측하고, 데이터의 일부를 바꿔치기하며, 보안 검사를 통과해 악성 코드를 몰래 침투시킬 수 있음을 보여줍니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →