글 작성자: nouu

http://www.yes24.com/Product/Goods/83538369

 

보안 실무자를 위한 네트워크 공격 패킷 분석 - YES24

저자의 풍부한 실무 경험을 바탕으로 보안 업무를 담당하고 있는 실무자와 보안에 입문하고자 하는 독자를 위해 쓰였다. 이 책은 포트 스캔, DDoS, SMB 해킹, 웹 해킹, RAT 악성 코드, 메일 서버 해킹

www.yes24.com

 

해당 서적을 통해 글을 작성하였습니다. 

 

 

UDP는 신뢰성이 보장되지 않는 프로토콜이다. TCP와는 반대로 단방향 통신이므로 신뢰성이 보장되지 않는다. UDP는 빠른 속도로 데이터 전달에만 목적이 있기 때문에 세션 연결 없이 데이터를 전송한다. 그래서 실시간 인터넷방송 또는 인터넷 전화와 같이 데이터 전송중에 일부 데이터가 손상되어도 영향을 받지 않는 서비스에 활용된다. 

 

 

 

 

또한 데이터 전달 중 오류가 발생한 경우 서버는 UDP에 있는 헤더 체크섬을 통해 해당 데이터를 폐기하는데 TCP와 달리클라이언트는 오류가 난 데이터를 재전송 하지 않는다.

 

또한 대상 서버가 제공하지 않는 포트로 클라가 접속을 시도하는 경우에 ICMP 메시지 응답을 통해 접근이 불가함을 알린다. 왜냐하면 UDP는 자체적으로 에러처리 기능이 없기 때문이다. 때문에 '목적지 도달 불가(Port Unreachable)' 메세지를 클라이언트에게 전달한다.

 

 

 

 

 

위의 이미지는 와이어 샤크를 통해 구글 웹 브라우저에 www.google.com을을 쳐서 DNS 요청 프로토콜을 캡처한 모습이다. 이것을 기반으로 UDP의 필드 구조를 알아보겠다.

 

다음과 같이 UDP 헤더는 총 8바이트이다.

 

Source Port(16비트) Dst Port(16비트)
Length(16비트) Header Checksum(16비트)
Payload(Random비트, 상위 계층에 의해 크기가 좌우된다.) 

 

TCP 헤더의 필드보다 훨씬 간편한 구조이다.

Source Port는 송신 측 포트 번호를 설정한다. Destination Port는 수신 측 포트 번호를 설정한다. Length는 헤더와 데이터의 크기를 합친 값이 들어간다. 

 

 

 

 

UDP Header Checksum(16비트)

데이터의 훼손 여부를 확인한다. 계산 방법은 다음과 같다.

첫번째로 IP 헤더 및 UDP 헤더+페이로드 크기를 합산한다.

두번째로 UDP 헤더 필드 값 전체를 합산한다. 

세번째로 UDP 데이터 값 전체를 합산한다. 

이후 3개의 값을 모두 더하고 1의 보수화 하면 된다. 

 

 

 

 

 

 

1. IP 헤더 및 UDP 헤더 + 페이로드 크기를 합산한다. 

 

 

다음과 같이 IP 프로토콜의 상위 프로토콜 필드는 UDP이며 17번에 해당한다. 이것을 16진수로 환산하면 0011이다. 

또한 Source Address와 Destination Address는 박스로 친 값 ac 1e 01 1b, a8 7e 3f 01이다.

 

마지막으로 UDP Length는 40bytes, 16진수로 환산하면 0028이다. 

 

첫번째 수식인 IP 헤더 및 UDP 헤더+페이로드 크기를 합산한다면... 

0011 + ac1e + 011b + a87e + 3f01 + 0028 = 1 93d6 

 

 

 

 

2. UDP 헤더의 합계를 계산한다(체크섬 제외)

 

다음과 같이 체크섬 필드 값은 f8e9이며, 이 값을 제외한 나머지 값을 4자리씩 끊어서 합해준다. 

edcc + 0035 + 0028 = ee29

 

 

 

 

3. UDP 페이로드 합계를 계산

 

 

만약 데이터 길이가 홀수일 경우 하위 2바이트에 00을 채워서 계산한다. 현재 UDP 페이로드는 짝수로 끝나므로 00을 추가할 필요가 없다. 

 

f551 + 0100 + 0001 + 0000 + 0000 + 0000 + 0377 + 7777 + 0667 + 6f6f + 676c + 6503 + 636f + 6d00 + 0001 + 0001 = 3 83f6

 

 

 

 

 

4. 지금까지의 값을 합산 후 자리 올림 값 합산 및 보수화한다.

1 93d6 + ee29 + 3 83f6 = 6 05f5

 

6 + 05f5 = 05fb (0101 1111 1011) 1의 보수화를 하면 1010 0000 0100(0a04)

 

 

0xf8e9 0x0a04 틀렸다 뭐지?

어찌됐든 이러한 방식으로  수신 노드는 UDP 데이터의 오류 여부를 체크섬 비트로 판별한다.