수락 조건과 레이스 — ID / port / TTL / time window
응답 수락 조건과 race window 를 ID / source port / TTL 의 숫자로 파악한다.
이전 장의 복습: 제 2 장에서는 referral / glue / bailiwick 을 나누고, Additional 의 추가 데이터를 어디까지 믿어도 될지를 정리했습니다. 본 장에서는 그 전제 위에서, resolver 가 「어떤 조건으로 응답을 수락하는가」, 그리고 그 조건을 빠져나가기 위한 race window 와 entropy 의 관계를 숫자로 파악합니다.
수락 조건은 하나가 아니다
resolver 는 돌아온 packet 이 「지금 기다리고 있는 query 에 대한 응답인지」를 여러 속성으로 대조합니다. ID 만 보는 것이 아닙니다. question, source / destination address, source / destination port 까지 포함해서 비로소 「같은 transaction」으로 간주합니다.
연습 3-1 — 무엇을 대조하는가
「transaction ID 가 16 bit 이니 약하다」는 설명만으로 멈추면, port 나 address 의 의미를 놓치게 됩니다. RFC 5452 는 「DNS 응답의 위조에 대한 내성을 높이기 위한 대책을 정리한 RFC」로, 응답 수락 시에 무엇을 대조해야 하는지를 정의하고 있습니다.
Q1. RFC 5452 의 설명에 따라, 재귀 리졸버가 응답 수락 시에 대조하는 속성으로 해당하지 않는 것은 어느 것입니까.
DNS 는 HTTP 의 헤더를 수락 판정에 사용하지 않습니다.
RFC 5452 는 question section, transaction ID, 송신원 / 목적지 주소, 송신원 / 목적지 포트의 대조를 요구합니다. HTTP Host header 는 HTTP 계층의 값으로, DNS 응답의 수락 조건에는 포함되지 않습니다.
Q2. transaction ID 가 16 bit 뿐이라면, 후보는 몇 가지입니까.
2 의 16 제곱입니다.
16 bit 의 transaction ID 는 65,536 가지입니다. 이것만으로는 off-path 의 guessing 에 대해 충분히 넓다고 하기 어렵기 때문에, source port 등 다른 일치 조건도 중요해집니다.
race window 는 짧지만, 0 이 아니다
off-path 의 forged response 가 의미를 가지는 것은, 진짜 authoritative response 가 아직 도착하지 않은 짧은 시간 창입니다. 실제 network 조건은 다양하지만, 개념적으로는 「대기 시간 동안 먼저 일치하는 것이 오면 위험하다」라고 받아들이는 것이 좋습니다.
| 타임라인 상의 지점 | 의미 |
|---|---|
| query 발행 | resolver 가 outstanding query 를 안기 시작한다 |
| forged response 군 | 도착한 위조 응답. 수락 조건에 맞으면 cache 에 들어갈 수 있다 |
| authoritative response | 진짜 응답이 도착하면, 이후의 위조 응답은 수락되지 않는다 |
연습 3-2 — race window 와 entropy
off-path 의 forged response 가 의미를 가지는 것은, 진짜 authoritative response 가 아직 도착하지 않은 짧은 시간 창입니다.
Q3. off-path 의 forged response 가 이기려면, 어느 시간대가 특히 중요합니까.
진짜 응답이 아직 도착하지 않은 「대기 시간」을 의식합니다.
중요한 것은 query 가 outstanding 인 동안, 즉 진짜 authoritative response 가 도착하기 전의 짧은 race window 입니다. 이 시간 창에 먼저 일치 조건을 만족하는 위조 응답이 들어오면 위험해집니다.
간이 모델로 보는 race 와 entropy
RFC 5452 의 사고방식을 설명용으로 단순화한 개념 모델을 머릿속으로 조립해 봅니다. 구현 차이나 network 조건은 무시하고, 「일치시켜야 할 공간이 넓을수록 맞히기 어렵다」「시도 횟수가 많을수록 위험이 올라간다」를 직관적으로 이해합니다.
| 입력 | 역할 |
|---|---|
| transaction ID bits | 최대 16 bit 의 대조 공간을 제공 |
| source port bits | 고 에페머럴 포트대에서 최대 16 bit 약의 추가 공간 |
| 추가 entropy(예: 0x20) | 라벨의 대소문자 변화 등으로 몇 bit 가산 |
| 1 window 당 forged packets | 공격 측이 race window 에 던져 넣을 수 있는 수 |
| identical outstanding queries | 동일 질의를 병행으로 보유하는 개수 |
| attempts | fresh miss 를 일으켜 race 를 반복하는 횟수 |
0x20 인코딩이란: DNS 의 이름 해석은 본래 case-insensitive(대소문자를 구별하지 않음)입니다. 예를 들어 www.example.com 과 WwW.ExAmPlE.cOm 은 같은 이름으로 취급됩니다. 이 성질을 역이용하여, resolver 가 질의 시에 라벨의 각 문자를 랜덤하게 대소문자 혼재로 보내고, 응답에서도 같은 배열이 돌아오는지를 검증함으로써 라벨의 문자 수만큼의 bit 를 추가 entropy 로 사용할 수 있습니다. 이를 0x20 인코딩(대문자/소문자의 ASCII 차이가 0x20 인 것에서 유래)이라고 부릅니다.
1 회 성공 확률이 작아도, attempts 가 늘어날수록 누적 성공 확률은 올라간다는 관계를 기억해 둡니다.
port entropy 와 NAT
source port randomization 은 유효한 hardening 이지만, 밖에서 보이는 port 공간이 좁으면 효과가 줄어듭니다. NAT 나 middlebox 가 sequential / small-range 의 port 로 바꾸는 경우, 이 점에 주의해야 합니다.
연습 3-3 — port entropy 와 NAT
source port randomization 은 유효한 hardening 이지만, 밖에서 보이는 port 공간이 좁으면 효과가 줄어듭니다.
Q4. 송신원 포트를 질의마다 랜덤화하는 주된 효과는 어느 것입니까.
ID 에 더해 무엇을 맞혀야 하게 되는지를 생각합니다.
source port randomization 은 transaction ID 이외에도 일치시켜야 할 공간을 늘려, forged response 의 추측을 어렵게 만듭니다. DNSSEC 과는 다른 hardening 입니다.
Q5. recursive resolver 의 외향 UDP source port 를 NAT 가 작은 연속 번호 범위로 바꾸면, 무엇이 일어나기 쉽습니까.
실제로 밖으로 나가는 port 의 다양성이 유지되는지가 중요합니다.
NAT 가 외향 source port 를 작고 예측 가능한 범위로 좁히면, 실효 entropy 가 감소합니다. 내부에서 random 이어도 밖에서 보이는 port 공간이 좁으면 hardening 효과는 떨어지기 쉽습니다.
복습 칼럼 — TTL 의 잔여 초 수를 초 단위로 쫓는다
본 장의 주제(수락 조건·entropy·race window)에서는 다소 벗어나지만, 제 1 장에서 다룬 TTL 의 세는 법을 다시 한 번 확인해 둡니다. 잔여 초 수를 즉답할 수 있는 감각은, 제 6 장의 운용 관찰에서 stale 인지 이상인지를 구분할 때 반복해서 사용합니다.
복습 칼럼 — TTL 의 잔여 초 수를 초 단위로 쫓는다
race / entropy 의 본 줄거리에서는 다소 벗어나지만, 제 1 장에서 다룬 TTL 의 세는 법을 다시 한 번 확인합니다. 잔여 초 수를 즉답할 수 있는 감각은, 제 6 장의 운용 관찰에서도 반복해서 사용합니다.
Q6. 어떤 오답이 13:00:00 에 TTL 240 초로 캐시되었습니다. 13:02:30 의 잔여 TTL 은 몇 초입니까.
2 분 30 초는 150 초입니다.
TTL 240 초에서 경과 150 초를 빼므로, 잔여 TTL 은 90 초입니다. 운용에서는 「지금 보이는 값이 앞으로 몇 초 남았는가」를 초 단위로 쫓을 수 있으면, stale 인지 이상인지를 정리하기 쉬워집니다.
제 3 장의 정리
- DNS 응답 수락은 ID 뿐 아니라 question / address / port 를 포함한다
- 중요한 것은 authoritative response 보다 앞의 짧은 race window
- source port randomization 은 유효하지만, NAT 가 entropy 를 깎아먹을 수 있다