만리방화벽(Great Firewall)에 대해 한참 만에야 제대로 이해한 사실이 하나 있다. 이 시스템은 검열 대상 DNS 조회를 막지 않는다. 대신 답을 한다. 금지된 도메인을 입력하면 조회 패킷이 나가고, 곧 IP 주소가 담긴 응답이 빠르게 돌아온다. 그 주소는 거짓이다. 하지만 형식이 완벽하고 당당하게 배달된 거짓이라, 당신의 컴퓨터는 그것을 진실과 구분할 방법이 없다. 검열된 조회는 실패한 게 아니다. 틀린 답을 받는 데 성공한 것이다.

이 구분이 트릭의 전부다. 그리고 이것이 지구상 최대 규모의 검열 시스템들이 가장 조용한 작업을 굳이 DNS 계층에서 하는 이유다. 떨어뜨린 패킷은 눈에 보이는 증상이다. 제시간에 도착한 틀린 답은 맞는 답과 똑같이 생겼다.

아무도 알려주지 않은 경주

여전히 압도적 기본값인 UDP 기반 DNS에는 인증도 세션도 없다. “example.com의 주소가 뭐야?”라고 묻는 패킷 하나를 보내고, 트랜잭션 ID와 질문이 일치하는 첫 번째 패킷을 그냥 받아들인다. 먼저 온 답이 이긴다. 재확인도, “정말?”도, 검증할 서명도 없다. 이 프로토콜은 1980년대에, 내 질문에 답하는 존재가 내가 물어본 그 서버뿐이던 네트워크를 위해 설계됐다.

국가 방화벽은 당신과 바깥 인터넷 사이의 경로 위에(on-path) 앉아 조회 패킷들이 지나가는 걸 지켜본다. 내가 물어본 그 서버일 필요가 없다. 그저 더 빠르기만 하면 된다. 차단 목록에 있는 도메인의 조회가 보이면, 위조 응답을 만들어 당신 쪽으로 되쏜다. 인젝터가 진짜 권위 서버보다 물리적으로 가깝기 때문에 — 흔히 수천 킬로미터 가깝다 — 위조 패킷이 먼저 도착한다. 리졸버는 그걸 받아 캐시하고 넘어간다. 진짜 답은 몇 밀리초 뒤에 나타나 중복으로 버려진다.

우아하면서도 끔찍한 지점은, 방화벽이 당신의 원래 조회를 건드리지도 않는다는 것이다. 무언가를 떨어뜨리거나 연결을 끊을 필요가 없다 — 국가 규모에서 그런 짓은 눈에 띄고 비싸다. 당신의 패킷은 진짜 서버까지 그대로 흘러가게 놔둔다. 위조품이 집에 먼저 도착하게만 만들 뿐이다. 이것이 on-path 인젝션이고, 실제로 길목을 막고 서 있는 것보다 싸고 은밀하다.

거짓말은 실제 서버를 가리킨다

검열자라면 차단된 조회를 블랙홀로 — 0.0.0.0이나 “이 사이트는 차단됨” 안내 페이지로 — 보낼 것 같다. 그러는 곳도 있다. 그런데 중국은 오랫동안 대체로 그러지 않았다.

이 현상에 대한 가장 철저한 공개 측정은 GFWatch다. 2020년 4월부터 12월까지 5억 3,400만 개 도메인을 테스트해 만리방화벽이 어떻게 답하는지 목록화한 플랫폼이다. 위조 응답은 고유 IPv4 주소 1,781개와 IPv6 주소 1,799개 풀에서 나왔는데, 놀라운 발견은 그 IPv4 주소 대다수가 실제 회사가 소유한, 실제로 라우팅되는 주소였다는 점이다 — Facebook, Dropbox, Twitter가 포함된다.

곱씹어 볼 만하다. 중국의 한 사용자가 차단된 도메인을 조회하면 Dropbox 서버의 주소를 건네받는다. 브라우저는 원하던 사이트와 아무 관계 없는, 왜 트래픽이 오는지도 모르는 기계에 성실하게 연결을 연다. 이걸 인구 전체로 곱하면, 소수의 미국 회사 서버들이 한 국가의 검열된 DNS를 받아내는 싱크홀로 조용히 바뀐 셈이다 — 아무도 주문하지 않았고 피해자는 끌 수도 없는 서비스 거부(DoS). 이게 의도된 장식인지 아니면 정밀함보다 물량을 위해 만든 시스템에서 그냥 떨어져 나온 결과인지는 알 수 없지만, 효과는 같다.

GFWatch가 그 기간에 센 검열 도메인은 31만 1,000개였다. 약 27만 개는 아마 의도된 표적이었다. 나머지 4만 1,000개는 무고했다 — 방화벽이 무딘 정규식으로 도메인을 매칭하기 때문에 휩쓸려 들어갔다. torproject.org를 잡으려던 규칙이 그 문자열을 품은 아무 도메인이나 함께 잡아, 수만 개의 무관한 사이트가 부수 피해로 어두워졌다. 차단 목록은 목록이 아니다. 패턴이고, 패턴은 과잉 적용된다.

오염은 국내에 머물지 않는다

인젝션이 검열 국가 안의 사람들에게만 영향을 준다 해도 이해할 가치는 있다. 그런데 국내에 머물지 않는다.

방화벽은 자기 경로를 지나는 모든 조회를 오염시키고, 인터넷 경로는 깔끔하지 않기 때문에, 위조 답은 검열자가 건드릴 의도가 없던 사람들에게 곧잘 새어 나간다. 대표적 사건은 2010년 3월, NIC Chile의 DNS 관리자 마우리시오 에레체(Mauricio Ereche)가 불가능한 일을 보고하면서 알려졌다. 칠레 사용자들이 facebook.com, twitter.com, youtube.com을 — 어느 것도 칠레에서 차단되지 않았다 — 조회하는데 엉터리 주소가 돌아오고 있었다. 검열은 중국 것이었다. 피해자는 남미에 있었다.

원인은 배관 사고였다. 여러 DNS 루트 서버 정체성(F, I, J 등)이 중국 내부에 애니캐스트 인스턴스를 두고 있었다. 방화벽 뒤에 물리적으로 놓인 루트 서버 사본이라는 뜻이다. 그중 하나가 스웨덴 Netnod가 운영하는 I-root 인스턴스였다. 중국 밖 어느 ISP의 라우팅 설정 오류로 그 인스턴스의 경로가 국경 너머로 퍼졌고, 칠레의 일부 조회가 만리방화벽 뒤에 있는 루트 서버로 향하게 됐다 — 그리고 방화벽은 돌아오는 길에 위조 답을 끼워 넣었다. 새는 애니캐스트 노드에 허락된 해법은 하나뿐이었다. 그 인스턴스를 국제 라우팅에서 끊어 낸 것이다.

그게 16년 전이고, 누수는 완전히 멈춘 적이 없다. GFWatch는 검열 도메인 7만 7,000개의 위조 레코드가 전 세계에서 쓰이는 공개 리졸버를 오염시켰다는 걸 발견했다 — Google, Cloudflare, OpenDNS를 포함해서. 오염된 경로로 조회가 지나간 리졸버는 그 거짓말을 캐시해 자기 사용자들에게 내줄 수 있고, 그 사용자는 어디에나 있을 수 있다. 검열자의 차단 목록이, 어쩌다, 조금은 모두의 것이 됐다.

뻔한 해법이 대체로 안 먹히는 이유

본능적으로 DNSSEC을 떠올린다. 서류상으로는 정확한 대응책이다. DNSSEC은 DNS 레코드에 서명하므로, 검증하는 리졸버는 인젝션된 답이 진짜 존의 서명을 못 가졌음을 감지해 거부할 수 있다. 그런데 실전에서는 여기서 거의 아무 일도 못 한다. 지루한 이유 둘 때문이다. 첫째, 대부분의 존이 여전히 서명돼 있지 않다 — DNSSEC 채택은 20년째 기어왔다. 둘째, 더 나쁘게도, 보통 질문을 던지는 주체 — 운영체제에 내장된 스텁 리졸버 — 는 서명을 아예 검증하지 않는다. 방화벽이 이미 위조하고 있는 바로 그 인증 없는 UDP를 타고, 상위 리졸버가 검증해 주리라 믿을 뿐이다. 위조는 검증이 의미를 가질 새도 없이 먼저 도착한다.

실제로 판을 바꾸는 건, on-path 인젝터가 읽을 수 있는 평문 UDP에서 조회를 빼내는 것이다. DNS-over-HTTPS와 DNS-over-TLS는 조회를 당신이 고른 리졸버로 향하는 암호화 채널에 감싼다. 그래서 방화벽은 당신이 무슨 도메인을 묻는지 볼 수 없고, 읽지도 못하는 대화에 패킷을 끼워 넣을 수 없다. 이건 진짜 방어다 — 그 암호화 리졸버까지는. 이제 당신이 전적으로 신뢰하는 한 당사자가 그 리졸버가 되고, 네트워크는 그것을 통째로 차단할 수 있으며, 그 리졸버 자체가 검열 관할권 안에 있을 수도 있다. 신뢰를 없앤 게 아니라 옮긴 것이다.

거짓말하는 네트워크에서 살아남는 유일한 방어

한 발 물러서면 문제의 모양은 어느 한 나라보다 크다. 국가 방화벽은 일반적 사실의 가장 크고 가장 잘 자금이 붙은 사례일 뿐이다. 당신과 답 사이의 네트워크는 값싸게 거짓말할 수 있고, 그 거짓말은 완벽해 보일 수 있다. 탈취된 라우터의 DNS 하이재킹, 악의적인 호텔 와이파이, 잘못 설정된 사내 미들박스 — 같은 모양, 더 작은 폭발 반경.

거짓말쟁이를 신뢰하는 데 기대지 않는 방어는 정확히 하나뿐이고, 그건 정보 활동에서 가장 오래된 발상이다. 단일 소스를 믿지 마라. 리졸버 하나에 주소를 물어 하나를 받았다면, 당신이 알게 된 건 그 리졸버가 — 그리고 거기까지의 경로 위 모든 것이 — 당신이 믿길 바라는 내용이다. 열두 개의 관측 지점에서 열두 개의 리졸버에 물어 열하나가 일치하는데 하나만 차단된 사이트가 Dropbox IP에 산다고 우긴다면, 당신은 맞는 답만 찾은 게 아니다. 인젝터를 찾은 것이다.

분산 관측과 교차 검증이 하나의 규율로 존재하는 이유가 바로 이것이다. 단일 조회는 소문이다. 독립된 관측 지점들에서 나온 조회의 정족수는 증거이고, 그들 사이의 불일치는 누군가 개입하는 지점을 정확히 찍은 지도다. 만리방화벽이 강력한 건 자기 옆에 선 사람들에게 거짓말할 수 있어서다. 모두에게, 모든 곳에서, 동시에 거짓말하는 법은 끝내 알아내지 못했다 — 그리고 그 틈에 진실이 아직 살아 있다.