ANTON
|
2011-07-23 11:02:37, Á¶È¸ : 261, Ãßõ : 49 |
1. stack overflow
2. heap overflow
3. frame pointer overflow
4. integer overflow
[ eip ] [ ebp ] [ int 4 ][ long 4 ] [ stack ]
int b;
long i;
char buf[1024];
----
char *buf;
buf = malloc(1024);
...
char *buf2;
buf2 = malloc(1024);
0xbffff
0x8048??
[ buf 1024 ] [ buf2 1024 ]chrootÀÇ ÀÇ¹Ì¿Í °³¿ä
chroot´Â »õ·Î¿î ·çÆ® µð·ºÅ丮¸¦ ¼³Á¤ÇÏ¿© ½ÇÁ¦·Î chrootµÈ ÇÁ·Î¼¼½º´Â
ÀÌ µð·ºÅ丮ÀÇ »óÀ§ µð·ºÅ丮·Î´Â Á¢±ÙÇÒ ¼ö ¾ø°í ¿ÀÁ÷ ÀÌ ÇÏÀ§ÀÇ µð·ºÅ丮·Î¸¸
Á¢±ÙÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â º¸¾È¿¡´Â ¸Å¿ì È¿°úÀûÀÎ ½Ã½ºÅÛ ÇÔ¼öÀÌ´Ù. Áï ÇϳªÀÇ
ÇÁ·Î¼¼½º¸¦ ½ÇÇà½Ãų ¶§ ÀÌ ÇÁ·Î¼¼½º°¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¿µ¿ªÀ» ÇÁ·Î¼¼½º »ý¼º
½Ã±â¿¡ ¹Ì¸® Á¦ÇѽÃų ¼ö ÀÖ°Ô ÇØÁÖ´Â °ÍÀÌ´Ù. Àß »ìÆì º¸¸é ÀÌ ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿©
¸¸µé¾îÁø µ¿¸íÀÇ chroot¶ó´Â ¸í·É¾îµµ Á¸ÀçÇϴµ¥ ÀÌ´Â ÇÁ·ÒÇÁÆ®»ó¿¡¼ ÇÁ·Î¼¼½º¸¦
½ÇÇà½Ãų ¶§µµ ÀÌ·¯ÇÑ ÀÛ¾÷À» °¡´ÉÇÏ°Ô ÇØÁÖ±â À§ÇؼÀÌ´Ù. ¾ÆÁ÷ chroot°¡ Àß ÀÌÇØ°¡
¾ÈµÈ´Ù¸é ±ÛÀÇ µÞºÎºÐÀÇ wrapper Äڵ带 º¸¸é ½±°Ô ÀÌÇØ ÇÒ ¼ö ÀÖÀ¸¸®¶ó°í »ý°¢µÈ´Ù.
chrootÀÇ ÀåÁ¡
ÀÌÀü¿¡ ¼Ò°³ Çß´ø À¥ ¼¹öÀÇ ¹®Á¦Á¡À» ÇØ°áÇØ ÁÖ°í ÀÖ´Ù.
chrootµÈ µð·ºÅ丮°¡ À¥ ¼¹ö ÇÁ·Î¼¼½ºÀÇ ·çÆ® µð·ºÅ丮·Î ÀνĵDZ⠶§¹®¿¡ ºÒÇÊ¿äÇÑ ÆÄÀÏÀ̳ª µð·ºÅ丮·ÎÀÇ
Á¢±ÙÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù.
¾Õ¿¡¼ ¼Ò°³ÇßµíÀÌ ·çÆ® ±ÇÇÑÀÇ ÇÁ·Î¼¼½º°¡ nobody ±ÇÇÑÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ »ý¼º½ÃÄѼ ÄÁÆ®·ÑÀ» ³Ñ±â±â Àü¿¡
°ø°Ý ´çÇÏ¿© ·çÆ®ÀÇ ±ÇÇÑÀ¸·Î ÀÛ¾÷À» ÇÑ´Ù°í ÇÏ´õ¶óµµ ÀÌ·¯ÇÑ ÀÛ¾÷ÀÌ chrootµÈ µð·ºÅ丮¸¦ ¹þ¾î ³¯ ¼ö ¾ø±â
¶§¹®¿¡ ½Ã½ºÅÛ¿¡ Å« ¿µÇâÀ» ¹ÌÄ¡Áö ¸øÇÑ´Ù. ¹°·Ð ÀÌ´Â chrootµÈ µð·ºÅ丮 ÀÌÇÏ¿¡´Â ½Ã½ºÅÛÀ» ħÀÔÇϴµ¥ »ç¿ëÇÒ¸¸ÇÑ
ÆÄÀÏÀ̳ª µð·ºÅ丮°¡ ¾ø°í ´Ü¼øÈ÷ htmlÆÄÀÏ, ±×¸² ÆÄÀÏ, CGIÆÄÀÏ µîÀÌ ÀÖÀ» »ÓÀ̱⠶§¹®ÀÌ´Ù.
±âÁ¸ÀÇ À¥ ¼¹öÀÇ °æ¿ì »ç¿ëÀÚµéÀÇ È¨ ÆäÀÌÁöµéÀ̳ª À¥ ¼ºñ½º¸¦ Çϱâ À§ÇÑ ÇÁ·Î±×·¥(À¥ BBS, DB¿Í ¿¬µ¿µÈ À¥
¼ºñ½ºÀÇ DB)µéÀÌ µð½ºÅ©¿¡ Èð¾îÁ® ÀÖ¾ú´Ù. ÀÌ´Â ¹°·Ð ±âÁ¸ÀÇ À¥ ¼¹ö³ª »ý¼ºµÈ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ µð½ºÅ©ÀÇ
¾îµðµçÁö Á¢±ÙÇÒ ¼ö ÀÖ¾ú±â ¶§¹®ÀÌ´Ù. ±×·¯³ª chroot¸¦ ÀÌ¿ëÇÏ¿© À¥ ¼ºñ½º¸¦ ÇÏ°Ô µÉ °æ¿ì¿¡´Â ÇϳªÀÇ Å«
µð½ºÅ© ÆÄƼ¼ÇÀ» Áö½ÃÇÏ´Â µð·ºÅ丮¸¦ chrootÇÏ¿© ¸¸µé±â ¶§¹®¿¡ ¸ðµç À¥ ¼ºñ½º °ü·Ã ÆÄÀϵéÀ» ÀÌ µð½ºÅ© ÆÄƼ¼Ç¿¡
¸ð¾Æ µÎ°Ô µÈ´Ù. ±×·¯¸é ½ÇÁ¦·Î À¥ ¼¹ö´Â ÀÌ µð½ºÅ© ÆÄƼ¼Ç, Á¤È®ÇÏ°Ô´Â ÀÌ µð½ºÅ© ÆÄƼ¼ÇÀ» Áö½ÃÇÏ´Â chrootµÈ
µð·ºÅ丮 ¹ÛÀ» ¸ø ¹þ¾î ³ª¸é¼ µ¿ÀÛÇ߱⠶§¹®¿¡ ÀÌ µð½ºÅ©¸¸ Á¤±âÀûÀ¸·Î ¹é¾÷À» ¹Þ¾Æ µÐ´Ù¸é ½Ã½ºÅÛÀÌ Áװųª
µð½ºÅ©°¡ ¸Á°¡Áö´õ¶óµµ ´Ù¸¥ È£½ºÆ®ÀÇ ºó µð½ºÅ©¿¡ ¹é¾÷À» Ç®¾î¼ Áï½Ã À¥ ¼¹ö¸¦ º¹±¸½Ãų ¼ö ÀÖ°Ô µÈ´Ù.
À̶§ÀÇ º¹±¸ ½Ã°£Àº ´Ü¼øÈ÷ ¹é¾÷ µ¥ÀÌÅ͸¦ »õ·Î¿î µð½ºÅ©¿¡ º¹»çÇÏ´Â ½Ã°£¸¸ÀÌ ¼Ò¿äµÇ°Ô µÉ °ÍÀÌ´Ù. ¹°·Ð »õ·ÎÀÌ
¿Å±ä È£½ºÆ®ÀÇ DNS entry¿¡ ¹®Á¦°¡ »ý±ä È£½ºÆ®ÀÇ À̸§À» alias½ÃÄÑ ³õÀ¸¸é ±âÁ¸¿¡ À¥ ¼ºñ½º¸¦ ÀÌ¿ëÇÏ´ø »ç¶÷µéÀº
ÀüÇô ¹®Á¦¸¦(È£½ºÆ®°¡ ¿Å°ÜÁö°í µ¥ÀÌÅ͸¦ ÀúÀåÇÏ°í ÀÖ´ø µð½ºÅ©°¡ ¹Ù²î¾ú´Ù´Â »ç½Ç) ´À³¢Áö ¸øÇÒ °ÍÀÌ´Ù.
Áï Åõ¸í¼º(transparency)À» º¸ÀåÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
¸¸ÀÏ ÀÌ¿Í °°ÀÌ ÇÏÁö ¾Ê°í À¥ ÀÚ·áµéÀÌ ¿©·¯ µð½ºÅ©¿¡ ºÐ»êµÇ¾î ÀÖ´Ù°í °¡Á¤Çϸé ÀÌÁß ¾î´À ÇϳªÀÇ µð½ºÅ©°¡
¸Á°¡Áö°Ô µÇ¸é ÀÌ µð½ºÅ©¿¡ ÀÖ´Â À¥ ÀڷḸ º¹±¸½ÃÅ°´Â ¹®Á¦µµ ÁöÀúºÐÇÒ »Ó¸¸ ¾Æ´Ï¶ó ½Ã½ºÅÛÀÌ Æı«µÉ °æ¿ì¿¡´Â
´õ¿í ´õ Àüü À¥ ¼ºñ½ºÀÇ º¹±¸ ½Ã°£Àº ±æ¾îÁú °ÍÀÌ¸ç °ü¸®Àڵ鿡°Ô Å« ºÎ´ãÀ» ÁÖ°Ô µÉ °ÍÀÌ´Ù.
chrootÀÇ ´ÜÁ¡
chroot¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀº º¸¾ÈÀ» À§Çؼ´Â ¸Å¿ì ÈǸ¢ÇÑ ¹æ¹ýÀÌÁö¸¸ ÀÌ ¶ÇÇÑ ¾à°£ÀÇ ¹®Á¦¸¦ ³»Æ÷ÇÏ°í ÀÖ´Â °ÍÀÌ
»ç½ÇÀÌ´Ù. À̸¦ ¿©±â¼ °£´ÜÈ÷ ¾ð±ÞÇÏ°í ³Ñ¾î°¡µµ·Ï ÇÏÀÚ.
¼³Ä¡ÇϱⰡ ±î´Ù·Ó´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù(¹°·Ð ³ë·ÃÇÑ °ü¸®ÀÚ¶ó¸é Å« ¹®Á¦´Â µÇÁö ¾ÊÀ» °ÍÀÌ´Ù). µÞ ºÎºÐ¿¡¼ ¾ð±ÞÇÏ°ÚÁö¸¸
ÀÌÁø ÆÄÀϵéÀ» binµð·ºÅ丮¿¡ °¡Á®´Ù ³õÀ» ¶§ ±×³É ½Ã½ºÅÛ¿¡ ÀÖ´Â °ÍÀ» º¹»çÇÏ°Ô µÇ¸é À̵éÀº ¸ðµÎ °øÀ¯ ¶óÀ̺귯¸®¸¦
»ç¿ëÇÏ°í Àֱ⠶§¹®¿¡ À̵éÀÌ ÇÊ¿ä·Î ÇÏ°í ÀÖ´Â ¸ðµç ¶óÀ̺귯¸®¸¦ usr/lib¿¡ º¹»ç ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ƯÈ÷ À¥¿¡¼´Â
CGI¸¦ ÀÌ¿ëÇÏ°í Àֱ⠶§¹®¿¡ ÀÌ·¯ÇÑ ÀÏÀº ¸Å¿ì ÇÇ°ïÇÏ´Ù. ±×·¡¼ ´ëºÎºÐÀÇ °æÇèÀÚµéÀº ÀÌÁø ÆÄÀϵéÀº Á¤ÀûÀ¸·Î
ÄÄÆÄÀÏ ÇÏ´Â °ÍÀ» ÃßõÇÏ°í ÀÖ´Ù. ÀÌ °æ¿ì¿¡´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ ÇÊ¿ä°¡ ÀüÇô ¾ø±â ¶§¹®¿¡ °ü¸®ÇϱⰡ
±ò²ûÇÏ°í Æí¸®ÇÏ´Ù. ¹°·Ð À¥¿¡¼ ÀÌ¿ëµÉ ¸ðµç ÀÌÁø ÆÄÀϵéÀ» Á¤ÀûÀ¸·Î ´Ù½Ã ÄÄÆÄÀÏÇØÁÖ¾î¾ß ÇϹǷΠÃʱ⠼³Ä¡
½Ã¿¡ Á» ½Ã°£ÀÌ ¼Ò¿äµÇ´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. µÚ¿¡¼ º¸ÀÏ ¿¹Á¦´Â Á¤ÀûÀ¸·Î ÄÄÆÄÀÏÇÏÁö ¾Ê´Â ¹æ¹ýÀ» ¼Ò°³ÇÏ°í ÀÖ´Ù.
±âÁ¸¿¡ ÀÌ¹Ì À¥ ¼¹ö°¡ ¼³Ä¡ µÇ¾î ÀÖ´Â »óÅ¿¡¼ chroot¸¦ ÀÌ¿ëÇÑ ¼¹ö¸¦ ¼³Ä¡ÇÒ °æ¿ì¿¡´Â chroot¸¦ ÀÌ¿ëÇÏ´Â Àå
Á¡À» »ì¸®±â Èûµé ¼ö ÀÖ´Ù. ÇÏÁö¸¸ °ü¸®ÀÚÀÇ Àç·®¿¡ µû¶ó ºÒ°¡´ÉÇÑ °ÍÀº ¾Æ´Ï´Ù. ÀÌ ¸»Àº ÀÌ¹Ì ±âÁ¸ÀÇ À¥ ¼¹ö°¡
ÀÖ´Ù¸é °³ÀεéÀÌ °¢°¢ÀÇ È¨ µð·ºÅ丮¿¡ ÀÚ½ÅÀÇ È¨ ÆäÀÌÁö¸¦ ¸¸µé¾î ³õ¾ÒÀ» °ÍÀε¥ ÀÌ È¨ ÆäÀÌÁöµéÀÌ chroot¿¡¼
ÀÌ¿ëÇÏ´Â ÆÄÀÏ ½Ã½ºÅÛÀ̳ª chrootÀÇ tree ¹Ù±ù¿¡ ÀÖÀ» ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÌ¿¡ ´ëÇÑ ÇØ°áÃ¥À» ¼Ò°³ÇÏ¸é ´ÙÀ½°ú °°´Ù.
¸¸ÀÏ »ç¿ëÀÚµéÀÇ È¨ ÆäÀÌÁö°¡ chroot¸¦ ÀÌ¿ëÇÏ´Â tree ¹Ù±ù¿¡ ÀÖÁö¸¸ °°Àº ÆÄÀÏ ½Ã½ºÅÛ »ó¿¡ ÀÖ´Ù¸é ÇÏµå ¸µÅ©¸¦
ÀÌ¿ëÇؼ ÇØ°á ÇÒ ¼ö ÀÖ´Ù(chroot treeÀÌÇÏ¿¡¼ ¹Ù±ùÀ¸·ÎÀÇ ¼ÒÇÁÆ® ¸µÅ©´Â µ¿ÀÛÇÏÁö ¾Ê´Â´Ù). ÇÏÁö¸¸ ¿ÏÀüÈ÷ ´Ù¸¥
ÆÄÀÏ ½Ã½ºÅÛ¿¡ »ç¿ëÀÚµéÀÇ È¨ ÆäÀÌ°¡ ÀÖÀ» °æ¿ì¿¡´Â loop back ¸¶¿îÆ®(·ÎÄà ÆÄÀÏ ½Ã½ºÅÛ¿¡¼ ´Ù¸¥ ·ÎÄà ÆÄÀÏ
½Ã½ºÅÛÀ¸·ÎÀÇ ¸¶¿îÆ®)¸¦ ÀÌ¿ëÇÏ¿© ÇØ°á ÇÒ ¼ö ÀÖ´Ù. loop back ¸¶¿îÆ®¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº »ý·«Çϵµ·Ï ÇÏ°Ú´Ù.
chroot¸¦ ÀÌ¿ëÇÑ À¥ ¼¹ö ¼³Ä¡ °úÁ¤
ÀÌÁ¦ chrootÀ» ÀÌ¿ëÇÏ¿© »õ·Î¿î À¥ ¼¹ö ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¼Ò°³ÇØ º¸µµ·Ï ÇÏ°Ú´Ù.
¾Æ·¡ÀÇ ¿¹Á¦´Â ¼Ö¶ó¸®½º 2.5 ¸Ó½Å¿¡¼ ¸ðµç ÇÁ·Î±×·¥Àº °øÀ¯ ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ°Ô ÄÄÆÄÀÏÇÏ¿´´Ù´Â
°¡Á¤ÇÏ¿¡¼ Á÷Á¢ ¼³Ä¡ÇÑ °úÁ¤À» Á¤¸®ÇÏ¿© º» °ÍÀÌ´Ù. ÀÌ °úÁ¤Àº ¼Ö¶ó¸®½º 2.5ÀÇ °æ¿ìÀ̹ǷΠ¸ðµç ¿î¿µÃ¼Á¦¿¡
Àû¿ëµÇ´Â °ÍÀº ¾Æ´ÏÁö¸¸ ±âº»ÀûÀÎ °úÁ¤À» Àß ÀÌÇØÇÑ´Ù¸é ´Ù¸¥ ¿î¿µÃ¼Á¦¶óµµ Å« ¹®Á¦°¡ µÇÁö´Â ¾ÊÀ» °ÍÀ̶ó
¹Ï°í, ¶Ç ¹ß»ýÇÒ ¼ö ÀÖ´Â »ç¼ÒÇÑ ¹®Á¦µéÀº °ü¸®ÀÚÀÇ Àç·®À¸·Î ÇØ°áÇÒ ¼ö ÀÖÀ» °ÍÀ̶ó°í »ý°¢µÈ´Ù.
chroot´Â ÀÓÀÇÀÇ µð·ºÅ丮¸¦ »õ·Î¿î ·çÆ® µð·ºÅ丮·Î ¸¸µå´Â °ÍÀ̱⠶§¹®¿¡ µð½ºÅ©¿¡ ´ëÇÑ ¿ë·®ÀÌ ÃæºÐÇÑ µð½ºÅ©¸¦
Çϳª ¼±Á¤ÇÑ´Ù.
# df -k
ÆÄÀϽýºÅÛ K¹ÙÀÌÆ® »ç¿ë °¡¿ë ¿ë·® ¼³Ä¡ÁöÁ¡
/dev/dsk/c0t0d0s0 86879 21416 56783 28% /
/dev/dsk/c0t0d0s6 480919 417695 15134 97% /usr
/proc 0 0 0 0% /proc
fd 0 0 0 0% /dev/fd
/dev/dsk/c0t1d0s7 1952573 135576 1621747 6% /WWW
/dev/dsk/c0t0d0s5 288855 212963 47012 82% /opt
/dev/dsk/c0t0d0s7 724031 227921 423710 35% /usr1
swap 409672 224 409448 1% /tmp
¿©±â¼´Â /WWW¶ó´Â µð·ºÅ丮¿¡ chroot¸¦ Çϱâ·Î ÇÏ°Ú´Ù.
¸ÕÀú ¾Æ·¡¿Í °°Àº µð·ºÅ丮¸¦ ¸¸µéµµ·Ï ÇÏÀÚ.
# pwd
/WWW
# ls
ÃÑ 28 2 cgi-bin/ 2 etc/ 2 logs/
2 HOME_PAGE/ 2 conf/ 2 home/ 6 src/
2 bin/ 2 dev/ 4 icons/ 2 usr/
À§ÀÇ µð·ºÅ丮µéÀ» °£´ÜÈ÷ ¼³¸íÇÏ¸é ´ÙÀ½°ú °°´Ù.
HOME_PAGE
ÀÌ À¥ ¼¹ö¿¡ Á¢±ÙÇßÀ» ¶§ ±âº»ÀûÀ¸·Î ã´Â µð·ºÅ丮·Î ¼³Á¤
bin
ÀÌÁø ÆÄÀϵéÀ» °¡Á®´Ù ³õÀ» µð·ºÅ丮
cgi-bin
CGI ÇÁ·Î±×·¥À» °¡Á®´Ù ³õÀ» µð·ºÅ丮
conf
httpdÀÇ ¼³Á¤ ÆÄÀÏÀ» °¡Á®´Ù ³õÀ» µð·ºÅ丮
dev
µð¹ÙÀ̽º ÆÄÀÏÀ» °¡Á®´Ù ³õÀ» µð·ºÅ丮
etc
passwd³ª groupÆÄÀÏÀ» °¡Á®´Ù ³õÀ» µð·ºÅ丮
home
°³ÀΠȨÆäÀÌÁö³ª À¥ ¼ºñ½º °ü·Ã DBµîÀÇ ÀÚ·áµéÀ» °¡Á®´Ù ³õÀ» µð·ºÅ丮
icons
¾ÆÀÌÄÜÀ» ³õÀ» µð·ºÅ丮
logs
httpd°¡ ¸¸µé ·Î±× ÆÄÀÏÀ» ÀúÀåÇÒ µð·ºÅ丮
usr
usr/lib³ª usr/tmp¸¦ À§ÇÑ µð·ºÅ丮
src
httpd¸¦ ÄÄÆÄÀÏ ÇÒ µð·ºÅ丮
ÀÚ½ÅÀÌ ¿øÇÏ´Â À¥ ¼¹ö ÇÁ·Î±×·¥À» °¡Á®¿Í /WWW/src ¹Ø¿¡¼ ÄÄÆÄÀÏÇÏÀÚ. º»ÀÎÀÌ »ç¿ëÇÑ ¾ÆÆÄÄ¡ À¥ ¼¹ö ¼Ò½º
ÇÁ·Î±×·¥Àº ´ÙÀ½¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù.
http://www.apache.org
±âº»ÀûÀÎ ¼³Ä¡ °úÁ¤Àº À¥ ¼¹ö¸¦ ¼³Ä¡ÇÒ ¶§¿Í µ¿ÀÏÇÏÁö¸¸, ´ÙÀ½ÀÇ ¼³Ä¡ °úÁ¤¿¡¸¸ ÁÖÀÇÇÏ¸é µÈ´Ù. ¾Õ¿¡¼ ¸¸µé¾îÁø
conf¶ó´Â µð·ºÅ丮¿¡ ¾Æ·¡ÀÇ ÆÄÀϵéÀ» °¡Á®´Ù ³õ´Â´Ù.
# ls conf
ÃÑ 36 12 httpd.conf 14 srm.conf
4 access.conf 6 mime.types
conf¹Ø¿¡ ÀÖ´Â httpd.conf¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ÇØÁÖ¾î¾ß ÇÑ´Ù.
#ServerRoot /usr/local/etc/httpd
# for chroot()
ServerRoot /
ÀÌ°Í ÀÌ¿ÜÀÇ ¼³Á¤Àº ±âÁ¸ÀÇ ¼³Á¤°ú µ¿ÀÏÇÏ´Ù. Á»´õ ÀÚ¼¼ÇÑ ¾ÆÆÄÄ¡ ¼¹öÀÇ ±âº»ÀûÀÎ ¼³Á¤ ¹æ¹ýÀº ¿ù°£ Internet
1996³â 10¿ù È£¸¦ Âü°íÇϱ⠹ٶõ´Ù.
src¿¡¼ ÄÄÆÄÀÏÇÑ httpd¸¦ bin¹ØÀ¸·Î ¿Å°ÜµÎ°í ÀÌ httpd°¡ ÀÌ¿ëÇÏ´Â °øÀ¯ ¶óÀ̺귯¸®µéÀ» ½ÇÁ¦ /usr/lib¿¡¼
/WWW/usr/lib¹Ø¿¡ º¹»çÇØ µÐ´Ù. httpd°¡ »ç¿ëÇÏ´Â ÀÌÁø ÆÄÀÏÀº ldd¶ó´Â ¸í·É¾î·Î Á¶»çÇÑ´Ù.
# ldd httpd
libsocket.so.1 =>/usr/lib/libsocket.so.1
libnsl.so.1 => /usr/lib/libnsl.so.1
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
libintl.so.1 => /usr/lib/libintl.so.1
libw.so.1 => /usr/lib/libw.so.1
ÀÌ°ÍÀ» ÇÏ´Â ÀÌÀ¯´Â ±âÁ¸ÀÇ ¶óÀ̺귯¸® ÆÄÀÏÀÌ ÀÖ´ø /usr/lib¶ó´Â µð·ºÅ丮´Â httpd µ¥¸ó¿¡°Ô´Â ´õ ÀÌ»ó º¸ÀÌÁö
¾Ê±â ¶§¹®ÀÌ´Ù. µû¶ó¼, httpd µ¥¸ó¿¡°Ô ·çÆ® µð·ºÅ丮ÀÎ /WWW¹Ø¿¡ »õ·Î¿î usr/libÀ» ¸¸µé¾î ÇÊ¿äÇÑ ¶óÀ̺귯¸®µéÀ»
º¹»çÇØ µÎ¾î¾ß ÇÏ´Â °ÍÀÌ´Ù.
etc ¹Ø¿¡´Â /etc/passwd, /etc/group, /etc/netconfig¸¦ º¹»çÇÑ´Ù. ÀÌ ¶§, ÁÖÀÇÇØ¾ß ÇÒ Á¡Àº Æнº¿öµå ÆÄÀÏÀÇ Æнº¿öµå
ºÎºÐÀ» x·Î ¸·¾Æ ³õ´Â´Ù. ¼Ö¶ó¸®½º´Â shadow passwd¸¦ »ç¿ëÇϱ⠶§¹®¿¡ »ç½Ç ÀÌ·¸°Ô ÇÒ ÇÊ¿ä´Â ¾øÁö¸¸ À̸¦ ÀÌ¿ëÇÏÁö
¾ÊÀº °æ¿ì´Â Æнº¿öµåÀÇ ¾ÏÈ£ÈµÈ ºÎºÐÀº ¹Ýµå½Ã »èÁ¦ ½ÃÄÑ¾ß ÇÑ´Ù. ±×¸®°í ºÒÇÊ¿äÇÑ »ç¿ëÀÚ´Â »èÁ¦ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
dev ¹Ø¿¡´Â ÇÊ¿äÇÑ µð¹ÙÀ̽º ÆÄÀÏÀ» ¸¸µé¾î ³õ´Â´Ù. ¼Ö¶ó¸®½ºÀÇ °æ¿ì¿¡´Â ´ÙÀ½°ú °°ÀÌ ¸¸µé ¼ö Àִµ¥ ÀÌ´Â ¿î¿µÃ¼Á¦¿¡
µû¶ó¼ ´Þ¶óÁú ¼ö ÀÖ´Â ¿ä¼Ò°¡ °¡Àå Å©±â ¶§¹®¿¡ ´Ù¸¥ ¿î¿µÃ¼Á¦¸¦ ÀÌ¿ëÇÏ´Â °æ¿ì¿¡´Â Á¶½ÉÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.
# mknod /www/httpd/dev/ip c 11 3
# mknod /www/httpd/dev/tcp c 11 42
# mknod /www/httpd/dev/ticotsord c 105 1
# mknod /www/httpd/dev/udp c 11 41
# mknod /www/httpd/dev/zero c 13 12
# mknod /www/httpd/dev/null 13 2
# ls
ÃÑ 0 0 null 0 ticotsord 0 zero
0 ip 0 tcp 0 udp
ÀÌ·¸°Ô ÇÏ¸é µð¹ÙÀ̽º ÆÄÀÏÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù. ¸¸¾à¿¡ major, minor ¼ýÀÚ¸¦ ¸ð¸£´Â °æ¿ì¿¡´Â ½ÇÁ¦ /dev ¹Ø¿¡ ÀÖ´Â
ÆÄÀÏÀ» ¾Æ·¡¿Í °°ÀÌ »ìÆ캸¸é µÈ´Ù.
# ls -lL /dev/zero
0 crw-rw-rw- 1 root sys 13, 12 5¿ù 8ÀÏ 04:48 /dev/zero
Âü°í·Î zero´Â µ¿Àû ·Î´õ(dynamic loader)¿¡ ÀÇÇؼ »ç¿ëµÇ´Â °ÍÀÌ¸ç ³ª¸ÓÁö´Â ³×Æ®¿÷(network)¿¡ »ç¿ëµÇ´Â °ÍÀÌ´Ù.
CGI ÇÁ·Î±×·¥À» À¥ ¼¹ö°¡ Á¦°øÇÒ Áö¿¡ ´ëÇØ °áÁ¤ÇÑ ÈÄ CGI ÇÁ·Î±×·¥À» »ç¿ëÀÚµéÀÌ ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ·Á¸é, CGI
ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ´Â ÀÌÁø ÆÄÀÏÀ» Á¶»çÇÑ ÈÄ, CGI ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ´Â ÀÌÁø ÆÄÀÏ°ú ±×¿¡ µû¸¥ ¶óÀ̺귯¸®¸¦ /WWW/bin,
/WWW/usr/lib¿¡ °¢°¢ ³Ö¾î ÁÖ¿©¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é CGI ÇÁ·Î±×·¥¿¡ ÇÊ¿äÇÑ ÀÌÁø ÆÄÀϵé(sh, perlµî)À» chrootµÈ
»õ·Î¿î ·çÆ® µð·ºÅ丮¿¡¼ ãÁö ¸øÇÏ°Ô µÇ¹Ç·Î CGI ÇÁ·Î±×·¥À» ÀÌ¿ëÇÒ ¼ö ¾ø°Ô µÈ´Ù. ¿ì¼± ±âº»ÀûÀÎ sh°ú perlÀ»
ÄÄÆÄÀÏÇÑ ÈÄ bin ¹Ø¿¡ ³Ö¾î ÁØ´Ù. ¿©±â¼´Â Á¤ÀûÀ¸·Î ÄÄÆÄÀÏÇÏÁö ¾Ê´Â °æ¿ìÀ̹ǷΠsh¿Í perlÀÌ ÀÌ¿ëÇÏ´Â
¶óÀ̺귯¸®µéÀ» È®ÀÎÇÏ¿© usr/lib¿¡ º¹»çÇÏ¿© µÐ´Ù.
´ÙÀ½Àº ±âº»ÀûÀ¸·Î ³Ö¾î µÎ¸é CGI »ç¿ë¿¡ À¯¿ëÇÑ ÇÁ·Î±×·¥µéÀÌ´Ù.
cat comm cp csplit cut
du expand find fmt fold
grep head join locate ls
mkdir mv nl od paste
pr rm rmdir sort split
sum tail touch tr unexpand
uniq wc xargs
º»ÀÎÀÇ °æ¿ì´Â bin¿¡ csh, sh, perl, httpd¸¸À» ³Ö¾î µÎ¾ú´Âµ¥ À̵éÀÌ ÇÊ¿ä·Î ÇÏ´Â ¶óÀ̺귯¸®µéÀº ´ÙÀ½°ú °°¾Ò´Ù.
# pwd
/WWW
# ls usr
ÃÑ 4 2 lib/ 2 tmp/
# ls usr/lib
ÃÑ 3322 2 libmapmalloc.so@ 78 libw.so.1*
48 ld.so* 14 libmapmalloc.so.1* 32 nss_compat.so.1*
288 ld.so.1* 2 libmp.so@ 22 nss_dns.so.1*
2 libc.so@ 32 libmp.so.1* 42 nss_files.so.1*
1312 libc.so.1* 2 libnsl.so@ 48 nss_nis.so.1*
2 libdl.so@ 1136 libnsl.so.1* 58 nss_nisplus.so.1*
6 libdl.so.1* 2 libsocket.so@ 2 straddr.so@
2 libintl.so@ 136 libsocket.so.1* 20 straddr.so.2*
32 libintl.so.1* 2 libw.so@
¸¶Áö¸·À¸·Î httpd µ¥¸óÀ» ½ÇÇà½ÃÅ°±â À§ÇÑ wrapper¸¦ ¸¸µç´Ù. ´ÙÀ½Àº wrapperÀÇ ¼Ò½º ÄÚµåÀÌ´Ù.
#include <stdio.h>
main(int argc, char *argv[])
{
if (chdir(argv[1])) {
fprintf(stderr,"change directory to %s failed !",argv[1]);
exit(1);
}
if (chroot(argv[1])) {
fprintf(stderr,"chroot %s failed !",argv[1]);
exit(1);
}
execl("/bin/httpd","httpd","-f","/conf/httpd.conf",(char *)0);
exit(0);
}
ÀÌ ÇÁ·Î±×·¥ÀÇ Àǹ̴ ´ÙÀ½¿¡ ¿À´Â ½ÇÇà ¹æ¹ýÀ» º¸¸é È®½ÇÈ÷ ÀÌÇØ ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
´ÙÀ½ÀÇ °úÁ¤Àº /WWWÀÌÇÏ µð·ºÅ丮¿Í ÆÄÀÏÀÇ ¼ÒÀ¯¸¦ °¡»óÀÇ »ç¿ëÀÚÀÎ wwwÀ¸·Î ÇÑ´Ù. ¹°·Ð wwwÀ̶ó´Â »ç¿ëÀÚ´Â
/etc/passwd¿¡ µî·ÏµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ°ÍÀº nobody¸¦ µî·Ï½ÃŲ °úÁ¤°ú µ¿ÀÏÇÏ°Ô ÇÏ¸é µÈ´Ù.
# grep www /etc/passwd
www:x:1000:1000:WWW server:/www/httpd:
# grep webgroup /etc/group
webgroup::1000:web
# chown -R www /WWW
# chgrp -R webgroup /WWW
# chmod -R 755 /WWW
ÀÌÁ¦ wrapper ÇÁ·Î±×·¥ ÆÄÀÏÀ» ¸¸µé¾î¼ ºÎÆà ½ºÅ©¸³Æ®¿¡ Ãß°¡ÇØ Áֱ⸸ ÇÏ¸é µÈ´Ù.
# pwd
/etc/rc3.d
# ls
ÃÑ 1258 4 S15nfs.server* 2 S97wrapper*
4 README 2 S98smbd*
# cat S97wrapper
#!/bin/sh
# for httpd wrapper daemon
if [ -f /WWW/bin/httpd_wrapper ]
then
echo "start httpd wrapper"
/WWW/bin/httpd_wrapper
echo "/WWW/bin/httpd_wrapper"
fi
°á·Ð
Áö±Ý±îÁö chroot¸¦ ÀÌ¿ëÇÏ¿© ¾ÆÆÄÄ¡ À¥ ¼¹ö¸¦ ¼³Ä¡ÇÏ´Â ¹æ¹ý¿¡ ´ëÇÏ¿© ¼³¸íÇÏ¿´´Ù.
ÀÌ ¼³¸íÀÌ ¿Ïº®ÇÏÁø ¸øÇϸ®¶ó »ý°¢ÀÌ µÇ°í ½ÇÁ¦·Î À̸¦ ±¸ÇöÇÏ´Ù º¸¸é ±Û·Î½á ¼³¸íÇϱ⿡´Â Á» °ï¶õÇÑ ¿©·¯ °¡Áö
¹®Á¦¸¦ ¸¹ÀÌ °æÇèÇϸ®¶ó°í ¿¹»óÀÌ µÈ´Ù. ÀϹÝÀûÀ¸·Î chroot¸¦ ÀÌ¿ëÇÏ´Â °æ¿ì´Â ¾ÈÀüÇÑ FTP archive¸¦ ¼³Ä¡ÇÒ °æ¿ì¿¡
¸¹ÀÌ »ç¿ëµÇ¾î ¿À´ø ¹æ¹ýÀ̾ú´Ù. ¿©±â¼´Â À̸¦ À¥¿¡ Àû¿ë½ÃÄÑ º¸¾Ò´Âµ¥ ¼ÖÁ÷È÷ FTP archiveº¸´Ù À¥ ¼¹ö°¡ ´õ
¾î·Æ´Ù´Â °ÍÀ» ÀÎÁ¤ÇÏ°í ½Í´Ù. À¥ÀÌ Á» ±î´Ù·Î¿î ÀÌÀ¯´Â À¥ÀÌ CGI¸¦ ÀÌ¿ëÇϱ⠶§¹®Àε¥ À¥ÀÇ À¯¿ë¼ºÀ» À§Çؼ
°ü¸®ÀÚ°¡ Á» ¼ö°íÇÑ´Ù´Â »ý°¢À» ÇÏ¸é ±×·¡µµ Çغ¼¸¸ÇÑ °ÍÀÌ°í À¥ ¼¹ö¸¦ ¾ÈÀüÇÏ°Ô ¼³Ä¡ÇØ¾ß ÇÒ °æ¿ì¿¡´Â ÀÌ ¹æ¹ýÀ»
ÃßõÇÏ°í ½Í´Ù.
|
|
|