Network

[ Network ] DNS 패킷 분석 (Wireshark)

jogaknabi_1023 2024. 3. 16. 21:01

 

Wireshark를 통해 DNS 패킷을 분석해보겠다.

맥북에 wireshark 설치하고 시작하려고 하니 오류부터 뜨는데 쫄지말고 OK 누르고 해결방법 찾으면 된다.

권한 문제니까 빠르게 권한 주고 시작하자.

 

wireshark에서 패킷을 분석할 수 있게끔 권한 설정 필요

 

sudo chown <사용자 이름> /dev/bpf*

 

Wireshark로 DNS 패킷 분석

현재 와이파이에 연결되어 있는 내 IP 주소: 192.168.0.253

패킷 필터링을 사용하여 dns 포트번호인 53 포트를 필터링하였다. (udp.port==53)

 

이처럼 wireshark를 이용해 DNS 쿼리 패킷 확인할 수 있다.

 

패킷 캡처를 시작하고 크롬에 접속해보았다.

한번의 요청과 응답이 왔다고 생각했지만 여러 패킷을 주고받은 것을 확인할 수 있었음.

 

첫 번째 패킷: 호스트 "lh3.google.com"의 IPv4 주소를 얻기 위한 DNS A 레코드 조회

두 번째 패킷: 호스트 "lh3.google.com"에 대한 HTTPS 연결을 설정하기 위해 DNS의 AAAA 레코드(또는 A 레코드)를 조회
                     
AAAA 레코드는 도메인 이름에 대한 IPv6 주소를 제공하는 데 사용

세 번째 패킷: 첫 번째 요청 패킷에 대한 응답

네 번째 패킷: 두 번째 요청 패킷에 대한 응답

 

 

DNS 요청 패킷 ( =DNS 쿼리 패킷 )

내 mac PC -> DNS 서버로 쿼리 날린 요청 패킷

 

IPv4를 사용하여 클라이언트(192.168.0.253)이 DNS 서버(61.41.153.2)로 쿼리를 보낸 것을 확인할 수 있다.

UDP 프로토콜을 사용하고 클라이언트는 임의의 포트(63160)를 사용하고 목적지엔 DNS 포트인 53을 사용한 것을 알 수 있다.

  • Transaction ID
    DNS 쿼리와 응답에 연관된다. 이 필드에서는 DNS에 관련된 모든 것을 보기 위한 값을 필터링할 수 있다. 필터링은 dns.id이다.
  • Flags
    - Response: 패킷이 요청하는 패킷(0)인지 응답하는 패킷(1)인지 표시하는 비트
                          해당 비트에 대한 필터링 방법: dns.flags.response == 1 또는 dns.flags.response == 0
    - Opcode: 쿼리의 유형을 지정

    - Truncation: 응답이 길어서 잘렸는지에 대해 알려주는 비트. 거의 잘리는 경우가 없어서 0이다.

    - Recurison Desired: 재귀를 사용하는지 안사용하는지를 알려주는 비트. 대부분은 DNS는 재귀 쿼리를 사용한다.

    - Reseved: 예약된 비트. 0으로 설정되어 있다.
  • Questions: 몇 개의 질문인지 질문의 갯수를 표시한다. 보통 한 패킷당 한개의 질문을 가진다.
  • Queries Section
    - Name: DNS에 요청한 도메인의 네임, 호스트 네임이 들어간다.
    - Type: 쿼리의 유형을 나타태는 필드. 여러가지 유형이 있다.
유형 설명
A 호스트 주소
NS Authoritative 네임 서버
CNAME 별칭에 대한 표준 이름
SOA 권한 영역의 시작
PTR 포인터 레코드
HINFO 호스트 정보
MX 메일 교환
AAAA IPv6 주소
 

    - Class: 네트워크 클래스 타입을 표시한다. IN은 INternet을 의미한다.

 

 

 

DNS 응답 패킷

DNS 서버 -> mac PC로 응답 패킷

 

IPv4를 사용하여 DNS 서버(61.41.153.2)가 클라이언트(192.168.0.253)로 요청에 대한 응답 보낸 것을 확인할 수 있다.

응답 패킷의 flags 구조는 요청 패킷의 flags의 구조와는 다르다. 추가된 필드에 대해서만 알아보겠다.

 

  • Flags

- Authoritative: 도메인 이름에 대해 믿을 수 있는 서버로 부터의 응답임을 표시한다. (공식 DNS서버로 부터의 응답인지 아닌지)
- Recurision Available: 응답에서 정의된 재귀가 사용가능한지를 표시한다.
- Reply Code or Response Code: 응답에서 오류가 존재하는지 표시한다. (0~5 범위의 숫자로 표시된다.)

숫자 (코드) 의미
0 오류 없음
1 형식 오류
2 서버 실패 (네임서버 문제)
3 네임 오류 (존재하지 않는 이름)
4 실행되지 않음
5 거부 (네임서버 규정으로 수행하지 못함)

 

  • Questions
  • Answer RRs: 응답 레코드. 응답이 왔기 때문에 1
  • Authority RRs: 공식적인 네임 서버에서 응답을 주었을 때 1

응답 패킷의 Queries 와  Answer 부분

 

  • TTL (Time to Live) : DNS 서버가 데이터를 캐싱정보로 유지한 시간
  • Data Length : Rdata의 길이
  • Rdata : 해당 리소스에 대한 실제 정보