프로그래머/개발자라면 한번쯤은 사용해보았을 법한 패킷분석 툴인 Wireshark를 한번 다뤄보려 합니다.

Wireshark는 패킷을 추출하여 분석할 수 있는 기초적인 툴입니다.

이 Wireshark를 사용하여 Packet Capture를 한 뒤, Protocol Packet을 분석하여 각 Protocol Packet Structure에 해당 하는 값을 적고, 각 Protocol Packet Structure의 부분들을 조사하여 어떤 역할을 하는지 살펴보도록 하겠습니다.


1) TCP Protocol

(1) wireshark에서 패킷 캡쳐링을 실시 한 후, 화면에서 Protocol 영역 중에 TCP를 찾아서 클릭하면 TCP에 관한 정보가 나오게 됩니다.


(2)

-(Src Port)Source port (발신지 포트 필드) : 발신지 포트필드는 발신지에서 오픈된 포트입니다. 위의 패킷을 보면 https 포트 (443) 인 것을 확인할 수 있습니다.

 

-(Dst Port)Destination port (목적지 포트 필드) : 목적지 포트필드는 수신지에서 오픈된 포트입니. 위의 패킷을 보면 51462 포트인 것을 확인할 수 있습니다.

 

-(Seq)Sequence number (순차 번호 필드) : 순차번호필드는 고유한 번호를 가지며, 이 값으로 TCP 세그먼트에 대한 식별값을 제공하며, 통신 스트림일부가 분실되면 확인을 위해 수신자를 사용가능하게 합니다. 이 순차번호는 패킷에 포함되있는 데이터 만큼 증가하게 됩니다. 화면에서는 15631의 값을 가집니.

 

-(Ack)Acknowledgment number (확인 응답 번호 필드) : 확인 응답 번호 필드는 다음번에 기대되는 순차번호를 표시한다. ack number에 관련하여 1078의 값을 가지게 됩니다.

-Header length (데이터 오프셋 필드) : 데이터 오프셋필드는 TCP헤더의 길이를 정의합니. 길이는 4byte씩 증가되고, 이 필드의 값이 20이면 80바이트 길이를 갖는다는 것입니다. TCP헤더의 길이가 다양하게 변화시킬 필요가 있으므로 이 필드가 필요하게 됩니다.

 

(3)

URG (Urgent) : 긴급 포인터

ACK (Acknowledgment) : 확인 응답 패킷

PSH (Push) : 네트워크에서 버퍼링 우회와 데이터 즉시 통과

RST (Reset) : 연결 닫기

SYN (Synchronize) : 동기화 순차번호

FIN (Finish) : 트랜잭션 종료

 

<위 플래그들에 대한 설명>

(긴급비트 (Urgent))

이 비트는 잘 사용되지는 않습니다. 만약 이 비트가 1로 설정 된 경우 긴급 포인터 필드로 정의되는 특정위치에서 시작하는 패킷의 데이터를 알기 위해 발신자가 원하는 수신자를 나타냅니다.

 

(확인 응답 비트 (ACK))

이 비트가 설정되어 있으면(bit‘1’인 경우) 이 패킷은 확인응답이라는 것을 나타냅니다.

 

(Push 비트 (PSH))

이 플래그는 TCP 세그먼트가 발신자나 수신자의 측면에서 버퍼에 유지되면 안 된다는 것을 표시합니다.

 

(Reset 비트 (RST))

RST 비트 설정에 대한 TCP 패킷은 TCP 연결을 종료, 즉 접속을 강제로 종료합니다. 이 패킷은 이상 종료 시 사용됩니다.

 

(동기화 비트 (SYN))

SYN 비트는 송신측과 수신측의 일련번호를 확인할 때 사용되고 이 비트가 1이면 이 패킷은 TCP 핸드셰이크 프로세스의 SYN 단계라는 뜻입니다.

 

(Finish 비트 (FIN))

Finish 비트는 프로세스가 완료됐고 데이터 스트림이 전송 됐다는 것을 의미합니.

 

(4)

window field : 이 필드는 TCP 수신 버퍼를 바이트 크기로 표시합니. 이 바이트가 0이라면 수신자가 사용가능한 버퍼 공간을 갖지 않겠다는 말이 됩니다. 이 필드에 나타낼 수 있는 최대값은 65,535 입니다.

 

 (5)

checksum field : checksum fieldTCP 헤더와 데이터의 내용뿐만 아니라 IP 헤더로 부터 파생된 의사 헤더에 대한 내용을 수행합니.

  

2. DNS protocol

: DNS는 단일 전송 메커니즘을 사용하는 다른 애플리케이션과는 다르게 UDPTCP를 모두 사용합니. 일반적인 응답/요청은 UDP를 사용하고 전송 대역이 큰 응답/요청에는 TCP를 사용합니다.

화면에서 Protocol 영역 중에 DNS를 찾아서 클릭하여 DNS에 관한 정보를 얻습니다.

위 그림 을 보면 DNS4개의 기본 섹션으로 구성되어 있다는 것 을 알 수 있습니다.

1. 질문 (Questions), 2. 응답 (Answer), 3. 권한 (Authority), 4. 추가 (Additional)

 

이제 DNS 패킷을 위에서 부터 분석하면,

Transaction ID : DNS 쿼리와 응답에 연관되는데 사용자는 이 필드에서 DNS에 관련된 모든 것을 보기 위한 값을 필터링 할 수 있습니다. (dns.id==0x95fd)

Flags : 쿼리 특성을 정의하는 수많은 필드로 구성되어 있습니다. Flags 의 필드에 대해서 살펴보도록 하겠습니다.

Response(Query) : 쿼리/응답 비트는 요청(0) 인지 응답(1)인지 표시합니다. 위의 패킷은 0 이므로 패킷이 요청 이라는 것을 알 수 있습니다.

Opcode : Opcode는 쿼리의 유형을 지정하고 일반적으로 일반적인 요청에 대해 0000을 포함합니다.

Truncation : 응답이 길어서 잘렸는지에 대해서 알려주고, 위의 패킷을 보면 잘리지 않았다라고 나오는 것을 볼 수 있습니다.

Z (Reserved) : 이 필드는 0으로 설정됩니다.

Non-authenticated data : 데이터에 권한이 있는지를 보는 필드로, 이 필드는 0으로 설정되어 받아들일 수 없다고 나오게 됩니다.

지금까지 flag를 보았고, 이제 밑으로 넘어가서 아래 그림의 부분을 살펴보겠습니다.

 

Questions Count - 질문의 숫자를 표시하고 일반적으로 한 패킷당 1개의 질문을 볼 수 있습니다.

Answer RRs - Answer RRs 수를 표시합니다.

Authority RRs - Authority RRs 응답 수를 표시합니다.

Additional RRs - Additional RRs 응답 수를 표시합니다.

 

이제 Queries부분을 살펴보겠습니다.

 

Name : 이 필드는 결정 중인 이름을 포함합니다. 형식은 이름에서 영문자 바이트의 숫자를 표시하기 위해 숫자 구분문자를 이용하는 가변길이입니다.

Type : 쿼리의 유형을 나타내는 필드로써 현재는 A, 호스트주소를 나타내게 됩니다.


 유형은 아래의 표와 같습니다.

Class : TCP/IP 통신에 대한 인터넷 클래스 주소를 표시하기 위해 ‘1’(0x0001)로 설정됩니다.

 

3. UDP protocol

 

-> UDP는 통신프로토콜이며 비연결형 전송 서비스를 제공합니다. 한쪽에서 일방적으로 다른 쪽으로 보내는 프로토콜이다. 브로드캐스트 와 멀티캐스트 트래픽이 UDP 를 통해 전송됩니다.

화면에서 Protocol 영역 중에 UDP를 찾아서 클릭하여 UDP에 관한 정보를 얻어 보겠습니다.

 (UDP 패킷 구조 분석)

-Source port (목적지 포트 필드) : 이 필드는 응답 패킷에서 수신중인 포트를 열기 위해서 주로 사용되며 프로토콜을 정의하기 위한 목적으로 사용되며 현재 6881포트를 사용합니다.

 

-Destination port (발신지 포트 필드) : 이 필드는 목적지 애플리케이션이나 프로세스를 정의하고, 일부 경우 발신지와 목적지 포트 번호들은 클라이언트나 서버 프로세스와 같다. 현재는 목적지 포트와 같은 6881을 사용합니다.

 

-Length (길이 필드) : 이 필드는 UDP 헤더에서 유효한 데이터의 끝까지 패킷의 길이를 정의하며, 현재 화면에서 28byte를 표시합니다.

 

-Checksum (체크섬 필드) : checksum에 대한 정보를 나타내며 가끔 사용자는 checksum 필드가 모두 0 으로 설정된 것을 볼 수 있는데 이는 체크섬이 인증되지 않았다는 의미입니다.

화면에서 보다시피 허가가 거부된 것으로 표시되어집니다.

 

4. ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)

-ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜) 은 네트워크에서 오류,경고,알림에 대한 메시지를 전달하는 목적으로 사용됩니다.

ICMP 패킷은 UDPTCP 헤더를 포함하지 않습니다. ICMP 패킷은 IP 헤더 다음에 type, code, checksum 으로

구성되어 있습니다. 일부 패킷은 추가 필드를 포함하게 됩니다.

-Type (유형) : ICMP 메시지 유형은 다음 표와 같습니다.

 위의 TYPE3이므로 목적지에 도달할 수 없다는 것을 의미합니다.

-Code : ICMP 패킷 유형의 코드 필드 값을 나타내며 크게 4가지 유형으로 나뉘어집니다.

1. 유형3 - 목적지에 도달할수 없는코드

2. 유형5 - 재지정 코드

3. 유형 11 - 시간 초과 코드

4. 유형 12 - 파라미터 문제 코드)


<1> 유형 3 - 목적지에 도달할 수 없는 코드

<2> 유형 5 - 재지정 코드

 <3> 유형 11 - 시간 초과 코드

 

  <4> 유형 12 - 파라미터 문제 코드

 


-Checksum : checksum fieldICMP 헤더만 다루게 됩니다.


WRITTEN BY
SiriusJ

,