9.6. ÀÚ¹Ù

ÀÚ¹Ù¸¦ »ç¿ëÇØ¼­ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» °³¹ßÇÏ·Á¸é ¼ÖÁ÷È÷ ÀÚ¹Ù¸¦ ¹è¿î ÈÄ Ã¹ ´Ü°è´Â ÀÚ¹Ù º¸¾È¿¡ ´ëÇÑ µÎ °³ÀÇ ±âº» ÅØ½ºÆ®ÀÎ Gong [1999] ¿Í McGraw [1999] ¸¦ Àд °ÍÀÌ´Ù (µÎ¹øÂ°ÀÇ °æ¿ì ƯÈ÷ 7.1 ÀýÀ» º¸¶ó). ¶ÇÇÑ http://java.sun.com/security/seccodeguide.html ¿¡¼­ ½ãÀÌ °Ô½ÃÇÑ º¸¾È ÄÚµå ÁöħµéÀ» º¸¾Æ¾ß ÇÑ´Ù. ÀÚ¹ÙÀÇ º¸¾È ¸ðµ¨À» ¼³¸íÇÏ´Â ÀÏ·ÃÀÇ ½½¶óÀ̵åµéÀº http://www.dwheeler.com/javasec ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù. ¶ÇÇÑ McGraw [1998] À» º¼ ¼öµµ ÀÖ´Ù.

¸í¹éÈ÷ ¸¹Àº °ÍµéÀº °³¹ßÇϰí ÀÖ´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ À¯Çü¿¡ ÀÇÁ¸Çϴµ¥ Ŭ¶óÀ̾ðÆ®Ãø¿¡¼­ »ç¿ëÇϱâ À§ÇÑ ÀÚ¹Ù ÄÚµå´Â ¼­¹öÃø ÄÚµå¿Í´Â ÀüÇô ´Ù¸¥ ȯ°æ (°ú ½Å·Ú ¸ðµ¨) À» °®°í ÀÖ´Ù. ¹°·Ð ÀϹÝÀûÀÎ ¿ø¸®´Â Àû¿ëµÈ´Ù. ¿¹¸¦ µé¾î ½Å·ÚµÇÁö ¾ÊÀº Ãâó·ÎºÎÅÍ ¿Â ¸ðµç ÀÔ·ÂÀ» °Ë»ç ¹× ÇÊÅ͸µÇØ¾ß ÇÑ´Ù. ±×·¯³ª ÀÚ¹Ù¿¡´Â ¹ØºÎºÐ¿¡¼­ ³íÀÇµÉ Á¶½ÉÇØ¾ß ÇÒ ¾î¶² ¼û°ÜÁø ÀÔ·Â ¶Ç´Â ÀáÀçÀû ÀԷµéÀÌ ÀÖ´Ù. Johnathan Nightingale [2000] Àº ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö¿¡¼­ ¸¹Àº ¹®Á¦µéÀ» ¿ä¾àÇϰí ÀÖ´Â Àç¹ÌÀÖ´Â ¹®¼­¸¦ ÀÛ¼ºÇß´Ù:

...ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö¿¡¼­ Å« ¹®Á¦´Â »ó¼Ó¿¡ ½Å°æÀ» ½á¾ßÇÑ´Ù´Â °ÍÀÌ´Ù. ºÎ¸ð, ÀÎÅÍÆäÀ̽º ¶Ç´Â ºÎ¸ðÀÇ ÀÎÅÍÆäÀ̽º·ÎºÎÅÍ ¸Þ½îµå¸¦ »ó¼ÓÇÑ´Ù¸é Äڵ忡 º¸¾È ±¸¸ÛÀ» ¿­ °ÍÀ» °¢¿ÀÇÏ´Â °ÍÀÌ´Ù.

´ÙÀ½Àº Gong [1999], McGraw [1999], ½ãÀÇ ±æÀâÀÌ¿Í ÀúÀÚÀÇ °æÇè¿¡ ±âÃÊÇÑ Áß¿äÇÑ ¾à°£ÀÇ ÁöħµéÀÌ´Ù.

  1. public ÇÊµå ¶Ç´Â º¯¼ö¸¦ »ç¿ëÇÏÁö ¸¶¶ó; À̵éÀº private À¸·Î ¼±¾ðÇϰí À̵éÀÇ Á¢±Ù¼ºÀ» Á¦ÇÑÇÒ ¼ö ÀÖµµ·Ï À̵鿡 ´ëÇÑ Á¢±ÙÀÚ¸¦ Á¦°øÇضó.

  2. ¸Þ½îµå¸¦ private À¸·Î ¸¸µéÁö ¾ÊÀ» È®½ÇÇÑ ÀÌÀ¯°¡ ¾ø´Ù¸é private À¸·Î ¸¸µé¾î¶ó (±×·¸Áö ¾Ê´Ù¸é À̸¦ ¹®¼­È­Çضó). ÀÌ·¯ÇÑ non-private ¸Þ½îµåµéÀº tainted µ¥ÀÌŸ¸¦ ¹ÞÀ» ¼öµµ Àֱ⠶§¹®¿¡ ¾î·µç À̵éÀ» º¸È£Çϱâ À§ÇØ ¹Ì¸® ÁغñÇÏÁö ¾Ê¾Ò´Ù¸é ±×µé ÀÚ½ÅÀ» º¸È£ÇØ¾ß ÇÑ´Ù.

  3. JVM Àº ¾ÖÇø´°ú´Â ¹Ý´ë·Î ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ·±Å¸Àӽà Á¢±Ù º¯°æÀÚ (¿¹, private) ¸¦ ½ÇÁ¦ Àû¿ëÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. 2000³â 11¿ù 7ÀÏ "Secure Programming" ¸ÞÀϸµ ¸®½ºÆ®¿¡¼­ À̸¦ ÁöÀûÇÑ John Steven (Cigital Inc.) ¿¡ °í¸¿°Ô »ý°¢ÇÑ´Ù. ¹®Á¦´Â ÀÌ ¸ðµÎ°¡ Á¢±ÙÀ» ¿äûÇϴ Ŭ·¡½º°¡ ¾î¶² Ŭ·¡½º ·Î´õ¿Í ÇÔ²² ÀûÀçµÇ´À³Ä¿¡ ÀÇÁ¸ÇÑ´Ù´Â °ÍÀÌ´Ù. Ŭ·¡½º°¡ ½Å·ÚµÈ Ŭ·¡½º ·Î´õ (null/primordial Ŭ·¡½º ·Î´õ¸¦ Æ÷ÇÔÇØ) ¿Í ÇÔ²² ÀûÀçµÇ¸é Á¢±Ù °Ë»ç´Â Á¢±ÙÀ» Çã¿ëÇÏ´Â "TRUE" ¸¦ ¹ÝȯÇÑ´Ù. ¿¹¸¦ µé¾î ÀÌ´Â Àû¾îµµ ½ãÀÇ 1.2.2 VM °ú ÇÔ²² ÀÛµ¿Çϴµ¥ ±×·¯³ª ´Ù¸¥ ¹öÀü¿¡¼­´Â ÀÛµ¿ÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù:

    1. public Çʵ带 °®´Â victim Ŭ·¡½º (V) ¸¦ ÀÛ¼ºÇØ ÄÄÆÄÀÏÇØ¶ó.

    2. ÀÌ Çʵ忡 Á¢±ÙÇÏ´Â attack Ŭ·¡½º (A) ¸¦ ÀÛ¼ºÇØ ÄÄÆÄÀÏÇØ¶ó.

    3. V ÀÇ public Çʵ带 private À¸·Î º¯°æÇÑ ÈÄ ´Ù½Ã ÄÄÆÄÀÏÇØ¶ó.

    4. A ¸¦ ½ÇÇà½ÃÄѶó - ÀÌ´Â V ÀÇ (Áö±ÝÀº private) Çʵ忡 Á¢±ÙÇÒ °ÍÀÌ´Ù.

    ±×·¯³ª ¾ÖÇø´ÀÇ °æ¿ì´Â »óȲÀÌ ´Ù¸£´Ù. A ¸¦ ¾ÖÇø´À¸·Î º¯È¯ÇÏ°í ¾ÖÇø´ºä¾î ¶Ç´Â ºê¶ó¿ìÀú·Î À̸¦ ½ÇÇà½Ã۸é A ÀÇ Å¬·¡½º ·Î´õ´Â ´õÀÌ»ó ½Å·ÚµÈ (¶Ç´Â null) Ŭ·¡½º ·Î´õ°¡ ¾Æ´Ï´Ù. µû¶ó¼­ ÄÚµå´Â Ŭ·¡½º A ·ÎºÎÅÍ V.secret Çʵ带 Á¢±ÙÇÏ·Á Çϰí ÀÖ´Ù´Â ¸Þ½ÃÁö¿Í ÇÔ²² java.lang.IllegralAccessError ¸¦ ¹ß»ý½Ãų °ÍÀÌ´Ù.

  4. Á¤Àû ÇÊµå º¯¼öÀÇ »ç¿ëÀ» ÇÇÇØ¶ó. ÀÌ·¯ÇÑ º¯¼ö´Â Ŭ·¡½º (ÀνºÅϽº°¡ ¾Æ´Ñ) ¿¡ ¼Ò¼ÓµÈ °ÍÀ¸·Î ¸ðµç ´Ù¸¥ Ŭ·¡½º°¡ Ŭ·¡½ºÀÇ À§Ä¡¸¦ ãÀ» ¼ö ÀÖ´Ù. ±× °á°ú Á¤Àû ÇÊµå º¯¼ö´Â ¸ðµç ´Ù¸¥ Ŭ·¡½º°¡ ãÀ» ¼ö ÀÖÀ¸¸ç µû¶ó¼­ Á¤Àû ÇÊµå º¯¼ö¸¦ ¾ÈÀüÇÏ°Ô ÇÏ´Â °ÍÀº ´õ¿í ¾î·Æ´Ù.

  5. ÀáÀçÀûÀ¸·Î ¾ÇÀÇÀÖ´Â Äڵ忡 °¡º¯ °´Ã¼¸¦ Àý´ë·Î ¹ÝȯÇÏÁö ¸¶¶ó (Äڵ尡 À̸¦ º¯°æÇϱâ·Î °áÁ¤ÇÒ ¼öµµ Àֱ⠶§¹®¿¡). ¹è¿­Àº °¡º¯Àû (¹°·Ð ¹è¿­ÀÇ ³»¿ëµéÀº °¡º¯ÀûÀÌ ¾Æ´ÒÁö¶óµµ) ÀÓÀ» ÁÖ¸ñÇØ¶ó. µû¶ó¼­ ±â¹ÐÀ» ´Ù·ç´Â µ¥ÀÌŸ¸¦ °®´Â ³»ºÎ ¹è¿­¿¡ ´ëÇÑ ÂüÁ¶¸¦ ¹ÝȯÇÏÁö ¸¶¶ó.

  6. Àý´ë·Î »ç¿ëÀÚ°¡ Á¦°øÇÑ °¡º¯ °´Ã¼ (°´Ã¼ÀÇ ¹è¿­À» Æ÷ÇÔÇØ) ¸¦ Á÷Á¢ÀûÀ¸·Î ÀúÀåÇÏÁö ¸¶¶ó. ±×·¸Áö ¾ÊÀ¸¸é »ç¿ëÀÚ°¡ °´Ã¼¸¦ º¸¾ÈÀûÀÎ Äڵ忡 °Ç³×ÁÖ°í º¸¾ÈÀûÀÎ Äڵ尡 °´Ã¼¸¦ °Ë»çÇÏ°Ô ÇÑ ÈÄ º¸¾ÈÀûÀÎ Äڵ尡 µ¥ÀÌŸ¸¦ »ç¿ëÇÏ·Á°í ÇÏ´Â µ¿¾È µ¥ÀÌŸ¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù. ¹è¿­À» ³»ºÎÀûÀ¸·Î ÀúÀåÇϱâ Àü¿¡ º¹Á¦ (clone) Çϰí ÀÌ¿¡ ÁÖÀÇÇØ¶ó (»ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ º¹Á¦ ·çƾ¿¡ ÁÖÀÇÇØ¶ó).

  7. ÃʱâÈ­¿¡ ÀÇÁ¸ÇÏÁö ¸¶¶ó. ÃʱâÈ­µÇÁö ¾ÊÀº °´Ã¼¸¦ ÇÒ´çÇÏ´Â ¸î¸î ¹æ¹ýÀÌ ÀÖ´Ù.

  8. È®½ÇÇÑ ÀÌÀ¯°¡ ¾ø´Ù¸é ¸ðµç °ÍÀ» final ·Î ¸¸µé¾î¶ó. Ŭ·¡½º ¶Ç´Â ¸Þ½îµå°¡ final ÀÌ ¾Æ´Ï¶ó¸é °ø°ÝÀÚ°¡ À̸¦ À§ÇèÇÏ°í ¿¹±âÄ¡ ¸øÇÑ ¹æ½ÄÀ¸·Î È®ÀåÇÏ·Á°í ÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ÀÌ´Â º¸¾ÈÀûÀÌÁö¸¸ È®À强À» ÀÒÀ½À» ÁÖ¸ñÇØ¶ó.

  9. º¸¾ÈÀ» À§ÇØ ÆÐŰÁö À¯È¿ ¹üÀ§ (scope) ¿¡ ÀÇÁ¸ÇÏÁö ¸¶¶ó. java.lang ¿Í °°Àº ¾à°£ÀÇ Å¬·¡½ºµéÀº µðÆúÆ®·Î ´ÝÇô ÀÖÀ¸¸ç ¸î¸î JVM (Java Virtual Machine) Àº ´Ù¸¥ ÆÐŰÁöµéÀ» ´Ýµµ·Ï ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é Àڹ٠Ŭ·¡½ºµéÀº ´ÝÇôÀÖÁö ¾ÊÀº »óÅÂÀÌ´Ù. µû¶ó¼­ °ø°ÝÀÚ°¡ ÆÐŰÁö¾È¿¡ »õ·Î¿î Ŭ·¡½º¸¦ µµÀÔÇØ¼­ À̸¦ »ç¿ëÇØ º¸È£Çϰí ÀÖ´Ù°í »ý°¢ÇÏ´Â °Í¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.

  10. ³»ºÎ Ŭ·¡½º¸¦ »ç¿ëÇÏÁö ¸¶¶ó. ³»ºÎ Ŭ·¡½º°¡ ¹ÙÀÌÆ® ÄÚµå·Î º¯È¯µÉ ¶§ ³»ºÎ Ŭ·¡½º´Â ÆÐŰÁö ³»ÀÇ ¸ðµç Ŭ·¡½º¿¡ Á¢±ÙÇÒ ¼ö Àִ Ŭ·¡½º·Î º¯È¯µÈ´Ù. ´õ¿í ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀº °ÍÀº ³»ºÎ Ŭ·¡½º¸¦ °®°í ÀÖ´Â (enclosing) Ŭ·¡½ºÀÇ private Çʵ尡 ¼Ò¸®¾øÀÌ non-private °¡ µÇ¾î ³»ºÎ Ŭ·¡½º¿¡ ÀÇÇÑ Á¢±ÙÀ» Çã¿ëÇÑ´Ù.

  11. ±ÇÇÑÀ» ÃÖ¼ÒÈ­ÇØ¶ó. °¡´ÉÇÑ ¾î¶°ÇÑ Æ¯º°ÇÑ Çã°¡±Çµµ ¿ä±¸ÇÏÁö ¸¶¶ó. McGraw ´Â ´õ ³ª¾Æ°¡¼­ ¸ðµç Äڵ忡 ¼­¸íÇÏÁö ¸»¶ó°í ±ÇÇϰí ÀÖ´Ù ; ÀúÀÚ´Â ´õ ³ª¾Æ°¡¼­ Äڵ忡 ¼­¸íÇÏÁö¸¸ (µû¶ó¼­ »ç¿ëÀÚµéÀº ´ÜÁö ÀÌ Àü¼ÛÀÚ ¸ñ·Ï¿¡ ÀÇÇØ ¼­¸íµÈ Äڵ常 ½ÇÇà½Ã۱â·Î Á¤ÇÒ ¼ö ÀÖ´Ù) sandbox ±ÇÇѼ ÀÌ»óÀ» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇ϶ó°í ¸»ÇÑ´Ù. ´õ¿í ¸¹Àº ±ÇÇÑÀ» °¡Á®¾ß ÇÑ´Ù¸é Äڵ带 Ưº°È÷ ¾öÇÏ°Ô °¨»çÇØ¶ó.

  12. Äڵ忡 ¼­¸íÇØ¾ß ÇÑ´Ù¸é À̸¦ ¸ðµÎ ÇÑ ¾ÆÄ«ÀÌºê ÆÄÀÏ¿¡ ³õ¾Æ¶ó. ¿©±â¼­ McGraw [1999] ¸¦ ÀοëÇÏ´Â °ÍÀÌ ÃÖ¼±ÀÌ´Ù.

    ÀÌ ±ÔÄ¢ÀÇ ¸ñÀûÀº °ø°ÝÀÚ°¡ ¾ÇÀÇÀִ Ŭ·¡½º¿Í °¢ÀÚ°¡ ¼­¸íÇÑ Å¬·¡½ºµéÁß ÀϺθ¦ ¸µÅ©½ÃŰ°Å³ª Àý´ë·Î ÇÔ²² »ç¿ëµÇÁö ¾Ê¾Æ¾ß ÇÏ´Â ¼­¸íµÈ Ŭ·¡½ºµéÀ» ÇÔ²² ¸µÅ©½ÃŰ´Â »õ·Î¿î ¾ÖÇø´ ¶Ç´Â ¶óÀ̺귯¸®¸¦ ±¸ÃàÇÏ´Â mix-and-match °ø°ÝÀ» ¼öÇàÇÏÁö ¸øÇϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ÀÏ´ÜÀÇ Å¬·¡½ºµéÀ» ÇÔ²² ¼­¸íÇÔÀ¸·Î½á ÀÌ °ø°ÝÀ» ´õ ¾î·Æ°Ô ¸¸µé¾î¶ó. ±âÁ¸ÀÇ ÄÚµå ¼­¸í ½Ã½ºÅÛÀº mix-and-match °ø°ÝÀ» ¿¹¹æÇϱ⿡ ºÎÀûÀýÇѵ¥ µû¶ó¼­ ÀÌ ±ÔÄ¢ÀÌ ÀÌ·¯ÇÑ °ø°ÝÀ» ¿ÏÀüÈ÷ ¿¹¹æÇÒ ¼ö´Â ¾ø´Ù. ±×·¯³ª ÇϳªÀÇ ¾ÆÄ«À̺긦 »ç¿ëÇÏ´Â °ÍÀÌ ³ª»Û ¿µÇâÀ» ¹ÌÄ¥ ¼ö´Â ¾ø´Ù.

  13. Ŭ·¡½º¸¦ º¹Á¦ ºÒ°¡´ÉÇÏ°Ô ¸¸µé¾î¶ó. ÀÚ¹ÙÀÇ °´Ã¼ º¹Á¦ ¸ÞÄ«´ÏÁòÀº °ø°ÝÀÚ°¡ »ý¼ºÀÚµé Áß ¾î¶² °Íµµ ½ÇÇà½ÃŰÁö ¾Ê°íµµ Ŭ·¡½º¸¦ ÀνºÅϽºÈ­ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. Ŭ·¡½º¸¦ ºÒÁ¦ ºÒ°¡´ÉÇÏ°Ô ¸¸µé±â À§Çؼ­´Â ´ÜÁö °¢ Ŭ·¡½º¿¡ ´ÙÀ½ ¸Þ½îµå¸¦ Á¤ÀÇÇØ¶ó:
    public final void clone() throws java.lang.CloneNotSupportedException {
       throw new java.lang.CloneNotSupportedException();
       }

    Ŭ·¡½º¸¦ Á¤¸» º¹Á¦°¡´ÉÇÏ°Ô ¸¸µé Çʿ䰡 ÀÖ´Ù¸é °ø°ÝÀÚ°¡ Ŭ·Ð ¸Þ½îµå¸¦ ÀçÁ¤ÀÇÇÏÁö ¸øÇϵµ·Ï ÃëÇÒ ¼ö ÀÖ´Â ¾à°£ÀÇ º¸È£ Á¶Ä¡°¡ ÀÖ´Ù. °¢ÀÚÀÇ Å¬·Ð ¸Þ½îµå¸¦ Á¤ÀÇÇÑ´Ù¸é ´ÜÁö À̸¦ final ·Î Á¤ÀÇÇØ¶ó. ±×·¸Áö ¾ÊÀ¸¸é ´ÙÀ½À» Ãß°¡ÇÔÀ¸·Î½á ÃÖ¼ÒÇÑ Å¬·Ð ¸Þ½îµå°¡ ¾ÇÀÇÀûÀ¸·Î ÀçÁ¤ÀǵǴ °ÍÀ» ¿¹¹æÇÒ ¼ö ÀÖ´Ù:
    public final void clone() throws java.lang.CloneNotSupportedException {
      super.clone();
      }

  14. Ŭ·¡½º¸¦ unserializeable ·Î ¸¸µé¾î¶ó. Á÷·ÄÈ­´Â °ø°ÝÀÚ°¡ °´Ã¼»Ó¸¸ ¾Æ´Ï¶ó private ºÎºÐµéÀÇ ³»ºÎ »óŸ¦ º¼ ¼ö ÀÖµµ·Ï ÇÑ´Ù. À̸¦ ¿¹¹æÇϱâ À§ÇØ Å¬·¡½º¿¡ ´ÙÀ½ ¸Þ½îµå¸¦ Ãß°¡Çضó:
    private final void writeObject(ObjectOutputStream out)
      throws java.io.IOException {
         throw new java.io.IOException("Object cannot be serialized");
      }

    Á÷·ÄÈ­°¡ ¹«¹æÇÑ °æ¿ì¶óµµ ¹Ýµå½Ã ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á÷Á¢ÀûÀÎ ÇÚµé°ú ÁÖ¼Ò °ø°£¿¡ ´ëÇÑ Á¤º¸¸¦ Æ÷ÇÔÇÏ´Â Çʵ忡 ´ëÇØ transient Ű¿öµå¸¦ »ç¿ëÇØ¶ó. ±×·¸Áö ¾ÊÀ¸¸é Ŭ·¡½º¸¦ deserializing ÇÔÀ¸·Î½á ºÎÀûÀýÇÑ Á¢±ÙÀ» Çã¿ëÇÒ ¼öµµ ÀÖ´Ù. ¶ÇÇÑ ±â¹ÐÀ» ´Ù·ç´Â Á¤º¸¸¦ transient ·Î ½Äº°ÇÏ·Á°í ÇÒ ¼öµµ ÀÖ´Ù.

    Ŭ·¡½º¿¡ ´ëÇØ °¢ÀÚÀÇ Á÷·ÄÈ­ ¸Þ½îµå¸¦ Á¤ÀÇÇÑ´Ù¸é ¹è¿­À» ÃëÇÏ´Â ¸ðµç DataInput/DataOutput ¿¡ ³»ºÎ ¹è¿­À» Àü´ÞÇØ¼­´Â ¾ÈµÈ´Ù. ±Ùº»Àû ÀÌÀ¯´Â ¸ðµç DataInput/DataOutput ¸Þ½îµåµéÀº ÀçÁ¤ÀÇµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù. Serializable Ŭ·¡½º°¡ DataOutput (write(byte [] b)) ¸Þ½îµå¿¡ Á÷Á¢ÀûÀ¸·Î private ¹è¿­À» º¸³½´Ù¸é °ø°ÝÀÚ´Â private ¹è¿­À» Á¢±Ù ¹× º¯°æÇÒ ¼ö ÀÖµµ·Ï ¼­ºê Ŭ·¡½º ObjectOutputStream À» »ç¿ëÇØ write(byte [] b) ¸Þ½îµå¸¦ ÀçÁ¤ÀÇÇÒ ¼ö ÀÖ´Ù. µðÆúÆ® serialization Àº DataInput/DataOutput ¹ÙÀÌÆ® ¹è¿­ ¸Þ½îµå¿¡ private ¹ÙÀÌÆ® ¹è¿­ Çʵ带 µå·¯³»Áö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó.

  15. Ŭ·¡½º¸¦ undeserializeable ÇÏ°Ô ¸¸µé¾î¶ó. Ŭ·¡½º°¡ serializeable ÇÏÁö ¾Ê´õ¶óµµ deserializeable ÀÏ ¼ö ÀÖ´Ù. °ø°ÝÀÚ´Â ÀÚ½ÅÀÌ ¼±ÅÃÇÑ °ªÀ» °®´Â Ŭ·¡½ºÀÇ ÀνºÅϽº¿¡ ¿ì¿¬È÷ deserialize ÇÒ ¼ö ÀÖ´Â ¹ÙÀÌÆ® ½ÃÄö½º¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥ ¸»·Î deserialization Àº ÀÏÁ¾ÀÇ public »ý¼ºÀÚ·Î °ø°ÝÀÚ°¡ °´Ã¼ »óŸ¦ ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï Çϴµ¥ ÀÌ´Â ¸í¹éÈ÷ À§ÇèÇÑ ¿¬»êÀÌ´Ù. À̸¦ ¿¹¹æÇϱâ À§ÇØ Å¬·¡½º¿¡ ´ÙÀ½ ¸Þ½îµå¸¦ Ãß°¡Çضó:
    private final void readObject(ObjectInputStream in)
      throws java.io.IOException {
        throw new java.io.IOException("Class cannot be deserialized");
      }

  16. À̸§À¸·Î Ŭ·¡½º¸¦ ºñ±³ÇÏÁö ¸¶¶ó. °á±¹ °ø°ÝÀÚ´Â µ¿ÀÏÇÑ À̸§À» °®´Â Ŭ·¡½º¸¦ Á¤ÀÇÇÒ ¼ö ÀÖÀ¸¸ç ÁÖÀÇÇÏÁö ¾Ê´Â´Ù¸é ÀÌ·¯ÇÑ Å¬·¡½º¿¡ ºÎÀû´çÇÑ ±ÇÇÑÀ» Çã¿ëÇÔÀ¸·Î½á È¥µ¿À» ÀÏÀ¸Å³ ¼ö ÀÖ´Ù. ´ÙÀ½Àº °´Ã¼°¡ ÁÖ¾îÁø Ŭ·¡½º¸¦ °®´ÂÁö¸¦ °áÁ¤Çϴµ¥ ÀÖ¾î À߸øµÈ ¹æ¹ýÀÇ ¿¹ÀÌ´Ù:
      if (obj.getClass().getName().equals("Foo")) {

    µÎ °´Ã¼°¡ Á¤È®È÷ µ¿ÀÏÇÑ Å¬·¡½º¸¦ °®´ÂÁö °áÁ¤ÇÒ Çʿ䰡 ÀÖ´Ù¸é ´ë½Å ¾çÃø¿¡ ¸ðµÎ getClass() ¸¦ »ç¿ëÇϰí == ¿¬»êÀÚ¸¦ »ç¿ëÇØ ºñ±³Çضó. ÀÌ´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù:

      if (a.getClass() == b.getClass()) {

    °´Ã¼°¡ ÁÖ¾îÁø Ŭ·¡½ºÀ̸§À» °®´ÂÁö Á¤È®È÷ °áÁ¤ÇÒ Çʿ䰡 ÀÖ´Ù¸é ÇöÀç Ŭ·¡½ºÀÇ ClassLoader ÀÇ ÇöÀç À̸§°ø°£À» »ç¿ëÇÏ´ÂÁö¸¦ È®ÀÎÇÒ Çʿ䰡 ÀÖ´Ù. µû¶ó¼­ ´ÙÀ½ Æ÷¸ËÀ» »ç¿ëÇÒ Çʿ䰡 ÀÖÀ» °ÍÀÌ´Ù:

      if (obj.getClass() == this.getClassLoader().loadClass("Foo")) {

    ÀÌ ÁöħÀº McGraw ¿Í Felten ¿¡ ÀÇÇÑ °ÍÀ¸·Î ¾ÆÁÖ ÈǸ¢ÇÑ ÁöħÀε¥ ÀúÀÚ´Â ¾î·µç Ŭ·¡½º °ªµéÀÇ ºñ±³¸¦ °¡´ÉÇÑ ÇÇÇÏ´Â °ÍÀÌ ¾ðÁ¦³ª ÁÁÀº »ý°¢À̶ó°í Ãß°¡ÇÒ °ÍÀÌ´Ù. ¹°·Ð À̸¦ ÀüÇô ÇÒ Çʿ䰡 ¾øµµ·Ï Ŭ·¡½º ¸Þ½îµå¿Í ÀÎÅÍÆäÀ̽º¸¦ ¼³°èÇÏ·Á´Â °ÍÀÌ ´õ¿í È®½ÇÇÑ ¹æ¹ýÀÌ´Ù. ±×·¯³ª ÀÌ ¹æ¹ýÀÌ ´Ã ½Ç¿ëÀûÀÌÁö´Â ¾ÊÀ¸¸ç µû¶ó¼­ ÀÌ·¯ÇÑ ¿ä·ÉÀ» ¾Æ´Â °ÍÀÌ Áß¿äÇÏ´Ù.

  17. ¾ÏȣȭŰ, ÆÐ½º¿öµå ¶Ç´Â ¾Ë°í¸®µë °°Àº ºñ¹ÐÀ» ÄÚµå ¶Ç´Â µ¥ÀÌŸ¿¡ ÀúÀåÇÏÁö ¸¶¶ó. ¾ÇÀǰ¡ ÀÖ´Â JVM µéÀº »¡¸® ÀÌ µ¥ÀÌŸ¸¦ º¼ ¼ö ÀÖ´Ù. ÄÚµå obfuscation (¾Ö¸ÅÈ­) ÀÌ ½ÇÁ¦·Î ½É°¢ÇÑ °ø°ÝÀÚµé·ÎºÎÅÍ Äڵ带 ¼û±âÁö´Â ¾Ê´Â´Ù.