안드로이드에서 VPN 킬 스위치를 우회하는 트래픽 유출 경로 발견

Hacker News29일 전조회 4

안드로이드 네트워크 스택에서 VPN 터널을 우회해 트래픽을 외부로 흘려보낼 수 있는 새로운 경로가 발견됐다. VPN을 켜 둔 상태에서 'VPN 없이는 모든 연결 차단' 옵션까지 활성화해도, 임의의 앱이 기기의 실제 IP 주소를 인터넷에 노출시킬 수 있다는 것이 핵심이다. 이 공격에는 특별한 권한이 필요하지 않다.

문제의 경로는 하드웨어로 오프로드된 keep-alive UDP 연결이다. 앱이 안드로이드에 요청해 Wi-Fi나 셀룰러 칩이 직접 유지하는 연결을 만들게 한 뒤, 이를 악용해 UDP 4500번 포트로 임의의 서버에 패킷을 보내는 방식이다. 이 패킷은 네트워크 하드웨어에서 곧바로 빠져나가기 때문에, VPN이 켜져 있을 때 모든 트래픽을 터널로 통과시키도록 강제하는 검사를 거치지 않는다. 그 결과 기기의 실제 IP가 그대로 드러난다.

keep-alive 연결은 원래 NAT(네트워크 주소 변환) 환경에서 매핑을 유지하기 위한 기능이다. 이동통신망이나 공유기 뒤에서 세션이 끊기지 않도록 주기적으로 패킷을 내보내는 역할인데, 절전과 성능을 위해 모뎀·무선 칩 같은 하드웨어에 위임된다. 문제는 이 위임 경로가 운영체제의 VPN 정책 검사 바깥에 놓여 있다는 점이다.

취약점을 찾은 연구자는 안드로이드 취약점 보상 프로그램(VRP)에 이 내용을 제보했지만, 연구자에 따르면 별다른 조치 없이 종결됐다. 해당 이슈는 공개된 상태가 아니며, Mullvad는 이런 정황을 근거로 구글이 손을 대지 않을 가능성이 크다고 본다. 반면 GrapheneOS 쪽은 문제를 인지하고 수정 작업을 진행 중이다.

이론적으로는 우회로를 막을 방법이 하나 있다. 하드웨어가 동시에 유지할 수 있는 keep-alive 연결 수에는 한계가 있으므로, VPN 앱이 먼저 슬롯을 모두 채워 버리면 이후 악성 앱이 자기 연결을 만들지 못하게 된다. 다만 Mullvad는 이 방식을 직접 제공할 계획이 없다고 밝혔다. 여전히 터널 밖으로 패킷이 나가야 하고(비록 자사 서버로 향하더라도), 동작이 보장되지 않으며, Mullvad 앱이 켜지기 전에 악성 앱이 이미 유출을 시작했을 수도 있기 때문이다.

개발자 입장에서 이 사례는 VPN 킬 스위치를 절대적인 안전장치로 가정하면 안 된다는 점을 보여준다. 민감한 데이터를 다루는 앱이라면 기기 신뢰 모델을 다시 점검하고, 실제 IP 노출이 곧 프라이버시 침해로 이어지는 시나리오를 위협 모델에 넣어야 한다. 앱 마켓 심사만으로 악성 앱이 걸러진다고 믿기 어렵기 때문에, 사용자에게 신뢰할 수 있는 앱만 설치하도록 안내하는 것도 여전히 유효한 대응이다.

다만 이번 이슈는 공개된 취약점이 아니고, 구글의 대응 여부도 확정되지 않았다. 완화책으로 거론되는 방식 역시 검증된 해법이 아니라 이론적 제안에 가깝다. 가능하다면 GrapheneOS처럼 보안·프라이버시에 초점을 맞춘 안드로이드 포크를 쓰는 편이 낫다는 것이 원문의 권고다.