Stealth Scanner¸¦ ¸¸µé¾î º¸ÀÚ~! (1)

       

1.    Stealth ScanningÀ̶õ?

 

º¸Åë ¿ì¸®°¡ »ç¿ëÇÏ´Â ÀϹÝÀûÀÎ Æ÷Æ® ½ºÄ³³ÊµéÀÇ ÀÛµ¿ ¿ø¸®´Â ±²ÀåÈ÷ °£´ÜÇÕ´Ï´Ù.

´Ü¼øÈ÷ Ÿ°ÙÀÇ Æ¯Á¤ Æ÷Æ®¿¡ Á¢¼ÓÀ» ½Ãµµ ÇÑ ÈÄ, ¸¸¾à Á¢¼Ó ¼º°øÀ» ÀǹÌÇÏ´Â °ªÀÎ 0ÀÌ ¹ÝȯµÇ¸é,

"¿­¸²", ±×·¸Áö ¾Ê´Ù¸é "´ÝÈû"À̶ó´Â ³»¿ëÀÇ ¹®ÀåÀ» È­¸é¿¡ Ãâ·ÂÇØ ÁÖ´Â ¹æ½ÄÀ» »ç¿ëÇÏ´Â

°ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀÌ ¹æ¹ýÀ» »ç¿ëÇÔ¿¡ À־ ¿ì¸®°¡ ÇѰ¡Áö ¿°µÎ ÇØ¾ß ÇÒ »ç½ÇÀÌ ÀÖ½À´Ï´Ù.

±×°ÍÀº ¹Ù·Î ¸®´ª½º¸¦ ºñ·ÔÇÑ À¯´Ð½º ±â¹ÝÀÇ ½Ã½ºÅÛµéÀº ¿ÜºÎ·ÎºÎÅÍÀÇ ¸ðµç Á¢¼Ó¿¡ ´ëÇÑ ·Î±×

±â·ÏÀ» ³²±ä´Ù´Â Á¡ÀÔ´Ï´Ù. Áï, ¿ì¸®°¡ ƯÁ¤ Ÿ°Ù¿¡ Æ÷Æ® ½ºÄ³´×À» ÇÑ´Ù¸é, ±× »ç½ÇÀº ¸ðµÎ

½ºÄ³´×À» ´çÇÑ ¼­¹öÀÇ ·Î±×·Î ±â·Ï µË´Ï´Ù. ±×¸®°í º¸Åë ±× ·Î±× ±â·ÏÀ» º» ¼­¹ö °ü¸®ÀÚ´Â

´ç½Å¿¡°Ô ºÒ¹ýÀûÀÎ Á¢¼Ó ½Ãµµ¿¡ ´ëÇÑ Ç×ÀǸ¦ ÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù. À̰ÍÀº ¾ÇÀÇÀûÀÎ ¸ñÀûÀ» °¡Áö°í

½ºÄ³´×À» Çß´ø ¾È Çß´ø °£¿¡ ¿©°£ ÂóÂóÇÑ ÀÏÀÌ ¾Æ´Ò ¼ö ¾ø½À´Ï´Ù. ¸¸¾à ´ç½ÅÀÌ ¹ú½á ÀÌ·± °æÇèÀ»

ÇÑ ÀûÀÌ ÀÖ´Â ÇØÄ¿ Áö¸Á»ýÀ̶ó¸é, ¾Æ¸¶µµ ·Î±×¸¦ ³²±âÁö ¾ÊÀ¸¸é¼­ Æ÷Æ® ½ºÄ³´×À» ÇÏ´Â ¹æ¹ý¿¡

´ëÇÏ¿© ±Ã±ÝÇØ ÇÒ °ÍÀÔ´Ï´Ù. ±×¸®°í Á¶±Ý¸¸ °ü½ÉÀ» °®°í °ü·Ã ÀڷḦ °Ë»öÇÑ´Ù¸é, Ÿ°Ù ¼­¹ö¿¡

·Î±×¸¦ ³²±âÁö ¾ÊÀ¸¸é¼­ ½ºÄ³´×À» ÇÏ´Â °Í, ±×°ÍÀÌ ¹Ù·Î "Stealth Scanning"À̶ó´Â °ÍÀ» ¾Ë°Ô

µÉ °ÍÀÔ´Ï´Ù. ÀÌ ¹®¼­¿¡¼­´Â ÀÌ Stealth Scanning¿¡ ´ëÇÑ ±âº» Áö½Ä°ú ±¸Çö ¿ø¸®. ±×¸®°í ½ÇÁ¦

Á¦ÀÛ ¹æ¹ý¿¡ ´ëÇÏ¿© ¾ÆÁÖ »ó¼¼ÇÏ°Ô ¼³¸í ÇÕ´Ï´Ù. ÇѰ¡Áö ¾Ë¾ÆµÎ¾î¾ß ÇÒ Á¡Àº ÀÌ ¹®¼­´Â Àý´ë

"Stealth Scanning ±â¹ýÀ» ÀÌ¿ëÇÏ¿© ¸ô·¡ ½ºÄµÇÏ´Â ¹æ¹ý"À» ¾Ë¸®·Á´Â °ÍÀÌ ¾Æ´Ï¶ó´Â °ÍÀÔ´Ï´Ù.

¸¸¾à ±×·± °ÍÀÌ ¸ñÀûÀ̶ó¸é, ÆÐŶ½ºÅè µîÀÇ Exploit »çÀÌÆ®¿¡ °¡¸é ½±°Ô ±¸ÇÒ ¼ö ÀÖ´Â Stealth

Scanning ToolÀ» Çϳª °¡Á®¿Í »ç¿ë ¹æ¹ýÀ» ¾Ë·ÁÁÖ´Â °ÍÀÌ ÈξÀ ºü¸¦ °ÍÀÔ´Ï´Ù. ÀÌ ¹®¼­ÀÇ ¸ñÀûÀº

"Stealth Scanning"À̶ó´Â Èï¹Ì·Î¿î ¸Å°³Ã¼¸¦ ÅëÇÏ¿© ¿ì¸®°¡ Æò»ó½Ã¿¡ ´Ù·ê ±âȸ°¡ ¾ø¾ú´ø,

ȤÀº ³Ê¹« ¾î·Æ°Å³ª Áö·çÇØ¼­ ´Ù°¡°¡Áö ¸øÇß´ø "Raw Socket Programming"¿¡ ´ëÇÑ ÇнÀÀ»

Á¶±ÝÀÌ¶óµµ ´õ ½±°í Àç¹ÌÀÖ°Ô ÇÏÀÚ´Â °Í¿¡ ÀÖ½À´Ï´Ù.

 

2.    Stealth Scanner¸¦ ¸¸µé°í ½Í´Ù°í¶ó~?

 

ÀÌ ¹®¼­¸¦ º¸°í Stealth Scanner¸¦ ¸¸µé°í ½Í´Ù¸é ´ÙÀ½°ú °°Àº °ÍµéÀ» ¹Ì¸® ¾Ë°í ÀÖ¾î¾ß ÇÕ´Ï´Ù.

 

ù°, C¾ð¾î ´ëÇÑ ±âº» Áö½Ä ¹× ÇÁ·Î±×·¡¹Ö °æÇè.

à ¿ì¸®´Â C¾ð¾î¸¦ ÀÌ¿ëÇÏ¿© Stealth Scanner¸¦ ¸¸µé °ÍÀÔ´Ï´Ù. µû¶ó¼­ ¾î´À Á¤µµ C¾ð¾î¸¦

´Ù·ê ÁÙ ¾Ë¾Æ¾ß ÀÌ ¹®¼­ÀÇ ³»¿ëÀ» ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

 

µÑ°, ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ±âº» Áö½Ä.

à ÀÚÀ¯Çüµµ ÇÒ ¼ö ¾ø´Â »ç¶÷ÀÌ ¹è¿µÀ» ÇÒ ¼ö ÀÖÀ»±î¿ä? Socket Programming¿¡¼­

´õ¿í ±í°Ô µé¾î°£ °ÍÀÌ Raw Socket ProgrammingÀÔ´Ï´Ù. ¹°·Ð ¹è¿µºÎÅÍ ¹è¿öµµ ¸ð¶ó°í ±×·²

»ç¶÷Àº ¾ø°ÚÁö¸¸, ¾Æ¸¶ ´Ù¸¥ »ç¶÷µéº¸´Ù ÇнÀ ½Ã°£ÀÌ µÎ ¹è´Â ´õ °É¸± °ÍÀÔ´Ï´Ù. µû¶ó¼­

¾ÆÁ÷ ¼ÒÄÏ ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ÁÙ ¸ð¸¥´Ù¸é, ÀÎÅͳݿ¡¼­ ½±°Ô ±¸ÇÒ ¼ö ÀÖ´Â "BeejÀÇ ³×Æ®¿öÅ©

ÇÁ·Î±×·¡¹Ö °­ÁÂ"µîÀ» ¸ÕÀú ÇнÀÇϽñ⸦ ±ÇÀåÇÕ´Ï´Ù.

 

¼Â°, TCP/IP¿¡ ´ëÇÑ ±âº» Áö½Ä.

à ÀÌ ¹®¼­¿¡¼­ ¼³¸íµÉ Stealth Scanning ±â¹ýÀº TCP¿Í IPÀÇ Çì´õ¸¦ Á÷Á¢ Á¦ÀÛÇÏ´Â

°Í¿¡¼­ºÎÅÍ ½ÃÀ۵˴ϴÙ. µû¶ó¼­ ´ç¿¬È÷ TCP°¡ ¹ºÁö IP°¡ ¹ºÁö´Â ¾Ë°í ÀÖ¾î¾ß ÇÒ °ÍÀÔ´Ï´Ù.

±× ¿Ü Packet ¹× Network LayerµîÀÇ ±âº» Áö½ÄÀ» °¡Áö°í ÀÖ´Ù¸é ¹®¼­¸¦ Àдµ¥ ÈξÀ ¼ö¿ùÇÒ °ÍÀÔ´Ï´Ù.

 

3.    Raw Socket Programming °­Á¸¦ ½ÃÀÛÇÕ´Ï´Ù.

 

Raw Socket ProgrammingÀ̶õ ¹«¾ùÀϱî¿ä? ¿©±â¼­ Raw¶õ "¾ÆÁ÷ ¼Õ´ëÁö ¾ÊÀº~!"´ëÃæ

ÀÌ·± ¶æÀ» °¡Áö°í ÀÖ´Â ´Ü¾îÀÔ´Ï´Ù. ¸¸¾à ³» ¾Õ¿¡ µµÀåÀ¸·Î ¾²ÀÏ ³ª¹«°¡ Çϳª ÀÖ´Ù°í ÇØº¾½Ã´Ù.

±×·±µ¥ ¾î¶² »ç¶÷ÀÌ ±× ³ª¹« À§¿¡ ÀÌ¹Ì ÀÚ±â À̸§À» »õ°Ü ³õ¾Ò´Ù¸é? ³ª´Â ±× ³ª¹«¸¦ ³» µµÀåÀ¸·Î

¾µ ¼ö ¾øÀ» °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ ³ª¿¡°Ô µµÀåÀ¸·Î ¾²ÀÏ ºó ³ª¹«°¡ ÁÖ¾îÁø´Ù¸é? ³ª´Â ³»°¡ ¿øÇÏ´Â

´ë·Î À̸§À» »õ°Ü ³ª¸¸ÀÇ µµÀåÀ¸·Î ¸¸µé ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

 

ÀϹÝÀûÀÎ "Socket"°ú "Raw socket"ÀÇ Â÷ÀÌÁ¡µµ ÀÌ¿Í °°½À´Ï´Ù. ¿ì¸®°¡ ¸¸¾à ÀϹÝÀûÀÎ

¹æ¹ýÀ¸·Î ¼ÒÄÏÀ» Çϳª »ý¼ºÇϸé, ±× ¼ÒÄÏÀÇ ³»¿ë.. Áï, ½ÇÁúÀûÀ¸·Î ¾ê±âÇÏÀÚ¸é TCP Header,

IP Header µîÀÇ °ªÀÌ Kernel¿¡ ÀÇÇØ ÀÚµ¿À¸·Î Á¤ÇØÁý´Ï´Ù. µû¶ó¼­ ¿ì¸®°¡ ±× °ªÀ» Á÷Á¢ ÁöÁ¤ÇÒ

¼ö ÀÖ´Â ±ÇÇÑÀÌ ¾ø¾îÁ® ¹ö¸³´Ï´Ù. ÇÏÁö¸¸, Raw SocketÀ¸·Î ¼ÒÄÏÀ» »ý¼ºÇϸé, ±× ¼ÒÄÏÀº ¾Õ¼­

¼³¸íÇÑ ´ë·Î "¾ÆÁ÷ ¼Õ´ëÁö ¾ÊÀº~!" °ÍÀÌ µË´Ï´Ù. ¿ª½Ã ½ÇÁúÀûÀ¸·Î ¾ê±âÇÏÀÚ¸é, TCP Header,

IP Header ±× ¿Ü UDP, ICMP, IGMP Header µîÀÇ °ªÀ» ¿ì¸®°¡ Á÷Á¢ °áÁ¤ÇÒ ¼ö ÀÖ´Â »óŰ¡ µÈ´Ù´Â

¸»ÀÔ´Ï´Ù.

 

±×·³ ¿Ö KernelÀÌ ÀÚµ¿À¸·Î Á¤ÇÒ ¼ö ÀÖ´Â °ªÀ» ¾î·Æ°Ô ¿ì¸®°¡ Á÷Á¢ ¸¸µå´Â

ÀÌ»óÇÑ ÁþÀ» ÇÒ±î¿ä? ¸¸¾à TCP, IP Header µîÀ» ¿ì¸® ¸¶À½´ë·Î Á¶ÀÛÇÒ ¼ö ÀÖ´Ù¸é, ¿Ï¼ºµÈ ÆÐŶÀº

ÃæºÐÈ÷ ºñÁ¤»óÀûÀÏ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í ±×·± ºñÁ¤»óÀûÀÎ ÆÐŶÀ» ÀÌ¿ëÇϸé, Stealth Scanning,

OS Detection, Denial Of Service µîÀÇ ¿ª½Ã ºñÁ¤»óÀûÀÎ(?) ÇൿÀ» ÇÒ ¼ö ÀÖ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.

 

Raw Socket¿¡ ´ëÇØ ¾î´À Á¤µµ ÀÌÇØ¸¦ ÇÏ¿´´Ù¸é ÀÌÁ¦ ½ÇÁ¦ Raw SocketÀ» ÀÌ¿ëÇÏ¿© PacketÀ»

¸¸µå´Â °úÁ¤¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇսôÙ. ´ÙÀ½Àº Raw Socket¿¡ ÀÇÇØ PacketÀÌ ¸¸µé¾îÁö´Â °úÁ¤ÀÔ´Ï´Ù.

 

[ Raw Socket¿¡ ÀÇÇØ PacketÀÌ ¸¸µé¾îÁö´Â °úÁ¤ ]

 

1. socket() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¼ÒÄÏÀ» »ý¼ºÇÑ´Ù. ´Ü, ÀÌ ¶§ µÎ ¹øÂ° ÀÎÀÚ(type)ÀÇ

°ªÀ» ¹Ýµå½Ã"SOCK_RAW"·Î ÁöÁ¤ÇÏ°í ¼¼ ¹øÂ° ÀÎÀÚ(protocol)ÀÇ °ªÀº

"IPPROTO_RAW"·Î ÁöÁ¤ÇÑ´Ù.

 

Ex) sockfd = socket( AF_INET, SOCK_RAW, IPPROTO_RAW );

 

2. ÀÌÁ¦ setsockopt() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© "¿ì¸®°¡ Á÷Á¢ Çì´õÀÇ °ªÀ» ÁöÁ¤ÇÒ ¼ö

ÀÖµµ·Ï" ÀÌ ¼ÒÄÏÀÇ ¿É¼ÇÀ» º¯°æÇØ ÁÖ¾î¾ß ÇÑ´Ù.

 

Ex) setsockopt( sockfd, IPPROTO_IP, IP_HDRINCL, (char *)&value,

sizeof( value ) );

 

4. IP Header ±¸Á¶Ã¼ÀÇ °ªÀ» Á÷Á¢ ä¿î´Ù.

3. TCP Header ±¸Á¶Ã¼ÀÇ °ªÀ» Á÷Á¢ ä¿î´Ù.

5. ¿ì¸®¸¸ÀÇ Packet Header ¿Ï¼º!!

6. ƯÁ¤ ¼­¹ö·Î ÆÐŶ ¹ß»ç~!

7. ½º´ÏÇÎ(Sniffing) ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¿© ¿ì¸®°¡ ¸¸µç PacketÀÌ Á¦´ë·Î Àü¼Û

µÇ¾ú´ÂÁö¸¦ È®ÀÎ.

 

ÀÌ»óÀÔ´Ï´Ù. »ý°¢º¸´Ù °£´ÜÇÏÁÒ? ½ÇÁ¦ ÇÁ·Î±×·¡¹Ö °úÁ¤µµ ±×¸® º¹ÀâÇÏÁö ¾Ê½À´Ï´Ù.

ÀÚ, ±×·³ ÀÌÁ¦ À§ ½Ã³ª¸®¿À´ë·Î ÇÁ·Î±×·¡¹ÖÇØ ³ª°¡ º¼±î¿ä?

       

[ Raw Socket Programming ¿¹Á¦ ]

 

 

// ÀϹÝÀûÀÎ Çì´õ ÆÄÀÏ Æ÷ÇÔ

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

 

// Socket °ü·Ã Çì´õ ÆÄÀÏ Æ÷ÇÔ

#include <sys/socket.h>

#include <sys/types.h>

#include <arpa/inet.h>

#include <netinet/in.h>

 

// tcp/ip °ü·Ã Çì´õ ÆÄÀÏ Æ÷ÇÔ

#include <linux/ip.h>

#include <linux/tcp.h>

 

int main()

{

        // ÀÌÁ¦ºÎÅÍ ¿ì¸®°¡ ¸¸µé PacketÀÌ ÀúÀåµÇ´Â º¯¼ö.

        // TCP Çì´õ¿Í IP Çì´õ°¡ °¢°¢ 20¹ÙÀÌÆ® ÀÓÀ¸·Î ÃÑ 40¹ÙÀÌÆ®°¡ µÇ¾ú½À´Ï´Ù.

        unsigned char packet[40];

       

        // ·Î¿ì ¼ÒÄÏ µð½ºÅ©¸³ÅÍ.

        int raw_socket;

 

        // ÂüÀ» ³ªÅ¸³»´Â °ªÀÎ 1ÀÌ ÀúÀåµÇ´Â º¯¼ö. ¿ëµµ´Â µÚ¿¡ ¼³¸í~!

        int on = 1 ;

 

        // IP Çì´õ ±¸Á¶Ã¼ º¯¼ö

        struct iphdr *iphdr;

 

        // TCP Çì´õ ±¸Á¶Ã¼ º¯¼ö.

        struct tcphdr *tcphdr;

 

        // sendto() ÇÔ¼ö¿¡¼­ »ç¿ëÇÒ ¹Þ´Â ÀÌÀÇ ÁÖ¼Ò °ª.

        struct sockaddr_in address;

 

        // ÀÌÁ¦ º¯¼ö ¼±¾ðÀº ³¡³µ½À´Ï´Ù. ±×·³ Áö±ÝºÎÅÍ ·Î¿ì ¼ÒÄÏÀ» ¸¸µé¾î º¼±î¿ä?

 

        // µÎ ¹øÂ°¿Í ¼¼ ¹øÂ° ÀÎÀÚ¿¡ ÁÖ¸ñ! Æò¼Ò¿¡´Â SOCK_STREAM¿Í IPPROTO_TCP¸¦

        // »ç¿ëÇß¾úÁÒ? ÇÏÁö¸¸ ·Î¿ì ¼ÒÄÏÀ» ¸¸µé ¶§´Â ¾Æ·¡¿Í °°Àº °ªÀ» ³Ö¾îÁà¾ß

// ÇÕ´Ï´Ù. ±×¸®°í ÃÖ´ëÇÑ ¼Ò½º¸¦ °£°áÇÏ°Ô Çϱâ À§ÇØ ¿¡·¯ 󸮴 »ý·«Çϵµ·Ï

// ÇϰڽÀ´Ï´Ù.

        raw_socket = socket( AF_INET, SOCK_RAW, IPPROTO_RAW );

 

        // ÇÔ¼ö ¸í ±×´ë·Î ¼ÒÄÏÀÇ ¿É¼ÇÀ» ¼¼ÆÃÇϰڴÙ~ ¶ó´Â ¶æÀÇ ÇÔ¼öÀÔ´Ï´Ù.

        // µÎ ¹øÂ° ÀÎÀÚ´Â ÇÁ·ÎÅäÄÝÀÇ ·¹º§, ¼¼, ³× ¹øÂ° ÀÎÀÚ´Â °¢°¢ ¿É¼Ç Ç׸ñ°ú

// °ªÀ» ÀǹÌÇϰí, ¸¶Áö¸· ÀÎÀÚ´Â ±× °ªÀÇ Å©±â¸¦ ÀǹÌÇÕ´Ï´Ù.

        // ¿©±â¼­ ÇÔ¼ö ¿øÇüÀ» º¸¸é ³× ¹øÂ° ÀÎÀÚ´Â ÁÖ¼Ò °ªÀ» ¿ä±¸ÇϹǷÎ, 1À̶ó´Â

// °ªÀÌ ÀúÀåµÈ on À̶ó´Â º¯¼ö¸¦ ¸¸µç ÈÄ ±× º¯¼öÀÇ ÁÖ¼Ò °ªÀ» ³Ö¾î

// ÁÖ¾ú½À´Ï´Ù. ¿ì¸®°¡ ¼³Á¤ÇÑ °ªÀº "ÀÌÁ¦ºÎÅÍ ÆÐŶÀÇ Çì´õ¸¦ Á÷Á¢ ¸¸µé°Ú´Ù!"

// ¸¦ ÀǹÌÇÕ´Ï´Ù.

 

        setsockopt( raw_socket, IPPROTO_IP, IP_HDRINCL, (char *)&on, sizeof(on) );

// ÇÔ¼ö ¿øÇü ->

// int setsockopt( int s, int level, int name, const void *val, int len )

 

        // ÀÚ~! ±×·³ ÀÌÁ¦ºÎÅÍ TCP Çì´õ¸¦ Á÷Á¢ ¸¸µé¾î º¼±î¿ä? ¿ì¸®°¡ º¸Åë

// TCP/IP¶ó°í ¸»ÇÏÁö¸¸ ½ÇÁ¦ Packet¿¡¼­´Â IP Çì´õ°¡ ¾ÕÂÊ¿¡ À§Ä¡ ÇÑ´ä´Ï´Ù.

// µû¶ó¼­ ´ÙÀ½°ú °°ÀÌ ¾Õ 20¹ÙÀÌÆ®¿¡ IP Çì´õ°¡ µé¾î°¥ 20¹ÙÀÌÆ®ÀÇ

// ÀÚ¸®¸¦ ³²°ÜµÎ¾î¾ß ÇÕ´Ï´Ù.

// ÀÌ ºÎºÐÀÌ ÀÌÇØ ¾È °¡½Ã´Â ºÐÀº Æ÷ÀÎÅÍ °øºÎ¸¦ ¸ÕÀú ÇÏ¼Å¾ß ÇÒ°Ì´Ï´Ù.

tcphdr = (struct tcphdr *)(packet + 20 );

 

        // ¸ðµç °ªÀ» 0À¸·Î ÃʱâÈ­.

memset( (char *)tcphdr, 0, 20 );

 

        // ¹ß½ÅÀÚÀÇ ¹ß½Å Æ÷Æ®, ¸¶À½´ë·Î ÁöÁ¤~!

        tcphdr->source = htons( 777 );

       

        // ¼ö½ÅÀÚÀÇ Æ÷Æ® ÁöÁ¤.

        tcphdr->dest = htons( 12345 );

 

        // Sequence Number ÁöÁ¤. º¸Åë 10ÀÚ¸® ¹Ì¸¸ÀÇ ¼ýÀÚ °ª.

        tcphdr->seq = htonl( 92929292 );

 

        // Acknowledgement NumberÀÇ °ª. ¸¶Âù°¡Áö.

        tcphdr->ack_seq = htonl( 12121212 );

 

// offsetÀÇ °ª ÁöÁ¤.

        tcphdr->doff = 5;

 

// SYN flag ¼³Á¤

        tcphdr->syn = 1;

 

        // À©µµ¿ì »çÀÌÁî.

        tcphdr->window = htons( 512 );

 

// ¸Þ½ÃÁö°¡ ¹«»çÈ÷ µµÂøÇß´ÂÁö ³ªÅ¸³»´Â °ª. ÀÏ´Ü ÀÓÀÇÀÇ °ªÀÎ 1·Î ¼³Á¤.

// Áß¿äÇÑ º¯¼ö¶ó´Â °É ²À ±â¾ïÇØ µÎ¼¼¿ä.

        tcphdr->check = 1;

 

        // * ÀÚ~! ÀÌÁ¦ TCP Çì´õ Á¦ÀÛÀÌ ³¡³µ½À´Ï´Ù. °£´ÜÇÏÁÒ? ^^

// ¿©±â¼­ Àá±ñ, ½¬¿î ÀÌÇØ¸¦ À§ÇØ ¿ì¸®°¡ ¸¸µç TCP Çì´õ¸¦ µµ½ÄÈ­ ÇØº¾½Ã´Ù

 

[ ±×¸²À¸·Î Ç¥ÇöµÈ TCP Çì´õ ]    -à   [ ¿ì¸®°¡ °ªÀ» ä¿ö³ÖÀº ¸ð½À ]

 

// Á÷Á¢ °ªÀ» ÁöÁ¤ÇØ ÁÖÁö ¾ÊÀº ºÎºÐÀº óÀ½¿¡ ÃʱâÈ­Çß´ø ´ë·Î 0 ÀÔ´Ï´Ù.

// ±×·³ À̹ø¿£ IP Çì´õ¸¦ ¸¸µé¾î º¸µµ·Ï ÇսôÙ.

 

        // ¿ì¸®°¡ ¼³Á¤ÇÏ´Â °ªÀÌ Á÷Á¢ packet º¯¼ö¿¡ ÀúÀåµÇµµ·Ï ¿¬°áÇØ ÁÝ´Ï´Ù.

        iphdr = (struct iphdr *)packet;

 

        // ¸ðµç °ªÀ» 0À¸·Î ÃʱâÈ­.

        memset( (char *)iphdr, 0, 20 );

 

        // IP VersionÀÇ °ªÀº 4·Î ¼³Á¤.

        iphdr->version = 4;

       

        // IP Header LengthÀÇ °ªÀ» 5·Î ¼³Á¤.

        iphdr->ihl = 5;

 

        // protocolÀ» TCP·Î ¼³Á¤.

        iphdr->protocol = IPPROTO_TCP;

 

        // ÆÐŶÀÇ ÃÑ ±æÀÌ´Â 40À¸·Î ¼³Á¤.

        iphdr->tot_len = 40;

 

        // °¢°¢ÀÇ ÆÐŶÀ» ±¸ºÐÇÒ ¶§ ¾²ÀÌ´Â ID, ÀÓÀÇÀÇ °ªÀ¸·Î ¼³Á¤.

        iphdr->id = htons( 777 );

 

        // ±âº» Time To LiveÀÇ °ª.

        iphdr->ttl = 60;

 

// üũ¼¶ °ª.. Áß¿äÇÑ °ÍÀ̶ó°í ¸»ÇßÁÒ? ±â¾ïÇÏ°í °è¼¼¿ä.

        iphdr->check = 1;

 

        // ¹ß½ÅÀÚÀÇ IP ¼³Á¤. ³» ¸¶À½´ë·Î~!

        iphdr->saddr = inet_addr( "111.111.111.111" );

 

        // ¼ö½ÅÀÚÀÇ IP ¼³Á¤. ÀÌ°Ç ½ÇÁ¦ ÆÐŶÀ» ¹Þ°Ô µÉ IP¸¦ Àû¾îÁà¾ß°ÚÁÒ?

        // ÀÌ °­Á¿¡¼­´Â ¿ÜºÎ¿¡ ÀÖ´Â ¸®´ª½º ¼­¹ö(211.189.88.58)¿¡¼­ Á¦ À©µµ¿ì

// ÄÄÇ»ÅÍ(218.149.4.60)·Î ÆÐŶÀ» º¸³»´Â ¿¹·Î ¼³¸íÇÒ °ÍÀÔ´Ï´Ù.

        iphdr->daddr = inet_addr( "218.149.4.60" );

 

  // * µåµð¾î IP Çì´õ Á¦ÀÛµµ ³¡³µ½À´Ï´Ù.~

// ¿ª½Ã ´«À¸·Î Çѹø È®ÀÎÇØ º¸µµ·Ï ÇսôÙ.

 

[ ±×¸²À¸·Î Ç¥ÇöµÈ IP Çì´õ ]    -à   [ ¿ì¸®°¡ °ªÀ» ä¿ö³ÖÀº ¸ð½À ]

 

        // ÀÚ~! ±×·³ ÀÌÁ¦ Áö±Ý±îÁö Á¦ÀÛÇÑ ÆÐŶÀ» ³¯·Á º¼±î¿ä?

 

        // ÀÏ´Ü ÆÐŶÀ» ¹Þ°Ô µÉ °÷ÀÇ ÁÖ¼Ò Á¤º¸¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

        // Âü°í·Î ¾Æ±î ÁöÁ¤ÇÑ Æ÷Æ®¿Í ÁÖ¼Ò´Â Çì´õ¿¡ ÀúÀåµÇ´Â °ªÀ̰í,

        // À̹ø¿¡ Àû¾îÁÖ´Â °ÍÀº sendto() ÇÔ¼ö¿¡¼­ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.

        address.sin_family = AF_INET;

        address.sin_port = htons( 12345 );

        address.sin_addr.s_addr = inet_addr( "218.149.4.60" );

 

        // ÆÐŶ ¹ß»ç!!

sendto( raw_socket, &packet, sizeof(packet), 0x0,

(struct sockaddr *)&address, sizeof(address));

 

}

 

 

³¡³µ½À´Ï´Ù. Áö±Ý±îÁö ÃÖ´ëÇÑ °£´ÜÇÑ ¹æ¹ýÀ¸·Î Raw Socket ProgrammingÀ» ÇØ º¸¾Ò

½À´Ï´Ù. ÀÌÁ¦ ÀÌ ±âº»ÀûÀÎ Äڵ忡¼­ Á¶±Ý¾¿ Á¶±Ý¾¿ ÀÀ¿ëÀ» Çϰí, ÇÊ¿äÇÑ ºÎºÐ¿¡

»ìÀ» ºÙÀÌ´Â ¿¬½À¸¸ Çϸé Raw SocketÀº ³» ¼Õ¾ÈÀ¸·Î~ µé¾î¿À°Ô µË´Ï´Ù.

 

±×·³, °ú¿¬ Áö±Ý±îÁö ¸¸µç ÆÐŶÀÌ Á¤»óÀûÀ¸·Î »ó´ë¹æ ÄÄÇ»ÅͱîÁö Àü´ÞÀÌ µÉ °Í

ÀÎÁö È®ÀÎÇØ º¸´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÒ °ÍÀÔ´Ï´Ù. È®ÀÎ ÀÛ¾÷Àº °£´ÜÇÏ°Ô ÆÐŶ ½º´ÏÆÛ¸¦

ÀÌ¿ëÇÏ¸é µÇ°ÚÁö¿ä? ÆÐŶ ½º´ÏÆÛ¸¦ ÀÌ¿ëÇÏ¸é ¼­¹ö¿¡¼­ ¿À°í °¡´Â ¸ðµç ÆÐŶÀ»

´«À¸·Î ½±°Ô È®ÀÎÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

 

ÀÚÁÖ »ç¿ëµÇ´Â ÆÐŶ ½º´ÏÆÛ¿¡´Â TCPDUMP, Sniffit, Ethereal, SpynetµîÀÌ ÀÖÀ¸¸ç,

¿©±â¿¡¼± Ethereal ÇÁ·Î±×·¥À» »ç¿ëÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº

www.ethereal.org¿¡¼­ ¸®´ª½º/À©µµ¿ì¿ë ¸ðµÎ ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù.

 

¸ÕÀú Áö±Ý±îÁö ÀÛ¼ºÇÑ Äڵ带 ÄÄÆÄÀÏ ÇÕ´Ï´Ù.

    

 

±×¸®°í ÆÐŶÀ» È®ÀÎÇϱâ À§ÇØ ÆÐŶ ½º´ÏÆÛ ÇÁ·Î±×·¥ etherealÀ» ½ÇÇà ½Ãŵ´Ï´Ù.

 

 

ÀÌÁ¦ Capture->Start->OK ¹öưÀ» ´­·¯ ÆÐŶ ½º´ÏÇÎÀ» ½ÃÀÛÇϰí, ./raw_socket ÇÁ·Î±×·¥À»

½ÇÇàÇÑ ÈÄ, STOP ¹öưÀ» ´­·¯ ÆÐŶ ½º´ÏÇÎÀ» ÁßÁöÇÕ´Ï´Ù. ±×·³ ´ÙÀ½°ú °°ÀÌ ÆÐŶ ½º´ÏÇÎÀ»

ÇÏ´Â µ¿¾È¿¡ ¿À°í °£ ÆÐŶ Á¤º¸°¡ È­¸é¿¡ ³ªÅ¸³³´Ï´Ù.

 

 

±×¸®°í ÀÌ ÆÐŶ Á¤º¸µéÀ» ÀÚ¼¼È÷ º¸¸é, ¿ì¸®°¡ Á÷Á¢ Á¦ÀÛÇÏ¿© Àü¼ÛÇÑ ÆÐŶÀ» ãÀ» ¼ö ÀÖ½À´Ï´Ù.

 

[ ¿ì¸®°¡ ¸¸µé¾î º¸³½ ÆÐŶ ]

 

ÀÌÁ¦ ÀÌ ÆÐŶÀ» ´õºí Ŭ¸¯Çϸé, »ó¼¼ Á¤º¸°¡ ¾Æ·¡ÂÊ¿¡ ÀÖ´Â À©µµ¿ì¿¡ Ãâ·ÂµË´Ï´Ù.

 

[ Àü¼Û¹ÞÀº ÆÐŶÀÇ IP HEADER Á¤º¸ ]

 

[ Àü¼Û¹ÞÀº ÆÐŶÀÇ TCP HEADER Á¤º¸ ]

 

À§ÀÇ °ªµéÀ» À¯½ÉÈ÷ »ìÆìº¸¸é, ¿ì¸®°¡ Á÷Á¢ ¸¸µé¾ú´ø ±× Çì´õÀÇ °ªÀÌ °í½º¶õÈ÷

Àü´ÞµÇ¾ú´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ±× Áß ´« ¿©°Ü º¼ ¸¸ÇÑ °ÍÀº ¿ì¸®°¡ °ÅÁþÀ¸·Î

¸¸µé¾ú´ø ¹ß½ÅÀÚ IP¿Í PORT ±×¸®°í FLAG µîÀÇ °ªÀ» Ŭ¶óÀÌ¾ðÆ® Ãø¿¡¼­ ÀüÀûÀ¸·Î

½Å·ÚÇϰí ÀÖ´Ù´Â Á¡ÀÔ´Ï´Ù.

 

ÀÌó·³ Raw SocketÀ» ÀÌ¿ëÇϸé, ÆÐŶÀÇ Á¤º¸¸¦ ¿ì¸®°¡ ¿øÇÏ´Â ´ë·Î Á¶ÀÛÇÒ ¼ö

ÀÖÀ¸¸ç, À̰ÍÀº ¹Ù·Î IP Spoofing°ú D.o.S °ø°Ý ±×¸®°í OS ŽÁö ±â¼ú µîÀÇ

½ÃÃʰ¡ µË´Ï´Ù.

 

±×·³ À̹ø¿£ ¶Ç ´Ù¸¥ Å×½ºÆ®·Î, TCP¿Í IP Çì´õÀÇ ¸î °¡Áö °ªÀ» º¯°æÇÏ¿© ÆÐŶÀ»

³¯·Áº¸µµ·Ï ÇսôÙ.

 

// ¹ß½ÅÀÚÀÇ IP

iphdr->saddr = inet_addr( "111.111.111.111" );

----à ¼öÁ¤

iphdr->saddr = inet_addr( "210.210.210.210." );

 

// Flag °ªµé

tcphdr->syn = 1;

----à ¼öÁ¤

tcphdr->rst = 1;

tcphdr->fin = 1;

 

¿ª½Ã ÆÐŶ ½º´ÏÆÛ¸¦ ÀÌ¿ëÇÏ¿© °á°ú °ªÀ» È®ÀÎÇØ º¼±î¿ä?

 

[ ¹ß½ÅÀÚ ÁÖ¼Ò = 210.210.210.210. ]

 

[ FLAG = FIN + RST ]

 

À§Ã³·³ ´Ù½Ã Çѹø Raw Socket ProgrammingÀ» ÀÌ¿ëÇÏ¸é ÆÐŶ Çì´õÀÇ °ªÀ» ¿øÇÏ´Â

´ë·Î Á¶ÀÛÇÒ ¼ö ÀÖ´Ù´Â »ç½ÇÀ» È®ÀÎÇÏ¿´½À´Ï´Ù.

 

±×·³ À̹ø °­Á´ ¿©±â¼­ ¸¶Ä¡µµ·Ï Çϰí, ´ÙÀ½ °­Á¿¡¼± À̹ø¿¡ Á¦ÀÛÇÑ ÇÁ·Î±×·¥ÀÇ

¹®Á¦Á¡¿¡ ´ëÇÏ¿© ¼³¸íÇϵµ·Ï ÇϰڽÀ´Ï´Ù.