리졸버에게 example.com이 무엇을 가리키는지 물으면 지금 이 순간의 답을 알려준다. 그 도메인이 지난 화요일에, 2019년에, 혹은 낯선 사람이 사흘간 소유했던 동안 무엇을 가리켰는지 물으면 — 아무것도 없다. DNS는 기억하지 못한다. 조회 시스템이지 장부가 아니다. 모든 답은 직전 답을 덮어쓰고, 레코드가 바뀌는 순간 옛 값은 처음부터 없었던 것처럼 사라진다.
누군가를 잡으려는 입장이라면 이 건망증이 문제다. 공격자는 도메인을 세우고, 서버를 가리키게 하고, 캠페인을 돌리고, 주말 사이에 걷어낸다. 월요일이면 DNS 레코드는 비어 있고 흔적은 식었다. 그 모든 걸 지켜본 단 하나의 시스템이 아무 기록도 남기지 않았다.
패시브 DNS(Passive DNS)가 그 해법이고, 보안에서 가장 기묘한 발명 중 하나다: 인터넷에서 가장 잘 잊는 시스템에 영구 기억을 심는 방법 — 내놓는 모든 답을 조용히 적어두면서, 누가 그 질문을 했는지는 결코 기록하지 않는 방식으로.
실제로 무엇인가
아이디어는 Florian Weimer에게서 나왔다. 그는 2005년 FIRST 콘퍼런스에서 Passive DNS Replication을 발표했다. 메커니즘은 거의 민망할 만큼 단순하다. 바쁜 재귀 리졸버 — ISP나 대학이 운영하며 수백만 건의 질의를 처리하는 종류 — 곁에 센서를 둔다. 그 리졸버가 권위 서버에서 답을 가져와야 할 때마다, 센서는 지나가는 응답을 보고 적어둔다: 이 이름이, 이 타입으로, 이 값으로 해석됐고, 이 시각에.
모든 관측을 저장하진 않는다. 그건 바다다. 대신 튜플로 중복 제거한다: 이름, 레코드 타입, 답, first-seen(최초 관측) 타임스탬프, last-seen(최종 관측) 타임스탬프, 그리고 횟수. evil.example이 6월 3일에 203.0.113.7로 처음 해석됐고, 6월 6일에 마지막으로 그렇게 관측됐으며, 1,400번 목격됐다. 한 줄이다. 충분히 많은 대형 리졸버의 충분히 많은 센서에 걸쳐 이걸 곱하면, 전체 DNS가 무엇을 하고 있었는지에 대한 부분적이고 기회주의적이지만 놀랍도록 유용한 역사를 — 수년치를 거슬러 — 재구성한 셈이 된다.
Weimer 자신의 표현이 *기회주의적(opportunistic)*이었고, 정직한 단어다. 패시브 DNS는 인터넷 전체를 보지 못한다. 자기 센서가 우연히 잡은 것만 본다. 감시되는 리졸버를 통해 아무도 질의하지 않은 도메인은 그냥 데이터베이스에 없다. 하지만 감시되는 리졸버는 큰 것들이고, 그들 사이에서 중요한 것 대부분을 본다.
소름 끼치지 않게 만드는 부분
패시브 DNS를 도청과 갈라놓는 설계 결정이 여기 있고, 대부분이 놓치는 부분이다.
DNS 질의에는 절반이 둘 있다. 스텁-투-리졸버 쪽 — 당신 노트북이 ISP 리졸버에게 “my-embarrassing-search.example 어디야?”라고 묻는 — 과, 리졸버-투-권위 쪽 — 리졸버가 캐시 미스에서 그 답을 도메인의 실제 네임서버에서 가져오는 — 이다. 앞 절반은 지극히 개인적이다: 당신이 무엇을 찾았는지의 로그다. 뒤 절반은 아니다: 개별 신원이 벗겨진 리졸버가 한꺼번에 수천 명을 대신해 인터넷에 질문하는 것이다.
패시브 DNS 센서는 뒤 절반에 앉는다. 캐시-필 트래픽 — 리졸버에서 권위로 — 을 잡고, 관측을 사람과 엮을 수 있는 출발지 IP·출발지 포트, 그 밖의 모든 것을 의도적으로 버린다. 프라이버시를 넘어선 하드코어한 엔지니어링 이유도 있다: 권위 서버는 때때로 누가 묻느냐에 따라 다른 답을 돌려준다(EDNS Client Subnet이 하는 일이 그것이다). 깨끗하고 정규적인 지도를 만들려면 특정 사용자의 관점이 아니라 바로 리졸버의 관점이 필요하다. 그 결과는 evil.example이 지난 6월 203.0.113.7로 해석됐음은 아는데, 당신이 그곳을 방문한 사람 중 하나였다는 사실은 전혀 모르는 데이터베이스다.
그래서 제목의 “감시 데이터베이스”는 사람이 아니라 인프라를 감시한다. 사용자가 아니라 기계를 지켜본다. 이 구분이 이 기법이 이 정도 규모로 존재하도록 허용되는 이유 전부다.
방어자가 없이는 못 사는 이유
단 하나의 실마리를 쥐고 빙산의 나머지가 필요한 순간, 그 위력이 드러난다.
보통의 DNS는 한 방향으로만, 그것도 현재에만 축을 돈다. 도메인이 있으면 현재 IP를 얻는다. 그게 전부다. 패시브 DNS는 양방향으로, 시간을 가로질러 축을 돈다:
- 도메인 → 그것이 쓴 모든 IP. 지금 어디를 가리키는지만이 아니라 전체 로테이션 — 공격자가 돌려 쓴 IP 열다섯 개, 플래그되기 전 여섯 시간만 쓴 하나까지.
- IP → 거기 호스팅된 모든 도메인. 다른 어디에도 대응물이 없는 하나다. 역방향 DNS(PTR) 조회는 IP 하나에 이름 하나를, 그것도 운영자가 굳이 설정했을 때만 준다. 패시브 DNS는 역사적 집합을 준다 — 그 주소로 해석된 적 있는 모든 도메인. 의심스러운 서버에 겨누면 공격자의 형제 도메인 전체, 같은 상자를 공유하는 것들이 쏟아진다.
- 정확히 언제. first-seen·last-seen 도장이 정적 지도를 타임라인으로 바꾼다. 어떤 도메인이 사건의 창 동안 정확히 방탄 호스트를 가리켰고, 그 뒤 옮겨갔음을 증명할 수 있다.
침해대응은 이걸로 굴러간다. 하나의 지표 — 방화벽 로그에서 뽑은 악성 IP 하나 — 로 시작하면 패시브 DNS가 그것을 공격자의 발자국 전체로 피워낸다: 거기 주차한 도메인들, 그 도메인들이 건드린 다른 주소들, 작전의 모양과 수명. 돌 하나에 땅이 움직인다.
이걸 질의하는 표준도 있는데, 이 분야가 얼마나 진지한지를 말해준다. Common Output Format — Alexandre Dulaunoy(CIRCL), Aaron Kaplan(CERT.at), Paul Vixie, Henry Stern(Farsight)의 IETF 초안 — 은 패시브 DNS 답의 JSON 형태 하나를 정의해, 단일 클라이언트가 Farsight의 DNSDB, CIRCL, VirusTotal, 그리고 대여섯 제공자를 질의하고 결과를 병합하게 한다. 한 관측을 여러 독립 센서망에 교차 대조하는 것이 게임의 전부다. 어떤 단일 소스도 전부를 보지 못하고, 그들 사이의 일치가 데이터 한 점을 증거로 바꾼다.
그 밑에 깔린 정찰의 교훈
침해대응 프레임을 걷어내면 패시브 DNS는 정찰(recon)이 실제로 어떻게 작동하는지에 대한 선언이고, 영화 속 버전의 정반대다.
표적을 지도화하는 요란한 방법은 그것을 건드리는 것이다: 포트를 스캔하고, 서브도메인을 무차별 대입하고, 네임서버를 직접 질의한다. 그 하나하나가 표적의 로그에 발자국을 남기고, 유능한 방어자는 당신이 오는 걸 본다. 패시브 DNS는 완전히 다른 교리다. 표적에 단 한 개의 패킷도 보내지 않는다. 인터넷이 이미 그것에 대해 적어둔 것을 읽을 뿐이다 — 그 도메인들이 다른 모두에게 건넨 답을, 표적이 존재하는지도 모르고 닿을 수도 없는 센서들이 기록한 것을. 표적은 그 조회를 탐지할 수 없다. 조회가 표적을 건드리지 않기 때문이다. 그것은 과거의 데이터베이스를 건드린다.
이는 Certificate Transparency를 떠받치는 본능과 같다: 한 시스템에 대한 가장 오래가는 정보는, 그것이 통제하지 못하는 공개·추가전용 기록에 이미 뿜어낸 배기가스다. 인증서, DNS 답, 라우팅 공지 — 도메인은 이것들을 방송하지 않고는 운영할 수 없고, 일단 방송되면 누군가 적어두고 있었다. 최고의 관측은 관측당하는 쪽이 끌 수 없는 종류다. 이미 벌어진 일이기 때문이다.
아무도 광고하지 않는 함정
바로 여기서 불편해진다. 패시브 DNS에는 삭제 키가 없다. 당신 도메인이 한 주소로 해석되는 순간 — 실수로라도, 오타를 알아채고 고치기 전 5분 동안이라도 — 그 해석은 센서에 잡혀 한 줄로 중복 제거되고 무기한 보존될 수 있다. 패시브 DNS 데이터베이스에는 “잊힐 권리”가 없다. 인터넷이 이미 건넨 사실을 관측되지 않은 것으로 되돌릴 수 없다.
사라지고 싶어 하는 공격자를 쫓는 방어자에겐 그 영속성이 요점 전부다. 하지만 같은 영속성이, 한나절 노출한 내부 호스트명에도, 잠깐 실제 프로덕션 IP를 가리킨 스테이징 도메인에도, 아직 발표 안 한 인수합병의 새 서브도메인이 일주일 일찍 해석되기 시작한 것에도 똑같이 적용된다. 그중 무엇도 사람을 지목하지 않았다. 그 전부가 여전히 안에, first-seen과 last-seen으로, 올바른 주소로 축을 돌 생각을 하는 누군가를 기다리며 남아 있다.
DNS는 일부러 잊는다. 그렇게 만들어졌다. 패시브 DNS는 방어자들이 10년 전 내렸고 공개적으로 제대로 논쟁된 적 없는 조용한 결정이다 — 인터넷은 그래도 기억해야 한다는.