<43B7CE20BECBBEC6BAB8B4C C5EBBDC52E687770>

Similar documents
PowerPoint 프레젠테이션

2009년 상반기 사업계획

The Pocket Guide to TCP/IP Sockets: C Version

<43B7CE20BECBBEC6BAB8B4C220BCD2C4CFC7C1B7CEB1D7B7A1B9D62E687770>

The Pocket Guide to TCP/IP Sockets: C Version

vi 사용법

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt

제1장 Unix란 무엇인가?

Microsoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드]

Microsoft Word - KPMC-400,401 SW 사용 설명서

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt

The Pocket Guide to TCP/IP Sockets: C Version

본 강의에 들어가기 전

PowerPoint 프레젠테이션

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 6 가지중하나. (1) 프로그램수행직후, (2) 5 초후 (3) 10 초후 (4) 15 #include <signa

Microsoft PowerPoint - 06-CompSys-16-Socket.ppt

[ 목차 ] 1. 취약점개요 2. 배경지식 3. 취약점발생결과 (exploit 테스트 ) 4. 취약점발생원인분석 4.1 취약점 Q&A 5. exploit 분석 6. 보안대책 7. 결론 8. 레퍼런스 2

The Pocket Guide to TCP/IP Sockets: C Version

학번 : 이름 1. 다음프로그램실행결과를예측하시오. $./a.out & [1] 7216 $ kill -USR $ kill -USR 아래학생이작성한쓰레드코드의문제점을설명하시오. void* thread_main() { pthread_mutex_t

슬라이드 1

제1장 Unix란 무엇인가?

Microsoft Word - Network Programming_NewVersion_01_.docx

PowerPoint 프레젠테이션

Microsoft PowerPoint - 15-EmbedSW-10-Socket

SMB_ICMP_UDP(huichang).PDF

The Pocket Guide to TCP/IP Sockets: C Version

SYN flooding

Network seminar.key

제1장 Unix란 무엇인가?

Microsoft PowerPoint - L4-7Switch기본교육자료.ppt

[Brochure] KOR_TunA

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal.


PowerPoint 프레젠테이션

TCP.IP.ppt

자바-11장N'1-502

Microsoft Word doc

4. What will be the output of this program? Explain results for each variable and each thread. #include "apue.h" int var=1; pthread_mutex_t lock; void

목차 목차포트스캔코드포트스캔결과포트스캔탐지코드포트스캔탐지결과 참조

1장. 유닉스 시스템 프로그래밍 개요

chap7.key

<4D F736F F D2034C0E52D554E495820BCD2C4CF20C0C0BFEB20C7C1B7CEB1D7B7A1B9D6>

본 강의에 들어가기 전

슬라이드 제목 없음

USB USB DV25 DV25 REC SRN-475S REC SRN-475S LAN POWER LAN POWER Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl C

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit

hd1300_k_v1r2_Final_.PDF

Microsoft PowerPoint - [2009] 02.pptx

Windows 8에서 BioStar 1 설치하기

PowerPoint 프레젠테이션

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

ronny report( wooyaggo, hkpco ).hwp

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

2009년 상반기 사업계획

본 강의에 들어가기 전

PWR PWR HDD HDD USB USB Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl Cable PC PC DDNS (

11장 포인터

/chroot/lib/ /chroot/etc/

슬라이드 1

The Pocket Guide to TCP/IP Sockets: C Version

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

2009년 상반기 사업계획

본 강의에 들어가기 전

6주차.key

2. 인터네트워킹 서로떨어져있는각각의수많은네트워크들을연결하여하나의네트워크처럼연결하여사용할수있도록해주는것 3. 인터네트워킹에필요한장비 1 리피터 (Repeater) - 데이터가전송되는동안케이블에서신호의손실인감쇄 (Attenuation) 현상이발생하는데, 리피터는감쇄되는신

PowerPoint 프레젠테이션

전송계층프로토콜 TCP(Transmission Control Protocol) 전송계층에서동작하는연결지향형 (connectionoriented) 프로토콜 데이터의흐름을관리하고, 데이터가정확한지검증하며통신 쓰리웨이핸드셰이킹 (three-way handshaking) 을통

The Pocket Guide to TCP/IP Sockets: C Version

목 차 1. 포트스캐닝 (Port Scanning) 이란? 2. 포트 (Port) 란? 3. 스캔 (Scan) 의종류 4. 포트스캐너 (Port Scanner) 구현 5. 포트스캔 (Port Scan) 구현 6. 참조

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

The Pocket Guide to TCP/IP Sockets: C Version

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

교육지원 IT시스템 선진화

PowerPoint 프레젠테이션

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

1장. 유닉스 시스템 프로그래밍 개요

BMP 파일 처리

HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 :


Microsoft Word - src.doc

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lecture_Note_2.ppt [Compatibility Mode]

게시판 스팸 실시간 차단 시스템

1217 WebTrafMon II

OSI 참조 모델과 TCP/IP

Microsoft PowerPoint _TCP_IP

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

네트워크통신연결방법 네트워크제품이통신을할때, 서로연결하는방법에대해설명합니다. FIRST EDITION

Sena Device Server Serial/IP TM Version

Sena Technologies, Inc. HelloDevice Super 1.1.0

Secure Programming Lecture1 : Introduction

K&R2 Reference Manual 번역본

Microsoft Word - release note-VRRP_Korean.doc

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

untitled

Transcription:

C 로알아보는 UDP 통신 이현환 (NOON) haonun@gmail.com http://noon.tistory.com Hacking Study Grup E.Y.E --------------------------------------------------------------------

목차 -------------------------------------------------------------------- 서론 1. 이번에는왜하는걸까..? 본론 2. UDP 란? 3. UDP 의활용 4.C 로알아보는 UDP 통신 5. 발전방향 결론 6. 결론 --------------------------------------------------------------------

서론 1. 이번에는왜하는걸까..? 저번 TCP/IP 소켓프로그래밍에서중요성을강조했듯이현재 IT 산업에서중요한부분을맡고있는게네트워크부분입니다. 서로간의통신으로좀더유연한어플리케이션을구현할수있고또한사용자에게좀다빠르고나은환경을제공합니다. 저희팀에서도추후여러가지기술과, 툴제작등여러행동을할떄에도이네트워크부분은빠지지않습니다. 이중이번에는 TCP/IP와함께많이쓰이는통신프로토콜인 UDP 에대해알아보고 UDP가어떤곳에사용되는지, 실제코드로는어떻게사용되는지어떤식으로해킹, 보안에응용할수있는지보겠습니다.

본론 2. UDP 란? -UDP 정의- UDP[ 유디피 ] 는 IP를사용하는네트웍내에서컴퓨터들간에메시지들이교환될때제한된서비스만을제공하는통신프로토콜이다. UDP는 TCP의대안이며, IP와함께쓰일때에는 UDP/IP라고표현하기도한다. TCP와마찬가지로 UDP도한컴퓨터에서다른컴퓨터로데이터그램이라고불리는실제데이터단위를받기위해 IP를사용한다. 그러나 UDP는 TCP와는달리, 메시지를패킷 ( 데이터그램 ) 으로나누고, 반대편에서재조립하는등의서비스는제공하지않으며, 특히도착하는데이터패킷들의순서를제공하지않는다. 이말은 UDP 를사용하는응용프로그램은, 전체메시지가올바른순서로도착했는지에대해확인할수있어야한다는것을의미한다. 교환해야할데이터가매우적은 ( 그러므로재조립해야할메시지도매우적은 ) 네트웍응용프로그램들은처리시간단축을위해 TCP 보다 UDP를더좋아할수있다. 일례로 TFTP는 TCP 대신에 UDP를사용한다. UDP는 IP 계층에서제공되지않는두개의서비스를제공하는데, 하나는다른사용자요청을구분하기위한포트번호와, 도착한데이터의손상여부를확인하기위한체크섬기능이다. -텀즈- 저번에말씀드렸던내용입니다. TCP는연결형, 신뢰성을기반으로한전송프로토콜입니다. 서버가 Listen을통해기다리고클라이언트가접속신호를주고확인을받고해서통신이되었지요. 그러나 UDP는조금다릅니다. 간단히설명하자면서로를믿지않습니다. 그저데이터전송과수신만이존재합니다. OSI 통신모델에서, UDP는 TCP와마찬가지로 4계층인트랜스포트계층에속합니다. 즉 UDP와 TCP는동급의프로토콜로데이타를전송하기위해서사용되는프로토콜입니다. UDP(User Datagram Protocal) 는비연결이고, 신뢰성이없는전송프로토콜입니다. UDP는호스트간통신대신에프로세스간통신을제공하는것을제외하고는 IP 서비스에어떠한것도추가하지않습니다. 또한매우제한적인오류검사를한다. 최소한의오버헤드를가진간단한프로토콜이라는장점을가집니다. 그래서서버나클라이언트에서처리해야할일의수가줄어들게되고자연스럽게통신속도가향상됩니다.

TCP는서로통신을하기전에상대방을확인하는절차를가짐으로써, session을맺고연결된 session 을통해서데이타의흐름이이루어집니다. 그러나 UDP 는 session을만들지않고그저데이터의전송과수신만을합니다. 그래서사용자가 UDP 서비스를하는서버로메시지를보냈다고하더라도, 메시지가실제로도착되었는지알수가없습니다. 메시지가전송이됫을수도있고안됫을수도있는거죠. 그래서 TCP와달리신뢰할수가없다. TCP는프로토콜자체에메시지가제대로보내졌음을체크할수있는다양한장치를가지고있습니다. 즉각패킷에순서를매겨서, 순서가뒤엉키지않도록재조립하며, 일정시간동안패킷이도착하지않으면, 해당패킷을다시보내달라고요청할수도있습니다. 그러나 UDP는이러한어떠한장치를가지고있지않습니다. UDP 로전송된패킷은순서가뒤바뀔수도있으며, 중간에패킷이손실될수도있습니다. 프로토콜차원에서패킷의순서가뒤바뀌었는지, 패킷이손실되었는지알수있는방법은없습니다. UDP 패킷에신뢰성을주기위해서는프로그램에서직접코딩을해주어야만합니다. 패킷을보낼때패킷에다가일련번호, 체크, 확인등여러가지상태를서버가파악할수있도록패킷을전송하고또한재전송시에도지금상태가어떻한지알려줄수있는무언가가필요합니다. 예를들자면클라이언트에서서버로데이터를전송시 UDP에서는전송이됫는지서버가꺼져있는지켜져있는지확인이불가능합니다. 이를방지하기위해클라이언트가패킷전송시맨앞에 1이라는데이터를같이전송하고서버가받으면맨앞에 0이라는데이터를바로클라이언트에게보내고클라이언트가 4초이내에 0이라는데이터를받지못하면서버가꺼져있다. 이런식으로판단할수도있습니다. 이렇듯 UDP 는단순히데이타그램위주의통신을하기때문에, 데이타그램지향프로토콜이라고불리우기도합니다. 실제로 UDP는 User Datagram Protocol 의줄임말입니다. 3. UDP 의활용 UDP에대해약간알아보았습니다. 안정성보다는속도에치중된프로토콜이기에좀더빠른서비스에적합합니다. 일단음성및비디오를위한실시간스트리밍서비스에사용됩니다. 음성서비스를 TCP로할경우중간에패킷이손상가거나잃어버리면서비스를중단하고다시연결요청을하고재접속을해야하기에통화중전화가끊어진다거나하는현상이발생합니다. 이건마치우리가전화를할때중간에약간의잡음이생겼다고해서, 전화가중단되는것과마찬가지의상황입니다. 우리는약간의잡음때문에 ( 혹은한두자정도언어가전달이안되는 ) 그걸

교정하느라고서비스가중단되는것보다는서비스질이약간떨어지더라도계속적으로서비스가되는걸원할것입니다. 그래서 UDP를사용하면면패킷이도착했는지체크따위하지않으므로만약패킷을잃어버렸다하여도모르고계속진행하게됩니다. 즉통신품질보다는통신의연속성이더욱중요시되는곳에유용하게사용될수있다. ( 물론 TCP로도구현할수있으며, 상당수의서비스가 TCP로서비스된다. 다만이러한특징을가지고있습니다. 또한스타크래프트에서도사용됩니다. start craft 의베틀넷서비스가아닐가싶다. 이베틀넷서비스에는수많은유저가접속해서사용할건데, 서비스의모든부분에 TCP를사용하 기에는 TCP는너무느린감이있다. 특히게임을할때서로교환되는수많은패킷의경우매우중요한데이터가아니므로, 그리고게임의흐름이끊기면안되므로 UDP로처리되는게더유리할것입니다. 멀티플레이에서도 UDP모드를따로지원하기도합니다. 이외에도 DNS ( Domain Name Service ) NFS ( Network File System ) SNMP ( Simple Network Management Protocol ) Trivial FTP ( TFTP ) Bootstrap Protocol ( BOOTP ) Dynamic Host Configuration Protocol ( DHCP ) Routing Information Protocol ( RIP ) 에도사용됩니다.

4. C 로알아보는 UDP 통신 간단하게 ECHO 서버와클라이언트로 UDP통신을어떻게사용하는지에대해알아보겠습니다. echoserver. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <unistd.h> #define MAXLINE 511 int main(int argc, char* argv[] ) { struct sockaddr_in servaddr, cliaddr; int s, nbyte, addrlen = sizeof(struct sockaddr); char buf[maxline]; if(argc!= 2 ) { printf("usage port"); } if((s = socket(af_inet, SOCK_DGRAM, 0 )) < 0) { perror("socket error"); } bzero((char*)&servaddr, addrlen); bzero((char*)&cliaddr, addrlen); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(inaddr_any); servaddr.sin_port = htons(atoi(argv[1])); if(bind(s,(struct sockaddr*)&servaddr, addrlen ) <0) { perror("bind Error"); }

} while(1) { puts("server : Waiting Request n"); nbyte = recvfrom(s,buf,maxline,0,(struct sockaddr*)&cliaddr, &addrlen); if(nbyte<0) { perror("recv error"); } buf[nbyte] = 0; printf("%d byte Recv : %s n",nbyte,buf); if(sendto(s,buf,nbyte,0,(struct sockaddr*)&cliaddr, addrlen) < 0 ) { perror("send Error"); } puts("send Complete n"); } return 0; echoclinet #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define MAXLINE 511 int main(int argc, char* argv[]) {struct sockaddr_in servaddr; int s, nbyte, addrlen = sizeof(servaddr); char buf[maxline+1]; if(argc!= 3 ) {printf("usage : ip, port");

}if((s = socket(pf_inet, SOCK_DGRAM, 0)) < 0) {perror("socket fail"); }bzero((char*)&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr(argv[1]); servaddr.sin_port = htons(atoi(argv[2])); if(fgets(buf,maxline,stdin) == NULL) {printf("fget error"); }if(sendto(s,buf,strlen(buf),0,(struct sockaddr*)&servaddr, addrlen) < 0) {perror("send error"); }if((nbyte = recvfrom(s,buf,maxline,0,(struct sockaddr*)&servaddr, &addrlen )) < 0) { perror("recv error"); }buf[nbyte] = 0; printf("%s n",buf); close(s); return 0; } 위프로그램작성후테스트를위해사용될 PC 입니다. NoteBook ( 서버 ) OS : Debian IP : 192.168.0.26 DeskTop ( 클라이언트 ) OS : BackTrack4 IP : 192.168.0.3 노트북에서 echoserver를실행하여 8894라는포트를열었습니다. 8894는 UDP를위한포트가됩니다.

클라이언트가접속합니다.

메시지를날립니다. 서버에서메시지를받고클라이언트로보내줍니다.

위프로그램은이런방식으로구동이되며 ettercap이나 dsniff등패킷을캡쳐해서분석해보면다음과같이 UDP를이용해데이터의통신이되고있을을알수있습니다. 서버의 8894 포트와클라이언트의 33885 포트를이용해서로데이터를주고받았습니다. 여기서. 클라이언트의포트가왜 33885 인가함은. 클라이언트에서데이터를전송시나갈포트를지정해주는데위의코드에서보면나갈포트를시스템에서랜덤하게잡아주게설정해놧기에임의의포트로전송을시도하게됩니다. 5. UDP 발전방향 많은서비스들이 TCP를이용해서비스하고있습니다. 그래서빈틈이많은서버관리자들은네트워크를체크시 UDP를놓칠수있습니다. 현재진행중인 HiddenEye 프로그램으로기본옵션으로확인시 UDP포트에대한정보를가져오지않습니다. 무능한관리자라면기본값만확인하고안전하다고판단할수도있는상황입니다.

또한전세계적으로잘알려진 NMAP을통한스캔에서도 UDP를따로체크해주지않는이상찾아낼수가없습니다.

이처럼사용자들에게덜알려진프로토콜이나접속방법등은공격자에게매우유용한길이될것이고그로말미암아시스템을장악당하게되는일또한일어날수있습니다. 잘찾아보시면 UDP를이용한공격법도많이존재합니다. 결론 이처럼 TCP와함께많이사용되는 UDP프로토콜에대해알아봄으로써좀더유연한프로그래밍지식과공격기법, 방어기법등여러가지에활용될수있도록기반을쌓는시간이되셨으면좋겠습니다. 감사합니다. 본글의저작권은이현환에게있습니다. 문의 : hanun@gmail.com :: http://noon.tistory.com