DNS(Domain Name System)은 전화번호부가 사람의 이름을 전화번호에 매핑하는 것처럼 도메인을 IP주소에 매핑하는 인터넷 서비스로 웹 브라우저에 입력한 웹 주소(URL)를 통해 웹 서버의 IP 주소를 알아보기 위해 DNS 쿼리가 만들어집니다. 예를 들면 URL www.sample.com을 사용하는 경우 www는 는 host 이름이고 sample.com이 도메인 이름이 되는 것입니다.
■ 동작방식
Recursive Server는 클라이언트 쿼리에 대한 적절한 IP 주소로 응답하기 위해 수 많은 DNS 조회를 수행하는 서버로 일반적으로 ISP(인터넷 서비스 공급업체- KT, kornet, 구글) 업체가 제공해 주는 DNS 서버가 이에 해당이 됩니다. Authoritative Server는 각 회사나 사이트별로 자신의 도메인을 관리하는 DNS 서버로 특정 도메인에 대한 정보를 관리(Zone)하면서 해당 도메인에 대한 쿼리에만 응답해 주는 DNS 서버입니다.
윈도우의 경우는 쿼리에 대한 검색 순서가 로컬 DNS 캐시 → hosts.ics 파일 → hosts 파일 순으로 검색하고 찾기 못하면 설정되어 있는 DNS 서버로 요청하게 됩니다. 리눅스나 유닉스의 경우는 /etc/hosts 파일 → /etc/resolv.conf 파일 순으로 검색하게 됩니다. 참고로 /etc/hosts 파일은 도메인 또는 호스트 이름과 IP 주소를 매핑한 정보를 가지고 있는 파일이고 네임서버로 쿼리하기 전에 먼저 참조됩니다. 그리고 /etc/resolv.conf 파일은 기본 네임서버를 설정한 정보가 저장되어 있는 파일입니다.
※ hosts.ics 파일
인터넷 연결 공유(ICS) 기능을 사용할 경우 클라이언트의 IP 주소를 강제로 지정하는 기능으로 hosts 파일보다 DNS 쿼리에 대한 검색 우선순위가 높습니다.
■ DNS 서버 Query / Response
위 그림은 네임서버로 쿼리를 요청했을 때 응답 패킷에 대한 내용입니다. 일반적으로 응답 데이이터가 512 byte 이하일 경우 53/udp 포트를 사용합니다. 위 그림에서 보면 응답 데이터가 112 byte이기 때문에 53/udp(User Datagram Protocol)로 응답하는 것을 확인할 수 있습니다. 만약에 응답 데이터가 512 byte를 초과하는 경우에는 53/tcp 포트를 사용하게 됩니다. 그 이유는 응답 데이터 전송에 대한 신뢰성이 떨어지기 때문에 신뢰성 있는 전송을 보장하기 위해 53/tcp 포트를 사용하는 것입니다.
DNS 헤더에서 flag 중에 "Truncated" 설정이 되어있다면 53/udp 포트로 응답 데이터를 전송했지만 패킷 사이즈가 512 byte를 초과하여 53/tcp 포트로 재전송을 요청했다는 의미입니다.
■ DNS 쿼리 타입
DNS lookup 명령(nslookup, dig)은 존 파일에 저장된 레코드 타입(쿼리 유형)을 지정하여 쿼리하면 해당 타입으로 응답해 주게 됩니다. 아래 표는 쿼리 유형에 대한 설명입니다.
쿼리 유형 | 설명 |
A (Address) | 도메인의 호스트 이름에 대해 매핑된 IP 주소 (IPv6의 경우 AAA) |
ANY | 도메인에 대한 모드 레코드 쿼리(캐시된 모든 레코드), ANY 유형은 요청 대비 응답 데이터의 크기가 크기 때문에 DNS 증폭 DRDOS 공격에 악용이 될 수 있습니다. |
MX (Mail Exchager) | 도메인 이름을 해당 도메인의 메시지 전송 에이전트(메일 서버) 목록에 매핑합니다. |
NS (Name Server) | Authoritative 서버로 사용하도록 위임합니다. |
SOA (Start Of Authority) | Zone의 기본속성 정보(존 파일의 버전, 존 전송 주기 등) 쿼리 |
TXT (Text) | 도메인에 대한 텍스트 정보 쿼리. TXT 유형은 요청 대비 응답 데이터의 크기가 크기 때문에 DNS 증폭 DRDOS 공격에 악용이 될 수 있습니다. |
CNAME (Canonical name) | 호스트 이름을 다른 이름으로 별칭합니다. |
HINFO (Host Information) | 호스트의 CPU, 운영체제 정보를 확인할 수 있습니다. |
PTR (Pointer) | A 유형의 반대로 IP 주소를 도메인의 호스트 이름으로 매핑합니다. |
AXFR (Authoritative Zone Transfer) | 존 파일 전송 시 존 버전에 상관없이 무조건 존 파일을 전송합니다. 예제) # dig @[Master DNS 서버] [zone 이름] axfr |
IXFR (Incremental Zone Transfer) | 존 파일 전송 시 존 버전을 비교하여 상위 버전일 경우에만 존 파일을 전송합니다. 예제) # dig @[Master DNS 서버] [zone 이름] ixfr=[버전정보] |
nslookup 명령을 사용할 경우 > server [DNS 서버] 지정을 통해 기본 DNS 서버를 지정하여 이용할 수 있고, > set type=[쿼리 타입] 을 통해서는 쿼리 유형을 지정하여 원하는 유형으로 쿼리를 수행할 수도 있습니다.
■ DNS Cache 관련 명령어
윈도우에서 ipconfig /displaydns 명령은 로컬 DNS 캐시 정보를 조회하기 위한 명령어로 TTL(Time to Live)은 해당 캐시 정보를 유지하는 시간을 의미하는 것으로 만료가 되면 해당 정보는 삭제가 됩니다.
C:\Users\MSPARK>ipconfig /displaydns
Windows IP 구성
kubernetes.docker.internal
----------------------------------------
데이터 이름 . . . . . : kubernetes.docker.internal
데이터 유형 . . . . . : 1
TTL(Time To Live) . : 0
데이터 길이 . . . . . : 4
섹션 . . . . . . . : 응답
(호스트) 레코드 . . . : 127.0.0.1
DNS Spoofing 공격의 경우 위 내용의 DNS 캐시 정보를 조작하여 의도하지 않은 주소로 접속하게 만들 수 있습니다. ipconfig /flushdns 명령어로 로컬 DNS 캐시 정보를 삭제할 수 있습니다.
'자격증' 카테고리의 다른 글
정보보안기사(실기) :: DNS 서버 보안 (Bind) (0) | 2022.06.28 |
---|---|
정보보안기사(실기) :: DNS Spoofing 공격과 DNS Cache Poisoning 공격 (0) | 2022.06.24 |
리눅스마스터 1급(실기) :: 데이터 백업 관리 (0) | 2022.06.22 |
정보보안기사(실기) :: 파일 전송 프로토콜, FTP(File Transfer Protocol) (0) | 2022.06.22 |
리눅스마스터 1급(실기) :: 커널과 프로세스 (0) | 2022.06.21 |