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À» ÀÌ¿ëÇϸé
ÆÐŶ Çì´õÀÇ °ªÀ» ¿øÇÏ´Â
´ë·Î Á¶ÀÛÇÒ ¼ö ÀÖ´Ù´Â »ç½ÇÀ» È®ÀÎÇÏ¿´½À´Ï´Ù.
±×·³ À̹ø °Á´ ¿©±â¼ ¸¶Ä¡µµ·Ï Çϰí, ´ÙÀ½ °Á¿¡¼± À̹ø¿¡ Á¦ÀÛÇÑ
ÇÁ·Î±×·¥ÀÇ
¹®Á¦Á¡¿¡ ´ëÇÏ¿© ¼³¸íÇϵµ·Ï ÇϰڽÀ´Ï´Ù.