소식 › 표준·기술 · RFC보안DNS 파서취약점

RFC 9267: DNS 리소스 레코드 처리에서 반복되는 구현 결함 정리

RFC 9267은 여러 DNS 클라이언트 구현에서 발견된 리소스 레코드(RR) 처리 결함 유형을 정리한 정보성 문서입니다. 서비스 거부나 원격 코드 실행으로 이어질 수 있는 결함들이며, 압축 포인터 검증 문제 등을 다룹니다.

2022년 7월 발행된 RFC 9267은 여러 DNS 클라이언트 구현에서 공통으로 발견된 리소스 레코드(Resource Record, RR) 처리 결함을 '안티패턴(anti-pattern)'으로 묶어 정리한 문서입니다. 문서에 따르면 이 결함들은 해당 소프트웨어를 노린 서비스 거부(Denial-of-Service)와 원격 코드 실행(Remote Code Execution) 공격으로 이어질 수 있습니다. 표준이 아니라 정보성(Informational) 문서이지만, DNS 와이어 포맷(wire format)을 다루는 모든 구현에 해당하는 내용입니다.

무엇이 발표되었나

저자는 S. Dashevskyi, D. dos Santos, J. Wetzels, A. Amri입니다. 이 문서는 다른 RFC 스트림과 별개로 RFC 편집자(RFC Editor)가 재량으로 발행했으며, 구현이나 배포에 대한 가치는 보증하지 않는다고 밝히고 있습니다.

저자들은 주요 TCP/IP 프로토콜 스택 여러 개의 DNS 클라이언트 구현을 분석했고, 공통된 구현 결함을 가진 취약점들을 찾았습니다. 서문에서는 최근 DNS 구현의 큰 취약점 사례로 SIGRED, SADDNS, 그리고 DNS 포워더 dnsmasq에 영향을 준 치명적 문제 7건인 DNSPOOQ를 언급합니다. 또 안티패턴 가운데 하나와 관련된 초기 CVE인 CVE-2000-0333이 2000년까지 거슬러 올라간다고 지적합니다. 위반 사항이 있으면 RFC 1035 해당 부분도 함께 밝힙니다.

대표적인 안티패턴이 압축 포인터와 오프셋 검증(Compression Pointer and Offset Validation) 문제입니다. RFC 1035의 메시지 압축 방식에서는 도메인 이름 전체나 일부 레이블을 앞서 나온 같은 이름을 가리키는 압축 포인터로 바꿀 수 있습니다. 압축 포인터는 2옥텟이며, 상위 2비트는 1이고 나머지 14비트는 DNS 헤더 시작점부터의 오프셋(OFFSET) 필드입니다. RFC 1035는 압축 포인터를 무조건 따라가는 것이 위험하다고 명시하지 않았습니다. 문서는 OFFSET 값을 검증하지 않고 이름을 복원하는 파서는 메모리 손상과 버퍼 오버런(buffer overrun)에 취약할 가능성이 높다고 설명합니다. 예시로 든 잘못된 의사코드는 오프셋을 확인하지 않고 포인터를 따라가며, 복사한 길이를 확인하지 않은 채 255바이트 버퍼에 레이블을 복사합니다. 관련 사례로는 CVE-2020-24338, CVE-2020-27738이 제시되어 있습니다.

영향 범위

문서는 이 문제가 DNS 클라이언트에만 해당하지 않는다고 강조합니다. DNS RR을 처리하는 소프트웨어라면 영향을 받을 수 있으며, 방화벽, 침입 탐지 시스템, 범용 DNS 패킷 분석기를 예로 듭니다. Wireshark의 DNS 분석기(CVE-2017-9345)도 그 예입니다. DNS-over-HTTPS(RFC 8484)와 DNS-over-TLS(RFC 7858) 구현에서도 비슷한 문제가 생길 수 있습니다.

운영자가 할 일

원문을 한국어로 번역·요약한 글입니다. 정확한 내용은 원문을 확인해 주세요. AI의 도움을 받아 작성하고 담당자가 검토했습니다.

목록으로