Analysis

기본적인 DNS Packet 분석

DarkSoul.Story 2013. 1. 30. 11:22
반응형

 

DNS는 UDP나 TCP를 통해 실행할 수 있으며, TCP를 이용하는 경우는 Zone 전달이나 큰 DNS 쿼리를 보낼 때 이용 하며, 일반적으로 UDP를 이용하는 DNS 쿼리/응답 패킷만 볼 수 있다. DNS 메시지의 형태는 기본적으로 다음과 같이 구성 되어 있으며, 생략되는 경우도 있다.

 

 

 

Header
Question
Answer
Authority
Additional

[그림.1 DNS 메시지 기본 형태]

[그림.1DNS 메시지 기본 형태]에서 제일 위에 있는 Header부분을 살펴 보도록 하자.

 

ID
OR
Opcode
AA
TC
RD
RA
Z
RCODE
QDCOUNT
ANCOUNT
NSCOUNT
ARCOUNT
[그림.2 DNS 헤더 구조]
 
DNS Header는 총 12Byte로 이루어져 있며, 아래 [그림.3]과 [그림.4]는 DNS 표준 Query 와 Query Response 패킷을 와이어샤크(Wireshark)를 이용하여 캡처한 내용이다.
 

 

 

[그림.3 DNS 표준 Query]

 

 

[그림.4 DNS 표준 Query Response]
 
이제 [그림.2]와 [그림.5]를 비교하면서, 각 필드의 내용을 살펴 보자.
 
[그림.5 DNS 헤더 ]
 
1. ID (Transaction ID) 
이 필드는 클라이언트가 보낸 질의와 수신된 응답 간 일치 여부를 식별하며, 16Bit 범위의 숫자로 증가시키면서 사용한다. (Sequence 정도로 생각하면 쉽게 이해될것이다.)
 
2. Flags
이 필드는 쿼리 특성을 정의하는 수많은 필드로 구성되어있으며, [그림.2]의 ID 밑의 8가지가 Flags이다.
 
2-1. OR (Query / Response)
OR은 패킷이 Query(0) / Response(1)를 구별한다.
 
2-2. Opcode  
Query의 유형을 지정하며, Opcode 값은 아래와 같다.
 
 
Opcode
Name
0
Query
1
Inverse Query
2
Status
3
Unassigned
4
Notify
5
Update
6 – 15
Unassigned
     [표.1 Opcode]
 
2-3. AA (Authoritative)
Authoritative Answer 필드는 신뢰할 수 있는 DNS 서버 (공식 DNS 서버)의 응답인지를 표시하며, Response 패킷에만 설정된다.
 
2-4. TC (Truncated)
DNS 응답이 정해진 길이(512Byte)를 초과하여 잘렸는지 표시 하는 필드 이다. 만약, 클라이언트가 잘린 DNS 응답을 보게 되면, TCP를 통해 다시 쿼리를 전송한다. 
 
2-5. RD (Recursion desired)
Query를  보낼 때 재귀적인 Query가 필요한지 여부를 정의한다. 기본적으로 필요(1)로 되어있으며, 불필요 한 경우 0으로 세팅하여 전송하면 된다.
 
2-6. RA (Recursion available)
응답한 DNS 서버가 재귀질의 (RD)를 사용 가능한지를 표시하며, Response시에만 표시된다.
 
2-7. Z 
이 필드는 나중을 위해 예약된 필드로, 항상 0으로 설정되어 있다.
 
2-8. RCODE (Reply code)
이 필드는 응답에서 오류가 존재하는지를 표시하며, 주요 RCODE 값은 다음과 같다.
 
Number
Name Description
0 NoError
오류 없음
1
FormErr
형식 오류 (쿼리가 잘못된 경우)
2
ServFai
서버 실패 (DNS 서버 자체의 문제로 실패)
3
NXDomain
네임 오류 (도메인 네임이 존재하지 않는 경우)
4
NotImp
DNS 서버가 Query 지원하지 못함
5
Refused
거부 (정책적인 이유로 Query 거절함)
[표.2 주요 RCODE 값]
 
더 많은 RCODE 값을 확인하고 싶다면, http://www.iana.org/assignments/dns-parameters 접속하여, RCODE 부분을 살펴 보기 바란다.
 
3. QDCount (Questions)
Questions Section의 개수를 표시한다. 일반적으로 Query 패킷당 하나의 Question을 볼 수 있다.
 
4. ANCount (Answer RRs : Answer Resource Record)
Answers Section의 개수를 표시한다.
 
5. NSCount (Authority RRs : Authority Resource Record)
Authority Section의 개수를 표시한다.
 
6. ARCount (Additional RRs : Additional Resource Record)
 Additional Section의 개수를 표시한다.
 
다음은 Question(Queries) Section에 대해 알아 보자.
 
Question Section은 가변 길이 필드로 DNS Query 이름을 정의하며, 다음과 같은 구조로 되어 있다.
 
 
Name
Type
Class
[그림.6 Question Section 구조]
 
 

 

[그림.7 실제 패킷 내용]
 
 
1. Name
이 필드는 가변적으로 호스트 네임이 들어간다. 형식은 호스트 네임의 영문자를 헥사코드로 변경할 때 구분하기 위해 숫자로 구분 문자를 넣는다. 예를 들어 weather.naver.com의 경우 07

weather05naver03com00으로 표시가 된다. (구분하기 쉽게 영문자는 헥사코드로 변경하지 않았다.) 아래 [그림.8]을 보면 이해하기 쉬울것이다.

 

 

[그림.8 영문자 헥사 코드 변환 시 숫자 구분 문자]
 
2. Type
이 필드는 Query의 유형을 정의하며, 간단하게 몇가지만 알아보면 다음과 같다.
 
Type
Value and Meaning
A
Host Address
NS
Authoritative Name Server
MX
Mail Exchange
HINFO
Host Information
PTR
Domain Name Pointer

[표.3 Type 값] 


 

전체 Type 목록은 http://www.iana.org/assignments/dns-parameters에 접속하
여, Resource Record (RR) TYPEs 부분을 참조하기 바란다.
 
3. Class
네트워크 클래스 타입을 표시 하며, 주요 클래스는 다음과 같다.
 
Class
Name
IN
Internet Class
CS
CSnet Class
CH
Chaos Class
HS
HeSiod Class
[표.4 주요 Class]
 
일반적으로 IN 클래스를 사용한다.
 
마지막으로, Query에 대한 응답 Section인 Answer, Authority, Additional Section에 대해 알아보자.
 
Answer은 일반적인 경우이며, Authority은 Query된 도메인의 DNS 서버가 직접 응답해 주는 경우 표시된다., Additional은 추가적으로 다른 DNS 서버에서 응답이 왔을 경우 표시가 된다.
 
Answer, Authority, Additional Section의 구조는 모두 동일하며, 다음과 같다.
 
Name
Type
Class
TTL
RDLength
Rdata
[그림.7 응답 구조]
 

 

 

[그림.8 실제 패킷 내용]
 
Name, Type, Class 필드는 Question Section과 동일 하다.
이제 Question Section과 다른 필드인 TTL, RDLength, Rdata 필드에 대해 알아보자.
 
1. TTL (Time to live)
이 필드는 DNS 응답에 사용된 데이터를 DNS 서버가 캐싱 정보로 유지하는지를 나타낸다.
 
2. RDLength (Data length)
이 필드는 이름에서 알 수 있듯이 Rdata의 길이 이다.
 
3. Rdata
이 필드는 해당 리소스에 대해 실제 정보를 담고 있다. Type과 Class에 의해 변하는 가변 길이를 가진다.
 
보너스!!!
 
DNS의 가장 일반적인 문제는 DNS 서버의 DB에 이름이 존재 하지 않아 오류가 발생하는 것이다. 즉, 잘못된 이름을 입력하거나 인터넷 네임 서버를 통해 아직 제공되지 않는 새로운 이름으로 브라우징을 시도 할 경우 발생 한다.

예를 들어 사용자가 DNS 서버에 등록되지 않은 www.abc.gov라고 브라우징을 시도 하였을 경우, DNS 서버 응답은 아래와 같이 이름이 없다고 표시한다. 

 

 

참고
 
 

 

반응형

'Analysis' 카테고리의 다른 글

기본적인 TCP Packet 분석  (0) 2013.01.30
기본적인 DHCP Packet 분석  (0) 2013.01.30
기본적인 UDP Packet 분석  (0) 2013.01.30
기본적인 ICMP Packet 분석  (0) 2013.01.30
기본적인 ARP Packet 분석  (0) 2013.01.30