1. 라이브러리
  2. DNS
  3. DNS 보안

업데이트됨 1개월 전

DNS는 작은 마을을 위해 만들어졌다. 그런데 우리는 온 지구를 감당하게 했다.

1980년대, DNS가 설계될 당시 인터넷은 대학과 연구 기관의 소규모 네트워크였다. 네임서버를 운영하는 사람들은 서로를 알았다. 신뢰는 사람 사이의 것이었다. 프로토콜도 이를 반영했다—DNS 응답이 실제로 주장하는 출처에서 왔는지 검증하는 메커니즘이 없었다.

그 후 인터넷이 성장했다. 마을은 도시가 되고, 대륙이 되고, 마침내 전 세계가 되었다. 선의를 전제하던 프로토콜이 이제 수십억 명의 낯선 이들을 연결했고, 그 중 일부는 악의적인 의도를 가지고 있었다. DNSSEC는 신뢰만으로 충분했던 자리에 증명을 추가해야 했기 때문에 탄생했다.

가능해진 공격들

인증이 없으니, DNS는 표적이 되었다.

DNS 스푸핑: 공격자가 DNS 쿼리를 가로채고 가짜 IP 주소를 돌려준다. 당신이 "bank.com은 어디 있나요?"라고 물으면, 공격자가 제어하는 서버를 가리키는 답이 돌아온다. 당신은 은행 웹사이트의 완벽한 복제본에 접속해 자격 증명을 입력한다. 공격자는 이제 그것을 손에 넣었다.

캐시 포이즈닝: 더욱 위험하다. 공격자가 DNS 리졸버의 캐시에 거짓 레코드를 심는다. 이제 그 리졸버를 사용하는 모든 사람—대형 ISP라면 수백만 명이 될 수 있다—이 악성 사이트로 조용히 끌려간다. 하나의 성공적인 공격이 우물 전체를 오염시키는 셈이다.

이러한 공격은 암호화 이전 단계에서 발생한다. 전혀 다른 서버에 연결하고 있다면 은행이 완벽한 HTTPS를 쓰는 것은 아무 의미가 없다. 사기꾼과 나누는 대화를 열심히 보호하고 있는 꼴이다.

DNSSEC가 증명을 추가하는 방법

DNSSEC는 DNS 레코드에 암호화 서명을 추가한다. 도메인 소유자가 DNSSEC를 활성화하면 키 쌍을 생성한다. 개인 키로 DNS 레코드에 서명하고, 공개 키는 누구나 서명을 검증할 수 있도록 공개한다.

리졸버가 DNS 응답을 받으면 서명을 확인한다. 서명이 유효하면? 데이터는 진짜이고 변조되지 않은 것이다. 서명이 유효하지 않으면? 무언가 잘못됐다—응답을 거부한다.

이 과정은 투명하게 이루어진다. 당신이 example.com의 IP 주소를 요청하면, 리졸버는 IP 주소와 디지털 서명을 함께 받는다. example.com의 공개 키로 서명을 검증한다. 값이 일치하면 답을 돌려준다. 일치하지 않으면 오류가 발생한다. 거짓말보다는 오류가 낫다.

DNSSEC는 이를 작동시키기 위해 여러 레코드 유형을 도입한다:

RRSIG 레코드는 서명 자체를 담고 있다—DNS 레코드가 진짜임을 증명하는 암호화적 증거.

DNSKEY 레코드는 서명 검증에 필요한 공개 키를 공개한다.

DS 레코드는 상위 영역과 하위 영역 사이를 연결하여 신뢰 체인을 위로 이어 올린다.

NSEC/NSEC3 레코드는 도메인이 존재하지 않음을 증명한다. 이것이 없으면, 공격자는 실제로 존재하는 도메인을 두고 "이 도메인은 없다"고 거짓으로 주장할 수 있다.

신뢰 체인

DNSSEC는 DNS의 계층 구조를 신뢰의 계층 구조로 그대로 반영한다.

최상위에는 ICANN이 운영하는 루트 영역이 있다. 그 공개 키는 "트러스트 앵커(trust anchor)"로서 리졸버에 배포된다—모든 것이 올라서 있는 토대다.

www.example.com 같은 도메인의 경우, 체인은 다음과 같이 작동한다:

  1. 루트 영역이 .com 영역의 공개 키에 서명한다
  2. .com 레지스트리가 example.com의 공개 키에 서명한다
  3. example.com이 실제 DNS 레코드에 서명한다

검증하는 리졸버는 이 체인을 아래에서 위로 따라간다. example.com의 키로 www.example.com의 서명을 검증한다. .com의 서명으로 example.com의 키를 검증한다. 루트의 서명으로 .com의 키를 검증한다. 루트를 신뢰하는 것은 그것이 앵커이기 때문이다.

어느 고리라도 끊어지면—어떤 서명이든 검증에 실패하면—전체 체인이 무너진다. 개인 키 없이는 서명을 위조할 수 없으며, 개인 키는 절대 외부로 전송되지 않는다.

프라이버시 없는 인증

불편한 진실이 있다: DNSSEC는 당신의 답이 진짜임을 증명하면서도, 모든 사람이 당신의 질문을 들여다볼 수 있게 한다.

DNSSEC는 인증과 무결성을 제공한다. 암호화는 제공하지 않는다. DNS 쿼리와 응답은 네트워크 트래픽을 들여다보는 누구에게나 여전히 보인다. ISP든, 정부든, 같은 로컬 네트워크에 있는 누구든—모두 당신이 어떤 도메인을 조회하는지 볼 수 있다.

공증된 편지를 배달부가 내용을 큰 소리로 외쳐가며 전달하는 것과 같다. 편지는 진짜지만, 개인정보는 사라진다.

프라이버시를 위해서는 DNS over HTTPS (DoH)나 DNS over TLS (DoT)가 필요하다. 이것들은 당신과 리졸버 사이의 통신을 암호화한다. DNSSEC와 암호화된 DNS는 서로 보완한다:

  • DNSSEC: 데이터가 진짜임을 증명
  • DoH/DoT: 관찰자로부터 데이터를 숨김

이상적으로는 둘 다 있어야 한다. 아무도 엿볼 수 없는 진짜 답변.

도입이 느린 이유

루트 영역은 2010년 7월부터 서명되어 왔다1. 핵심 DNSSEC 사양은 2005년에 확정되었다2. 대부분의 최상위 도메인이 이를 지원한다. 그러나 .com 도메인의 95% 이상이 여전히 서명되지 않은 상태다3.

원인은 운영 위험 부담이다. DNSSEC는 암호화 키 관리를 요구한다—생성하고, 주기적으로 교체하고, 서명이 만료되지 않도록 유지해야 한다. 방화벽을 잘못 설정하면 보안 구멍이 생긴다. DNSSEC를 잘못 설정하면 도메인이 통째로 인터넷에서 사라진다. 실패했을 때의 결과가 전면적이다.

도메인 소유자들은 즉각적인 이점을 체감하기 어렵다. DNS 확인이 완료되면 HTTPS가 이미 연결을 보호하기 때문이다. 대부분의 사용자가 한 번도 겪지 않을 공격을 막으려고 왜 이 복잡함을 떠안아야 하는가?

채택률이 가장 높은 국가들—스웨덴, 체코, 노르웨이, 네덜란드—은 모두 서명된 도메인에 대해 등록기관의 수수료를 낮춰주는 금전적 인센티브를 제공한다4. 인센티브가 없으면 채택은 멈춘다. 기술은 준비됐다. 경제적 유인이 따라오지 않을 뿐이다.

리졸버 측에서는 Google Public DNS와 Cloudflare 같은 주요 제공업체가 DNSSEC 서명을 자동으로 검증한다. 이 리졸버를 사용하면 DNSSEC에 대해 들어본 적이 없어도 그 혜택을 받는다. 그러나 많은 ISP 리졸버는 여전히 검증을 하지 않아, 보호를 받는 인터넷 사용자는 전체의 약 30%에 그친다5.

DNSSEC가 실제로 제공하는 것

DNSSEC는 DNS를 비공개로 만들지 않는다. 아무것도 암호화하지 않는다. 모든 공격을 막지도 않는다.

그것이 하는 것: 증명을 추가한다. DNSSEC를 검증하는 리졸버가 서명된 도메인의 IP 주소를 알려줄 때, 그 주소가 도메인의 실제 네임서버에서 출발해 전송 도중 변조되지 않았다는 것을 확인할 수 있다. 답변이 진짜라는 것을 안다.

마을을 위해 만든 프로토콜을 지구 규모로 확장한 세계에서, 수십억 명의 낯선 이들이 신뢰를 전제로 구축된 인프라를 공유하는 세계에서, 그 증명은 중요하다.

DNSSEC에 대한 자주 묻는 질문

DNSSEC가 내 개인정보를 보호하나요?

아니다. DNSSEC는 DNS 응답을 인증하지만 암호화하지 않는다. 쿼리와 응답은 네트워크 관찰자에게 여전히 보인다. 개인정보 보호를 위해서는 DNSSEC 외에도 DNS over HTTPS (DoH)나 DNS over TLS (DoT)가 필요하다.

도메인이 DNSSEC를 사용하는지 어떻게 알 수 있나요?

DNSViz나 Verisign의 DNSSEC Analyzer 같은 온라인 도구로 확인할 수 있다. 도메인이 서명되었는지, 신뢰 체인이 온전한지 보여준다. 대부분의 사용자는 직접 확인할 필요가 없다—리졸버가 자동으로 검증을 처리한다.

DNSSEC 검증이 실패하면 어떻게 되나요?

검증하는 리졸버는 DNS 응답 대신 오류를 반환한다. 이것은 의도된 동작이다—오염된 데이터를 받아들이는 것보다 명확하게 실패하는 편이 낫다. 실패는 실제 공격일 수도 있고, 도메인 측의 설정 오류일 수도 있다.

내 웹사이트에 DNSSEC를 활성화해야 하나요?

위협 모델에 따라 다르다. 소규모 웹사이트 대부분은 HTTPS만으로 연결 자체에 충분한 보호가 된다. 민감한 데이터, 금융 거래, 중요 인프라를 다루는 사이트라면 DNSSEC가 정교한 공격에 대한 의미 있는 방어를 추가한다. 많은 DNS 호스팅 제공업체가 이제 클릭 한 번으로 DNSSEC를 활성화할 수 있게 해준다.

DNSSEC를 우회할 수 있나요?

공격자가 영역 서명에 사용된 개인 키를 탈취하면, 가짜 레코드에 대한 유효한 서명을 만들 수 있다. 키 관리가 그래서 중요하다. 또한 DNSSEC는 리졸버가 실제로 서명을 검증해야만 효과가 있다—검증하지 않는 리졸버를 사용하면 도메인이 서명되었든 아니든 보호를 받지 못한다.

출처

이 페이지가 도움이 되었나요?

😔
🤨
😃