⚠️
1. DNS가 원래 안고 있던 문제
일반 DNS 응답에는 전자서명이 없습니다. 그래서 통신 중간에서 가짜 응답을 흘려보내는 캐시 포이즈닝이나 DNS 스푸핑 공격을 받으면, 내 기기는 위조된 응답을 진짜처럼 믿고 가짜 서버로 접속할 수 있습니다.
🔏
2. DNSSEC이 하는 일
DNSSEC(DNS Security Extensions)은 각 DNS 응답에 전자서명을 붙여, 그 응답이 실제 도메인 소유자가 만든 것이고 중간에서 변조되지 않았음을 검증할 수 있게 해줍니다. 다만 내용을 숨기는 암호화(기밀성)가 아니라 위조 여부를 확인하는 무결성·출처 인증 기술이라는 점이 핵심입니다.
🗝️
3. 핵심 레코드: DNSKEY·RRSIG·DS
DNSKEY는 존(zone)의 공개키를 담고, RRSIG는 각 레코드 집합에 대한 전자서명을 담습니다. DS(Delegation Signer)는 상위 존에 등록되어 하위 존의 키가 진짜임을 보증하는 역할을 합니다.
🚫
4. 존재하지 않는 도메인도 서명으로 증명
"이런 레코드는 존재하지 않는다"는 응답도 위조될 수 있기 때문에, NSEC·NSEC3 레코드가 서명된 형태로 "없음"을 증명합니다. 이 덕분에 존재하지 않는 서브도메인을 공격자가 함부로 지어낼 수 없습니다.
🔗
5. 신뢰 체인: 루트부터 도메인까지
루트 존이 최상위 도메인(TLD)의 키를 서명하고, TLD가 다시 각 도메인의 키를 서명하는 방식으로 신뢰가 이어집니다. 이렇게 루트까지 이어지는 서명 체인을 검증하면 중간의 어느 한 단계도 위조되지 않았음을 확인할 수 있습니다.
🧩
6. DNSSEC이 막지 못하는 것
DNSSEC은 통신 구간을 암호화하지 않으므로, 조회 내용 자체를 숨기고 싶다면 DoH(DNS over HTTPS)나 DoT(DNS over TLS)가 필요합니다. 또한 아직 모든 도메인이 DNSSEC 서명을 적용한 것은 아니어서, 서명되지 않은 존에서는 이 보호를 받을 수 없습니다.
🔍
7. 내 도메인의 DNSSEC 확인하는 방법
리눅스·맥에서는 dig 명령어에 +dnssec 옵션을 붙여 RRSIG 레코드가 응답에 포함되는지 확인할 수 있고, 여러 온라인 DNSSEC 분석 도구에 도메인을 입력해 서명 체인이 끊김 없이 검증되는지 시각적으로 확인할 수도 있습니다.