- TunnelVision(CVE-2024-3661) 은 DHCP의 기존 기능을 악용해 사용자의 트래픽을 VPN 터널 밖으로 우회시키며, 이때 패킷은 VPN으로 암호화되지 않음
- 공격자는 DHCP option 121로 더 구체적인 라우트를 주입해 VPN 가상 인터페이스보다 우선되는 경로를 만들고, 트래픽을 물리 인터페이스로 보낼 수 있음
- 대상이 공격자 제어 DHCP 임대를 수락하고 클라이언트가 option 121을 구현하면 공격이 가능하며, 테스트에서는 Windows, Linux, iOS, macOS가 영향받고 Android는 제외됨
- VPN 제어 채널은 계속 유지돼 사용자는 연결 상태로 보게 되며, 관찰된 사례에서는 kill switch도 트래픽 누출을 막지 못함
- Linux의 네트워크 네임스페이스는 강한 해결책이 될 수 있지만, 방화벽 기반 완화는 선택적 서비스 거부와 트래픽 목적지 추론 사이드 채널을 만들 수 있음
TunnelVision이 만드는 VPN decloaking
- TunnelVision은 VPN 캡슐화를 우회해 사용자의 트래픽을 터널 밖으로 강제로 보내는 네트워크 기법임
- 공격자는 DHCP(Dynamic Host Configuration Protocol)를 이용해 대상 패킷이 VPN으로 암호화되지 않은 채 전송되게 만들 수 있음
- VPN 제어 채널은 유지되므로 사용자는 계속 VPN에 연결된 것처럼 보이며, 이 효과가 decloaking으로 불림
- 이 기법은 2002년까지 거슬러 올라가 가능했을 수 있고, 공개 후 DHCP option 121과 VPN 영향에 대한 선행 연구가 최소 2015년부터 있었다는 정보가 확인됨
- 2015년: Hardening OpenVPN for Def Con
- 2016년: Samy Kamkar's
- 2017년: Jomo's Mastodon
- 2023년: Lowend talk thread
VPN 라우팅이 공격 표면이 되는 이유
- VPN은 호스트 장치와 다른 네트워크의 서버 사이에 트래픽용 터널을 만들고, VPN 클라이언트는 가상 네트워크 인터페이스에서 트래픽을 암호화·복호화함
- 전체 트래픽을 VPN으로 보내는 구성은 full-tunnel VPN, 로컬 네트워크 등 예외가 있는 구성은 split-tunnel VPN으로 부름
- VPN은 서버와의 연결을 유지해야 하므로, VPN 서버 IP로 향하는 트래픽을 물리 인터페이스로 보내는 예외 라우트가 필요함
- 라우팅 테이블은 목적지에 따라 트래픽 경로를 정하며, 대부분의 네트워크 스택에서는 더 구체적인 CIDR prefix length가 높은 우선순위를 가짐
/32라우트는/24나/0보다 우선됨- 많은 full-tunnel VPN은
0.0.0.0/0또는 두 개의/1라우트로 트래픽을 VPN 인터페이스에 보냄
DHCP option 121을 이용한 경로 주입
- DHCP는 로컬 네트워크 장치에 IP 주소 임대를 동적으로 제공하고, options를 통해 기본 게이트웨이와 DNS 서버 같은 설정도 전달함
- 일반적인 흐름은 클라이언트가
DHCPDISCOVER를 브로드캐스트하고, 서버가DHCPOFFER로 시간 제한이 있는 임대를 제안하는 방식임 - RFC 3442에서 도입된 DHCP option 121은 classless static routes 기능으로, DHCP 서버가 클라이언트 라우팅 테이블에 정적 라우트를 추가할 수 있게 함
- option 121은 DHCP 서버가 설치할 라우트의 네트워크 인터페이스 장치를 직접 지정하지 못함
- DHCP 서버는 CIDR 범위와 라우터를 지정함
- 클라이언트는 DHCP 서버와 통신 중인 인터페이스를 해당 라우트의 인터페이스로 암묵적으로 선택함
- 이 동작 때문에 주입된 라우트의 트래픽은 VPN 가상 인터페이스가 아니라 DHCP 서버와 통신하는 물리 네트워크 인터페이스로 나갈 수 있음
공격 조건과 수행 방식
- TunnelVision 공격에는 두 조건이 필요함
- 대상 호스트가 공격자 제어 DHCP 서버의 임대를 수락해야 함
- 대상 호스트의 DHCP 클라이언트가 DHCP option 121을 구현해야 함
- 같은 네트워크에 있는 공격자는 여러 방식으로 대상의 DHCP 서버가 될 수 있음
- 실제 DHCP 서버에 DHCP starvation 공격을 수행한 뒤 새 클라이언트에 응답
DHCPDISCOVER브로드캐스트에 먼저 응답해 DHCP 클라이언트의 first-offer 선택 동작 악용- ARP spoofing으로 실제 DHCP 서버와 클라이언트 사이 트래픽을 가로챈 뒤 임대 갱신 대기
- 공격자는 대상 VPN 사용자와 같은 네트워크에서 DHCP 서버를 실행하고 자신을 게이트웨이로 설정함
- 이후 DHCP option 121로 VPN 사용자의 라우팅 테이블에 임의 라우트를 추가하고, VPN의
/0보다 더 구체적인 라우트를 넣어 VPN 가상 인터페이스보다 우선되게 함- 여러
/1라우트를 설정해 대부분 VPN이 쓰는0.0.0.0/0전체 트래픽 규칙을 재현할 수 있음 - 공격자는 어떤 IP 주소가 VPN 터널로 가고 어떤 주소가 공격자 DHCP 서버와 통신하는 인터페이스로 갈지 선택할 수 있음
- 여러
- 이미 설정된 VPN 연결에도 적용 가능하며, DHCP 임대 시간을 짧게 설정하면 라우팅 테이블 갱신을 더 자주 유도할 수 있음
PoC와 실험 시나리오
- 공개된 자료는 다음과 같음
- Video proof of concept: https://www.youtube.com/watch?v=ajsLmZia6UU
- Lab Setup Code: https://github.com/leviathansecurity/TunnelVision
- DHCP Server image: https://drive.google.com/file/d/1WLJGs3ZUypf6hLh5WL4AJmsKdUOZo5yZ
- 실험 환경은 여러 공격 시나리오를 나타내도록 구성됨
- 공격자가 DHCP 서버나 액세스 포인트를 침해한 경우
- 악성 관리자가 직접 인프라를 소유하고 설정한 경우
- 공격자가 카페나 사무실 같은 물리 장소에 evil twin 무선 AP를 설치한 경우
- 향후 ArcaneTrickster 공개 후에는 같은 LAN의 인접 호스트지만 특권적 네트워크 위치가 아닌 공격자도 모사 가능함
영향받는 운영체제와 VPN
- 테스트에서는 RFC 사양에 따른 DHCP 클라이언트를 구현하고 DHCP option 121 라우트를 지원하는 운영체제가 영향을 받음
- 영향 관찰: Windows, Linux, iOS, macOS
- 예외: Android는 DHCP option 121을 지원하지 않아 영향을 받지 않음
- 호스트 트래픽 보호를 라우팅 규칙에만 의존하는 VPN은 취약함
- 자체 VPN 서버를 운영하는 시스템 관리자도 VPN 클라이언트 구성을 강화하지 않았다면 취약할 가능성이 있음
- 암호화 알고리듬의 강도는 영향을 주지 않음
- TunnelVision은 WireGuard, OpenVPN, IPsec 같은 VPN 프로토콜 자체를 깨지 않음
- 운영체제 네트워크 스택의 라우팅 구성을 바꿔 사용자가 VPN 터널을 쓰지 않게 만드는 방식임
수정과 완화책
- Linux의 네트워크 네임스페이스는 이 동작을 완전히 고칠 수 있음
- WireGuard 문서는 VPN을 사용해야 하는 애플리케이션 트래픽을 별도 네임스페이스에서 처리한 뒤 물리 인터페이스가 있는 다른 네임스페이스로 보내는 방법을 보여줌
- Windows, macOS, 기타 운영체제에서 같은 수준으로 견고한 해결책이 있는지는 불분명함
- 일부 VPN 제공자는 물리 인터페이스의 모든 인바운드·아웃바운드 트래픽을 방화벽 규칙으로 차단하는 완화를 사용함
- LAN과 VPN 서버 연결 유지를 위해 DHCP와 VPN 서버 IP 예외가 필요함
- 심층 패킷 검사로 DHCP와 VPN 프로토콜만 허용할 수도 있지만 성능 페널티가 있을 가능성이 있음
- 방화벽 완화는 DHCP 라우트를 사용하는 트래픽에 선택적 서비스 거부를 만들고 사이드 채널을 추가함
- 공격자는 VPN 암호화 트래픽의 볼륨 변화를 분석해 대상 사용자가 특정 목적지로 트래픽을 보내는지 통계적으로 입증할 수 있음
- 사전 정의된 목록과 대조하거나, 검열 메커니즘으로 선택적 차단을 수행하거나, IP 공간 차단을 이진 탐색처럼 사용해 현재 연결을 로그 시간에 찾을 수 있음
- VPN 사용 중 option 121을 무시하는 방법도 있지만, 이 기능은 합법적 네트워크 연결에 필요할 수 있어 연결 장애를 만들 수 있음
- 이 완화가 선택 사항이면 공격자가 네트워크 접근을 거부해 VPN이나 사용자가 option 121을 다시 켜도록 유도할 수 있음
- 핫스팟이나 VM도 완화에 도움이 될 수 있음
- 셀룰러 장치가 제어하는 비밀번호 잠금 LAN은 공격자의 로컬 네트워크 접근을 막는 데 도움이 됨
- VM은 네트워크 어댑터가 bridged mode가 아니면 유사하게 동작함
사용자와 운영자에게 필요한 조치
- 민감한 트래픽에는 신뢰할 수 없는 네트워크 사용을 피하고, 불가피하면 TunnelVision에 효과적인 완화책이 있는 VPN 제공자를 사용해야 함
- VPN decloak이 발생해도 HTTPS 웹사이트에 접속하는 경우 대부분의 사용자 데이터는 로컬 네트워크 공격자에게 보이지 않지만, 목적지와 프로토콜은 노출될 수 있음
- 기업 VPN을 카페, 호텔, 공항 등에서 쓰는 경우 네트워크 관리자는 위험을 알리고 가능한 한 피하도록 안내해야 함
- 실용적이지 않다면 완화나 수정이 적용된 VPN 사용을 안내해야 함
- 신뢰할 수 있는 핫스팟을 사용한 뒤 VPN에 연결하거나, 가상 DHCP 서버에서 임대를 받는 VM 안에서 VPN을 실행하는 방식도 가능함
- 자체 네트워크나 site-to-site VPN을 운영하는 회사는 스위치를 점검하고 DHCP snooping과 ARP 보호 같은 Layer 2 보호 기능을 켜야 함
- 이런 보호는 rogue DHCP 서버를 줄이는 데 도움이 되지만 악성 관리자 시나리오는 제거하지 못함
- 내부 리소스에 HTTPS 또는 다른 암호화 프로토콜을 적용하면 신뢰할 수 없는 네트워크에서 접속한 VPN 사용자의 데이터 누출을 막는 데 도움이 됨
- VPN 제공자는 네트워크 인터페이스로 나가는 아웃바운드 패킷을 차단하는 방화벽 기능을 클라이언트에 추가할 수 있지만, 사용자는 로컬 네트워크 리소스와 상호작용하지 못하게 됨
- Linux용 full-tunnel VPN 클라이언트는 네트워크 네임스페이스를 이용한 격리를 고려해야 함
- 운영체제 유지보수자는 Linux 외 운영체제에서 네트워크 네임스페이스 관련 기능 추가나 강화를 검토해야 함
- LAN 보안 연구와 실제 공격 시연을 위한 ArcaneTrickster라는 adversarial infrastructure 라이브러리가 개발 중이며, 나중에 공개될 계획임