합동회사 코무라소프트
3장

수락 조건과 레이스 — 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」으로 간주합니다.

수락 조건(모두 일치해야 비로소 같은 transaction)
question section 일치 / transaction ID 일치 / source·destination address 일치 / source·destination port 일치

연습 3-1 — 무엇을 대조하는가

「transaction ID 가 16 bit 이니 약하다」는 설명만으로 멈추면, port 나 address 의 의미를 놓치게 됩니다. RFC 5452 는 「DNS 응답의 위조에 대한 내성을 높이기 위한 대책을 정리한 RFC」로, 응답 수락 시에 무엇을 대조해야 하는지를 정의하고 있습니다.

Q1. RFC 5452 의 설명에 따라, 재귀 리졸버가 응답 수락 시에 대조하는 속성으로 해당하지 않는 것은 어느 것입니까.

DNS 는 HTTP 의 헤더를 수락 판정에 사용하지 않습니다.

Q2. transaction ID 가 16 bit 뿐이라면, 후보는 몇 가지입니까.

2 의 16 제곱입니다.

가지

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 가 이기려면, 어느 시간대가 특히 중요합니까.

진짜 응답이 아직 도착하지 않은 「대기 시간」을 의식합니다.

간이 모델로 보는 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동일 질의를 병행으로 보유하는 개수
attemptsfresh miss 를 일으켜 race 를 반복하는 횟수

0x20 인코딩이란: DNS 의 이름 해석은 본래 case-insensitive(대소문자를 구별하지 않음)입니다. 예를 들어 www.example.comWwW.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 에 더해 무엇을 맞혀야 하게 되는지를 생각합니다.

Q5. recursive resolver 의 외향 UDP source port 를 NAT 가 작은 연속 번호 범위로 바꾸면, 무엇이 일어나기 쉽습니까.

실제로 밖으로 나가는 port 의 다양성이 유지되는지가 중요합니다.

복습 칼럼 — 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 초입니다.

제 3 장의 정리

  • DNS 응답 수락은 ID 뿐 아니라 question / address / port 를 포함한다
  • 중요한 것은 authoritative response 보다 앞의 짧은 race window
  • source port randomization 은 유효하지만, NAT 가 entropy 를 깎아먹을 수 있다