프로그래머/개발자라면 한번쯤은 사용해보았을 법한 패킷분석 툴인 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 field는 TCP 헤더와 데이터의 내용뿐만 아니라 IP 헤더로 부터 파생된 의사 헤더에 대한 내용을 수행합니다.
2. DNS protocol
: DNS는 단일 전송 메커니즘을 사용하는 다른 애플리케이션과는 다르게 UDP와 TCP를 모두 사용합니다. 일반적인 응답/요청은 UDP를 사용하고 전송 대역이 큰 응답/요청에는 TCP를 사용합니다.
화면에서 Protocol 영역 중에 DNS를 찾아서 클릭하여 DNS에 관한 정보를 얻습니다.
위 그림 을 보면 DNS가 4개의 기본 섹션으로 구성되어 있다는 것 을 알 수 있습니다.
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 패킷은 UDP나 TCP 헤더를 포함하지 않습니다. ICMP 패킷은 IP 헤더 다음에 type, code, checksum 으로
구성되어 있습니다. 일부 패킷은 추가 필드를 포함하게 됩니다.
-Type (유형) : ICMP 메시지 유형은 다음 표와 같습니다.
위의 TYPE은 3이므로 목적지에 도달할 수 없다는 것을 의미합니다.
-Code : ICMP 패킷 유형의 코드 필드 값을 나타내며 크게 4가지 유형으로 나뉘어집니다.
1. 유형3 - 목적지에 도달할수 없는코드
2. 유형5 - 재지정 코드
3. 유형 11 - 시간 초과 코드
4. 유형 12 - 파라미터 문제 코드)
<1> 유형 3 - 목적지에 도달할 수 없는 코드
<2> 유형 5 - 재지정 코드
<3> 유형 11 - 시간 초과 코드
<4> 유형 12 - 파라미터 문제 코드
-Checksum : checksum field는 ICMP 헤더만 다루게 됩니다.
'ETC' 카테고리의 다른 글
Code Refactoring (코드 리팩토링) (0) | 2016.07.08 |
---|---|
IntelliJ 프로젝트 기본 설정 (0) | 2016.05.03 |
IntelliJ 설치 및 프로젝트 생성 (0) | 2016.05.03 |
Wireshark 활용(Browser Packet Capture, TCP segment filtering) (0) | 2016.04.29 |
WRITTEN BY