* DNS (Domain Name Service) : 도메인, 호스트 이름을 IP 주소로 해석해 주는 TCP/IP 네트워크 서비스
- DNS 용어 정리
DNS 용어 정리 | 내용 |
Recursive/Cache 네임서버/DNS 서버 |
* 재귀적(동일 작업을, 조건이 만족될 때까지 반복적으로 처리) DNS 서버 - 관리하는/위임받은 도메인 없이, 사용자 호스트로부터 질의가 들어올 시, 자신의 캐시에 저장된 정보 또는 반복적 질의(Iterative Query)를 통해, 그 결과를 응답 * 통상 ISP 업체가 제공해주는 DNS 서버가 해당 ex) KT : kns.kornet.net/168.126.63.1) 등 |
Authoritative 네임서버/DNS 서버 |
* 관리하는/위임받은 도메인을 가진 네임서버로, 특정 도메인의 정보(Zone File)를 관리하며, 해당 도메인에 대한 질의에만 응답 * Zone : 관리하는 도메인 영역 * Zone File : 관리 도메인에 대한 정보를 담고 있는 파일 * 통상 각 회사/사이트 별 자신의 도메인을 관리하는 DNS 서버가 해당 ex) Google : ns1.google.com/216.239.32.10) |
Recursive Query | * 사용자 호스트가 Recursive DNS 서버로 질의 할 시, 사용되는 방식 - 대상 도메인의 리소스 레코드 정보를 조회해서, 응답해 달라는 질의 * Recursive DNS가 자신의 캐시 데이터에 요청 도메인 정보가 있으면, 정보를 반환, 없을 시에는 최상위 Root 네임서버부터, 순차적으로 Iterative Query를 수행하여 결과를 반환 |
Iterative Query | * Recursive DNS Server가 도메인을 관리하는 각각의 Authritative DNS Server로 질의할 때 사용하는 순차적 반복질의 |
DNS 질의 순서 | * DNS에는 질의 우선순위가 있으며, 운영체제별로 질의하는 파일의 종류도 다름 * Windows - 로컬 DNS 캐시 -> hosts.ics 파일 -> hosts 파일 hosts.ics(Internet Connection Sharing) 파일 : 윈도우에서 인터넷 연결 공유 기능 사용시, 클라이언트 IP를 강제로 지정하는 기능을 가진 설정 파일로 악성코드에 의한 조작을 통해 파밍 사이트로 접속을 유도할 수 있어, 주의가 요구되는 파일 * Unix/Linux - /etc/resolv.conf : 시스템 기본 DNS 설정 정보를 포함한 파일 - /etc/hosts : 도메인/호스트명과 IP 주소 매핑 정보를 담은 파일 hosts 파일 : Unix/Linux, Windows 모두 존재하는 DNS 설정 파일 - /etc/host.conf : DNS 질의 순서를 지정하는 파일로, order절에 명시된 순서로 질의를 수행 |
* DNS 질의/응답 패킷 특성
- 응답 Data 크기(Packet Length)가 512byte 이하인 일반적 경우, UDP 53 Port를 사용하나, 이를 초과할 시, DNS Header Flags 중 Truncated가 설정(1로 활성화)되어 TCP 53 Port를 사용
* DNS Cache 관련 명령어
1) ipconfig /displaydns : 로컬 DNS 캐시 정보 조회
- TTL : 해당 캐시 정보를 유지하는 시간(초 단위)로, TTL 만료 시, 해당 정보는 삭제됨
- 스니핑 기반의 DNS 스푸핑 공격을 당할 시, 조작된 주소 정보를 위 명령을 통해 확인 가능
2) ipconfig /flushdns : 로컬 DNS 캐시 정보 삭제
* DNS Lookup : Forward(순방향 : 도메인 명을 통해 IP 주소를 알아냄)/Reverse(역방향 : IP주소를 통해 도메인 명을 알아냄) 2가지 타입의 DNS lookup이 존재
1) DNS 질의 유형(Zone file에 저장된 각각의 레코드 타입을 의미)에 대한 이해가 필요
DNS 질의 유형 | 설명 |
A (Address) |
* 도메인에 대한 IPv4 주소 질의 (A record 질의) |
AAAA | * 도메인에 대한 IPv6 주소 질의 |
ANY | * 도메인에 대한 모든 Record 질의 - 요청 대비 응답이 크기 때문에 DNS 증폭(DRDoS) 공격에 악용 |
MX (Mail Exchanger) |
* 도메인의 메일서버 질의 (MX Record 질의) |
NS (Name Server) |
* 도메인의 네임서버 질의 (NS Record 질의) |
SOA (Start Of Authority) |
* Zone의 시작을 표현하는 Record로, Zone 기본 속성 정보(존 파일 버전, 존 전송 주기 등) 질의 (SOA Record 질의) |
TXT (Text) |
* 도메인에 대한 텍스트 정보 질의 (TXT Record 질의) - SPF (발송자 메일서버 인증) 레코드 : 요청 대비 응답이 커서 DNS 증폭(DRDoS) 공격에 악용 - DKIM을 사용하여 디지털 이메일 서명 추가 - DMARC를 사용하여 발신 스팸 방지 |
HINFO (Host Information) |
* 호스트의 CPU, OS 정보 |
CNAME (Canonical Name) |
* 호스트의 별명 (Alias) |
PTR (Pointer) |
* IP에 대한 도메인 정보 질의 (A 유형의 반대) - Reverse Zone file에 설정된 PTR Record를 질의함 |
AXFR (Authoritative Zone Transfer) |
* Zone 버전에 상관없이 무조건 Zone 전송 요청 (Full Zone Transfer) * 형식 : dig @"마스터 네임서버주소" "zone name" axfr ex) dig @192.168.10.100 test.com axfr |
IXFR (Incremental Zone Transfer) |
* Zone 버전을 비교하여, 상위 버전일 경우에만 존 전송 요청 (Incremental Zone Transfer) * 형식 : dig @"마스터 네임서버 주소" "zone name" ixfr=버전정보 ex) dig @192.168.10.100 test.com ixfr=2021050701 |
2) nslookup 명령어 : 명령 실행 후 대화형 모드로 질의
- ex) nslookup [도메인] [네임서버]
- >set type=쿼리유형 을 통해, 질의 유형을 지정할 수 있음(지정하지 않을 시 Default로 A record 질의)
3) dig 명령어 : nslookup을 대체하기 위해 만든 명령어로, Unix/Linux 계열 OS에 기본적으로 설치되어 있음
- ex) dig [@네임서버] 도메인 [쿼리유형] [쿼리옵션]
- Question Section : 질의한 내용이 출력되며, 질의 유형을 명시하지 않을 시, Default로 A record 조회
- ANSWER Section : 질의에 대한 응답이 출력
4) whois 명령어 : whois 서버를 통하여, 해당 도메인의 등록 정보(소유정보), 네트워크 할당 정보 등을 조회
- whois 도메인 명 : 해당 도메인의 등록정보/소유정보, 네임서버 정보 등을 조회
- whois IP 주소 : 해당 주소의 네트워크 대역을 관리하는 대행자(ISP) 정보, 네트워크 할당 정보 등을 확인 가능
* DNS 관련 공격 유형
1) DNS Spoofing Attack : 공격 대상에게 전달되는 DNS 응답(IP 주소)을 조작하거나, DNS 서버의 캐시 정보를 조작하여, 의도하지 않은 주소로 접속하게 만드는 공격으로, DNS 질의/응답에 사용하는 UDP Protocol의 비연결 특성을 악용하여 질의/응답 식별을 위한 Transaction ID, Source/Destination IP, Port만 일치하면 먼저 수신한 응답을 신뢰하고, 이후에 응답을 모두 폐기하는 특성을 이용
- 유형에 따라 스니핑 기반/DNS Cache Poisoning 으로 분류
1-1) Sniffing 기반 DNS Spoofing Attack : 정상 응답보다 공격자가 더 빠르게 DNS 응답을 보내, 조작된 주소로 접속하게 만드는 공격 기법 (이후에 도달하는 정상 응답은 폐기됨)
- 대응 방안 : Sniffing을 사전에 탐지 및 차단하고, 중요 사이트의 IP는 DNS 질의보다 우선순위가 높은 hosts 파일에 등록하여 관리하도록 함
1-2) DNS Cache Poisoning Attack : DNS 서버 자체를 공격하여, 캐시 정보를 조작하여, 일정시간(TTL)동안 해당 서버에 접근하는 다수 사용자들이 조작된 DNS 응답을 수신하여, 대규모 보안 사고를 유발할 수 있는 공격
- 공격자가 공격 대상의 DNS 서버에 조작할 DNS Query를 다수 발생시키는 동안, 다수의 DNS 응답(스니핑이 불가능 할 시, 랜덤한 Transaction ID와 목적지 Port)을 보내 그 중, 정상 응답보다 먼저 일치하는 응답이 있다면, 조작된 주소 정보가 Target DNS Server의 Cache에 저장됨
* Birthday Attack : Birthday Paradox(예상치 보다, 실제 확률이 뜻밖에 높다는 이론)에 기반하여, DNS CachePoisoning에서는, 2byte로 총 65536개의 값을 가질 수 있는 Transaction ID를 랜덤하게 적용하여 맞출 확률이 높기 떄문에, 현실적으로 가능한 공격
Cache Poisoning 대응 방안 | 내용 |
DNS Software 버전 패치 | * 최신 버전으로 패치하여 알려진 취약점에 의한 공격을 방지 |
Iterative Query 불허용 | * 도메인 관리용(Authoritative) DNS Server는 재귀적 질의를 허용하지 않도록 설정, 굳이 필요하다면, 사용자를 제한 |
DNSSEC | * DNS Security Extensions - 데이터 위/변조에 취약한 DNS 문제를 근본적으로 개선하기 위해, 기존 DNS를 대체하지 않고, 수신자가 공개키 암호화로 검증하는 기능을 제공하여, DNS 신뢰성 인증, 송수신 데이터 무결성을 보장하는 프로토콜 |
* Bind DNS 보안
1) Master/Slave DNS : DNS Server는 Zone Data 관리에 Master에 있는 Zone Data를 Slave가 동기화하는 Zone Transfer를 수행(53/TCP)하며, 사용자가 1, 2차 DNS 서버를 설정 하여 DNS 질의 시, Resolver(DNS로 질의한 결과를 응용 프로그램에 반환해주는 소프트웨어 모듈/라이브러리) 사용에 있어서 동일 기능/부하 분산을 통하여 안정성을 높이는 역할을 수행
2) Zone File : 네임서버 설정 파일(named.conf)에서 Zone 설정을 수행
Zone 설정 파일 구성 (위 이미지 기준 예시) |
내용 |
type | * 네임서버의 master/slave 구분을 지정 |
file | * 관리하는 도메인의 리소스 레코드 정보를 담은 Zone File 명 지정 - 위 이미지 예시에서는, localhost 및 0.0.127.in-addr.arpa의 Zone file 들 확인 가능 |
xx.xx.xx.in-addr.arp | * IP에 대한 도메인명을 질의하는 Reverse Domain 명 지칭 - 리버스 도메인은 IP주소를 역순으로 정렬하여 in-addr.arpa 도메인의 하위 도메인으로 구성함 * Reverse 도메인에 대한 존 파일은 Reverse Zone File이라고 지칭함 |
options의 Directory | * Zone 파일이 위치한 경로를 나타냄 |
- Zone File은 도메인 데이터베이스 파일로, 네임서버 기동 시, 해당 존 파일을 읽어 들여 존 데이터를 구성함
(아래는 Zone File Resource Record 형식)
* 레코드 형식(순차적 나열) | 설명 |
host_name | * 등록할 호스트명을 지정 ex) www, ns1, ns2, mx1 등 |
TTL | * 레코드의 TTL값을 지정 (미 지정시, Default 값(첫 행의 $TTL 만큼 적용 받음) |
class | * 인터넷 클래스를 의미하는 부분 ex) IN은 인터넷 클래스를 의미 |
record_type | * 레코드의 유형을 지정 ex) A record, MX record 등 |
data | * 레코드 유형에 따른 데이터를 설정 |
- Reverse Zone File의 경우 Record_type을 PTR로 지정하고, data를 IP 대신 도메인 명을 할당
3) 기능 제한 : recursive Query 기능에 대한 접근 제어 및 Zone Transfer 제한
named.conf 옵션 설정 | 설명 |
재귀적 질의 제한 | * Recursive Query 악용 방지를 위한 접근제어 적용 (기본 설정은 모든 IP의 재귀적 질의 허용) - 재귀적 질의 불허 : options 설정 내에 recursion no; 설정 - options 설정 내 allow-recursion 설정으로, 특정 IP 또는 대역 명시로 제한적 질의 허용 ex) allow-recursion {127.0.0.1;192.168.10.0/24}; 및 allow-recursion {internal;}; 설정 후 options 외부에 acl internal { 127.0.0.1; 192.168.10.0/24}; 설정 - Recursive Query에 대한 불허 또는 ACL deny에 해당하는 IP의 경우, nslookup으로 IP또는 Domain을 조회 하더라도, Can't find가 반환되어 질의가 제한됨 |
Zone Transfer 제한 | * Zone 전송 지속 요청을 통한 서비스 거부와 Zone 내 저장된 도메인 정보 노출 방지를 위함 - 존 전송 불허 : options 설정 내에 allow-transfer {none;}; 으로 설정 - 특정 Slave IP에 대한 Zone 전송을 허용할 경우 ex) allow-transfer {192.168.10.1;}; - 존 전송을 불허 할 시, axfr/ixfr 질의를 하여도 Zone 파일 정보가 출력되지 않고, Transfer failed가 확인됨 |
* DNS 취약점 특성
DNS 취약점 측면 | 내용 |
프로토콜 측면 특성 |
- UDP 특성 상 출발지 IP 변조 용이 - 외부에 노출되는 인터페이스 - 운영하는 DNS 변경 불가 - 53 Port Flooding |
서버 취약점 측면 특성 |
- 처리 가능한 쿼리 수 한정적 - DDoS 공격 목표 - 단일 실패 지점으로 작용 (SPoF - Single Point of Failure) - 정상과 비정상에 대한 구분 불가 |
'Information Security > Hacking' 카테고리의 다른 글
Tamper Proofing (0) | 2021.01.07 |
---|---|
Honey pot (0) | 2021.01.07 |
DoS & DDoS (Destributed Denial of Service) (0) | 2020.12.27 |
SQL Injection (0) | 2020.12.27 |
CSRF (Cross-Site Request Forgery) (0) | 2020.12.27 |