관측과 운용 — dig / 로그 / 흔한 오진
먼저 실제 응답을 보고, negative caching / split-horizon / browser cache 등의 오진을 먼저 제외합니다.
이전 장의 복습: 제 5 장에서는 DNSSEC 의 방어 범위와 last hop 문제, 그리고 다층 방어의 구성을 정리했습니다. 본 장에서는 그 방어를 「동작 중인 resolver 에서 무엇을 관측하면 무너짐을 알아챌 수 있는가」로 전개합니다. dig 의 기본 조작(DNS101 에서 다룬 범위)은 어디까지나 토대이며, 로그에서 poisoning 징후를 포착하는 패턴까지 들어갑니다.
관리 화면보다 먼저, 실제 응답을 본다
이름 해결 트러블에서는, 레코드 관리 화면의 스크린샷보다 먼저 "affected resolver 가 지금 무엇을 반환하고 있는지", "authoritative path 에서는 어떻게 보이는지" 를 비교하는 것이 지름길입니다.
$ dig @192.0.2.53 www.example.com A
$ dig +trace www.example.com A
$ dig +dnssec www.example.com A
여기서의 192.0.2.53 은 예시용 TEST-NET 주소입니다. 실제 확인에서는 자신이 관리하는 resolver 나 정당한 관측 대상만 사용합니다.
연습 6-1 — 최초의 분리 진단
관리 화면의 인상보다 먼저, 실제 응답을 비교합니다.
Q1. 사용자로부터 "어떤 이름만 이상한 IP 로 연결된다" 는 보고를 받았을 때, 최초의 안전한 확인으로 적절한 것은 어느 것입니까?
적절한 최초의 확인은, 영향을 받은 recursive resolver 의 응답과 authoritative path / +trace 의 모습을 비교하는 것입니다. 관리 화면의 인상만으로 판단하지 말고, 실제 응답을 관찰합니다.
Q2. dig +trace 가 적합한 목적으로 가장 가까운 것은 어느 것입니까?
dig +trace 는 delegation path 를 root 에서부터 순서대로 보면서 어디에서 경로가 꺾이는지 확인하는 데 적합합니다. 위임 경계의 관찰이나 NS 가 꺾이는 방식을 확인하는 데 도움이 됩니다.
Q3. 다음 중, browser 개별 캐시보다 shared recursive cache 의 문제를 의심하기 쉬운 상황은 어느 것입니까?
같은 resolver 를 쓰는 여러 사용자에서 같은 오답과 비슷한 남은 TTL 이 보인다면, browser 개별보다 shared recursive cache 쪽의 문제를 의심하기 쉽습니다.
자주 있는 증상의 분리 진단
| 증상 | 먼저 의심할 것 | 최초의 확인 |
|---|---|---|
| 같은 resolver 를 쓰는 여러 사용자가 같은 오답 | shared recursive cache | 영향 resolver 와 authoritative path 의 비교 |
| internal 에서만 다른 IP | split-horizon / 내부용 설계 | 설계 의도와 internal zone 의 유무 |
| 방금 만든 이름이 아직 NXDOMAIN | negative caching | 부정 응답의 TTL |
| RRSIG / AD 가 얽힌 이상 | DNSSEC validation / last hop | dig +dnssec 과 trust chain |
negative caching 과 오진
"방금 만든 이름이 아직 없다", "internal 과 external 에서 다르다" 등은 poisoning 과 헷갈리기 쉬운 전형적인 예입니다. negative caching 과 split-horizon 을 먼저 제외하면 불필요한 오탐을 줄일 수 있습니다.
힌트: negative caching 의 TTL 은 SOA 의 minimum field 와 RFC 2308 에서 설명하는 동작으로 결정됩니다. 존재하지 않는 결과에도 수명이 있다는 것을 잊지 마세요.
연습 6-2 — negative caching 과 오진
poisoning 과 헷갈리기 쉬운 전형적인 예를 먼저 제외합니다.
Q4. 13:00:00 에 NXDOMAIN 이 300 초 동안 negative cache 되었습니다. 13:01:00 에 그 이름의 레코드를 생성했는데도, 13:02:00 에 아직 NXDOMAIN 입니다. 가장 가까운 설명은 어느 것입니까?
negative caching 의 TTL 이 남아 있기 때문입니다. 레코드를 생성해도 resolver 쪽에서 NXDOMAIN 의 수명이 끊어질 때까지는 즉시 보이는 모습이 바뀌지 않는 경우가 있습니다.
Q5. 다음 중 cache poisoning 보다 split-horizon / 내부용 설계를 의심할 단서로 가장 가까운 것은 어느 것입니까?
사내 resolver 만이 내부 IP 를 반환하고 public authoritative 쪽은 의도대로 다른 답을 반환한다면, split-horizon / 내부용 설계를 먼저 의심합니다. 이상이라고 단정하기 전에 설계 의도를 확인합니다.
로그에서 이상을 포착하는 패턴
dig 로 개별 확인하는 것에 더해, resolver / 쿼리 로그를 정기적으로 보면 「지금 무언가가 일어나고 있다」「과거에 무언가가 일어났다」를 빨리 포착할 수 있습니다. 중급 코스의 관측으로는 다음 3 가지 패턴을 기억해 두면 현장에서 도움이 됩니다.
연습 6-3 — 로그에서 이상을 포착하는 패턴
중급으로서 한 걸음 더 나아가, resolver / 쿼리 로그에서 poisoning 징후를 포착하는 관점을 확인합니다.
Q6. 어떤 zone 에 대해, 처음 보는 대량의 서브도메인에 대한 query 가 짧은 시간에 집중되고 있고, 게다가 각각 NXDOMAIN 을 반환하고 있습니다. cache poisoning 관점에서 가장 타당한 가설은 어느 것입니까?
랜덤풍의 존재하지 않는 라벨에 대한 query 집중은 attempts 를 축적하기 위해 fresh miss 를 의도적으로 발생시키는 동작과 부합합니다. 같은 zone 에 대한 NXDOMAIN 비율의 급증, querier IP 의 편중, 시간대의 집중도 함께 보면 판단하기 쉬워집니다.
Q7. validating resolver 의 로그에서 「동일 zone 에 대한 RRSIG 검증 failure」가 짧은 시간에 연속되고 있습니다. 가장 먼저 분리 진단해야 할 가설의 조합으로 가장 적절한 것은 어느 것입니까?
RRSIG 검증 failure 는 (1) zone 운용 측의 문제(키 롤·서명 기한 만료), (2) 경로상에서의 응답 변조 / 오수락, (3) 검증 측의 시각 어긋남, 어느 쪽에서도 일어납니다. 먼저 이 3 축으로 분리 진단하고, 자신의 clock 와 zone 의 운용 상황을 확인한 다음, 나머지를 poisoning 이나 중간자의 의심으로 추적합니다.
이 장에서 얻어갈 것
- 먼저 affected resolver 와 authoritative path 를 비교한다
+trace는 delegation path 의 관찰에 적합하다- negative caching, split-horizon, browser cache 등의 오진 요인을 먼저 제외한다
- 로그에서는 「random label 집중」「RRSIG 검증 failure 연속」「port 분포의 축소」를 지속적으로 관측한다