Cloudflare에서는 두 가지 중요한 DNSSEC 취약점 을 완화하기 위한 여러 벤더의 업계 차원 노력에 참여해 왔습니다. 이 취약점으로 인해 DNS 확인 서비스를 제공하는 중요 인프라에서 상당한 위험이 노출되었습니다. Cloudflare에서는 공용 확인자 1.1.1.1 서비스를 통해 누구나 무료로 사용할 수 있는 DNS 확인을 제공합니다. Cloudflare의 공용 확인자 1.1.1.1 서비스에 대한 완화 조치는 이 취약점이 공개되기 전에 적용되었습니다. 언바운드(오픈 소스 소프트웨어)를 사용하는 내부 확인자는 이러한 취약점을 수정하는 새 소프트웨어 버전이 출시된 후 즉시 업그레이드되었습니다.
모든 Cloudflare DNS 인프라는 공개되기 전에 이 두 가지 취약점으로부터 보호되었으며 현재는 안전합니다. 이러한 취약점은 당사의 권한 있는 DNS 또는 DNS 방화벽 제품에 영향을 미치지 않습니다.
모든 주요 DNS 소프트웨어 벤더가 새 버전의 소프트웨어를 출시했습니다. 다른 모든 주요 DNS 확인자 공급자도 적절한 완화 조치를 적용했습니다. DNS 확인자 소프트웨어를 아직 업데이트하지 않으셨다면 즉시 업데이트하시기 바랍니다.
배경
일반적으로 DNSSEC로 알려진 도메인 네임 시스템(DNS) 보안 확장은 인증 및 무결성 기능을 추가하는 DNS 프로토콜의 확장입니다. DNSSEC는 암호화 키와 서명을 사용하여 DNS 응답이 인증된 것으로 검증될 수 있도록 합니다. DNSSEC 프로토콜 사양에는 유효성을 검사하는 DNS 확인자의 복잡성과 계산 비용이 증가하더라도 가용성을 우선시하는 특정 요구 사항이 있습니다. 이 블로그에서 논의한 취약점을 완화하려면 검증기의 리소스가 고갈되지 않도록 이러한 요구 사항을 완화하는 현지 정책을 적용해야 합니다.
DNS 및 DNSSEC 프로토콜의 설계는 견고성 원칙을 따릅니다. 즉, "당신이 하는 일은 보수적이어야 하고, 다른 사람으로부터 받아들이는 것은 자유로워야 합니다". 과거에는 이 원칙에 따라 연결 요구 사항을 이용하는 많은 취약점이 있었습니다. 악의적인 행위자는 이러한 취약성을 악용하여 복잡한 구성의 응답을 조작함으로써 DNS 확인자에 추가 작업을 유발함으로써 인프라를 공격할 수 있습니다. 종종 그렇듯이, 우리는 프로토콜이 적응하고 발전할 수 있도록 하는 유연성과 우리가 운영하는 서비스의 안정성과 보안을 보호해야 하는 필요성 사이에서 실용적인 균형을 유지해야 합니다.
Cloudflare의 공용 확인자 1.1.1.1은 개인정보를 중심으로 한 공용 확인자 서비스입니다. Cloudflare에서는 네트워크 외부에서 운영되는 권한 있는 DNS 서버를 보호하는 것 외에도 자체 인프라를 보호하기 위해 보다 엄격한 검증 및 제한을 사용해 왔습니다. 그 결과, 해결 실패에 대한 불만 사항이 자주 접수됩니다. 경험에 따르면 엄격한 검증 및 제한은 일부 에지 사례, 특히 DNS 도메인이 부적절하게 구성된 경우 가용성에 영향을 미칠 수 있습니다. 그러나 DNS 인프라의 전반적인 안정성과 복원력을 향상하려면 이러한 엄격한 검증과 제한이 필요합니다.
이들 취약점과 Cloudflare에서 이를 완화하는 방법은 아래에서 설명합니다.
Keytrap 취약점()
소개
DNSSEC 서명 영역에는 DNS 영역의 콘텐츠에 서명하기 위한 여러 키(DNSKEY)가 포함될 수 있으며, DNS 응답의 리소스 레코드 세트(RRSET)에는 여러 서명(RRSIG)이 있을 수 있습니다. 키 롤오버, 알고리즘 롤오버, 다중 서명자 DNSSEC 등의 기능을 지원하려면 여러 키와 서명이 필요합니다. DNSSEC 프로토콜 사양에 따라, 유효성 검사 DNS 확인자는 DNS 응답의 유효성을 검사할 때 가능한 모든 키와 서명 조합을 시도합니다.
유효성 검사 중에 확인자는 모든 서명의 키 태그를 살펴보고 서명하는 데 사용된 관련 키를 찾으려고 시도합니다. 키 태그는 키의 리소스 데이터(RDATA)에 대한 체크섬으로 계산된 서명되지 않은 16비트 숫자입니다. 키 태그는 서명을 생성한 키와 서명을 효율적으로 연결하기 위한 것입니다. 그러나 키 태그는 고유하지 않으며 여러 키가 동일한 키 태그를 가질 수 있습니다. 악의적인 행위자는 동일한 키 태그를 가진 여러 키와 여러 서명을 사용하여 DNS 응답을 쉽게 만들 수 있지만, 어느 것도 유효성 검사되지 않습니다. 유효성 검사 확인자는 이 응답을 검사하려고 할 때 모든 조합(키 수에 서명 수를 곱함)을 시도해야 합니다. 이로 인해 유효성 검사 확인자의 계산 비용이 여러 배 증가하여 모든 사용자의 성능이 저하됩니다. 이를 Keytrap 취약점이라고 합니다.
이 취약점의 변형으로는 하나의 키로 여러 서명 사용하기, 충돌하는 키 태그를 가진 여러 키와 하나의 서명 사용하기, 상위 위임 서명자 레코드에 추가한 해당 해시와 함께 여러 키 사용하기 등이 있습니다.
완화
Cloudflare에서는 영역 컷에서 허용되는 최대 키 수를 제한했습니다. 영역 컷은 상위 영역이 하위 영역에 위임되는 것을 말합니다(예: .com 영역이 Cloudflare.com을 Cloudflare 네임서버에 위임합니다). 이러한 제한이 이미 마련되어 있고 Cloudflare 플랫폼에 다양한 보호 기능을 구축했음에도 불구하고, 저희는 권한 있는 DNS 서버의 악의적 DNS 응답을 처리하려면 여전히 컴퓨팅 비용이 많이 든다는 사실을 깨달았습니다.
이 취약점을 해결하고 완화하기 위해 저희는 RRSET당 서명 유효성 검사 한도와 확인 작업당 총 서명 유효성 검사 한도를 추가했습니다. 하나의 확인 작업에는 단일 DNS 질문에 응답하기 위해 외부의 권한 있는 DNS 서버에 대한 여러 재귀 쿼리가 포함될 수 있습니다. 이러한 제한을 초과하는 클라이언트 쿼리는 확인할 수 없으며 확장 DNS 오류(EDE) 코드 0과 함께 응답을 받게 됩니다. 저희는 또한 이 취약점을 악용하려는 공격을 감지할 수 있는 메트릭을 추가했습니다.
NSEC3 반복 및 최근접 인클로저 증거 취약점()
소개
NSEC3은 인증된 존재 부정을 위한 또 다른 접근법입니다. 인증된 존재 부정에 대한 자세한 내용은 여기를 참조하세요. NSEC3은 영역 열거를 방지하기 위해 DNS 이름 대신 DNS 이름에서 직접 파생된 해시를 사용하며, 표준에서는 해시 계산을 위한 여러 번의 반복을 지원합니다. 그러나 전체 DNS 이름이 해시 계산에 대한 입력으로 사용되므로 초기값 이상으로 해싱 반복을 늘리면 추가 값이 제공되지 않으며 RFC9276에서 권장되지 않습니다. 이러한 정보는최근접 인클로저 증거를 찾는 동안 더욱 복잡해집니다. 권한 있는 DNS 서버의 악의적 DNS 응답은 높은 NSEC3 반복 횟수와 여러 DNS 레이블로 된 긴 DNS 이름을 설정하여 불필요한 해시 계산을 수행함으로써 유효성 검사 확인자의 컴퓨팅 리소스를 고갈시킬 수 있습니다.
완화
저희는 이 취약점에 Keytrap에 적용했던 것과 유사한 완화 기법을 적용했습니다. 단일 DNS 질문에 답하기 위해 확인 작업당 총 해시 계산에 제한을 추가했습니다. 마찬가지로, 이 제한을 초과하는 클라이언트 쿼리는 확인할 수 없으며 EDE 코드 27로 응답을 받게 됩니다. 저희는 또한 해시 계산을 추적하는 메트릭을 추가하여 이러한 취약점을 악용하려는 공격을 조기에 감지할 수 있었습니다.
일정
날짜 및 시간(UTC)
Date and time in UTC |
Event |
2023-11-03 16:05 |
John Todd from Quad9 invites Cloudflare to participate in a joint task force to discuss a new DNS vulnerability. |
2023-11-07 14:30 |
A group of DNS vendors and service providers meet to discuss the vulnerability during IETF 118. Discussions and collaboration continues in a closed chat group hosted at DNS-OARC |
2023-12-08 20:20 |
Cloudflare public resolver 1.1.1.1 is fully patched to mitigate Keytrap vulnerability (CVE-2023-50387) |
2024-01-17 22:39 |
Cloudflare public resolver 1.1.1.1 is fully patched to mitigate NSEC3 iteration count and closest encloser vulnerability (CVE-2023-50868) |
2024-02-13 13:04 |
Unbound package is released |
2024-02-13 23:00 |
Cloudflare internal CDN resolver is fully patched to mitigate both CVE-2023-50387 and CVE-2023-50868 |
이벤트
2023-11-03 16:05
Quad9의 John Todd가 Cloudflare를 합동 태스크포스에 초대하여 새로운 DNS 취약점을 논의합니다.
2023-11-07 14:30
IETF 118이 진행되는 동안 일련의 DNS 벤더와 서비스 공급자가 만나 취약점에 대해 논의합니다. DNS-OARC에서 호스팅하는 비공개 채팅 그룹에서 토론과 협업은 계속됩니다
2023-12-08 20:20
Cloudflare 공용 확인자 1.1.1.1은 Keytrap 취약점(CVE-2023-50387)을 완화하기 위해 완벽하게 패치되었습니다
2024-01-17 22:39
Cloudflare 공용 확인자 1.1.1.1은 NSEC3 반복 횟수 및 최근접 인클로저 취약점(CVE-2023-50868)을 완화하기 위해 완벽하게 패치되었습니다
2024-02-13 13:04
언바운드 패키지 출시됨
2024-02-13 23:00
Cloudflare 내부 CDN 확인자는 CVE-2023-50387 및 CVE-2023-50868
을 완화하기 위해 완벽하게 패치되었습니다
크레딧
독일 국립 응용 사이버 보안 연구 센터 ATHENE의 Elias Heftrig, Haya Schulmann, Niklas Vogel, Michael Waidner에게 Keytrap 취약점을 발견하고 책임 있게 공개를 해준 데 대하여 감사의 말씀을 전합니다.
인터넷 시스템 컨소시엄(ISC)의 Petr spacek에게 NSEC3 반복 및 최근접 인클로저 증거 취약점을 발견하고 책임 있게 공개를 해준 데 대하여 감사의 말씀을 전합니다.
Quad9의 John Todd와 DNS 운영 분석 및 연구 센터(DNS-OARC)에 다양한 이해관계자 간의 협력을 용이하게 해준 데 대하여 감사의 말씀을 전합니다.
마지막으로, 다양한 DNS 벤더와 서비스 공급자를 대표하는 DNS-OARC 커뮤니티 구성원에게 탄력적이고 안전한 인터넷을 만들겠다는 공통의 목표를 향해 함께 이 취약점을 해결하기 위해 쉬지 않고 노력해 준 데 대하여 감사의 말씀을 전합니다.