Windows Sandbox를 시작하고 그 안에서 브라우저를 열면, 호스트가 일 분 전까지 VPN에 있었더라도 페이지는 평소 연결로 로드된다. 고장 난 것은 없다. 샌드박스는 호스트의 기본 스위치에 연결된 가상 네트워크 어댑터를 받으며, 호스트의 터널이 그 경로를 덮는지는 VPN 클라이언트의 속성이지 Windows의 속성이 아니다.

샌드박스가 실제로 받는 것

샌드박스는 자체 네트워크 어댑터를 가진 경량 가상 머신이다. 그 어댑터는 호스트의 Hyper-V 기본 스위치를 통해 연결되고, 이 스위치는 샌드박스 트래픽을 머신을 떠나기 전에 호스트의 가상 Ethernet 인터페이스로 변환한다. 이 세부 사항이 사람들이 이 문제에 대해 보고하는 거의 모든 증상을 설명한다.

따라서 샌드박스는 데스크톱의 프로세스가 아니다. 호스트가 패킷을 전달하는 별도의 네트워크 종단점이며, 호스트 방화벽과 VPN 클라이언트는 각자 방식으로 그 전달을 본다. 브라우저 프로세스용으로 작성된 규칙이 가상 스위치에서 온 변환된 프레임에 자동으로 맞지는 않는다.

하나처럼 보이는 두 가지 요구 사항

사설 리소스에 도달하는 것과 샌드박스의 모든 요청을 터널로 강제하는 것은 서로 다른 목표다. 전자에는 샌드박스 종단점에서 동작하는 경로와 이름 확인이 필요하다. 후자에는 재연결과 장애를 견디는 강제가 필요하다. 어느 것도 다른 것에서 따라오지 않으며, 하나를 충족하는 검사는 다른 것에 대해 아무 말도 하지 않는다.

공인 주소 검사는 두 질문 어느 쪽에도 완전히 답하지 않는다. 샌드박스 내부에서 VPN 출구가 보인다는 것은 일부 트래픽이 터널을 사용했다는 뜻이다. 사설 이름이 확인되는지, 또는 터널이 끊긴 동안 시작된 요청이 어떻게 되는지에 대해서는 아무 말도 하지 않는다.

두 요구 사항은 서로 다른 설계로 이어지고 브라우저로 검증할 수 있는 것은 하나뿐이므로, 무엇이든 시험하기 전에 둘 중 무엇이 필요한지 적어 두어야 한다.

샌드박스 내부에서 확인한다

의미 있는 관찰은 호스트가 아니라 샌드박스 자체 세션에서만 나온다. 그곳에서 PowerShell을 열고 어댑터, 이름 확인, 문서용 주소까지의 경로를 살펴본다:

ipconfig /all
Resolve-DnsName files.corp.example
Test-NetConnection 198.51.100.7 -Port 443
Get-NetRoute -DestinationPrefix 0.0.0.0/0

어댑터 목록은 샌드박스가 받은 주소와 게이트웨이를 보여 준다. 호스트와 다른 게이트웨이는 기본 스위치에서 정상이므로 게이트웨이가 아니라 출구를 비교한다. 확인 테스트는 사설 이름에 응답이 있는지 보여 주며, split-horizon 구성이 호스트와 갈라지는 곳이 대개 여기다. 경로 줄은 샌드박스가 어느 게이트웨이를 기본 경로의 소유자로 보는지 보여 준다.

터널을 연결한 상태와 끊은 상태에서 같은 세 가지 검사를 반복한다. 그 두 상태 사이에서 변하지 않는 결과는 공인 검사가 어떤 주소를 보여 주었든 터널이 샌드박스 경로에 전혀 없다는 증거다.

샌드박스에 네트워크가 필요 없을 때는 끈다

오프라인 검사에서는 사용자 지정 구성 파일로 네트워크를 완전히 제거할 수 있다. 설정은 구성 문서의 요소 하나다:

<Configuration>
  <Networking>Disable</Networking>
</Configuration>

샌드박스 구성 참조 는 이 요소를 문서화하고, 네트워크를 켜면 신뢰하지 않는 애플리케이션에 내부 네트워크가 노출될 수 있다고 경고한다. 그 경고가 기본값을 받아들이는 대신 명시적으로 설정해야 하는 이유 전부다.

다만 스위치는 VPN 인터페이스를 선택하지 않는다. 네트워크가 있는지에 대한 이진 결정이며, 샌드박스를 특정 터널에 묶는 수단이 아니다. 출구를 지정하는 요구 사항은 출구가 있는지만 결정하는 스위치로 충족할 수 없다.

무엇이든 허용하기 전에 경계를 설계한다

요구 사항이 엄격한 격리라면, 그것을 강제할 수 있는 가상 머신 네트워크 설계를 고르고, 전달되거나 가상 머신인 트래픽에는 VPN 제품이 지원하는 정책을 사용한다. 호스트 클라이언트의 동작을 추측하는 것은 설계가 아니며, 한 번의 성공한 검사는 구현이 아니다.

테스트를 통과시키려고 신뢰할 수 없는 샌드박스에 기업 VPN 프로필이나 개인 자격 증명을 주지 않는다. 그것은 세우려던 경계를 초록 결과와 맞바꾸는 일이며, 자격 증명은 테스트보다 오래 살아남는다.

배포 노트에 네트워크 모드, 관찰된 출구, 재연결 동작을 기록한다. 클라이언트 업데이트가 전달 트래픽 처리 방식을 바꾸면, 그 노트가 요구 사항이 실제로 한 번도 충족되지 않았음을 알려 준다.

관련 글