Home > Àüü±â»ç

[CSRC@KAIST Â÷¼¼´ëº¸¾ÈR&D¸®Æ÷Æ®] ½Ã½ºÅÛ º¸¾È Çâ»ó À§ÇÑ Á¦¾î È帧 ¹«°á¼º

ÀÔ·Â : 2020-09-17 14:42
ÆäÀ̽ººÏ º¸³»±â Æ®À§ÅÍ º¸³»±â ³×À̹ö ¹êµå º¸³»±â Ä«Ä«¿À ½ºÅ丮 º¸³»±â ³×À̹ö ºí·Î±× º¸³»±â
Á¦¾î È帧 Å»Ãë °ø°ÝÀ» ¸·±â À§ÇÑ ´ëÇ¥ÀûÀÎ ¿¬±¸, Á¦¾î È帧 ¹«°á¼º(CFI)
ÃÖ±ÙÀÇ CFI ¿¬±¸, ´õ¿í Á¦ÇÑµÈ CFG »ý¼º...º¸¾È¼º°ú ¼º´É µ¿½Ã Çâ»ó ²ÒÇØ


[º¸¾È´º½º= Á¤µ¿Àç KAIST CSRC ¾Ç¼ºÄÚµå ºÐ¼®ÆÀÀå] Á¦¾î È帧(Control Flow)À̶õ ÇÁ·Î±×·¥ÀÇ ½ÇÇà È帧¿¡ µû¸¥ ¼ø¼­¸¦ ³ªÅ¸³½ °ÍÀ¸·Î, °ø°ÝÀÚ°¡ ¿øÇÏ´Â ¾Ç¼ºÇàÀ§¸¦ ¼öÇàÇϱâ À§ÇØ Á¦¾î È帧À» Å»Ãë(Control Flow Hijacking)ÇÏ´Â °ÍÀº ¿À·£ ±â°£ °ø°ÝÀÚÀÇ ¸ñÇ¥°¡ µÇ¾ú½À´Ï´Ù. Á¦¾î È帧 Å»Ãë °ø°ÝÀº ¸Å¿ì º¸ÆíÀûÀ¸·Î »ç¿ëµÇ°í ÀÖÁö¸¸, ÀÌ¿¡ ´ëÇÑ ¿Ïº®ÇÑ ¹æ¾î ±â¼úÀº ¾ÆÁ÷ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ÇöÀç±îÁöµµ Á¦¾î È帧 Å»Ãë °ø°Ý°ú ¹æ¾î¿¡ °üÇÑ ¿¬±¸°¡ È°¹ßÈ÷ ÀÌ·ç¾îÁö°í ÀÖÁö¸¸, ¾ÆÁ÷ ¹ÌÈíÇÑ »óȲÀÔ´Ï´Ù. ±×·¯¸é Á¦¾îÈ帧ÀÌ ¾ß±âÇÏ´Â ¹®Á¦Á¡°ú ÀÌ·¯ÇÑ ¹®Á¦Á¡À» ÇØ°áÇØ ³ª°¡´Â ¹æ¾È¿¡ ´ëÇØ »ìÆ캸µµ·Ï ÇÏ°Ú½À´Ï´Ù.

[À̹ÌÁö=utoimage]


Á¦¾î È帧 Å»Ãë °ø°ÝÀ» ¸·±â À§ÇÑ ´ëÇ¥ÀûÀÎ ¿¬±¸°¡ Á¦¾î È帧 ¹«°á¼º(CFI: Control Flow Integrity)ÀÔ´Ï´Ù. CFI ÀÌ·ÐÀº Á¦¾î È帧 Å»Ãë °ø°Ý¿¡ ´ëÇÑ ´ëÇ¥ÀûÀÎ ¹æ¾î±â¹ýÀ¸·Î ´Ù¼Ò ¿À·¡µÇ°í Ä£¼÷ÇÏÁö ¾ÊÀº ÁÖÁ¦ÀÌÁö¸¸, ¿À·£ ¿ª»ç¸¦ Áö´Ñ ¸¸Å­ ½Ã½ºÅÛÀ» º¸È£Çϱâ À§ÇÑ Áß¿äÇÑ º¸¾È ±â¹ýÀÌÀÚ, ¸ðµç ½Ã½ºÅÛ¿¡ º¸ÆíÀûÀ¸·Î Àû¿ëÇÒ ¼ö ÀÖ´Â ¹ü¿ëÀûÀÎ ¹æ½ÄÀÔ´Ï´Ù.

CFI´Â Á¦¾î È帧 Å»Ãë ½Ã ³ªÅ¸³ª´Â ºñÁ¤»óÀû ½ÇÇà È帧À» ±Ù¿øÀûÀ¸·Î Â÷´ÜÇϱâ À§ÇÑ ¹æ½ÄÀ¸·Î, ÇÁ·Î±×·¥ÀÇ Á¦ÀÛÀÚ°¡ ÀǵµÇÑ È帧´ë·Î ½ÇÇàµÇ´ÂÁö °ËÁõÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù. CFI´Â ½ÇÇà Àü¿¡ Á¤Àû ºÐ¼®À» ÅëÇØ »ý¼ºµÈ Á¤»óÀûÀÎ ÇÁ·Î±×·¥ÀÇ ½ÇÇà È帧¿¡ ´ëÇÑ Á¦¾î È帧 ±×·¡ÇÁ(CFG: Control Flow Graph)¸¦ ±â¹ÝÀ¸·Î ƯÁ¤ ºÐ±â¹®¿¡¼­ ºÐ±â °¡´ÉÇÑ ¸ñÇ¥ ÁöÁ¡(Allowed Target)µéÀ» ¹Ì¸® ÃßÃâÇÕ´Ï´Ù. ±×¸®°í ºÐ±â¹®ÀÌ ¹ß»ýÇÏ´Â ½ÃÁ¡ÀÇ ºÐ±â ¸ñÇ¥ À§Ä¡°¡ ¹Ì¸® ºÐ¼®µÈ À¯È¿ ÁöÁ¡µé ÁßÀÇ ÇϳªÀÎÁö ¿©ºÎ¸¦ ÆÇ´ÜÇÔÀ¸·Î½á, ÇØ´ç ºÐ±âÀÇ ¹«°á¼ºÀ» µ¿ÀûÀ¸·Î °ËÁõÇÏ°Ô µË´Ï´Ù.

ÀÌ·ÐÀûÀ¸·Î´Â Á¦¾î È帧 Å»Ãë °ø°ÝÀ» ¿Ïº®È÷ ¸·À» ¼ö ÀÖÁö¸¸, Çö½Ç¿¡¼­´Â À̸¦ ±¸ÇöÇϱⰡ ¸Å¿ì ¾î·Æ½À´Ï´Ù. ±× ÀÌÀ¯´Â Á¤»óÀûÀÎ ÇÁ·Î±×·¥ÀÇ Á¦¾î È帧 ±×·¡ÇÁ¸¦ ¿Ïº®ÇÏ°Ô ±×¸± ¼ö ¾ø±â ¶§¹®ÀÔ´Ï´Ù. ¶ÇÇÑ, CFIÀÇ º¸¾È °­µµ¿Í ½Ã½ºÅÛ ¼º´ÉÀÌ ¹Ýºñ·ÊÇÑ´Ù´Â °Í ¶ÇÇÑ Å« À庮ÀÔ´Ï´Ù.

ÇÑÆí, ÃÖ±Ù¿¡´Â CFIÀÇ ½Ç¿ëÀûÀÎ ±¸Çöü°¡ µîÀåÇÏ°í ÀÖ½À´Ï´Ù. ½Ç¿ëÀûÀÎ ¹æ½ÄÀº ¿Ïº®ÇÑ º¸¾ÈÀ» Á¦°øÇÒ ¼ø ¾øÁö¸¸, ¸¹Àº °ø°ÝÀ» È¿°úÀûÀ¸·Î ¸·À» ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ Á¸ÀçÇÕ´Ï´Ù. ´ëÇ¥ÀûÀ¸·Î ÄÄÆÄÀÏ·¯ÀÎ GCC¿Í Clang¿¡¼­µµ Á¦¾î È帧 ¹«°á¼ºÀ» ±âº»ÀûÀ¸·Î Á¦°øÇÏ°í ÀÖÀ¸¸ç, ´Ù¾çÇÑ CFI ¿É¼ÇÀÌ Á¸ÀçÇÕ´Ï´Ù. ÀÌ ¿É¼ÇµéÀº ¹«¾ùÀ» ÀǹÌÇÏ´Â °ÍÀϱî¿ä?

¸ÕÀú, GCC¿¡¼­´Â Fcf-Protection ¸í·É¾î¸¦ ÅëÇØ CFI¸¦ Áö¿øÇÕ´Ï´Ù. ¿É¼Ç¿¡´Â Full, Branch, ReturnÀÌ Á¸ÀçÇϸç, ÀÌ °¢°¢ÀÇ ¿É¼ÇÀº Á¦¾î È帧 ¸í·É¾î(Control-Flow Transfer Instruction) Á¾·ù¿¡ µû¶ó ±¸ºÐÇÕ´Ï´Ù. Á¦¾î È帧 ¸í·É¾î¸¦ Indirect Call/Jump °°Àº °£Á¢ ºÐ±â¹®(Indirect Branch)°ú Return ¸í·É¾î·Î ±¸ºÐÇÏ¿© ÀÌµé °¢°¢¿¡ ´ëÇÑ º¸¾ÈÀ» Á¦°øÇÕ´Ï´Ù.

Clang¿¡¼­´Â Fsanitize ¸í·É¾î¸¦ ÅëÇØ Á¦¾î È帧 ¸í·É¾î¸¦ ´õ¿í ¼¼ºÐÈ­ÇØ Á¦°øÇÕ´Ï´Ù. Á¦¾î È帧 ¸í·É¾î¸¦ Virtual Call, Non-Virtual Call, Indirect Function Call, Member Function Pointer call·Î ±¸ºÐÇÏ°í °¢°¢¿¡ ´ëÇÑ º¸¾ÈÀ» Á¦°øÇÕ´Ï´Ù. ÀÌ ¹Û¿¡µµ Æ÷ÀÎÅÍ°¡ ´ÙÇü¼º Ŭ·¡½º(Polymorphic Class)¸¦ ij½ºÆ®ÇÏ´Â °æ¿ì, ¿Ã¹Ù¸¥ µ¿Àû À¯ÇüÀÇ °³Ã¼¸¦ »ó¼Ó¹Þ¾Æ ¸¸µé¾îÁ³´ÂÁö¿¡ ´ëÇÑ °Ë»ç¸¦ Á¦°øÇÕ´Ï´Ù.

ÇÏÁö¸¸, ÀÌ·¯ÇÑ ½Ç¿ëÀûÀÎ ¹æ½ÄÀº ¿©ÀüÈ÷ ÇÑ°èÁ¡ÀÌ Á¸ÀçÇÕ´Ï´Ù. CFIÀÇ º¸¾È °­µµ´Â ¾ó¸¶³ª ¼¼¹ÐÇÑ CFG¸¦ ¸¸µå´ÂÁö¿¡ µû¶ó °áÁ¤µÉ Á¤µµ·Î ÀÚ¼¼ÇÑ CFG¸¦ »ý¼ºÇÏ´Â °ÍÀº Áß¿äÇÑ ¹®Á¦ÀÔ´Ï´Ù. ÀÚ¼¼ÇÑ CFG¸¦ »ý¼ºÇϱâ À§Çؼ­ ¸ðµç Á¦¾î È帧 ¸í·É¾î¿¡ ´ëÇÑ Á¤È®ÇÑ ºÐ¼®ÀÌ ÇÊ¿äÇÕ´Ï´Ù. ÇÏÁö¸¸ º¸¾È °­µµ¸¦ ³ôÀ̱â À§ÇØ ÇÊ¿äÇÑ ¸ðµç Á¦¾î È帧 ¸í·É¾î¿¡ ´ëÇÑ ºÐ¼®¿¡´Â ¹®Á¦Á¡ÀÌ Á¸ÀçÇÕ´Ï´Ù.

ù ¹ø° ¹®Á¦Á¡Àº º¸È£ÇØ¾ß ÇÒ ¸ðµç ´ë»ó¿¡ ´ëÇØ ¿Ïº®ÇÏ°Ô ºÐ¼®ÇÒ ¼ö ¾ø´Ù´Â °ÍÀÔ´Ï´Ù. ÄÄÆÄÀÏ·¯¿¡¼­ ±âº»ÀûÀ¸·Î Á¦°øµÇ´Â ¿É¼ÇµéÀ» »ìÆ캸¸é Å©°Ô Indirect Call/Jump¿Í ReturnÀ¸·Î ±¸ºÐÇÒ ¼ö ÀÖ½À´Ï´Ù. À̵éÀº °¢°¢ Forward-Edge¿Í Backward-Edge·Î ºÒ¸®¸ç, ÀÌ µÎ Á¾·ù¸¦ ¸ðµÎ º¸È£ÇؾßÁö¸¸ ¿Ïº®ÇÑ º¸¾ÈÀ» Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. Backward-EdgeÀÇ °æ¿ì °ø°ÝÀÚ´Â Return¿¡ ÀÇÇØ º¹±ÍÇÒ ¶§ º¹±ÍÇÒ ÁÖ¼Ò¿¡ ´ëÇÑ Á¤º¸´Â ½ºÅÿ¡ ÀúÀåµÈ´Ù´Â °ÍÀ» ÀÌ¿ë, ÀÌ °ªÀ» º¯Á¶ÇØ Á¦¾î È帧 Å»Ãë °ø°ÝÀ» ÀÏÀ¸Åµ´Ï´Ù. ÀÌ °ø°ÝÀº ½ºÅÿ¡ ÀÖ´Â º¹±Í ÁÖ¼Ò¿¡ ´ëÇÑ Á¤º¸¸¦ ´Ù¸¥ ¾ÈÀüÇÑ Àå¼Ò¿¡ º¹Á¦Çصΰí, º¹±Í½Ã ½ºÅÃÀÇ °ª°ú ºñ±³ÇÔÀ¸·Î½á º¯Á¶ À¯¹«¸¦ ÆľÇÇÏ´Â ¹æ½ÄÀ¸·Î º¸È£ÇÒ ¼ö ÀÖ½À´Ï´Ù.

¡ãÁ¤µ¿Àç KAIST »çÀ̹öº¸¾È¿¬±¸¼¾ÅÍ ¾Ç¼ºÄÚµå ºÐ¼®ÆÀ ÆÀÀå[»çÁø=KAIST]

ÇÏÁö¸¸, Forward-EdgeÀÇ °æ¿ì¿¡´Â ÇÑ°èÁ¡ÀÌ Á¸ÀçÇÕ´Ï´Ù. Indirect Call/Jump¸¦ »ý¼º½ÃÅ°´Â ´ëÇ¥ÀûÀÎ ¿¹·Î Æ÷ÀÎÅ͸¦ µé ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ÇÔ¼ö Æ÷ÀÎÅÍ°¡ Á¸ÀçÇÑ´Ù¸é ÀÌ ÇÔ¼ö Æ÷ÀÎÅÍ°¡ È£ÃâÇÒ ¼ö ÀÖ´Â Èĺ¸ ÇÔ¼öµéÀÇ ´ë»óÀº Á¤Àû ºÐ¼®À» ÅëÇØ Á¤È®ÇÏ°Ô ÆľÇÇϱ⠾î·Æ½À´Ï´Ù. ¿Ïº®ÇÏ°Ô ºÐ¼®ÇÒ ¼ö ¾øÀ¸¹Ç·Î, ¹ÌŽ(False Negative)À» ÁÙÀ̱â À§ÇØ ºÐ¼® °á°ú°¡ ½ÇÁ¦ CFGº¸´Ù ´õ¿í ´ë·«ÀûÀ¸·Î(Over-Approximate) ³ªÅ¸³ª¸ç, ½ÇÁ¦º¸´Ù ´õ Å« CFG°¡ »ý¼ºµÈ´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ±× °á°ú, ºÐ¼®Çϱ⠸ðÈ£ÇÑ È帧µéÀº Á¤»óÀûÀÎ È帧ÀÌ ¾Æ´ÏÁö¸¸ CFG¿¡ Æ÷ÇԵǰí, °ø°ÝÀÚ´Â À̸¦ ÅëÇØ ¿ìȸ °ø°ÝÀÌ °¡´ÉÇÏ°Ô µÇ¾î Ãë¾àÇÏ°Ô µË´Ï´Ù.

¶Ç ´Ù¸¥ ¹®Á¦Á¡À¸·Î´Â CFIÀÇ º¸¾È¼ºÀº ¼º´É°ú ¹Ýºñ·ÊÇÏ´Â °æÇâÀÌ ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. º¸¾È¼ºÀ» ³ôÀÌ°íÀÚ ´õ¿í ÀÚ¼¼ÇÑ CFG¸¦ ±×¸®°Ô µÇ¸é, ½ÇÇà Áß¿¡ ¹«°á¼ºÀ» °Ë»çÇÏ´Â ·çƾÀÌ ´õ¿í º¹ÀâÇØÁ® ¼º´ÉÀÌ Ç϶ôÇϱ⠶§¹®ÀÔ´Ï´Ù. ½ÇÁ¦·Î, ÃֽŠ¸®´ª½º Ä¿³Î, À©µµ¿ìÀÇ ¿î¿µÃ¼Á¦µé ¹× ÃÖ±Ù¿¡ ¹ßÇ¥µÈ IntelÀÇ Â÷¼¼´ë ¸ð¹ÙÀÏ ÇÁ·Î¼¼¼­ÀÎ Tiger Lake¿¡ žÀçµÈ CET(Control-Flow Enforcement Technology) ±â¼úµéÁ¶Â÷µµ ¼º´É¿¡ ÁßÁ¡À» µÐ ¹æ½ÄÀ¸·Î, Á¦¾î È帧¿¡ ´ëÇÑ ¿Ïº®ÇÑ º¸¾ÈÀ» Á¦°øÇÏÁö ¸øÇÏ°í ÀÖ½À´Ï´Ù.

ÃÖ±ÙÀÇ CFI ¿¬±¸ µ¿Çâ ¶ÇÇÑ ÀÌ·¯ÇÑ »óȲÀ» ±Øº¹ÇÏ°íÀÚ ´õ¿í Á¦ÇÑµÈ CFG¸¦ »ý¼ºÇÔÀ¸·Î½á º¸¾È¼ºÀ» ±Øµµ·Î Çâ»ó½ÃÅ°´Â µ¿½Ã¿¡ Çϵå¿þ¾îÀÇ µµ¿òÀ» ¹Þ¾Æ Çâ»óµÈ ¼º´ÉÀ» º¸ÀåÇÒ ¼ö ÀÖ´Â ¹æ½ÄÀ¸·Î ÁßÁ¡À» µÎ°í ÀÖ½À´Ï´Ù. ±×·¸´Ù¸é ÀÌ·ÐÀûÀ¸·Î ¿Ïº®ÇÑ CFI°¡ ½ÇÁ¦·Î ±¸ÇöµÈ´Ù¸é ÇØÅ·ÀÌ ºÒ°¡´ÉÇÒ±î¿ä? ÀÌ¿¡ °üÇÑ À̾߱â´Â ´ÙÀ½ ¿¬Àç¿¡¼­ ³ª´²º¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.
[±Û_ Á¤µ¿Àç KAIST »çÀ̹öº¸¾È¿¬±¸¼¾ÅÍ ¾Ç¼ºÄÚµå ºÐ¼®ÆÀ ÆÀÀå]

<ÀúÀÛ±ÇÀÚ: º¸¾È´º½º(www.boannews.com) ¹«´ÜÀüÀç-Àç¹èÆ÷±ÝÁö>

  •  
  • 0
  • ÆäÀ̽ººÏ º¸³»±â Æ®À§ÅÍ º¸³»±â ³×À̹ö ¹êµå º¸³»±â Ä«Ä«¿À ½ºÅ丮 º¸³»±â ³×À̹ö ºí·Î±× º¸³»±â

  • ¡°
  •  SNS¿¡¼­µµ º¸¾È´º½º¸¦ ¹Þ¾Æº¸¼¼¿ä!! 
  • ¡±
¾Æ½ºÆ®·Ð½ÃÅ¥¸®Æ¼ ÆÄ¿öºñÁî 2023³â2¿ù23ÀÏ ½ÃÀÛ ³Ý¾Øµå ÆÄ¿öºñÁî ÁøÇà 2020³â1¿ù8ÀÏ ½ÃÀÛ~2021³â 1¿ù8ÀϱîÁö À§Áîµð¿£¿¡½º 2018
¼³¹®Á¶»ç
³»³â ȸ»ç¿¡ ²À µµÀÔÇÏ°í ½ÍÀº º¸¾È ¼Ö·ç¼Ç ¶Ç´Â Ç÷§ÆûÀº ¹«¾ùÀΰ¡¿ä?
XDR
EDR
AI º¸¾È
Á¦·ÎÆ®·¯½ºÆ®
°ø±Þ¸Á º¸¾È ü°è(SBOM)
Ŭ¶ó¿ìµå º¸¾È ¼Ö·ç¼Ç
±âŸ(´ñ±Û·Î)