본문 바로가기
프로그래밍/NETWORK HACKING

[네트워크 보안] UDP 통신 계층별 분석

by B T Y 2017. 6. 16.
반응형

UDP 통신 계층별 분석에 대해서 정리한다.



※ UDP


  - 네트워크상에서 어떠한 일이 일어나는지?

  - 눈에 보이지 않는 것들


4 -> 3 -> 2 -> 1: 확인(분석)


1 -> 2 -> 패킷 직접 제작(프로토콜)



* 스니핑(sniffing)


  - 다른 사람의 패킷을 가로채는 기법



- 덤프 : 저장한다는 개념

메모리 덤프



* 로우 소켓 프로그래밍: 스니퍼(덤프) 프로그램

  - 무엇을 덤프 할 것인가?

  - NIC 장치로 들어오거나 나가는 것들(패킷)



! 패킷이 항상 두개가 아닐 수 있다

! 네트워크는 항상 실행을 보장할 수 없다


* 네트워크 엔지니어: 장비(라우터, 스위치, ... )

  - 실력: 트러블 슈팅, 네트워크 설계, ...

  - 실무 경험을 중시


udp server

data:  b"\x00PV;%\xf8\x00\x05f#0\x19\x08\x00E\x00\x00!\x00\x00@\x00?\x11\xb7\xa9\xc0\xa8\x00\xba\xc0\xa8\x02\x18\x81\x07'\x10\x00\r\x8f\xc7hello\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"


UDP 헤더\x81\x07'\x10\x00\r\x8f\xc7 -> 0x8107(src port), 0x2710(dst port), 0x000D(세그먼트 크기), 0x8fc7(체크섬)


data:  b"\x00\x05f#0\x19\x00PV;%\xf8\x08\x00E\x00\x00!\x00\x00@\x00@\x11\xb6\xa9\xc0\xa8\x02\x18\xc0\xa8\x00\xba'\x10\x81\x07\x00\r\x8f\xc7hello"


UDP 헤더'\x10\x81\x07\x00\r\x8f\xc7 -> 0x2710(src port), 0x8107(dst port), 0x0027(세그먼트 크기), 0x8fc7(체크섬)



udp client

data:  b"\x00\x05f#0\x19\x00PV;%\xf8\x08\x00E\x00\x00!\x00\x00@\x00@\x11\xb6\xa9\xc0\xa8\x02\x18\xc0\xa8\x00\xba'\x10\x81\x07\x00\r\x8f\xc7hello"


data:  b"\x00PV;%\xf8\x00\x05f#0\x19\x08\x00E\x00\x00!\x00\x00@\x00?\x11\xb7\xa9\xc0\xa8\x00\xba\xc0\xa8\x02\x18\x81\x07'\x10\x00\r\x8f\xc7hello\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"



  - 헤더: 보내려는 데이터에 대한 정보를 표현


  - 프로토콜 헤더: 계층별 정보를 표현



< 4계층 >


  - 데이터의 전송을 담당


  - 어떠한 통신 방식을 사용

  - 누구에게 전달되야 되는지, 누구로부터 전송이 되었는지, ...

  - 프로토콜


  - UDP, TCP

  - 주소체계: 포트(port) -> 서비스에 대한 식별

  - PDU( Protocol Data Unit ): segment


* UDP( User DataGram Protocol )


  - 신뢰할 수 없는 서비스(인증이 어려움)

  - 빠른 통신이 가능(복잡하지 않다)


  - 소규모 통신에 적합한 방식


* UDP 헤더: UDP로 데이터를 송/수신 하기위한 정보 ( 4개의 필드를 가지고 있다 )


  - 8바이트의 고정 크기

1). 출발지의 포트번호: 2바이트

2). 도착지의 포트번호: 2바이트

3). UDP 세그먼트의 크기( 헤더를 포함한 데이터 전체의 크기 ): 2바이트

4). 체크섬: 2바이트

  - 에러 체크 기능

  - 모든 경우를 전부 체크할 수 없다, 대신에 매우 간편하다

  - CRC, 패리티 부호, ...이 체크섬을 보완 할 수 있는 기능


포트번호 -> 서비스 -> 송/수신 되는 데이터가 어떤 서비스의 데이터다



예). 택배


물건(데이터) -> 포장(패키징) -> 송신자(포트), 수신자(포트)(위치, 정보, ... )


-> 택배아저씨(라우터, 스위치, 장비, ...) -> 도착지 -> 포장해체(언패키징) -> 물건(데이터)



< 3계층 >


  - 전송 경로를 담당

  - 목적지까지의 경로를 선정(라우터)


  - PDU: Packet


  - 주소체계: IPv4, IPv6


  - IP, 라우팅 프로토콜(RIP, OSPF, ... ), IPSEC



IP 주소(IPv4)


  - 4자리 숫자를 "."으로 구분해서 표현

  - 네트워크상에서 호스트를 구별하는 주소 체계

  - 1자리에 올 수 있는 숫자는 0 ~ 255까지 최대 256개를 표현

  - 호스트의 최대 갯수는 256^4 = 대략 42억개 정도...


  - 각 호스트마다 숫자가 정해지는데 아무렇게나 정하진 않았다 ( 어떠한 체계를 가지고 있다 )

  - 그래야 관리가 쉽다

  - IANA 관리 기구

  - 숫자만을 이용해서 체계를 구성


  - 4개의 숫자만을 사용해서 네트워크와 호스트를 구별


IP Class


사용할 수 없는 번호: 0.0.0.0 <- 대표 IP

    255.255.255.255 <- Broadcasting IP


* 통신방식

1. 유니 캐스트(1:1)


2. 브로드 캐스트(1:n)

  - 방송 시스템


3. 멀티 캐스트(1:n)

  - 정해진 범위 내에서만 통신


  - 일반 Class


A Class

  - 첫번째 1자리의 숫자를 네트워크의 아이디로 사용

  - 나머지 3개의 숫자를 호스트의 번호를 표현


  - 네트워크 갯수: 254개

  - 숫자를 전부 2진수로 변환했을 때 공통 비트가 0인 비트


  - 0000 0000 ~ 0111 1111: 0 ~ 127, 1 ~ 126번이 실제 사용 가능한 범위


  * 127: 내부 ip로 정해진 ip( localhost: 127.0.0.1 )


  - 범위 : 1.0.0.0 ~ 126.255.255.255


ex). 1번 네트워크


1.0.0.0 ~ 1.255.255.255


* 호스트의 주소로 사용할 수 없는 번호: 0, 255


1.0.0.0: 1번 네트워크의 대표 IP

1.255.255.255: 1번 네트워크의 브로드캐스트 주소


  - 사설ip: 10번


  - 서브넷팅: 네트워크를 여러개의 더 작은 네트워크로 분할하는 작업


  - 서브넷 마스크


B Class: 앞의 2자리 숫자를 네트워크 아이디로 사용


  - 공통비트: 10, 10000000.000000000 ~ 10111111.11111111, 128.0 ~ 191.255

  - 서브넷 마스크: 255.255.0.0


  - 사설아이피: 172.16.0.0


ex). 130.15.0.0


- 130.15.0.0 ~ 13.15.255.255, 130.15.0.1 ~ 130.15.255.254(사용 가능한 IP)


C Class: 앞의 3자리 숫자를 네트워크 아이디로 사용


  - 공통비트: 110, 11000000.00000000.00000000 ~ 11011111.11111111.11111111

-> 192.0.0 ~ 223.255.255.255


  - 서브넷 마스크: 255.255.255.0

  - 사설 아이피: 192.168.0.0


------------------------------

특수 Class


D Class: 멀티캐스트 용도로 예약

  - 사용할 수 없다.(장비나 인터페이스에 설정할 수 없다)

  - 서브넷이 없다.


  - 공통비트: 1110, 11100000.0.0.0 ~ 11101111.255.255.255

-> 224.0.0.0 ~ 239.255.255.255


E Class: 그냥 사용할 수 없다.

  - 사용할 수 없다.


  - 공통비트: 1111, 11110000.0.0.0 ~ 11111111.255.255.255

-> 240.0.0.0 ~ 255.255.255.255



공인 IP( public ip ): IANA기관에서 관리, 중복될 수 없다.

  - 공인망 -> 인터넷


  - 중복될 수 없기 때문에 사용하다보니 ip 고갈 문제가 발생



사설 IP( private ip )

  - 사설망 -> 인터넷(공인망)과 분리된 망


  - 우리 학원 또한 사설 네트워크 구성되어 있다.

  - NAT( Network Address Translation ): 라우터의 기능



예). 집 주소


  - 집 주소마다 번호가 부여된다.

  - 서울시청을 기준으로 1부터 시작해서 1씩 증가하면서 번호를 부여

  - 땅끝마을까지 다 붙였더니 1000001번지에서 끝났다.


  - 그런데 집이 새로 지어졌다. 1000001번지가 되었다.


  - 349493번지는 어디에 있을까?




* IP ( Internet Protocol )


ip 헤더(20Byte): 라우터, ...  ( 10개의 필드를 가지고 있다 )


IP헤더: E\x00\x00!\x00\x00@\x00?\x11\xb7\xa9\xc0\xa8\x00\xba\xc0\xa8\x02\x18


IP헤더: E\x00\x00!\x00\x00@\x00@\x11\xb6\xa9\xc0\xa8\x02\x18\xc0\xa8\x00\xba



1).  version & header length: 1byte


  -> 0x45 -> 0100    0101

                 -----     -----

                  ver       len


  -> 실제 길이를 가져오려면 왼쪽으로 2칸 쉬프트 0101 -> 1010 -> 10100 -> 20byte


* 헤더의 길이를 가지고 있다는 건 가변적임을 뜻 -> 사실은 고정


2). service field: 1byte

  - 지금은 사용하지 않는다.

  - IPv6에서는 디테일하게 추가 됨


3). ip 패킷의 전체 크기(total legnth): 2byte

  - \x00! -> 0x21 -> 33byte

  - 패킷 전체의 크기와 ip 패킷 전체의 크기는 다르다.

  - ip 패킷 전체 크기는 ip헤더 + udp 헤더 + 데이터


4). identification: 2byte

5). flag & fragment offset: 2byte


  - \x00\x00@\x00  -> ip Fragmentation


6). TTL( Time To Live ): 최대 홉의 갯수 : 1byte

  - unix: 254

  - linux: 64

  - windows: 128


  ? -> 63( 라우터 한개를 거쳐왔다는 의미, Looping을 방지하기 위해 라우터를 지날때마다 1씩 감소 )


7). 프로토콜 타입: 1byte


  - ip 패킷이 전달하는 프로토콜의 타입

  - tcp(6), udp(17/0x11), icmp(1), ...

    ( 구글: ip protocol type 검색후 wiki에서 참고 가능 )


8). 체크섬: 2byte


9). 출발지 아이피: 4byte

10). 도착지 아이피: 4byte



< 2계층 >


  - 주소체계: MAC(Media Access Control) address, H/W address

  - 16진수 6자리로 표현  ( 앞 3자리: 제조사(벤더), 뒤 3자리: 제조사별 주소 )


  - 프로토콜: 터널링(PPTP, L2TP, ...), ARP


  - PDU: Frame


  - 이더넷 헤더 : 14바이트 고정 크기


이더넷 헤더: \x00PV;%\xf8    \x00\x05f#0\x19    \x08\x00

-> 도착지 MAC address: 0x00:0x50:0x56:0x3B:0x25:0xf8

-> 출발지 MAC address: 0x00:0x05:0x66:0x23:0x30:0x19

-> 이더넷 타입: 0x0800


이더넷 헤더: \x00\x05f#0\x19    \x00PV;%\xf8    \x08\x00


1). 도착지 MAC address: 6byte

2). 출발지 MAC address: 6byte

3). 이더넷 타입: 2byte

  ( 3계층 프로토콜 타입과 비슷, 구글: ethernet type 검색후 wiki에서 참고 가능)


* IPv4: 0x0800, ARP: 0x0806, IPv6: 0x86DD



< 1계층 >


  - 모든 물리적인 내용




반응형

댓글