도메인 이름 시스템 보안 확장(DNSSEC)
DNSSEC는 "도메인 네임 시스템 보안 확장(Domain Name System Security Extensions)"의 약자로, DNS 서버가 제공하는 정보의 진위를 보장하도록 설계된 강화된 프로토콜입니다. 공개 키 암호화와 디지털 서명을 활용하여 기존 DNS 프로토콜의 보안 취약점을 보완합니다. 1983년에 개발된 DNS는 도메인 이름(호스트 이름)을 IP 주소로 변환하는 시스템이지만, 강력한 보안 메커니즘이 부족하다는 비판을 받아 왔습니다. 대표적인 취약점 중 하나는 DNS 캐시 포이즈닝 공격에 노출되기 쉽다는 점입니다.
DNS 인프라는 크게 두 가지 유형의 서버로 구성됩니다:
- DNS 콘텐츠 서버(권한 서버): 실제 도메인 정보를 관리합니다.
- DNS 캐시 서버(네임 서버): 클라이언트를 대신하여 콘텐츠 서버에 질의하고, 응답을 지정된 기간 동안 캐시에 임시 저장하여 향후 유사한 요청이 있을 때 반복해서 질의하지 않고 처리합니다.
악의적이거나 잘못된 데이터가 캐시에 저장되면('캐시 오염'), DNS 캐시 서버가 클라이언트에 잘못된 IP 주소를 제공하여 사기성 사이트로 리디렉션할 수 있습니다. 이러한 고의적 공격을 DNS 캐시 포이즈닝이라고 합니다. 이는 서버 간 DNS 통신에서 발신자 검증 기능이 없는 비상태형 UDP 프로토콜을 사용하기 때문에 발생합니다. 공격자는 위조된 응답 패킷이 정상적인 요청과 맞물리도록 전송 시점을 정교하게 조절하여 캐시 포이즈닝을 수행합니다.
DNSSEC는 암호화 검증을 도입하여 이러한 문제를 완화합니다. 권한 있는 DNS 콘텐츠 서버는 개인 키와 공개적으로 접근 가능한 공개 키로 구성된 암호화 키 쌍을 생성합니다. 쿼리에 응답할 때 서버는 개인 키를 사용하여 DNS 응답에 서명합니다. DNS 캐시 서버는 응답을 수신하면 공개 키를 사용하여 디지털 서명을 검증합니다. 이 과정을 통해 데이터의 무결성과 진위성이 보장되므로 DNS 캐시 포이즈닝 공격을 효과적으로 방지할 수 있습니다.
