IETF가 2024년 7월 24일 RFC 9619 "In the DNS, QDCOUNT Is (Usually) One"을 표준화 과정 문서(Proposed Standard)로 발표했습니다. 이 문서는 RFC 1035를 개정(update)합니다. 일반 질의·응답 메시지(OPCODE = 0, QUERY)에서는 헤더의 질문 수 필드(QDCOUNT) 값이 1을 넘으면 안 되고, 1을 넘는 메시지를 받으면 형식 오류(FORMERR)로 응답해야 한다는 내용입니다. 그동안 명세가 모호하던 부분을 정리한 것입니다.
무엇이 발표되었나
DNS 메시지 헤더의 QDCOUNT는 질문 섹션(Question section)에 들어 있는 질문의 수를 나타내는 부호 없는 16비트 값입니다. 필드 크기만 보면 여러 값을 담을 수 있지만, 질의·응답 메시지에는 프로토콜 자체의 제약이 있습니다. 예를 들어 응답의 권한 응답 플래그(AA)나 응답 코드(RCODE)는 메시지 안에 질문이 여러 개 있으면 어느 질문에 대한 값인지 표시할 방법이 없어 의미가 정해지지 않습니다. RFC 9619는 이 때문에 OPCODE 0 메시지의 QDCOUNT가 사실상 0 또는 1로 제한된다고 설명하고, 이를 기본 명세에 명시했습니다.
RFC 1035에 반영된 요구 사항은 다음과 같습니다.
- OPCODE = 0인 DNS 메시지의 QDCOUNT 값은 1보다 커서는 안 됩니다(MUST NOT). 따라서 질문 섹션에도 질문이 두 개 이상 들어갈 수 없습니다.
- OPCODE = 0이고 QDCOUNT > 1인 메시지는 형식이 잘못된 메시지로 처리해야 하며(MUST), 응답 메시지의 RCODE는 1(FORMERR)로 설정해야 합니다(MUST).
- 원치 않는 트래픽을 걸러내려고 DNS 메시지를 검사하는 방화벽 같은 중간 장비(middlebox)는 OPCODE = 0이고 QDCOUNT > 1인 메시지를 비정상 트래픽으로 보고 위와 같이 FORMERR로 응답하는 것이 권고됩니다(SHOULD).
- 반면 이런 장비는 OPCODE = 0이고 QDCOUNT = 0인 메시지를 비정상으로 처리해서는 안 됩니다(MUST NOT). 자세한 지침은 RFC 8906 4절을 참고하도록 안내하고 있습니다.
보안 고려 사항(Security Considerations)에서는 이 문서가 명세를 명확히 해 서로 다른 DNS 구현 간 상호 운용성을 높이는 데 목적이 있다고 밝힙니다. IANA 조치 사항은 없습니다.
영향 범위
이번 개정은 OPCODE = 0(QUERY) 메시지에만 적용됩니다. 권한 서버, 재귀 서버, 클라이언트·스텁 리졸버 구현, 그리고 DNS 트래픽을 검사하는 방화벽 등 중간 장비가 대상입니다. 문서 제목의 "(대개)"라는 표현처럼 QDCOUNT = 0은 여전히 허용되는 값입니다. 따라서 "QDCOUNT는 반드시 1"이라는 식으로 필터를 만들면 이 RFC와 맞지 않게 됩니다.
운영자가 할 일
- 사용 중인 DNS 서버 소프트웨어가 OPCODE 0이고 QDCOUNT > 1인 질의에 FORMERR로 응답하는지 확인해 두는 것이 좋습니다.
- DNS 트래픽을 검사·차단하는 방화벽이나 보안 장비를 운영한다면 두 가지를 점검하십시오. QDCOUNT > 1인 질의를 응답 없이 버리지 않고 FORMERR로 처리하는지, 그리고 QDCOUNT = 0인 메시지를 비정상으로 차단하지 않는지입니다. 응답 없이 버리는 경우의 문제 등 관련 지침은 RFC 8906 4절에 있습니다.
- 직접 만든 DNS 클라이언트나 모니터링 도구가 있다면 질의 하나에 질문 하나만 넣는지 확인하십시오.
원문을 한국어로 번역·요약한 글입니다. 정확한 내용은 원문을 확인해 주세요. AI의 도움을 받아 작성하고 담당자가 검토했습니다.