DNS201
다이어그램과 연습 문제로 이해하는 DNS 캐시 포이즈닝
DNS101에서 이름 해석의 기초를 잡은 뒤에 이어서 읽으면 쉽게 들어갈 수 있는, DNS 보안의 follow-up 강좌입니다. 「공용 리졸버의 cache에 거짓 답이 남으면 무엇이 일어나는가」를 축으로, transaction ID·source port·bailiwick·TTL·DNSSEC을 순서대로 정리합니다.
방어·관측 시점
전 42 문제
브라우저 내 채점
localStorage 저장
소요 시간
3〜4 시간
문제 수
전 42 문제
형식
7 장 + 연습 문제 + 케이스 연습
비용
무료
주의: 이 강좌는 방어·진단 목적의 지식 강좌입니다. 실제 환경에 대한 공격 절차나 도구 제작은 다루지 않습니다.
가장 먼저 떠올릴 그림
| 등장인물 | 역할 |
|---|---|
| 이용자 / browser | 이름을 조회하는 쪽. resolver의 답을 믿는다. |
| shared recursive resolver | 여기에 cache가 있다. 여러 이용자가 공유한다. |
| authoritative servers | 각 존의 정규 데이터를 가진다. |
잘못된 RRset이 shared recursive resolver의 cache에 남으면, 그 resolver를 사용하는 이용자 전체에게 같은 오답이 배포됩니다.
이 강좌의 특징
1. 하이 레벨의 구조 이해
실제 환경에 대한 공격 절차가 아니라, 왜 shared cache가 위험한지, 방어 측은 무엇을 봐야 하는지에 초점을 맞춥니다.
2. bailiwick / race를 모형으로 확인
in-bailiwick glue, out-of-bailiwick additional, entropy와 시도 횟수의 관계를 작은 모형으로 만져봅니다.
3. DNSSEC의 수비 범위를 오해하지 않는다
origin authentication과 integrity를 얻는 대신, confidentiality는 별개이며, last hop의 trust 문제가 남는다는 점을 짚어둡니다.
4. 마지막은 케이스 문제
split-horizon, negative caching, NAT, AD bit 등 현장에서 혼동하기 쉬운 논점을 8 문의 케이스로 정리합니다.
이 강좌에서 반복해 사용하는 5 가지 시점
1. 어느 계층의 cache인가
browser / OS / recursive resolver / authoritative를 혼동하지 않는다.
2. 어떤 조건에서 응답을 수락하는가
question, ID, address, port가 일치해야 비로소 같은 transaction으로 간주됩니다.
3. 그 추가 정보는 어디까지 믿어도 되는가
glue / referral / final answer를 구분하고, bailiwick을 의식합니다.
4. 성공 확률에 영향을 주는 것은 무엇인가
entropy의 넓이와 attempts의 많음을 나누어 생각합니다.
5. DNSSEC과 운용의 경계
서명으로 지킬 수 있는 부분과, stub / recursive / channel의 trust 문제를 나누어 생각합니다.
장 구성
1 도입 — DNS 캐시 포이즈닝이란 무엇인가
5 문제. 공용 리졸버가 거짓 RRset을 기억하면, 이용자 전원이 같은 오답을 보는 구도를 파악합니다.
2 캐시와 bailiwick — 어디까지 믿을 수 있는가
5 문제. referral·glue·bailiwick을 나누고, 어디까지를 cache에 넣어도 되는지 정리합니다.
3 수락 조건과 레이스 — ID / port / TTL / time window
6 문제. 응답 수락 조건과 race window를, ID / source port / TTL의 숫자로 파악합니다.
4 2008년의 교훈 — 병행 질의와 단기 대책
5 문제. 2008년에 널리 알려진 문제를, 하이 레벨의 공격 발상과 단기 대책으로 이해합니다.
5 DNSSEC과 다층 방어 — 무엇을 지키고 무엇이 남는가
6 문제. DNSSEC의 수비 범위와 last-hop의 한계를 짚고, 다층 방어를 짜냅니다.
6 관측과 운용 — dig / 로그 / 흔한 오진
7 문제. dig·로그·negative caching에서, 의심스러운 거동과 오진을 구별합니다. 로그에서 poisoning 징후를 포착하는 패턴도 다룹니다.
7 종합 연습과 전체 복습
8 문제. 케이스 문제로 전체를 연결하고, split-horizon / NAT / AD bit 등 혼동하기 쉬운 논점을 정리합니다.
수강 요령
- 「어느 계층의 cache인가」를 먼저 고정하고 나서 문제를 읽어 주세요.
- 수치 문제는 암산으로 건너뛰지 말고, TTL과 경과 시간을 초 단위로 적어 주세요.
- 제 2 장의 bailiwick, 제 3 장의 entropy, 제 5 장의 DNSSEC은 식과 숫자로 확인해 주세요.
- 종합 연습 뒤에, 미정답만의 복습으로 한 바퀴 더 돌면 정착이 쉽습니다.
시작 전 전제
- DNS101 수준의 기초 지식(재귀 질의, 권위 서버, TTL)이 있으면 들어가기 쉽습니다.
- 깊은 암호 이론은 필요 없습니다. 필요한 범위에서만 DNSSEC을 다룹니다.
참고
- RFC 5452: Measures for Making DNS More Resilient against Forged Answers
- RFC 4033: DNS Security Introduction and Requirements
- RFC 2308: Negative Caching of DNS Queries
- RFC 4035: Protocol Modifications for the DNS Security Extensions
- Unbound documentation (glue / DNSSEC hardening 의 구현 예)
- JVNVU#800113: 복수 DNS 구현에서의 캐시 포이즈닝 취약점