IETF가 2023년 12월 표준 제안(Proposed Standard) 문서 RFC 9520 「Negative Caching of DNS Resolution Failures」를 발표했습니다. 지금까지는 리졸버(resolver)가 응답을 받지 못한 해석 실패(resolution failure)를 캐싱할지 선택할 수 있었습니다. 이 문서는 해석 실패와 DNSSEC 검증 실패의 캐싱을 필수로 바꾸고, 실패한 영역(zone)의 상위 영역에 공격적으로 반복 질의하지 말라는 금지 규정을 더 넓게 적용합니다. 해석 실패를 겪는 재귀 리졸버가 질의를 과도하게 반복하는 현상을 줄이려는 문서입니다.
무엇이 발표되었나
RFC 9520은 DNS 해석 결과를 세 가지로 나눕니다. (1) 요청한 데이터가 담긴 응답, (2) 요청한 데이터가 존재하지 않는다는 응답, (3) 리졸버가 데이터 존재 여부에 관해 쓸 만한 정보를 전혀 받지 못한 해석 실패입니다. 이 문서는 세 번째 경우만 다룹니다.
이 문서는 기존 RFC 세 건을 다음과 같이 갱신합니다.
- RFC 2308 갱신: RFC 2308은 이름 오류(NXDOMAIN)와 데이터 없음(NODATA) 응답의 부정 캐싱(negative caching)은 필수로 정했지만, 서버 실패나 응답하지 않거나 도달할 수 없는 서버 같은 해석 실패의 캐싱은 선택으로 두었습니다. RFC 9520은 모든 DNS 해석 실패의 부정 캐싱을 필수로 정하고, 해석 실패의 예를 더 제시합니다.
- RFC 4035 갱신: 지금까지 허용 사항이던 DNSSEC 검증 실패(validation failure)의 캐싱을 필수로 바꿉니다.
- RFC 4697 갱신: RFC 4697은 실패한 영역의 부모 영역에 NS 레코드를 공격적으로 반복 질의하는 것을 금지했습니다. RFC 9520은 이 금지를 모든 질의 유형과 모든 상위(ancestor) 영역으로 넓힙니다.
배경
문서는 재귀 리졸버가 해석 실패를 겪으면 질의를 더 공격적으로 보낸다는 사례를 듭니다.
- 2009년 12월: 영역 운영자가 DNSSEC 키를 롤오버하자 여러 in-addr.arpa 하위 영역을 맡은 보조 서버의 트래픽이 갑자기 두 배가 되었습니다. 특히 DNSKEY 질의는 약 100배(두 자릿수) 늘었습니다. 리졸버에 들어 있던 루트가 아닌 신뢰 앵커(trust anchor)가 롤오버 뒤 낡은 값이 되어 검증에 실패했고, 리졸버가 질의를 반복한 것이 원인이었습니다.
- 2016년: Dyn이 대규모 공격을 받을 때 봇넷 트래픽과 함께 "재시도 폭주(retry storm)"가 일어났습니다. 일부 대형 재귀 플랫폼에서는 평소의 10배가 넘는 질의가 관측되었습니다.
- 2018년: 루트 영역 키 서명 키(KSK)를 롤오버하는 동안 a.root-servers.net과 j.root-servers.net이 받은 DNSKEY 질의는 하루 약 1,500만 건에서 폐기(revocation) 기간 말 하루 12억 건으로 약 80배 늘었습니다.
영향 범위
주로 캐싱하는 재귀 리졸버의 구현과 운영에 관한 문서입니다. 해석 실패를 캐싱하면 리졸버가 같은 실패 질의를 반복하지 않으므로, 장애가 났거나 공격을 받는 권한 네임서버(authoritative name server)에 몰리는 부하가 줄어듭니다. 권한 서버 운영자에게는 키 롤오버나 장애 때 리졸버가 보내는 재시도 트래픽이 줄어드는 효과를 기대할 수 있습니다.
운영자가 할 일
- 사용하는 리졸버 소프트웨어가 해석 실패와 DNSSEC 검증 실패를 캐싱하는지, 관련 설정이 있는지 제조사 문서와 릴리스 노트에서 확인하세요.
- 실패 캐싱이 켜져 있으면 일시적인 장애가 복구된 뒤에도 캐시가 만료될 때까지 실패 응답이 이어질 수 있습니다. 장애 대응 절차에 캐시 확인과 비우기(flush)를 넣어 두세요.
- DNSSEC 키 롤오버를 계획할 때는 검증 실패가 질의 급증으로 이어진 위 사례를 참고해 트래픽을 모니터링하세요.
캐싱 기간 같은 세부 요구사항은 RFC 9520 원문에서 확인하시기 바랍니다.
원문을 한국어로 번역·요약한 글입니다. 정확한 내용은 원문을 확인해 주세요. AI의 도움을 받아 작성하고 담당자가 검토했습니다.