사이트를 열 때마다 기기는 리졸버에게 도메인 이름을 IP 주소로 바꿔 달라고 묻습니다. 그 질문은 지금 어디로 가려는지를 평문으로 남기는 기록이고, 기본값으로는 네트워크가 건네준 리졸버 — 보통은 인터넷 사업자의 리졸버 — 로 갑니다.
DNS 유출은 그 질의가 의도하지 않은 곳으로 나가는 상황입니다. 흔한 경우는 개인 리졸버나 암호화 리졸버를 쓰도록 설정해 두었는데도 몇 가지 구조적 이유 때문에 일부 또는 전부의 조회가 여전히 통신사로 나가는 것입니다. 겉으로 고장 나는 것이 없기 때문에, 유출은 몇 년씩 눈에 띄지 않은 채로 이어집니다.
DNS는 실제로 무엇을 드러내는가?
도메인, 시각, 그리고 출처입니다 — 브라우징 세션을 재구성하기에 충분한 정보입니다.
전통적인 DNS는 53번 포트에서 암호화 없이 동작합니다. 나와 리졸버 사이에 자리 잡은 누구든 질의를 읽을 수 있고, 리졸버 자신은 그 질의 하나하나를 내 회선에 귀속시켜 봅니다. 구체적인 페이지까지 보이지는 않지만, 민감한 부분은 보통 도메인 쪽입니다.
암호화는 이 기록이 존재하는지 여부가 아니라 누가 그 기록을 갖는지를 바꿉니다.
| 전송 방식 | 암호화 여부 | 질의를 볼 수 있는 쪽 |
|---|---|---|
| 평문 DNS(53번 포트) | 아니오 | 내 네트워크, 통신사, 리졸버 |
| DNS over TLS(DoT, 853번 포트) | 예 | 내가 고른 리졸버 |
| DNS over HTTPS(DoH, 443번 포트) | 예 | 내가 고른 리졸버. 네트워크 입장에서 웹 트래픽과 구분하기가 더 어렵다 |
| DNSSEC | 아니오 — 인증을 한다 | 평문 DNS와 같다. 응답이 진짜임을 증명할 뿐, 감추지는 않는다 |
DNSSEC이 가장 자주 오해받는 항목입니다. 응답에 서명을 해서 위조할 수 없게 만듭니다. 기밀성은 전혀 제공하지 않습니다.
유출은 실제로 어떻게 일어나는가?
여섯 가지 구조적 원인이 거의 전부를 설명합니다.
| 원인 | 작동 방식 |
|---|---|
| 분할 라우팅 | 일부 트래픽만 터널을 쓰고, DNS는 기본 인터페이스로 나감 |
| IPv6 미지원 | 터널이 IPv4만 처리해서 IPv6 조회가 통신사 경로로 감 |
| OS의 병렬 해석 | 윈도우는 모든 인터페이스에 동시에 질의하고 먼저 온 답을 씀 |
| 브라우저 단 DoH | 브라우저가 시스템 설정과 무관하게 해석함, 양방향 모두 발생 |
| 공유기 강제 지정 | 공유기가 DHCP로 자기 리졸버를 강제하거나 53번 포트를 가로챔 |
| 캡티브 포털 | 호텔이나 공항 네트워크가 로그인 페이지로 보내려고 DNS를 가로챔 |
브라우저 경우는 짚어둘 만한데, 양쪽으로 다 작동하기 때문입니다. 자체 DoH 설정이 있는 브라우저는 공들여 맞춰둔 시스템 리졸버를 우회할 수 있고, 반대로 제대로 설정된 브라우저는 그 브라우저 바깥의 모든 것이 여전히 새고 있다는 사실을 가려버릴 수 있습니다. 한쪽만 확인하고 다른 쪽도 그럴 것이라고 넘겨짚는 것이 가장 흔한 점검 실수입니다.
어떻게 확인하는가?
각 층을 따로 검사해야 합니다. 서로 다른 답이 나올 수 있기 때문입니다.
운영체제 — 어떤 리졸버가 설정되어 있는가:
| 시스템 | 명령어 |
|---|---|
| macOS | scutil --dns | grep nameserver |
| Windows | Get-DnsClientServerAddress |
| Linux(systemd-resolved) | resolvectl status |
| Linux(일반) | cat /etc/resolv.conf |
실제로 응답한 리졸버는 무엇인가 — 설정과 실제 동작은 다릅니다.
dig +short whoami.akamai.net은 나를 대신해 조회를 수행한 리졸버의 IP 주소를 돌려줍니다. 그 값을 내가 기대하던 리졸버와 비교하십시오.
브라우저 단: 브라우저의 보안 DNS 설정을 열어 켜져 있는지, 어느 제공자가 선택되어 있는지 확인합니다. 그런 다음 그 브라우저에서 DNS 유출 테스트 페이지를 엽니다. 그 페이지가 명령줄 검사와 다른 리졸버를 보고한다면, 브라우저가 따로 해석하고 있는 것입니다.
IPv6: IPv6 전용 질의로 같은 검사를 반복합니다. IPv4만 실어 나르는 터널은 부분 유출의 가장 흔한 단일 원인입니다.
결과는 어떻게 읽는가?
"좋은" 주소 목록과 대조하지 말고, 리졸버의 소유자를 내가 기대한 바와 대조하십시오.
| 관찰된 결과 | 해석 |
|---|---|
| 다른 리졸버를 설정해 뒀는데 통신사 리졸버가 나옴 | 유출 |
| 리졸버가 여러 개인데 그중 하나가 통신사 것 | 부분 유출 — 질의가 갈리고 있음 |
| IPv4는 기대한 리졸버, IPv6은 통신사 | IPv6 유출 |
| 브라우저와 시스템이 서로 다른 리졸버를 보고함 | 반드시 유출은 아님. 다만 확인해야 할 독립 경로가 두 개라는 뜻 |
| 리졸버가 예상 밖의 나라에 있음 | 대체로 정상 — 애니캐스트 리졸버는 가장 가까운 거점에서 응답함 |
| 리졸버가 공유기의 사설 주소로 나옴 | 판단 불가. 공유기는 상위로 전달하므로 공유기 자체 설정을 확인할 것 |
마지막 줄이 가정용 네트워크에서 사람들을 헷갈리게 합니다. 192.168.1.1이라는 결과는 공유기가 응답했다는 사실만 알려줍니다. 공유기가 어디로 전달하는지는 별개의 질문이고, 그 답은 공유기의 WAN 또는 DNS 설정에 있습니다.
이걸 고치는 데는 어떤 한계가 있는가?
DNS 유출을 고치면 내가 어떤 도메인을 조회했는지 누가 알게 되는지가 달라집니다. 그 방문이 비공개가 되는 것은 아니며, 이 점을 과장하는 것이 이 주제가 잘못 소개되는 주된 방식입니다.
이름이 해석되고 나면 기기는 그 IP 주소로 연결을 엽니다. 경로상의 관찰자는 목적지 주소를 볼 수 있고, 대부분의 TLS 연결에서는 양쪽 모두가 Encrypted Client Hello를 쓰지 않는 한 서버 이름이 핸드셰이크에서 암호화되지 않은 채 전송됩니다. 두 신호 모두 DNS와 무관하게 사이트를 특정합니다.
그러니 정직한 요약은 좁지만 실질적입니다. 내가 고른 리졸버로 향하는 암호화 DNS는, 내가 방문하는 모든 도메인의 평문 목록을 내 지역 네트워크와 통신사 로그에서 없애고, 그 목록을 대신 리졸버 운영자에게 넘깁니다. 신뢰를 없애는 것이 아니라 옮기는 것이며 — 그래서 그 리졸버를 누가 운영하고 무엇을 기록하는지가 실제로 중요한 질문이 됩니다.