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¸¦ ±¸Çö ½Ç½À¿¡ µé¾î°¡µµ·Ï ÇÏ°Ú½À´Ï´Ù.