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

 

- Stealth ScannerÀÇ ±¸Çö ¿ø¸®.

         Áö±Ý±îÁö ±âº»ÀûÀÎ raw socket programming¿¡ ´ëÇÏ¿© ÇнÀÇÏ¿´½À´Ï´Ù.

±×·³ ÀÌÁ¦ºÎÅÍ ÀÌ °­ÁÂÀÇ ÃÖÁ¾ ¸ñÇ¥ÀÎ ¡°·Î±×¸¦ ³²±âÁö ¾Ê°í Æ÷Æ® ½ºÄµÀ» ÇÏ´Â ¹æ¹ý¡±

¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇսôÙ. µµ´ëü ¾î¶»°Ô raw socket programmingÀ» ÀÌ¿ëÇϸé

»ó´ë¹æ ¼­¹ö¿¡ Æ÷Æ® ½ºÄ³´×¿¡ ´ëÇÑ ·Î±×¸¦ ³²±âÁö ¾ÊÀ» ¼ö ÀÖÀ»±î¿ä? ÀÌ¿¡ ´ëÇÑ

ÇØ´äÀº ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ® »çÀÌÀÇ ¿¬°áÀ» »ý¼ºÇÏ´Â 3 Way Handshake °úÁ¤À» ÀÌÇØÇϸé

¾Ë ¼ö ÀÖ½À´Ï´Ù.

 

 

- 3 Way Handshake¶õ?

µÎ ÄÄÇ»ÅÍ »çÀÌ¿¡ TCP ¿¬°áÀÌ ¼º¸³µÇ·Á¸é, 3 Way Handshake¶ó´Â °úÁ¤À» °ÅÃľß

ÇÕ´Ï´Ù.¡°3 Way Handshake¡±¶ó´Â ¿ë¾î´Â ½±°Ô ¸»ÇØ ¡°¼¼ ¹ø ÆÐŶÀ» ±³È¯ÇÑ´Ù~¡±

¶ó´Â Àǹ̸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº ¼­·Î°¡ ¼­·Î¸¦ È®ÀÎÇϱâ À§ÇØ ÇÊ¿äÇÑ

ÀÛ¾÷ÀÌÁö¿ä. °£´ÜÇÏ°Ô Á¤¸®ÇØ º¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.

 

[ A¶ó´Â Ŭ¶óÀ̾ðÆ®¿Í B¶ó´Â ¼­¹ö°¡ ÀÖÀ» ¶§. A¿¡¼­ B·Î ¿¬°áµÇ´Â °úÁ¤.]

1 ´Ü°è : A¿¡¼­ B·Î SYN Ç÷¡±×¸¦ ´ãÀº ÆÐŶÀ» Àü¼ÛÇÑ´Ù.

2 ´Ü°è : SYN Ç÷¡±×°¡ ´ã±ä ÆÐŶÀ» ¹ÞÀº B´Â A·Î SYNÀ» Àß ¹Þ¾Ò´Ù´Â

         SYN+ACK Ç÷¡±×°¡ ´ã±ä ÆÐŶÀ¸·Î ÀÀ´äÇÑ´Ù

3 ´Ü°è : B·ÎºÎÅÍ SYN+ACK Ç÷¡±×°¡ ´ã±ä ÆÐŶÀ» ¹ÞÀº A´Â ¸¶Áö¸·À¸·Î ACK

         Ç÷¡±×°¡ ´ã±ä ÆÐŶÀ» B·Î Àü¼ÛÇÏ°í, ºñ·Î¼Ò ¿¬°áÀÌ ¼º¸³µÈ´Ù.

 

 

À§ °úÁ¤¿¡¼­ ¿ì¸®¿¡°Ô Áß¿äÇÑ Á¡Àº ¹Ù·Î 1,2 ´Ü°è °úÁ¤À» °ÅÄ£ ÈÄ 3 ´Ü°è °úÁ¤¿¡¼­

¿¬°áÀÌ ¼º¸³µÈ´Ù´Â °ÍÀÔ´Ï´Ù. ¿Ö³ÄÇÏ¸é ¹Ù·Î ÀÌ ¼ø°£¿¡ »ó´ë¹æ ¼­¹ö¿¡ ·Î±× ±â·ÏÀÌ

³²±â ¶§¹®ÀÔ´Ï´Ù. ÀÌ »ç½ÇÀ» ¾Ë¾Ò´Ù¸é ÀÌÁ¦ Stealth Scanning¿¡ ´ëÇÑ °¨ÀÌ ½½½½ ¿À½Ç °Ì´Ï´Ù.

 

¿ì¸®°¡ ÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î ¼ÒÄÏ Á¢¼ÓÀ» ÇÒ ¶§, À§ 3´Ü°è °úÁ¤Àº connect() ÇÔ¼ö¿¡ ÀÇÇØ

ÀÚµ¿À¸·Î ÁøÇàµË´Ï´Ù. ÇÏÁö¸¸, raw socketÀ» ÀÌ¿ëÇϸé ÀÌ °úÁ¤À» Á÷Á¢ ±¸ÇöÇÒ ¼ö ÀÖ°Ô

µË´Ï´Ù. µû¶ó¼­, 1,2 ´Ü°è °úÁ¤À» ÇÁ·Î±×·¡¹ÖÇÑ ÈÄ, 3 ´Ü°è °úÁ¤Àº ÇÏÁö ¾Ê´Â´Ù¸é? 

¼­¹ö¿Í Ŭ¶óÀ̾ðÆ® »çÀÌ¿¡´Â ¿¬°áÀÌ ¼º¸³µÇÁö ¾ÊÀ» °ÍÀÌ°í, µû¶ó¼­ ·Î±× ±â·Ïµµ ³²Áö ¾Ê°Ô

µÉ °ÍÀÔ´Ï´Ù. ±×·¡¼­ ÀÌ °ø°Ý ±â¹ýÀ» Half open scanningÀ̶ó°í ºÎ¸¨´Ï´Ù. Çؼ®ÇÏÀÚ¸é,

¹Ý¸¸ ¿­¸° ½ºÄ³´×À̶ó°í ÇÒ ¼ö ÀÖÀ¸¸ç, ¿Ö ÀÌ·¸°Ô ºÎ¸£´ÂÁö´Â ½±°Ô ¿¹ÃøÇÒ ¼ö ÀÖ°ÚÁö¿ä.

 

 

- ¿ì¸®ÀÇ °èȹ

 

1 ´Ü°è : A¿¡¼­ B·Î SYN Ç÷¡±×¸¦ ´ãÀº ÆÐŶÀ» Àü¼ÛÇÑ´Ù.

2 ´Ü°è : Àü¼ÛÇÑ ÆÐŶ¿¡ ´ëÇÑ ÀÀ´äÀ» ¹Þ´Â´Ù.

3 ´Ü°è : ??????

 

 

±×·³ ´ÜÁö 1´Ü°è¿Í 2´Ü°è °úÁ¤¸¸À¸·Î ÇØ´ç Æ÷Æ®°¡ ¿­·È´ÂÁö ´ÝÇû´ÂÁö ¾Ë ¼ö ÀÖ´Â ¹æ¹ýÀº

¹«¾ùÀϱî¿ä? ±×°Ç ´ÙÀ½ÀÇ ¿¹¸¦ º¸¸é ½±°Ô »ý°¢ÇØ ³¾ ¼ö ÀÖ½À´Ï´Ù.

 

¸ÕÀú »ó´ë¹æ ¼­¹öÀÇ ¿­¸° Æ÷Æ®·Î SYN Ç÷¡±×°¡ ´ã±ä ÆÐŶÀ» º¸³»°í, ±× °á°ú¸¦ ÆÐŶ ½º´ÏÆÛ·Î

È®ÀÎÇØ º¾½Ã´Ù.

 

                              [ ¿­¸° Æ÷Æ® È®ÀÎ ]

 

   

À§Ã³·³ ¸ñÀûÁöÀÇ Æ÷Æ® ¹øÈ£¸¦ ¿­¸° Æ÷Æ®·Î ¼öÁ¤ÇÑ ÈÄ, ÄÄÆÄÀÏÀ» ´Ù½Ã ÇÏ°í, ÇÁ·Î±×·¥À»

½ÇÇàÇսôÙ. ±×·³ ÆÐŶ ½º´ÏÇÎÀÇ °á°ú´Â ´ÙÀ½°ú °°¾Æ¾ß Á¤»óÀÔ´Ï´Ù.

 

 

Áï, ¿­¸° Æ÷Æ®ÀÇ °æ¿ì¿£ ¹ÞÀº ÆÐŶ¿¡ ´ëÇØ SYN+ACK Ç÷¡±×°¡ ´ã±ä ÆÐŶÀ» µÇµ¹·Á ÁÖ¾ú½À´Ï´Ù.

±×·³ À̹ø¿¡´Â ¹Ý´ë·Î ´ÝÈù Æ÷Æ®·Î SYN Ç÷¡±×°¡ ´ã±ä ÆÐŶÀ» º¸³»°í, ±× °á°ú¸¦ È®ÀÎÇØ

º¼±î¿ä?

 

 

ÀÏ´Ü ´ÝÈù Æ÷Æ®·Î ¼öÁ¤ÇÏ°í.. ÀçÄÄÆÄÀÏ, ÇÁ·Î±×·¥ ½ÇÇà..

 

 

º¸½Ã´Ù½ÃÇÇ, À̹ø¿¡´Â SYN+ACK°¡ ¾Æ´Ñ RST+ACK Ç÷¡±×°¡ ÀÀ´äÀ¸·Î °¡´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

±×·³ ÀÌÁ¦ ¿ÏÀüÇÏ°Ô °¨ ÀâÀ¸¼ÌÀ» °Ì´Ï´Ù. 1´Ü°è·Î SYN Ç÷¡±×¸¦ ´ãÀº ÆÐŶÀ» º¸³»°í, 2´Ü°è¿¡¼­

¹ÞÀº ÆÐŶÀ» ºÐ¼®ÇÏ¿©, Ç÷¡±× ºÎºÐ¿¡ SYNÀÌ µé¾î°¡ ÀÖ´Ù¸é, ¿­¸° Æ÷Æ®, RST°¡ µé¾î°¡ ÀÖ´Ù¸é

´ÝÈù Æ÷Æ®·Î ÆÇ´ÜÇÏ¿© ±× °á°ú¸¦ È­¸é¿¡ Ãâ·Â¸¸ ÇØÁÖ¸é Stealth Scanner´Â ¿Ï¼ºµË´Ï´Ù.

 

ÀÌÁ¦ °ü°ÇÀº Raw socket programming¿¡¼­ ¾î¶»°Ô »ó´ë¹æÀ¸·ÎºÎÅÍ ³¯¶ó¿Â ÆÐŶÀ» ¹Þ´À³Ä¿Í

¶Ç ¾î¶»°Ô ±× ÆÐŶÀ» Á¶»çÇÏ¿© Ç÷¡±× Á¤º¸¸¦ ã¾Æ³»´À³Ä, ±×¸®°í ¸¶Áö¸·À¸·Î 3 Way Handshake

¿¡¼­ 3´Ü°è °úÁ¤¿¡ ÇØ´çÇϴ ó¸®´Â ¾î¶»°Ô ÇØÁÖ¾î¾ß ÇÏ´À³Ä ÀÌ ¼¼°¡Áö°¡ µÇ°Ú½À´Ï´Ù.

¿©±â¼­ ù ¹ø°¿Í µÎ ¹ø°´Â Á÷Á¢ ÇÁ·Î±×·¡¹Ö ½Ç½ÀÀ» Çϸ鼭 ÀÚ¿¬½º·¹ ¾Ë°Ô µÇ½ÇÅ×°í, ¸¶Áö¸·

¼¼ ¹ø°¿¡ ´ëÇÑ ¼³¸í¸¸ Áö±Ý Çص帮µµ·Ï ÇÏ°Ú½À´Ï´Ù.

 

ÀÏ´Ü Å×½ºÆ®·Î »ó´ë¹æ ¼­¹ö·Î SYN Ç÷¡±×¸¦ ´ãÀº ÆÐŶÀ» º¸³½ ÈÄ, ±× ¼­¹ö¿¡¼­ netstat ¸í·ÉÀ»

½ÇÇàÇØ º¾½Ã´Ù.

 

 

±×·³ À§ Ãâ·Â °á°úÀÇ Ã¹ ¹ø° ¶óÀÎó·³ SYN_RECEIVED »óÅÂÀÇ ¿¬°áÀÌ »ý±â´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

ÀÌ´Â SYN Ç÷¡±×°¡ ´ã±ä ÆÐŶÀ» ¹Þ¾ÒÀ¸¸ç, ´ÙÀ½ ÇൿÀ» ±â´Ù¸®°í ÀÖ´Ù´Â Àǹ̷νá,

¸¸¾à ¿©±â¼­ 3 Way Handshake°¡ ¼º°øÀûÀ¸·Î ÁøÇàµÇ¸é SYN_RECEIVED´Â ESTABLISHED·Î ¹Ù²ò´Ï´Ù.

±×¸®°í ¹Ý´ë·Î 3 Way Handshake°¡ ¼º¸³µÇÁö ¾Ê´Â´Ù¸é, ÀÌ ¿¬°áÀº ÀÏÁ¤ ½Ã°£µ¿¾È °è¼Ó

´ë±â »óÅ·Π³²¾ÆÀÖ°Ô µÇ¾î ¹ö¸³´Ï´Ù.

 

µû¶ó¼­ ¿ì¸®°¡ Æ÷Æ® ½ºÄµÀ» Çϱâ À§ÇØ 1¿¡¼­ 1024±îÁö Æ÷Æ® ¹øÈ£¸¦ º¯°æÇØ°¡¸ç SYN Ç÷¡±×¸¦

´ãÀº ÆÐŶÀ» »ó´ë¹æ ¼­¹ö·Î º¸³»¸é, ±× ¼­¹ö¿¡´Â 1024°³ÀÇ SYN_RECEIVED »óÅ ¿¬°áÀÌ ½×ÀÌ°Ô

µÇ¾î ¹ö¸®°Ô µË´Ï´Ù. µû¶ó¼­ Æ÷Æ® ½ºÄµ ÈÄ, netstat¸¦ Çغ¸¸é ¾öû³ª°Ô ¸¹Àº SYN_RECEIVED »óŸ¦

°¡Áø ¿¬°áÀÌ Ãâ·ÂµÉ °ÍÀÔ´Ï´Ù. ÇÑ È£½ºÆ®´Â ÀÌ·¯ÇÑ ´ë±â »óŸ¦ °¨´çÇÒ ¼ö ÀÖ´Â ÇÑ°èÀÎ

¹é·Î±×(BACKLOG)¶ó´Â °ÍÀ» °¡Áö°í Àִµ¥, ÀÌ ÇѰ踦 ³Ñ¾î¼­ ¹ö¸®¸é ¼­¹ö´Â ´õ ÀÌ»ó ÆÐŶÀ»

¹ÞÀ» ¼ö ¾ø´Â »óÅ°¡ µÇ¾î¹ö¸³´Ï´Ù. µû¶ó¼­ Æ÷Æ® ½ºÄµÀ» ÇÏ·Á Çß´ø °ÍÀÌ º»ÀÇ ¾Æ´Ï°Ô D.o.S

°ø°ÝÀ» À¯¹ßÇÏ°Ô µÇ¾î ¹ö¸®´Â Çö»óÀÌ ³ªÅ¸³µ½À´Ï´Ù. ±×¸®°í ½ÇÁ¦ ÀÌ·¯ÇÑ ÇãÁ¡À» ÀÌ¿ëÇÑ °ø°ÝÀÌ

±× À¯¸íÇÑ SYN Flooding D.o.S °ø°ÝÀÔ´Ï´Ù. (¿äÁò¿£ Ä¿³Î ÀÚü¿¡¼­ ÀÌ °ø°Ý¿¡ ´ëÇÑ ¹æ¾î¸¦ ÇÕ´Ï´Ù.)

 

±×·³ ÀÌ ¿ôÁö ¸øÇÒ »óȲÀ» ¾î¶»°Ô ÇØ°áÇØ¾ß ÇÒ±î¿ä? ¹æ¹ýÀº °£´ÜÇÕ´Ï´Ù. 3 Way HandshakeÀÇ

1,2 ´Ü°è¸¦ °ÅÄ£ ÈÄ, 3 ´Ü°è¿¡¼­ ACK Ç÷¡±× ´ë½Å RST³ª FIN Ç÷¡±×¸¦ º¸³»¸é µÇ´Â °Ì´Ï´Ù.

RST(RESET)°ú FIN(FINAL)Àº ¡°Á¢¼Ó Á¾·á¡±¸¦ ÀǹÌÇÏ´Â Ç÷¡±×ÀÓÀ¸·Î ¿ª½Ã »ó´ë¹æ ¼­¹ö¿¡´Â

·Î±×¸¦ ³²±âÁö ¾Ê½À´Ï´Ù. ±×·¯¸é¼­ µ¿½Ã¿¡ ¿¬°á »óÅ´ ±ò²ûÇÑ µÞ󸮰¡ µË´Ï´Ù.

 

ÀÌÁ¦ ¸¶Áö¸·À¸·Î Stealth Scanning ±â¹ý(¸¹Àº ±â¹ýÀÌ Á¸ÀçÇÏÁö¸¸ ÀÌ °­Á¿¡¼­ ¼³¸íÇÏ´Â °ÍÀº

°¡Àå ´ëÇ¥ÀûÀÎ Half open scanning ±â¹ý)ÀÇ ¿ø¸®¸¦ Á¤¸®ÇØ º¼±î¿ä?

 

 

[ Half Open Scanner ±¸Çö ¿ø¸® ]

1. ¸ñÀûÁöÀÇ Æ÷Æ®¸¦ NÀ¸·Î ¼³Á¤.

2. ÇØ´ç Æ÷Æ®·Î SYN Ç÷¡±×¸¦ ´ãÀº ÆÐŶÀ» º¸³¿.

3. ÀÀ´ä ÆÐŶÀ» ¹ÞÀ½.

4. ¸¸¾à ÀÀ´ä ÆÐŶÀÇ Ç÷¡±×¿¡ SYNÀÌ µé¾îÀÖ´Ù¸é Æ÷Æ® OPEN, RSTÀÌ µé¾îÀÖ´Ù¸é Æ÷Æ® CLOSE.

5. ±ò²ûÇÑ µÞ󸮸¦ À§ÇØ RST Ç÷¡±×¸¦ ´ãÀº ÆÐŶÀ» º¸³¿.

6. NÀÇ °ªÀ» º¯°æÇØ °¡¸é¼­ 1~5¹ø °úÁ¤À» ¹Ýº¹.

7. ½ºÄ³´× Á¾·á.

 

 

          ±×·³ ÀÌÁ¦ºÎÅÍ Half open stealth scanner¸¦ ±¸ÇöÇϱâ Àü¿¡ ¾Ë¾Æ¾ß ÇÒ °Íµé¿¡ ´ëÇÏ¿©

¹è¿ö º¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. ¸ÕÀú, »ó´ë ¼­¹ö·ÎºÎÅÍ Àü¼ÛµÇ´Â ÆÐŶÀ» ¹Þ´Â ¹æ¹ý¿¡ ´ëÇÏ¿© ¼³¸íÇϵµ·Ï ÇÏ°Ú½À´Ï´Ù.

ÀÌ ¹æ¹ýÀº ¿¹»ó ¿Ü·Î °£´Ü ÇÕ´Ï´Ù. ´ÙÀ½ÀÇ ¼Ò½º Äڵ带 Çѹø º¾½Ã´Ù.

 

 

// ÇÊ¿äÇÑ Çì´õµé ¼±¾ð.

#include <stdio.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <arpa/inet.h>

 

int main() {

        int recv_socket, len; // »ç¿ëÇÒ ¼ÒÄÏ°ú, ±æÀÌ Á¤º¸¸¦ ÀúÀåÇÒ º¯¼ö.

char recv_packet[100]; // ¹ÞÀº ÆÐŶÀÌ ÀúÀåµÇ´Â º¯¼ö

        struct sockaddr_in target_address; // »ó´ë¹æÀÇ ÁÖ¼Ò Á¤º¸°¡ ÀúÀåµÇ´Â º¯¼ö

 

        recv_socket = socket( AF_INET, SOCK_RAW, IPPROTO_TCP ); // ·Î¿ì ¼ÒÄÏÀ» ¸¸µë.

 

        len = sizeof( target_address ); // recvfrom()ÀÇ 6¹ø° ÀÎÀÚ·Î µé¾î°¥ °ª ±¸ÇÔ.

 

        while(1){

                // recvfrom() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ÆÐŶÀ» ¹ÞÀ½.

                recvfrom( recv_socket, recv_packet, 100, 0, (struct sockaddr *)&target_address, &len );

                printf( "[ ÆÐŶÀ» ¹Þ¾Ò½À´Ï´Ù. ]\n" );

                printf( "¹ß½ÅÀÚ IP : %s\n\n", inet_ntoa( target_address.sin_addr ) );

                sleep( 1 ); // È­¸éÀÌ ³Ê¹« »¡¸® Áö³ª°¡¹Ç·Î 1ÃÊ Áö¿¬.

        }

}

 

 

´Ü¼øÈ÷ ·Î¿ì ¼ÒÄÏÀ» Çϳª »ý¼ºÇÑ ÈÄ, °è¼ÓÇؼ­ recvfrom() ÇÔ¼ö¸¦ ÅëÇØ ÆÐŶÀ» ¹Þµµ·Ï ÇÏ¿´½À´Ï´Ù. ±×¸®°í ¹ÞÀº

³»¿ë Áß IP ºÎºÐÀ» Ãâ·ÂÇϵµ·Ï Çß½À´Ï´Ù. ±×·³ °ú¿¬ ÀÌ ÄÚµåÀÇ ½ÇÇà °á°ú´Â ¾î¶»°Ô µÉ±î¿ä? Çѹø ÄÄÆÄÀÏ ÇÏ¿©

½ÇÇà½ÃÄÑ º¾½Ã´Ù.

 

 

À§Ã³·³ °è¼ÓÇؼ­ ÆÐŶÀ» ¹ÞÀ¸¸ç, ¹ß½ÅÀÚÀÇ IP°¡ °è¼Ó º¯ÇÏ´Â ¸ð½ÀÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

 

recvfrom() ÇÔ¼ö´Â ½º´ÏÆÛ?

 

¾Õ¼­ Å×½ºÆ®ÇØ º» °á°ú¸¦ ÅëÇØ, recvfrom() ÇÔ¼ö´Â º¸Åë ¿ì¸®°¡ »ç¿ëÇÏ´Â recv() ÇÔ¼ö°¡

TCP ¼ÒÄÏÀ¸·Î ¿¬°áµÈ »ó´ë¹æÀÇ ÆÐŶ¸¸ ¹Þ´Â °Í°ú´Â ´Ù¸£°Ô, ƯÁ¤ ÆÐŶÀÌ ¾Æ´Ñ, ¼­¹ö·Î Àü´ÞµÇ´Â

¸ðµç ÆÐŶÀ» ¹Þ´Â´Ù´Â »ç½ÇÀ» ¾Ë ¼ö ÀÖ¾ú½À´Ï´Ù. Áï, ¼­¹ö ³»ÀÇ ÆÐŶµéÀ» ¸ðµÎ ´ýÇÁÇؼ­

º¸¿©ÁÖ´Â ÆÐŶ ½º´ÏÆÛ¿Í ºñ½ÁÇÑ ¿ªÇÒÀ» ÇÏ´Â °ÍÀÔ´Ï´Ù. (¹°·Ð ¹Þ´Â ÆÐŶ¸¸ °¡´ÉÇÏ°ÚÁö¸¸..)

±×¸®°í ½ÇÁ¦·Î ÀÌ recvfrom() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ±¸ÇöµÈ ÆÐŶ ½º´ÏÆ۵鵵 Á¸ÀçÇÕ´Ï´Ù.

±×·³ À̹ø¿£ À§ ¼Ò½º Äڵ带 Á¶±Ý ¹ßÀü½ÃÄÑ º¼±î¿ä?

 

 

#include <stdio.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <arpa/inet.h>

#include <linux/ip.h>

#include <linux/tcp.h>

 

int main() {

        int recv_socket, len;

        char recv_packet[100];

        struct sockaddr_in target_address;

 

        struct tcphdr *tcp_header; // tcp Çì´õ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ º¯¼ö

       struct iphdr *ip_header; // ip Çì´õ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ º¯¼ö

 

       ip_header = (struct iphdr *)recv_packet;  // recv_packetÀÇ Ã³À½ ºÎºÐÀ» °¡¸®Å°µµ·Ï ÇÔ.

       tcp_header = (struct tcphdr *)(recv_packet + 20);  // ip Çì´õ µÚÂÊ ºÎºÐÀ» °¡¸®Å°µµ·Ï ÇÔ.

 

        recv_socket = socket( AF_INET, SOCK_RAW, IPPROTO_TCP );

 

        len = sizeof( target_address );

 

        while(1){

                recvfrom( recv_socket, recv_packet, 100, 0, (struct sockaddr *)&target_address, &len );

                printf( "[ ÆÐŶÀ» ¹Þ¾Ò½À´Ï´Ù. ]\n" );

                printf( "¹ß½ÅÀÚ IP : %s\n", inet_ntoa( target_address.sin_addr ) );

               printf( "IP Version : %d\n", ip_header->version ); // IP ¹öÀü Á¤º¸ Ãâ·Â

              printf( "Time To Live : %d\n", ip_header->ttl );  // TTL Á¤º¸ Ãâ·Â

              printf( "Window Size : %d\n", tcp_header->window );  // À©µµ¿ì »çÀÌÁî Á¤º¸ Ãâ·Â

                printf( "Flags : " );  // Ç÷¡±× Á¤º¸ Ãâ·Â

 

              if( tcp_header->fin == 1 ) printf( "[FIN]" );

              if( tcp_header->syn == 1 ) printf( "[SYN]" );

              if( tcp_header->rst == 1 ) printf( "[RST]" );

              if( tcp_header->psh == 1 ) printf( "[PSH]" );

              if( tcp_header->ack == 1 ) printf( "[ACK]" );

              if( tcp_header->urg == 1 ) printf( "[URG]" );

              printf( "\n\n" );

 

                sleep( 1 );

        }

}

 

 

¾î¶² ÀÛ¾÷À» Çß´ÂÁö ½±°Ô ¾Ë ¼ö ÀÖÀ¸½ÃÁÒ? ¹Ù·Î, TCP¿Í IP Çì´õÀÇ ¸î¸î Á¤º¸µéÀ» Ãß°¡·Î Ãâ·ÂÇϵµ·Ï ¼öÁ¤ÇÏ¿´½À´Ï´Ù.

ÀÌ ºÎºÐÀ» ÅëÇÏ¿© stealth scanner¸¦ ±¸ÇöÇÒ ¶§, ¾î¶»°Ô ÀÀ´ä ÆÐŶ ¾È¿¡ SYN ȤÀº RST Ç÷¡±×¸¦ Á¶»çÇÏ´ÂÁö¿¡

´ëÇؼ­µµ ¾Ë ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ±×·³ ÀÌÁ¦ À§ Äڵ带 ÄÄÆÄÀÏÇÏ¿© ½ÇÇàÇØ º¾½Ã´Ù.

 

 

Á¦´ë·Î ÀÛµ¿ÇÏ´Â °Í °°ÁÒ? À̹ø¿£ ¸¶Áö¸·À¸·Î À§Ã³·³ ¸ðµç ÆÐŶÀ» Ãâ·ÂÇÏÁö ¾Ê°í,

ƯÁ¤ IP¿¡¼­ ƯÁ¤ PORT·Î º¸³½ ÆÐŶ¸¸ Ãâ·ÂÇϵµ·Ï ¼öÁ¤ÇØ º¾½Ã´Ù.

 

#include <stdio.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <arpa/inet.h>

#include <linux/ip.h>

#include <linux/tcp.h>

 

// 211.189.88.58¿¡¼­ 23¹ø Æ÷Æ®·Î Á¢¼ÓÇÒ ¶§ÀÇ ÆÐŶ Á¤º¸¸¸ Ãâ·Â.

#define SRC_IP "211.189.88.58"  // ¹ß½ÅÀÚÀÇ IP

#define DEST_PORT 23  // ¼ö½ÅÀÚÀÇ PORT

 

int main() {

      int recv_socket, len;

      char recv_packet[100];

      struct sockaddr_in target_address;

 

      struct tcphdr *tcp_header;

      struct iphdr *ip_header;

 

      ip_header = (struct iphdr *)recv_packet;

      tcp_header = (struct tcphdr *)(recv_packet + 20);

 

      recv_socket = socket( AF_INET, SOCK_RAW, IPPROTO_TCP );

 

      len = sizeof( target_address );

 

      while(1){

              recvfrom( recv_socket, recv_packet, 100, 0, (struct sockaddr *)&target_address, &len );

 

              // ¼ö½ÅÀÚÀÇ IP°¡ SRC_IP(211.189.88.58)¿Í °°ÀºÁö °Ë»ç.

              if( strcmp( inet_ntoa(target_address.sin_addr), SRC_IP ) == 0 )

                     // Á¢¼Ó Æ÷Æ®°¡ DEST_PORT(23)¿Í °°ÀºÁö °Ë»ç.

                   if( ntohs(tcp_header->dest) == DEST_PORT ){

                             printf( "[ ÆÐŶÀ» ¹Þ¾Ò½À´Ï´Ù. ]\n" );

                             printf( "¹ß½ÅÀÚ IP : %s\n", inet_ntoa( target_address.sin_addr ) );

                             printf( "IP Version : %d\n", ip_header->version );

                             printf( "Time To Live : %d\n", ip_header->ttl );

                             printf( "Window Size : %d\n", tcp_header->window );

                             printf( "Flags : " );

 

                             if( tcp_header->fin == 1 ) printf( "[FIN]" );

                             if( tcp_header->syn == 1 ) printf( "[SYN]" );

                             if( tcp_header->rst == 1 ) printf( "[RST]" );

                             if( tcp_header->psh == 1 ) printf( "[PSH]" );

                             if( tcp_header->ack == 1 ) printf( "[ACK]" );

                             if( tcp_header->urg == 1 ) printf( "[URG]" );

                             printf( "\n\n" );

 

                             sleep( 1 );

                      }                               

      }

}

   

 

°£´ÜÇÏÁÒ? 1ȸ °­Á¿¡¼­ºÎÅÍ ¿©±â±îÁö ¸ðµÎ ÀÌÇØÇÏ¿´´Ù¸é, ÀÌÁ¦ Stealth scanner¸¦ ±¸ÇöÇÏ´Â °ÍÀº ½ÄÀº Á× ¸Ô±âÀÔ´Ï´Ù.

±×·³ ´ÙÀ½ °­Á¿¡¼± ¸¶Áö¸·À¸·Î Stealth scanner¸¦ ±¸Çö ½Ç½À¿¡ µé¾î°¡µµ·Ï ÇÏ°Ú½À´Ï´Ù.