터널을 빠져나가는 모든 VPN 트래픽에 대해 두 연구 이름이 서로 바꿔 쓰이지만, 그 배후의 메커니즘은 같지 않다. TunnelCrack은 두 계열의 라우팅 예외를 설명하고, TunnelVision은 엔드포인트에 DHCP가 공급하는 경로를 설명한다. 어느 쪽도 암호화를 깨뜨리지 않으며, 어느 쪽도 특정 클라이언트 빌드가 오늘 무엇을 하는지 알려주지 않는다. 다섯 가지 점검이 메커니즘을 헤드라인과 분리한다.

첫 단계: 검토하는 메커니즘의 이름을 붙이십시오

2023년 여름에 공개된 TunnelCrack은 두 계열의 공격을 설명한다. 로컬 네트워크의 경우, 클라이언트가 로컬 네트워크에 속한다고 보는 트래픽은 로컬 접근 예외를 적용받아 터널을 빠져나간다. 서버 주소의 경우, VPN 서버 자체에 도달하는 데 클라이언트가 필요한 경로가 터널 밖에 있으며, 그 주소를 제어하는 공격자는 이 예외를 악용할 수 있다.

TunnelVision은 DHCP가 공급하는 클래스 없는 정적 경로에 관한 별도 보고서다. 악의적인 DHCP 서버는 트래픽이 지나는 경로를 바꾸는 경로를 엔드포인트에 줄 수 있으며, VPN 서버로 향하는 경로도 포함된다. 이 보고서는 관련 라우팅 효과에 대한 선행 연구를 인정하는데, 이는 근본 메커니즘이 이름보다 오래되었음을 상기시킨다.

CaseException it abuses
TunnelCrack local networkTraffic classified as local bypasses the tunnel
TunnelCrack server addressThe route to the VPN server sits outside the tunnel
TunnelVisionDHCP option 121 installs routes that redirect traffic

이름을 그 메커니즘에 붙여 두십시오. 다른 쪽이 뉴스에 나온다는 이유로 한쪽에 수정을 적용하는 것이 바로 검토가 커버리지 없이 움직임을 만드는 방식이다.

둘째 단계: 로컬 접근 예외를 보십시오

대부분의 클라이언트는 터널이 켜져 있는 동안 프린터, 화면 전송, 파일 공유가 계속 작동하도록 로컬 네트워크 트래픽을 예외로 둔다. 그 예외는 보안 비용이 따르는 정책 결정이며, 같은 네트워크의 공격자는 자신을 로컬 호스트로 제시할 수 있고, 그에게 도달하는 트래픽은 터널에 들어간 적이 없다.

배포된 프로필에 그 예외가 정말 필요한지 물으십시오. 로컬 검색을 전혀 쓰지 않는 원격 인력이라면 흔히 끌 수 있고, 남은 로컬 서비스는 문서화된 경로로 도달할 수 있다. 예외가 필요한 경우에는 로컬 트래픽이라고 부르는 대신 어떤 목적지를 포함하는지 밝히십시오.

점검은 구성에 관한 질문이지 패킷 캡처가 아니다. 배포하는 빌드의 프로필 설정과 클라이언트 문서를 읽어야 하며, 기본값은 제품마다, 그리고 같은 제품의 버전마다 다르다. 답을 프로필 옆에 적어 두어 다음 검토자가 동작에서 추론하지 않아도 되게 하십시오. 아무도 문서화하지 않은 예외는 아무도 검토하지 않는 예외다.

셋째 단계: 서버 주소를 배우는 방식을 보십시오

클라이언트는 어떤 터널이 생기기 전에 VPN 서버에 도달해야 하므로 그 목적지는 설계상 터널 밖으로 라우팅된다. 주소를 이름에서 배우는 경우, 확인 단계는 신뢰 경로의 일부이며, 그 질의에 응답할 수 있는 공격자는 클라이언트를 자신이 제어하는 호스트로 유도할 수 있다.

주소를 고정하고, 올바른 이름의 검증된 인증서를 사용하고, 검증되지 않은 서버로 되돌아가기를 거부하는 것은 모두 노출을 줄인다. 어느 것도 터널 밖에서 서버에 도달해야 한다는 필요를 없애지 않으며, 그것들은 그 주소에 누가 응답할 수 있는지를 바꾼다.

resolvectl query vpn.lab.example
ip route get 198.51.100.24
ip rule show

경로 조회는 클라이언트가 서버 주소에 사용할 인터페이스를 보여 주며, 그것이 예외의 구체적 모습이다. 그 조회가 터널 인터페이스를 반환한다면 클라이언트는 터널을 아예 세울 수 없으므로 외부 경로는 예상된 것이고, 질문은 그 목적지가 어떻게 선택되는지뿐이다.

넷째 단계: DHCP가 공급하는 경로를 보십시오

클래스 없는 정적 경로는 DHCP 서버가 라우팅 테이블 항목을 배포하도록 허용하며, 엔드포인트는 보통 묻지 않고 그것을 받아들인다. 공격자가 정당한 서버보다 빠르게 DHCP에 응답할 수 있는 네트워크에서는 그 항목이 사용자가 터널 안에 있다고 믿는 트래픽을 우회시킬 수 있다.

엔드포인트의 경로를 기대하는 경로와 비교하십시오. 터널이 켜져 있는 동안 로컬 게이트웨이를 가리키는 기본 경로나 넓은 프리픽스는 조사할 가치가 있는 징후이며, 어떤 공격 트래픽 없이도 보인다.

ip route show table all
ip route get 203.0.113.55
nmcli -g ipv4.ignore-auto-routes con show "Wired connection 1"

마지막 설정은 많은 클라이언트와 플랫폼이 어떤 형태로 노출하는 엔드포인트 측 제어, 즉 네트워크가 공급하는 경로를 무시하는 설정이다. 자동 경로 수락을 끄는 것은 기업 DHCP 서버의 정당한 분할 라우팅도 끄기 때문에 트레이드오프이며, 따라서 전역이 아니라 네트워크 등급별로 결정하십시오.

다섯째 단계: 권고와 현재 빌드를 분리하십시오

공개된 공격은 특정 시점에 특정 클라이언트 버전에서 관찰된 동작을 설명한다. 그것은 앞에 있는 노트북이 영향을 받았다는 것도, 수정되었다는 것도 입증하지 않는다. 두 주장 모두 실제 빌드 번호와 공급업체의 현재 권고가 필요하다.

클라이언트 버전, 플랫폼, 위의 예외를 규정하는 프로필 설정, 확인한 날짜를 기록하십시오. 그 기록은 정직하게 늙지만, VPN이 TunnelCrack에 대해 패치되었다는 메모는 그렇게 늙지 않는다. 클라이언트가 업데이트될 때마다 다시 읽어야 하며, 건드리지 않은 버전 아래에서 프로필 기본값이 바뀔 수 있기 때문이다.

실제로 검증할 때는 승인된 계획을 자신의 엔드포인트와 무해한 목적지에 사용하십시오. 공유 네트워크의 다른 사용자를 대상으로 공격을 재현하는 것은 시험이 아니며, 관찰을 쉽게 하려고 피어 검증이나 애플리케이션 암호화를 끄는 것은 측정하려던 보호를 없애는 일이다.

마지막으로 애플리케이션 수준 보호를 그림에 남겨 두십시오. 라우팅 예외는 터널이 실어 날랐을 트래픽을 노출할 수 있지만, 애플리케이션의 TLS는 그 트래픽을 종단 간에 여전히 보호한다. 두 계층은 독립적으로 실패하기에, 연결된 제어 채널은 모든 흐름이 의도한 경로를 지났다는 증거가 아니다.

관련 글