DNSSEC(DNS Security Extensions)는 DNS 응답의 무결성과 출처를 디지털 서명으로 검증하는 확장 표준이다. DNS 스푸핑·캐시 포이즈닝을 방지한다.
DNS 취약점과 DNSSEC 해결책
기존 DNS 취약점:
- 캐시 포이즈닝: 가짜 DNS 응답을 캐시에 삽입
- DNS 스푸핑: 응답 위조로 피싱 사이트 유도
- 중간자 공격: 응답 변조
DNSSEC 해결:
- 각 DNS 레코드에 디지털 서명(RRSIG) 첨부
- 공개키(DNSKEY)로 서명 검증
- 신뢰 체인(Chain of Trust): 루트 → TLD → 도메인
DNSSEC 레코드 유형
| 레코드 | 역할 |
|---|
| DNSKEY | 공개키 저장 (ZSK, KSK) |
| RRSIG | DNS 레코드 집합의 서명 |
| DS | 자식 존의 KSK 해시 (위임 서명) |
| NSEC/NSEC3 | 레코드 없음 증명 (부정 응답) |
신뢰 체인
루트 존 (.) ← ICANN이 KSK 관리, HSM 저장
| DS 레코드 → .com 존의 KSK 해시
v
.com 존 ← Verisign이 서명
| DS 레코드 → example.com의 KSK 해시
v
example.com ← 도메인 소유자가 서명
| RRSIG → A/MX/TXT 레코드 서명
v
검증자(Resolver): 루트부터 체인 검증
DNSSEC 설정 예시 (BIND)
bash
# 키 생성
dnssec-keygen -a ECDSAP256SHA256 -b 256 -n ZONE example.com # ZSK
dnssec-keygen -a ECDSAP256SHA256 -b 256 -n ZONE -f KSK example.com # KSK
# 존 파일 서명
dnssec-signzone -A -3 salt -a -N INCREMENT -o example.com -t db.example.com
# DS 레코드 → 상위 등록기관에 제출
dnssec-dsfromkey Kexample.com.+013+XXXXX.key
DNSSEC 검증 확인
bash
# dig로 검증
dig +dnssec example.com A
# 응답에 AD (Authenticated Data) 플래그 확인
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2
# 온라인 검증 도구
# https://dnssec-analyzer.verisignlabs.com/
# https://dnsviz.net/
# DANE (TLSA 레코드): DNS로 TLS 인증서 검증
# _443._tcp.example.com. TLSA 3 1 1 <hash>
관련 문서
- •[[certificate-pinning|인증서 피닝]]
- •[[waf|WAF (웹 애플리케이션 방화벽)]]
- •[[threat-intelligence|위협 인텔리전스]]