본문 바로가기

Information Security/Hacking

DNS 보안

반응형

* DNS (Domain Name Service) : 도메인, 호스트 이름을 IP 주소로 해석해 주는 TCP/IP 네트워크 서비스

DNS 동작 방식

- 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 [도메인] [네임서버]

nslookup 명령어 예시

- >set type=쿼리유형 을 통해, 질의 유형을 지정할 수 있음(지정하지 않을 시 Default로 A record 질의)


3) dig 명령어 : nslookup을 대체하기 위해 만든 명령어로, Unix/Linux 계열 OS에 기본적으로 설치되어 있음

- ex) dig [@네임서버] 도메인 [쿼리유형] [쿼리옵션]

dig 명령어 예시

- Question Section : 질의한 내용이 출력되며, 질의 유형을 명시하지 않을 시, Default로 A record 조회

- ANSWER Section : 질의에 대한 응답이 출력


4) whois 명령어 : 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 기반 DNS Spoofing

- 대응 방안 : Sniffing을 사전에 탐지 및 차단하고, 중요 사이트의 IP는 DNS 질의보다 우선순위가 높은 hosts 파일에 등록하여 관리하도록 함


1-2) DNS Cache Poisoning Attack : DNS 서버 자체를 공격하여, 캐시 정보를 조작하여, 일정시간(TTL)동안 해당 서버에 접근하는 다수 사용자들이 조작된 DNS 응답을 수신하여, 대규모 보안 사고를 유발할 수 있는 공격

DNS Cache Poisoning Attack

- 공격자가 공격 대상의 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로 질의한 결과를 응용 프로그램에 반환해주는 소프트웨어 모듈/라이브러리) 사용에 있어서 동일 기능/부하 분산을 통하여 안정성을 높이는 역할을 수행

Master/Slave DNS Server 구성


2) Zone File : 네임서버 설정 파일(named.conf)에서 Zone 설정을 수행

/etc/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 파일 내부 구성(정방향)

- 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 * 레코드 유형에 따른 데이터를 설정

Zone 파일 내부 구성(역방향)

- Reverse Zone File의 경우 Record_type을 PTR로 지정하고, data를 IP 대신 도메인 명을 할당


3) 기능 제한 : recursive Query 기능에 대한 접근 제어Zone Transfer 제한

named.conf 파일의 기능 제한 옵션

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