DNSSEC란 무엇이고 언제 켜야 하나

DNSSEC는 DNS 응답에 전자서명을 붙여 위조된 답을 걸러내는 표준입니다. DS 레코드와 신뢰의 사슬, 키가 어긋났을 때 생기는 장애, 네임서버 변경과 함께 처리하는 방법을 정리했습니다.

작성

DNSSEC(DNS Security Extensions)는 DNS 응답에 전자서명을 붙여, 받은 답이 진짜 권한 있는 서버가 만든 값인지 검증할 수 있게 하는 표준입니다. 막아 주는 것은 캐시 포이즈닝(cache poisoning), 즉 리졸버의 캐시에 가짜 IP를 심어 사용자를 위조 사이트로 보내는 공격입니다. 응답을 암호화하지는 않고, 위조 여부만 판별합니다.

레토는 DNSSEC를 지원하는 확장자에 한해 이 기능을 제공합니다.

DNSSEC가 막는 공격

일반 DNS 응답에는 발신자를 증명할 수단이 없습니다. 리졸버가 "example.co.kr의 IP가 뭐냐"고 물었을 때, 진짜 네임서버보다 먼저 그럴듯한 답을 밀어 넣으면 리졸버는 그것을 캐시에 저장하고 TTL 동안 모든 사용자에게 같은 가짜 답을 돌려줍니다. 사용자는 주소창에 정상 도메인을 입력했는데 공격자 서버에 접속하게 됩니다.

DNSSEC를 켜면 각 레코드에 서명(RRSIG)이 함께 오고, 검증을 하는 리졸버는 서명이 맞지 않는 응답을 그냥 버립니다. 가짜 답은 캐시에 들어가지 못합니다.

서명과 DS 레코드, 신뢰의 사슬

DNSSEC는 두 곳에서 각각 할 일이 있습니다.

위치하는 일만들어지는 값
DNS 호스팅 (네임서버)존의 레코드에 키로 서명DNSKEY, RRSIG, NSEC
레지스트라를 통해 레지스트리자식 존의 키 지문을 상위 존에 등록DS 레코드

DS(Delegation Signer) 레코드는 "이 도메인의 서명 키는 이 지문과 일치해야 한다"고 상위 존에 남기는 표식입니다. 검증 리졸버는 루트에서 시작해 . → .kr → example.co.kr 순으로 각 단계의 DS와 DNSKEY를 대조하며 내려옵니다. 이것이 신뢰의 사슬(chain of trust)이고, 한 고리라도 어긋나면 사슬 전체가 끊깁니다.

키와 DS가 어긋나면 생기는 일

이 부분이 DNSSEC 운영에서 가장 중요한 지점입니다. 검증에 실패하면 리졸버는 "틀린 답"을 주는 대신 아무 답도 주지 않습니다. 즉 잘못 설정하면 사이트가 느려지는 정도가 아니라 도메인 전체가 조회 불가(SERVFAIL) 상태가 됩니다.

어긋나는 대표적인 경우입니다.

  • DS는 등록해 두었는데 DNS 호스팅에서 서명을 껐거나 키를 교체한 경우
  • DNS 호스팅 업체를 바꾸면서 이전 업체의 DS 값을 그대로 남겨 둔 경우
  • 네임서버만 먼저 바꾸고 DS를 나중에 정리하려 한 경우
  • 서명 유효 기간이 만료되도록 재서명이 이루어지지 않은 경우

더 곤란한 것은 증상이 사용자마다 다르게 보인다는 점입니다. 검증하지 않는 리졸버를 쓰는 사람에게는 멀쩡히 열리고, 검증하는 리졸버를 쓰는 사람에게만 접속이 안 됩니다. 사내에서는 정상인데 일부 고객만 접속이 안 된다는 제보가 들어오면 DNSSEC 상태를 먼저 의심해 볼 만합니다.

네임서버를 바꿀 때 반드시 함께 처리할 것

DNSSEC를 켜 둔 도메인의 네임서버를 바꾸려면 순서가 정해져 있습니다. 새 네임서버는 이전 키를 가지고 있지 않으므로, DS를 남겨 둔 채 위임만 바꾸면 그 순간부터 검증이 실패합니다.

  1. DS 레코드 삭제

    레지스트라 관리 화면에서 DS 레코드를 먼저 지웁니다. 이 시점부터 도메인은 서명되지 않은 일반 도메인으로 취급됩니다.

  2. 전파 대기

    상위 존의 DS가 캐시에서 빠질 때까지 기다립니다. 최소 하루는 두는 편이 안전합니다. DNS 전파가 끝나기 전에 다음 단계로 넘어가면 의미가 없습니다.

  3. 네임서버 변경

    새 네임서버에 기존 레코드를 모두 옮겨 둔 상태에서 위임을 바꿉니다. 절차는 네임서버 변경 방법을 참고하세요.

  4. 새 쪽에서 서명 활성화

    새 DNS 호스팅에서 DNSSEC 서명을 켜고 DS 값을 받습니다.

  5. 새 DS 등록

    받은 DS 값을 레지스트라 관리 화면에 넣습니다. 등록 뒤 검증 도구로 사슬이 정상인지 확인합니다.

켜는 것이 좋은 경우

다음에 해당하면 켜 두는 편이 낫습니다.

  • 로그인, 결제, 사내 시스템 접속에 쓰이는 도메인
  • 금융·의료·공공 분야처럼 사칭 피해의 파급이 큰 서비스
  • 메일을 많이 보내는 도메인. DNS 응답 위조가 메일 인증 체계까지 흔들 수 있어 SPF·DKIM·DMARC 설정과 함께 쓰면 효과가 큽니다
  • DS 등록과 키 교체를 자동으로 처리해 주는 DNS 호스팅을 쓰는 경우

반대로 DS를 수동으로 관리해야 하는데 담당자가 한 명뿐이고 인수인계 문서도 없다면, 잘못된 설정으로 인한 장애 위험이 얻는 이득보다 클 수 있습니다. 이런 경우에는 먼저 법인 도메인 관리 체크리스트대로 관리 주체와 절차를 정리한 뒤에 켜는 것을 권합니다.

자주 묻는 질문

아닙니다. DNSSEC는 응답이 위조되지 않았음을 증명할 뿐, 통신 내용을 암호화하지 않고 속도를 높이지도 않습니다. 브라우저와 서버 사이 통신 암호화는 HTTPS(TLS)의 역할이며 둘은 서로를 대체하지 않습니다.

도메인을 등록한 레지스트라를 통해 레지스트리에 등록합니다. 서명 자체는 네임서버를 운영하는 DNS 호스팅 쪽에서 하고, 그 결과로 나온 DS 값만 레지스트라 관리 화면에 넣는 구조입니다.

그대로 바꾸면 도메인 전체가 조회 불가 상태가 될 수 있습니다. 새 네임서버는 이전 키로 서명하지 않기 때문에 검증이 실패합니다. 먼저 DS 레코드를 지우고 전파를 기다린 뒤 네임서버를 바꾸고, 새 쪽에서 다시 서명해 새 DS를 등록하는 순서를 지켜야 합니다.

아닙니다. 레지스트리가 DS 레코드 등록을 지원하는 확장자에서만 가능합니다. 레토도 지원하는 확장자에 한해 DNSSEC를 제공합니다.

DNS 호스팅이 키 교체를 자동으로 처리한다면 평소 부담은 거의 없습니다. 주의할 시점은 네임서버나 DNS 호스팅 업체를 바꿀 때, 그리고 DS를 수동으로 관리할 때입니다. 이 두 경우에만 순서를 지키면 됩니다.

관련 가이드