관리 메뉴

IT창고

Network UDP(User Datagram Protocol) 본문

보안/Network

Network UDP(User Datagram Protocol)

방구석여포 2018. 3. 29. 00:58

Layer4 인 전송계층에 대해 알아보겠습니다.

전에 알아본 Layer3인 네트워크 계층은 서로 다른 네트워크와 네트워크간의 경로를 설정했다면 4계층인 전송계층은 전송방식을 결정합니다. 프로토콜은 TCP, UDP가 있으며 PDU는 segment이고 3계층에 MTU(Maximum Transfer Unit)처럼 4계층에도 MSU(Maximum Segment Unit)가 있습니다. 주소체계는 3계층이 ip번호라면 4계층은 port번호입니다.


이번에는 Layer4인 전송계층의 UDP를 알아보겠습니다.

UDP도 따로 클래스를 만들어 두도록 하겠습니다.

UDP헤더를 보면 간단하게 src port, dst port, HeaderLen, Checksum 그리고 추가로 Data로 구성된걸 확인할수있습니다.

4개의 필드로 구성되어있으며 각각 2byte씩 차지합니다.


=======================================================

=======================================================


Checksum 계산 방식에 대해 알아보겠습니다.

2,3,4계층의 헤더가 모이므로 계산은 아래와 같습니다.

- 출발지 아이피 + 도착지 아이피 + b'\x00' + 아이피타입번호 + UDP or TCP 헤더의 길이 + UDP or TCP 헤더

이걸 pseudo header라고 합니다.


UDP서버를 열고 UDP raw소켓을 작성해서 통신해보도록 하겠습니다.

=======================================================

=======================================================


udptest.py파일을 살펴보면 udp type은 17입니다. ip헤더에 Protocol번호를 넣고 udp헤더에는 포트번호와 체크섬값을 넣어주면됩니다. 체크섬은 체크섬함수를 사용해서 넣었습니다.

이제 UDP서버에 위에서 만든 세그먼트로 전송해보겠습니다. 

sniffer.py로 확인해보면 위에서 설정한대로 제대로 전송이 되는걸 확인해볼수있습니다.

보낸 192.168.1.8의 UDP서버를 확인해보면 아래와 같습니다.

직접 헤더를 만들어 보내는 패킷을 직접 조작할수있게 되었습니다.


여기에 사용한 스니퍼는 아래와 같습니다.

=======================================================

=======================================================


시니퍼로 확인해보면 1,2번 줄까지는 UDP이고 3번째 줄이 ICMP메세지입니다. ICMP type3은 Destination Unreachable

즉 도착지를 찾지 못해서 입니다. 패킷을 전송할때 클라이언트 소켓을 설정하지 않았기 때문입니다. 

ICMP 에러 타입은 https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml 여기서 확인해볼수있습니다.


여기서 알아본 에러로 할수있는것이 있습니다. nslookup같은 툴을 사용하면 상대의 DNS서버의 IP주소를 알아낼수있지만 포트번호는 알아낼수없습니다. 위의 내용을 응용하면 포트스캔을 할수있습니다. UDP통신을 대량으로 보내 포트를 알아볼수있는겁니다.

단 UDP통신을 대량으로 보낼경우 이런 경우는 상대의 포트를 스캔할 경우밖에 없기 때문에 악의적인 목적이 있다고 생각할수밖에 없어 포트스캐닝은 불법으로 여겨집니다. 이러한 정보수집을 핑거프린팅 , 풋프린팅이라고 합니다. 

단 포트가 열려있는경우 에러메세지가 안오지만 방화벽으로 막혀서 오지않는 경우도 있습니다. 에러 메세지가 없다고 해서 무조건 포트가 열려있는건 아니라고 알수있습니다. 혹은 ICMP를 차단해도 에러메세지는 오지 않습니다.

'보안 > Network' 카테고리의 다른 글

Network TCP(Transmission Control Protocol)  (0) 2018.04.02
Network UDP Flooding  (0) 2018.03.30
Network IP Fragment(단편화)  (0) 2018.03.28
Network ICMP(Internet Contorl Message Protocol)  (0) 2018.03.27
Network ARP Cache Poisoning  (0) 2018.03.23
Comments