---
title: "멀바드 VPN 출구 아이피, 생각보다 사용자를 잘 드러낸다"
published: 2026-05-15T02:35:35.000Z
canonical: https://jeff.news/article/2698
---
# 멀바드 VPN 출구 아이피, 생각보다 사용자를 잘 드러낸다

멀바드 VPN은 같은 서버에 접속해도 사용자마다 다른 출구 아이피를 배정하는데, 이 배정이 완전 랜덤이 아니라 WireGuard 공개키 기반으로 결정되는 것으로 보인다는 분석이 나왔다. 여러 서버에서 받은 출구 아이피 조합을 보면 각 서버의 아이피 풀에서 비슷한 위치값이 반복돼, 서로 다른 서버 로그를 조합하면 사용자를 상당히 높은 확률로 연결할 수 있다는 얘기다.

- 멀바드(Mullvad) VPN의 출구 아이피(exit IP)가 생각보다 강한 식별 신호가 될 수 있다는 분석이 나옴
  - 멀바드는 같은 서버에 접속한 사용자에게도 보통 서로 다른 공인 아이피를 배정함
  - 서버 수는 578개로, 프로톤 VPN(Proton VPN)의 2만 개와 비교하면 훨씬 적음
  - 대신 서버 하나에 여러 출구 아이피를 붙이는 식으로 수직 확장해서, 특정 아이피에 사용자가 너무 몰리는 문제를 줄이는 구조임

- 문제는 이 출구 아이피가 접속할 때마다 새로 랜덤하게 뽑히는 게 아니라는 점임
  - 분석에 따르면 멀바드는 WireGuard 공개키를 기준으로 출구 아이피를 결정적으로 고르는 것으로 보임
  - WireGuard 키는 기본 클라이언트에서는 1~30일마다 바뀌지만, 서드파티 클라이언트를 쓰면 아예 안 바뀔 수도 있음
  - 즉 같은 키를 유지하는 동안에는 여러 서버에 접속해도 일정한 패턴의 출구 아이피를 받게 됨

- 작성자는 9개 서버를 대상으로 공개키를 계속 바꿔가며 출구 아이피를 수집함
  - 하룻밤 동안 3650개 공개키에 대한 데이터를 모았고, 서버별 아이피 풀 범위를 매핑함
  - 예를 들면 시드니 서버는 60개, 로스앤젤레스 서버는 91개, 헬싱키 서버는 66개의 출구 아이피 풀을 갖고 있었음
  - 9개 서버의 아이피 풀을 조합하면 이론상 8.2조 개가 넘는 출구 아이피 조합이 나와야 함

> [!IMPORTANT]
> 그런데 실제로 관측된 조합은 8.2조 개가 아니라 284개뿐이었음. 이게 이 글의 제일 찝찝한 포인트임.

- 왜 조합이 이렇게 적었냐면, 서버마다 뽑히는 아이피가 각 풀의 비슷한 위치에 몰렸기 때문임
  - 예를 들어 어떤 공개키가 시드니 서버에서 60개 중 49번째 아이피를 받으면, 다른 서버에서도 대체로 80%대 위치의 아이피를 받는 식임
  - 실제 예시에서는 시드니 49/60, 산티아고 9/11, 베를린 7/8, 코펜하겐 25/31, 헬싱키 54/66처럼 거의 같은 백분위가 반복됨
  - 서로 다른 서버를 써도 ‘아이피 풀 안에서의 상대적 위치’가 비슷하게 유지되니, 이 조합이 사용자 식별 단서가 됨

- 작성자는 원인을 시드 기반 난수 생성기(RNG) 사용 방식으로 추정함
  - 같은 시드로 난수 생성기를 초기화하고, `rand-between` 같은 호출에 같은 범위를 넣으면 항상 같은 결과가 나옴
  - 흥미로운 건 범위가 달라도 첫 난수값 자체는 같고, 그 값을 각 서버의 아이피 풀 크기에 맞춰 스케일링하는 식으로 동작할 수 있다는 점임
  - 그래서 풀 크기가 11개인 두 서버에서는 관측된 284개 조합 전체에서 아이피 인덱스가 계속 같이 움직였음

- 이건 단순히 ‘랜덤 구현이 좀 특이하네’에서 끝나는 얘기가 아님
  - 작성자는 특정 아이피 조합이 어떤 난수 구간에 해당하는지 계산하는 도구까지 만들었음
  - 예시 조합 하나는 난수값 0.2909~0.2943 사이로 추정됐고, 이 구간 폭은 0.0034임
  - 전체 멀바드 활성 사용자를 대략 10만 명으로 보면, 같은 조합을 공유하는 사용자가 약 340명 정도라는 계산이 나옴

- 340명이면 완전한 개인 식별은 아니지만, 로그 상관분석에서는 꽤 센 신호임
  - 예를 들어 포럼 운영자가 어제 차단한 사용자의 부계정을 의심한다고 해보자
  - 두 계정이 서로 다른 멀바드 서버를 썼더라도, 로그의 출구 아이피들이 각각 0.4334~0.4428과 0.4358~0.4423 같은 겹치는 구간을 가리키면 동일인일 확률이 크게 올라감
  - 작성자는 이런 식이면 99% 이상 정확도로 같은 사용자인지 추정할 수 있는 상황도 가능하다고 봄

> [!WARNING]
> VPN은 아이피를 숨겨주지만, 여러 접속 기록을 서로 연결할 수 없게 만들어주는 만능 장치는 아님. 특히 같은 키나 같은 클라이언트 설정이 오래 유지되면 패턴이 남을 수 있음.

- 더 큰 문제는 이 기법이 서비스 운영자 한 명의 호기심 수준을 넘어설 수 있다는 점임
  - 데이터 유출로 확보된 접속 로그, 포럼 아이피 로그, 법적 절차로 받은 로그가 함께 있으면 상관관계 분석 재료가 늘어남
  - 각각의 로그에서는 “멀바드 아이피를 썼다” 정도로만 보이더라도, 여러 서버의 아이피 위치값을 합치면 같은 사용자를 좁힐 수 있음
  - 익명성은 단일 접속이 아니라 반복 접속의 패턴에서 깨지는 경우가 많다는 걸 다시 보여줌

- 개발자 입장에서는 RNG와 프라이버시 설계가 얼마나 미묘하게 엮이는지 보여주는 사례이기도 함
  - 작성자 주변 프로그래머들도 범위가 바뀐 난수 호출이 어떤 결과를 낼지 정확히 설명하지 못한 사람이 많았다고 함
  - 멀바드 개발팀이 정말 의도한 설계인지, 아니면 ‘서버마다 독립적인 조합이 충분히 많이 나오겠지’라고 생각했다가 생긴 결과인지는 확인되지 않음
  - 다만 관측된 패턴만 보면, 출구 아이피 선택 알고리즘이 사용자 프라이버시에 예상보다 큰 영향을 주는 건 확실해 보임

---

## 기술 맥락

- 여기서 핵심 선택은 멀바드가 출구 아이피를 매번 완전 랜덤으로 고르지 않고, WireGuard 공개키 같은 고정 입력값을 바탕으로 고른 것으로 보인다는 점이에요. 이렇게 하면 같은 사용자가 서버에 다시 붙어도 배정이 안정적이라 운영 측면에서는 예측 가능하지만, 그 안정성이 그대로 식별 패턴이 돼요.

- 난수 생성기(RNG)는 이름 때문에 매번 독립적인 결과를 줄 것 같지만, 시드가 같으면 같은 난수 흐름을 재현하는 게 보통이에요. 기사에서 관측된 현상은 하나의 난수값을 서버별 아이피 풀 크기에 맞춰 스케일링한 것처럼 보이기 때문에, 풀 크기가 달라도 비슷한 백분위 위치의 아이피가 반복돼요.

- 이게 프라이버시에서 위험한 이유는 공격자가 실제 아이피 하나만 보는 게 아니라 여러 로그를 조합하기 때문이에요. 서버 A에서는 80%대 위치 아이피, 서버 B에서도 80%대 위치 아이피를 받는 식의 패턴이 누적되면, 사용자가 서로 다른 서버를 골라도 같은 사람일 가능성을 좁힐 수 있거든요.

- 대안은 출구 아이피 선택에 더 많은 독립 엔트로피를 넣거나, 서버별 선택이 서로 상관되지 않도록 설계하는 쪽이에요. 다만 그러면 세션 안정성, 차단 회피, 운영 관측 가능성 같은 요구사항과 충돌할 수 있어서, VPN 서비스에서는 단순한 랜덤보다 프라이버시 모델을 먼저 정해야 해요.

## 핵심 포인트

- 멀바드는 서버 수는 578개로 적지만 서버별 출구 아이피 풀을 여러 개 둬서 사용자 밀집을 줄인다
- 출구 아이피는 접속할 때마다 새로 랜덤 배정되는 게 아니라 WireGuard 키 기준으로 결정적으로 선택되는 것으로 보인다
- 9개 서버를 대상으로 3650개 공개키를 테스트했더니 이론상 8.2조 개 조합 대신 284개 조합만 관측됐다
- 서로 다른 서버의 출구 아이피가 각 아이피 풀에서 비슷한 백분위 위치에 몰려 있어 상관관계 추적이 가능해진다
- 포럼 로그, 유출 로그, 법적 절차로 확보한 로그를 조합하면 VPN 뒤의 동일 사용자를 추정하는 데 악용될 수 있다

## 인사이트

VPN을 쓴다고 무조건 로그 간 상관관계가 끊기는 건 아니라는 걸 보여주는 꽤 재밌고 찝찝한 사례다. 특히 ‘아이피가 다르다’와 ‘식별 가능성이 낮다’는 완전히 다른 얘기라는 점이 핵심임.
