DNS(Domain Name System)
인터넷에서 도메인 이름을 IP 주소로 변환하는 분산형 데이터베이스 시스템이다.
인터넷 전화전화부로 비유되며 특정 컴퓨터 (또는 네트워크로 연결된 임의의 장치) 의 주소를 찾기 위해, 사람이 이해하기 쉬운 호스트 이름 (예: <www.example.com>) 을 실제 네트워크 상에서 사용하는 IP 주소 (예: 192.168.1.1) 로 변환하고 해당 IP 주소로 접속하는 일련의 시스템을 DNS(Domain Name System) 이라고 한다.
DNS 는 전세계적으로 약속된 규칙을 공유한다.
웹 브라우저는 DNS 확인이 막후에서 발생하며 최초의 사용자 요청 외에 사용자 컴퓨터와의 추가적인 대화는 필요하지 않다.
역할과 기능
- 도메인 이름을 IP 주소로 변환 (정방향 조회)
- IP 주소를 도메인 이름으로 변환 (역방향 조회)
- 이메일 라우팅을 위한 메일 서버 정보 제공
- 도메인에 대한 서비스 정보 제공
특징
- 계층적 구조로 분산 관리
- 캐싱을 통한 빠른 응답 제공
- 전 세계적으로 표준화된 시스템
DNS 조회는 어떻게 작동하는가?
- 사용자 요청:
- 사용자가 브라우저에 도메인 이름 (예: www.example.com/) 입력한다.
- 로컬 DNS 캐시 확인:
- 브라우저는 먼저 로컬 캐시를 확인하여 이미 저장된 IP 주소가 있는지 확인한다.
- 특정 DNS 서버가 관여하지 않는다.
- 재귀적 DNS 리졸버:
- 로컬 캐시에 IP 주소가 없으면, 요청은 재귀적 DNS 리졸버로 전달된다.
- 일반적으로 ISP 에서 제공하며, DNS 조회 과정을 대신 수행한다
- 루트 네임서버 쿼리:
- 리졸버는 먼저 루트 네임서버에 쿼리를 보낸다.
- 루트 서버는 최상위 도메인 (TLD) 서버의 위치를 알려준다.
- TLD 네임서버 쿼리:
- 리졸버는 TLD 서버 (.com,.org 등) 에 쿼리를 보내 해당 도메인의 권한 있는 네임서버의 위치를 확인한다.
- 권한 있는 네임서버 쿼리:
- 마지막으로, 리졸버는 권한 있는 네임서버에 쿼리를 보내 최종적으로 도메인에 대한 정확한 IP 주소를 얻는다.
- 이는 도메인 등록 기관이나 호스팅 제공업체의 DNS 서버이다.
- 응답 및 캐싱:
- 리졸버는 얻은 IP 주소를 사용자의 브라우저에 반환하고, 향후 요청을 위해 이 정보를 캐시에 저장한다.
DNS 서버 유형
- 웹페이지 로드와 관련된 DNS 서버
DNS Recursive Resolver(DNS 재귀적 리졸버)
- 별칭: DNS 리커서, 캐싱 네임 서버
- 역할: 클라이언트의 DNS 쿼리를 받아 처리하는 첫 번째 중간자.
- 기능:
- 클라이언트의 요청을 받아 다른 DNS 서버에 추가 쿼리를 보내 응답을 얻음.
- 얻은 정보를 캐시하여 향후 쿼리 처리 속도를 높임.
- 관리 주체: 인터넷 서비스 공급자 (ISP), 대기업, 또는 타사 DNS 서비스 공급자가 운영한다.
DNS Root Nameserver(루트 이름 서버)
- 역할: DNS 계층 구조의 최상위에 위치하며, 전 세계적으로 13 개의 DNS Root Nameserver(루트 이름 서버) 가 있으나 수백 개의 미러 서버가 운영되고 있다.
- 기능:
- TLD 네임서버의 IP 주소 정보를 제공한다.
- DNS 리졸버의 쿼리 해결 과정의 시작점.
DNS TLD Nameserver (TLD 이름 서버)
- 역할: 특정 TLD (.com,.org,.net 등) 에 대한 정보를 관리
- 기능:
- 해당 TLD 내의 권한있는 네임 서버 정보를 제공.
- 예:.com TLD 서버는 example.com 의 권한 있는 네임서버 정보를 제공
- 관리: ICANN 이 관리하며, 각 TLD 별로 다른 조직에 위임.
Authoritative Nameserver (권한 있는 이름 서버)
- 역할: 특정 도메인에 대한 최종적이고 공식적인 DNS 정보를 제공.
- 유형:
- Primary (마스터) 서버: 도메인의 원본 레코드를 유지 관리
- Secondary (슬레이브) 서버: Primary 서버의 데이터를 복제하여 로드 분산과 중복성 제공
- 기능:
- 도메인의 A, AAAA, MX, CNAME 등 모든 DNS 레코드 정보를 저장 및 제공
- 도메인 소유자가 직접 관리하거나 DNS 호스팅 서비스를 통해 관리됨
Local DNS 캐시
- 사용자의 개별 컴퓨터나 디바이스에 임시로 저장되는 DNS 조회 결과 모음.
- 목적:
- DNS 쿼리의 응답 시간을 단축시켜 웹 브라우징의 속도를 향상시킨다.
- 네트워크 트래픽을 줄여 대역폭을 절약한다.
- DNS 서버의 부하를 감소시킨다.
- 작동 방식:
- 사용자가 웹 사이트에 처음 접속할 때, OS 는 DNS 조회 결과를 로컬 캐시에 저장한다.
- 이후 같은 도메인에 접속할 때, OS 는 로컬 캐시를 확인한다.
- 캐시에 정보가 있으면 즉시 사용하고, 없으면 일반적인 DNS 조회 과정을 시작한다.
- 저장 위치:
- Windows: DNS Client 서비스에 의해 관리된다.
- macOS / Linux: nscd (Name Service Cache Daemon) 또는 시스템 수준의 캐시 메커니즘에 의해 관리된다.
- TTL (Time To Live):
- 각 DNS 레코드는 TTL 값을 가지며, 이는 캐시에 해당 정보를 얼마나 오래 보관할지 결정한다.
- TTL 이 만료되면 해당 정보는 캐시에서 제거되고, 다음 요청시 새로운 DNS 조회가 수행된다.
- 장점:
- 빠른 웹 페이지 로딩
- 네트워크 효율성
- 오프라인 상태에서도 이전에 방문한 사이트의 IP 주소 제공 가능
- 단점:
- 오래된 정보를 제공할 수 있다. (특히 TTL 이 긴 경우)
- DNS 변경사항이 즉시 반영되지 않을 수 있음.
- 주의 사항:
- DNS 캐시 중독: 악의적인 공격자가 캐시를 조작하여 사용자를 가짜 웹사이트로 유도할 수 있다.
- 오래된 정보: 웹사이트의 IP 주소가 변경되었을 때 캐시된 정보가 최신 상태가 아닐 수 있다.
DNS 보안 위협 및 보호 기술
DNS 보안 위협
DNS 스푸핑 (DNS Spoofing)
- 정의: 공격자가 DNS 응답을 가로채고 조작하여 사용자를 의도하지 않은 사이트로 유도하는 공격.
- 특징:
- 중간자 공격의 일종.
- 사용자가 정상적인 웹사이트에 접속하고 있다고 믿게 만듦.
- 피싱이나 악성코드 배포에 주로 사용됨.
DNS 캐시 포이즈닝 (DNS Cache Poisoning)
- 정의: DNS 리졸버의 캐시에 거짓 정보를 삽입하는 공격.
- 특징:
- DNS 리졸버가 잘못된 IP 주소를 캐시에 저장하게 됨.
- 공격 효과가 캐시 TTL 동안 지속됨.
- 다수의 사용자에게 영향을 미칠 수 있음.
DNS 하이재킹 (DNS Hijacking)
- 정의: DNS 설정을 변경하여 트래픽을 공격자가 제어하는 서버로 리디렉션 (Redirection) 하는 공격.
- 특징:
- DNS 서버 자체를 대상으로 하는 경우가 많음.
- 사용자 디바이스의 DNS 설정을 변경하기도 함.
- 광범위한 영향을 미칠 수 있음.
DNS 증폭 공격 (DNS Amplification Attack)
- 정의: DNS 서버를 이용해 대량의 트래픽을 생성하여 대상 시스템을 마비시키는 DDos 공격.
- 특징:
- 작은 쿼리로 큰 응답을 유발하여 트래픽을 증폭시킴.
- 공개 DNS 리졸버를 악용함.
- 네트워크 대역폭을 소진시켜 서비스 중단을 유발.
DNS 터널링 (DNS Tunneling)
- 정의: DNS 프로토콜을 악용하여 다른 프로토콜의 데이터를 DNS 쿼리와 응답에 숨겨 전송하는 기술
- 특징:
- 방화벽 우회, 데이터 유출 등에 사용될 수 있음.
- 정상적인 DNS 트래픽으로 위장하여 탐지가 어려움.
- 네트워크 성능 저하를 유발할 수 있음.
DNS 보호 기술
DNSSEC (Domain Name System Security Extensions)
- 정의: DNS 응답의 무결성과 출처를 암호화 방식으로 검증하는 보장 확장 기술.
- 특징:
- 디지털 서명을 사용하여 DNS 데이터의 신뢰성 보장.
- DNS 스푸핑과 DNS 캐시 포이즈닝 공격 방지.
- 점진적으로 도입 가능하나, 전체 DNS 체인의 참여가 필요함.
DNS over HTTPS (DoH)
- 정의: DNS 쿼리를 HTTPS 프로토콜을 통해 암호화하여 전송하는 기술
- 특징:
- DNS 쿼리의 프라이버시 보호.
- 중간자 공격 방지.
- 기존 방화벽 정책과 충돌할 수 있음.
DNS over TLS (DoT)
- 정의: DNS 쿼리를 TLS 프로토콜을 통해 암호화하여 전송하는 기술.
- 특징:
- DNS 쿼리의 기밀성 보장.
- 전용 포트 (853) 를 사용하여 트래픽 식별이 용이.
- DoH 에 비해 네트워크 관리가 쉬움.
DANE (DNS-based Authentication of Named Entities)
- 정의: DNS 를 사용하여 TLS 인증서의 유효성을 검증하는 기술
- 특징:
- DNSSEC 과 연계하여 사용.
- 인증기관 (CA) 의존도 감소.
- 자체 서명 인증서의 안전한 사용 가능.
RPZ (Response POLICY Zones)
- 정의: DNS 서버 레벨에서 악성 도메인에 대한 접근을 차단하는 기술.
- 특징:
- 중앙 집중식 보안 정책 적용 가능.
- 실시간 업데이트 지원.
- 유연한 정책 설정 가능 (차단, 리다이렉션 등)
참고 및 출처
DNS
도메인 네임 시스템
DNS란? (도메인 네임 시스템 개념부터 작동 방식까지)
DNS(Domain Name System)란?
DNS란 뭐고, 네임서버란 뭔지 개념정리
루트 네임 서버
개발자가 알아야할 DNS 동작
도메인 이름 시스템(DNS)이란 무엇인가요?
DNS 레코드
TLD
최상위 도메인 (top-level domain, TLD)
최상위 도메인이란?
3. DNS 레코드 타입
DNS 서버는 다양한 유형의 레코드를 저장합니다. 각 레코드 타입은 서로 다른 종류의 정보를 제공합니다. API 개발자가 알아야 할 주요 DNS 레코드 타입은 다음과 같습니다:
3.1 A 레코드 (Address)
도메인 이름을 IPv4 주소에 매핑합니다. 이는 가장 기본적인 DNS 레코드 타입입니다.
|
|
3.2 AAAA 레코드 (IPv6 Address)
도메인 이름을 IPv6 주소에 매핑합니다. IPv6는 더 많은 주소 공간을 제공하는 새로운 IP 주소 체계입니다.
|
|
3.3 CNAME 레코드 (Canonical Name)
도메인 이름의 별칭을 생성합니다. 한 도메인이 다른 도메인을 가리키게 합니다. 마이크로서비스 아키텍처에서 특히 유용합니다.
|
|
3.4 MX 레코드 (Mail Exchange)
이메일을 처리하는 서버를 지정합니다. API 자체와는 직접적인 관련이 없지만, API를 통한 이메일 서비스 통합에 중요합니다.
|
|
3.5 TXT 레코드 (Text)
도메인에 대한 텍스트 정보를 저장합니다. SPF, DKIM과 같은 이메일 인증이나 도메인 소유권 확인에 사용됩니다.
|
|
3.6 SRV 레코드 (Service)
특정 서비스를 제공하는 서버를 지정합니다. 포트 번호와 프로토콜 정보를 포함합니다. 마이크로서비스 검색에 유용합니다.
|
|
3.7 PTR 레코드 (Pointer)
IP 주소를 도메인 이름으로 역변환합니다. 역방향 DNS 조회에 사용됩니다.
|
|
3.8 CAA 레코드 (Certification Authority Authorization)
도메인에 대한 SSL/TLS 인증서를 발급할 수 있는 인증 기관을 지정합니다. API 보안에 중요합니다.
|
|