Á¦ ¸ñ : [NH-mailing] ·¹À̽º ÄÁµð¼Ç ¿Ã¸°ÀÌ : ±è½É±â(lb0gspm) µî·Ï½Ã°¢:99-12-29 20:42:17 ÀÐÀ½ : 79 ¹ÞÀ½ : 0 °ü·ÃÀÚ·á ¾øÀ½ /*------------------------------------------------*/ /* Race Condition in the Unix system */ /*------------------------------------------------*/ /* Written by Laks Bluesky */ /*------------------------------------------------*/ 0. ÇÁ·Î¼¼½º¿Í CPU À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ µÎ°³ ÀÌ»óÀÇ ÇÁ·Î¼¼½º°¡ µ¿½Ã¿¡ ½ÇÇà µÉ °æ¿ì, ±× µÎ°³ÀÇ ÇÁ·Î¼¼½º´Â ¼­·Î CPU ¸¦ Â÷ÁöÇϱâ À§ÇØ CPU ¸¦ ÇâÇØ °æÀïÇÏ¸ç ´Þ¸®´Â ÇüÅ°¡ µÇ¾îÁø´Ù. ¿¹¸¦ µé¾î, ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù°í °¡Á¤ÇØ º¸ÀÚ. { - X ¸¦ Ãâ·Â - child process¸¦ »ý¼º - O ¸¦ Ãâ·Â - ¹«ÇÑ·çÇÁ } ÀÌ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄ×À» °æ¿ì À̷лóÀ¸·Î´Â XOXOXOX.. ½ÄÀ¸·Î ¸ðÇÁ·Î¼¼½º°¡ Ãâ·ÂÇÏ´Â X¿Í ÀÚÇÁ·Î¼¼½º°¡ Ãâ·ÂÇÏ ´Â O°¡ Çѹø¾¿ ¹ø°¥¾Æ ³ªÅ¸³ª¾ß ÇÏ°ÚÁö¸¸ ½ÇÁ¦·Î´Â ¸ðÇÁ ·Î¼¼¼­¿Í ÀÚÇÁ·Î¼¼¼­°¡ CPU¸¦ Â÷ÁöÇϱâ À§ÇØ °è¼ÓÇؼ­ ´Þ¸®´Â ÇüÅ°¡ µÇ¾î XXOOXOOXOOOXXOOOOX...¿Í °°ÀÌ ºÒ±Ô Ä¢ÀûÀÎ °á°ú°¡ ³ªÅ¸³ª°Ô µÈ´Ù. Race ConditionÀº ÀÌ·¯ÇÑ Æ¯¼ºÀ» ÀÌ¿ëÇÏ´Â ÇØÅ· ±â¹ýÀ¸·Î, ¸ñÇ¥ ÇÁ·Î±×·¥°ú ÇØÄ¿ ÀÇ exploitÀÌ ¼­·Î °æÀïÇÏ°Ô ¸¸µêÀ¸·Î½á ÀÛ¾÷ÀÇ Ã³¸®½Ã °£À» °¡·Îä´Â °ÍÀÌ´Ù. Race ConditionÀº ÁÖ·Î ÀÓ½ÃÆÄÀÏ À» »ý¼ºÇÏ´Â setuid ÇÁ·Î±×·¥À» ¸ñÇ¥ ÇÁ·Î±×·¥À¸·Î ÇÏ´Â µ¥, ¸ñÇ¥ ÇÁ·Î±×·¥ÀÌ ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇϱâ Àü¿¡ ÇØÄ¿ÀÇ exploitÀÌ ¸ÕÀú ±× ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇϵµ·Ï ÇÔÀ¸·Î½á ÀÌ ·ç¾î Áö´Â °ÍÀÌ´Ù. 1. Race Condition ÀÇ Á¤ÀÇ Race ConditionÀ̶õ, ¹ö±×¸¦ °®°í ÀÖ´Â setuid ÇÁ·Î±×·¥ °ú ÇØÄ¿ÀÇ exploit ÀÌ ¼­·Î °æÀï(Race) »óÅÂ(Condition) ¿¡ À̸£°Ô ÇÏ¿©, setuid ÇÁ·Î±×·¥ÀÇ ±ÇÇÑÀ¸·Î ´Ù¸¥ ÆÄÀÏ ¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô ÇÏ´Â ¹æ¹ýÀ» ¸»ÇÑ´Ù. ¿¹¸¦ µé¾î ÇÑ ÇÁ·Î±×·¥ÀÌ rootÀÇ ¼ÒÀ¯±ÇÀ¸·Î setuid°¡ ºÙ¾î ÀÖ°í, ¶Ç ÀÌ ÇÁ·Î±×·¥ÀÌ ÀÛ¾÷ÀÇ ¼º°Ý»ó ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇÑ´Ù°í ÇÒ ¶§ ÇØÄ¿°¡ ±× ÀÓ½ÃÆÄÀÏ°ú °°Àº À̸§ÀÇ ½Éº¼¸¯ ¸µÅ©¸¦ »ý ¼ºÇØ µÎ¾ú´Ù¸é ½ÇÁ¦·Î ÇÁ·Î±×·¥ÀÌ Á¶ÀÛÇÏ´Â ÆÄÀÏÀº ½Éº¼ ¸¯ ¸µÅ©µÈ ¸ñÇ¥ÆÄÀÏÀÏ °ÍÀÌ´Ù. º¸´Ù ±¸Ã¼ÀûÀÎ ¿¹¸¦ µé¾î º¸ÀÚ. Solaris 2.6 ÀÌÇÏ ¸ðµç ½Ã½ºÅÛ¿¡¼­ kcms_calibrate ¶ó´Â ÇÁ·Î±×·¥Àº /tmp µð·ºÅ丮¿¡ Kp_kcms_sys.semcd ¶ó´Â ÀÓ ½ÃÆÄÀÏÀ» »ý¼ºÇÏ°Ô µÈ´Ù. ¸¸¾à ÇØÄ¿°¡ kcms_calibrate¸¦ ½ÇÇàÇϱâ Á÷Àü¿¡ /tmp/Kp_kcms_sys.semcd ¶ó´Â À̸§À¸·Î /root/.rhosts ¸¦ ¸ñÀûÁö·Î °®´Â ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µç´Ù ¸é ½ÇÁ¦·Î kcms_calibrate°¡ Á¶ÀÛÇÏ´Â ÆÄÀÏÀº ½Éº¼¸¯ ¸µ Å©ÀÇ ¸ñÇ¥ÆÄÀÏ·Î ¼³Á¤µÇ¾î ÀÖ´Â /root/.rhosts°¡ µÇ´Â°Í ÀÌ´Ù. ´ÙÇàÈ÷ Solaris ¿¡¼­´Â /root/.rhosts¸¦ Á¶ÀÛÇÏ´Â °Í¸¸À¸·Î root±ÇÇÑÀÇ ½©À» ¾òÀ» ¼ö´Â ¾øÁö¸¸ rootÀÇ ±Ç ÇÑÀ¸·Î ´Ù¸¥ ÆÄÀÏ¿¡ Á¢±ÙÇÒ ¼ö Àִٴ°͸¸À¸·Îµµ ÃæºÐÈ÷ º¸¾È»óÀÇ ÇêÁ¡ÀÌ µÉ ¼ö ÀÖ´Ù. ±×·¯¸é ÀÌ¿Í°°Àº Race ConditionÀÌ ÀÌ·ç¾îÁö±â À§ÇÑ Á¶ °ÇÀ» ¸ÕÀú ¾Ë¾Æº¸ÀÚ. 2. Race ConditionÀÌ ¹ß»ýÇÒ Á¶°Ç ÇØÄ¿°¡ A¶ó´Â ÇÁ·Î±×·¥À» ´ë»óÀ¸·Î Race ConditionÀ» ½Ã µµÇÏ°íÀÚ ÇÒ¶§, A ´Â ´ÙÀ½°ú °°Àº Á¶°ÇÀ» ¸¸Á·ÇÏ°í ÀÖ¾î ¾ß ÇÑ´Ù. - setuid °¡ ºÙ¾î ÀÖÀ»°Í. - ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇÒ °Í. - ±× ÀÓ½ÃÆÄÀÏÀÇ À̸§À» ÇØÄ¿°¡ ¹Ì¸® ¾Ë°í ÀÖÀ»°Í. - ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇÒ¶§ Race Condition ¿¡ ´ëÇÑ ´ëó¸¦ ÇÏÁö ¾ÊÀ»°Í. À§ÀÇ 4°³ÀÇ Á¶°ÇÀÌ µ¿½Ã¿¡ ¸¸Á·µÉ ¶§, ÇØÄ¿´Â A ¶ó´Â ÇÁ ·Î±×·¥À» ´ë»óÀ¸·Î Race ConditionÀ» ½ÃµµÇÒ ¼ö ÀÖ´Ù. 3. exploit ÀÇ ±¸Á¶ Race ConditionÀ» ÀÌ¿ëÇÑ exploitÀ» Á¦ÀÛÇÒ ¶§¿¡ explo- itÀº ÃÖ¼ÒÇÑ ´ÙÀ½ÀÇ ±â´ÉÀ» °¡Á®¾ß ÇÑ´Ù. { - system() ÇÔ¼ö ¶Ç´Â exec() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© Ÿ °Ù ÇÁ·Î±×·¥À» ¹é±×¶ó¿îµå·Î ½ÇÇà½Ãų°Í. ( ÀÌ·Î½á ¸ñÇ¥ ÇÁ·Î±×·¥°ú exploitÀº Race Condition »ó Å¿¡ ³õ¿©Áö°Ô µÈ´Ù. ) - symlink() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÀÌ¹Ì ¾Ë°í ÀÖ´Â Àӽà ÆÄÀÏÀÇ À̸§À¸·Î ½Éº¼¸¯ ¸µÅ©¸¦ »ý¼ºÇÑ´Ù. ( ¸ñÇ¥ ÇÁ·Î±×·¥ÀÌ ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇϱâ Àü¿¡ ¹Ì¸® °°Àº À̸§ÀÇ ½Éº¼¸¯ ¸µÅ©¸¦ »ý¼ºÇÔÀ¸·Î½á ¸ñÇ¥ ÇÁ·Î±×·¥ÀÌ Á¶ÀÛÇÏ´Â ÆÄÀÏÀÇ °æ·Î¸¦ ¹Ù²Ù¾î µÎ´Â °ÍÀÌ´Ù. ) } ÀÌ exploitÀ» ¸ñÇ¥ ÇÁ·Î±×·¥¿¡ ´ëÇØ ½ÇÇà½ÃÄ×À»¶§ expl- oitÀÇ ½ÇÇàÀÌ ³¡³ª±â Àü¿¡´Â Race ConditionÀÌ ¼º°øÇß´Â Áö¸¦ ÆľÇÇÒ ¼ö ¾øÀ¸¹Ç·Î, for ¹®À» ÀÌ¿ëÇÏ¿© ¿©·¯¹ø ¹Ý º¹½ÃÄÑ Áִ°ÍÀÌ ¼º°øÈ®·üÀ» ³ôÀÏ ¼ö ÀÖ´Ù. symlink() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ½Éº¼¸¯ ¸µÅ©¸¦ »ý¼ºÇÒ¶§, ¸ñ Ç¥ÆÄÀÏÀ» Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏ·Î ÁöÁ¤ÇÒ °æ¿ì default u- mask¿¡ ÀÇÇؼ­ rwxrwxrwxÀÇ ±ÇÇÑÀ» °®´Â ¸ñÇ¥ÆÄÀÏÀÌ »ý ¼ºµÇ¾î Áø´Ù. ¸ñÇ¥ ÇÁ·Î±×·¥ÀÌ ¸¸ÀÏ root ¼ÒÀ¯¶ó¸é, °á ±¹ ¸ñÇ¥ÆÄÀÏÀº root ¼ÒÀ¯·Î ¸¸µé¾î Áú °ÍÀÌ´Ù. ÇØÄ¿´Â ÀÌ·¸°Ô »ý¼ºµÈ ¸ñÇ¥ÆÄÀÏÀ» ÀÌ¿ëÇÒ ¼öµµ ÀÖ´Ù. ¶Ç´Â, ÀÌ ¹Ì Á¸ÀçÇÏ´Â ÆÄÀÏ, ¿¹¸¦ µé¾î /etc/passwd µîÀ» ¸ñÇ¥ÆÄ ÀÏ·Î ÁöÁ¤ÇÏ¸é ¸ñÇ¥ ÇÁ·Î±×·¥ÀÌ Á¶ÀÛÇÏ´Â ÆÄÀÏÀº ½Éº¼¸¯ ¸µÅ©·Î ¿¬°áµÈ /etc/passwd °¡ µÇ´Â °ÍÀÌ´Ù. 4. »õ·Î¿î Race Condition ÇÁ·Î±×·¡¸ÓµéÀº ÇØÄ¿µéÀÌ Race ConditionÀ» ÀÌ¿ëÇÏ¿© ½Ã ½ºÅÛÀ» À§ÇùÇÏ´Â °ÍÀ» ¸·±âÀ§ÇØ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» »ý °¢ÇØ ³Â´Ù. - ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇÒ ¶§, ±× ÀÓ½ÃÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÏ´Â ÆÄÀÏÀÎÁö °Ë»çÇÑ´Ù. - ¸¸ÀÏ ÀÌ¹Ì Á¸ÀçÇÏ°í ÀÖ´Ù¸é exploitÀÌ »ý¼ºÇÑ ½Éº¼¸¯ ¸µÅ©ÀÏ °¡´É¼ºÀÌ ÀÖÀ¸¹Ç·Î, ±× ÆÄÀÏÀ» Áö¿ì°í »õ·Î ÀÓ ½ÃÆÄÀÏÀ» »ý¼ºÇÑ´Ù. ÇÏÁö¸¸ ÇØÄ¿µéÀº ÇÁ·Î±×·¡¸ÓµéÀÇ ³ë·ÂÀ» ¹«½ÃÇϵíÀÌ ´õ ¿í ¹ßÀüµÈ ÇüÅÂÀÇ Race ConditionÀ» °³¹ßÇÔÀ¸·Î½á À̸¦ ¹«»öÇÏ°Ô Çß´Ù. º¸´Ù ¹ßÀüµÈ ÇüÅÂÀÇ Race ConditionÀº ´ÙÀ½°ú °°Àº ±¸Á¶¸¦ °®´Â´Ù. { - system() ÇÔ¼ö ³ª exec() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¸ñÇ¥ ÇÁ·Î±×·¥À» ¹é±×¶ó¿îµå·Î ½ÇÇà½ÃŲ´Ù. - ÀÓ½ÃÆÄÀÏÀÌ ½Éº¼¸¯ ¸µÅ©ÀÎÁö ÆÇ´ÜÇÏ¿© ½Éº¼¸¯ ¸µ Å©°¡ ¾Æ´Ï¶ó¸é ÀÓ½ÃÆÄÀÏÀ» Áö¿î´Ù. - ÀÓ½ÃÆÄÀÏÀÇ À̸§À¸·Î ½Éº¼¸¯ ¸µÅ©¸¦ »ý¼ºÇÑ´Ù. } ´Ù½Ã ¸»Çؼ­, ¸ñÇ¥ ÇÁ·Î±×·¥ÀÌ ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇÒ ¶§, Race ConditionÀÌ ÀÌ·ç¾îÁö°í Àִ°¡¸¦ °Ë»çÇÑ µÚ¿¡ ÀÓ ½ÃÆÄÀÏÀ» »ý¼ºÇÑ´Ù´Â Á¡À» ÀÌ¿ëÇÏ¿© ÀÏ´Ü ¸ñÇ¥ ÇÁ·Î±×·¥ À¸·Î ÇÏ¿©±Ý ¾ÈÀüÇÑ Á¶°ÇÀ» ¸¸µé¾î ÁÖ°í ¸ñÇ¥ ÇÁ·Î±×·¥ ÀÌ ¾ÈÀüÇÏ´Ù°í »ý°¢Çϸç ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇÏ´Â ¼ø°£ »ý¼º µÈ ÀÓ½ÃÆÄÀÏÀ» Áö¿ì¸é¼­ ½Éº¼¸¯ ¸µÅ©¸¦ »ý¼ºÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô µÇ¸é ¸ñÇ¥ ÇÁ·Î±×·¥°ú exploit Àº ÀÓ½ÃÆÄÀÏÀ» »ç ÀÌ¿¡ µÎ°í ¼­·ÎÀÇ µ¿Å¸¦ ÆľÇÇϸç CPU ¸¦ ÇâÇØ °è¼ÓÇØ ¼­ ´Þ¸®´Â ÇüÅ°¡ µÇ¾î ±×¾ß¸»·Î Race Condition À̶ó´Â À̸§ÀÌ Àß °É¸Â°Ô µÈ´Ù. 5. ÇÁ·Î±×·¡¸ÓÀÇ ´ëÀÀÃ¥ ÇÁ·Î±×·¡¸ÓµéÀº ±âÁ¸ÀÇ ¹æ¹ýÀ¸·Î´Â Race ConditionÀ» ÇÇ ÇÒ ¼ö ¾øÀ½À» ¾Ë°í ¶Ç Çѹø Race Condition¿¡ ´ëÇÑ ´ëÀÀ À» °í¾ÈÇØ ³Â´Ù. ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇÒ ¶§, ÀÏ´Ü ÀÓ½ÃÆÄÀÏ À» »ý¼ºÇÑ µÚ¿¡ ¹æ±Ý »ý¼ºÇÑ ÆÄÀÏÀÌ ½Éº¼¸¯ ¸µÅ©ÀÎÁö¸¦ °Ë»çÇÏ´Â ¹æ¹ýÀÌ´Ù. ÇöÀç±îÁö ÀÌ·¯ÇÑ ¹æ½ÄÀÇ ÇÁ·Î±×·¥Àº Race ConditionÀÌ ºÒ°¡´ÉÇÑ °ÍÀ¸·Î ¾Ë·ÁÁ® ÀÖ´Ù. /**************************************************/ ps. security.kaist.ac.kr ÀÇ ¼­ÀǼº(paladin@sparcs.ka ist.ac.kr)´ÔÀÇ ¸®Æ÷Æ®¸¦ Âü°íÇÏ¿´½À´Ï´Ù.