* Happinux secureOS ºÐ¼® ¹× ³ÌµÎ¸® ¿å½É°°¾Æ¼­´Â ÀÛ¾÷ ÀÏÁö¸¦ ¸¸µé°í ½ÍÁö¸¸ -_-;; ¾à 5°³¿ù Àü¿¡ ÄÚµùÇÑ ³»¿ëÀ» º¸°í Àá½Ãµ¿¾È ¾îÁö·¯¿ü±â ¶§¹®¿¡ ÁöÀúºÐÇÑ Äڵ带 Á¤¸®ÇϰíÀÚ, ÀÌ·¸°Ô ÄÚµå Á¤¸® ÀÏÁö¸¦ ±×³ª¸¶ ´ë½ÅÇØ¼­ ¶¼¿î´Ù -_- SecureOS °³¹ßÀ» °èȹÇÑ °ÍÀº 2003³â 11¿ù ¸»°æ? SecureOS º¸´Ù´Â ¼øÀüÈ÷ LKM ÇÁ·Î±×·¡¹Ö ÂÊ¿¡ Ç« ºüÁ®ÀÖ¾ú±â ¶§¹®¿¡ Linux kernelÀ» ±â¹ÝÀ¸·Î ÇÑ ¹éµµ¾î¸µ ±â¹ý Äڵ带 °³¹ßÇϰí ÀÖ´ø ÁßÀ̾ú´Ù. (¹°·Ð ÇÊÀÚÀÇ È¨ÆäÀÌÁö¿¡ ±×´ë·Î ¿Ã¶ó°¡ ÀÖ´Ù. °ü½ÉÀÖ´Â »ç¶÷Àº ¹Þ¾Æ°¡µµ·Ï.) º»°ÝÀûÀÎ °³¹ßÀº 12¿ù ÇÑ´ÞÀ̾ú´ø °ÍÀ¸·Î ±â¾ïÇÑ´Ù. óÀ½ºÎÅÍ º¸¾È Á¤Ã¥ ÀÌ·ÐÀ» Àß ¼¼¿ï °ÍÀ»... °³¹ßÇϸ鼭 ÈÄȸÇß´ø °ÍÀ¸·Î ±â¾ïÇÑ´Ù. ´öºÐ¿¡ °ÅÀÇ Àý¹Ý Á¤µµ °³¹ßÇÑ ³»¿ëÀÌ ¹°°ÅǰÀ¸·Î º¯Çß°í, °³¹ß °èȹµµ Áßµµ º¯°æµÇ´Â ¾öû³­ ¼ö¸ð¸¦ °Þ¾ú´Ù. »ý°¢Çغ¸´Ï, ±× Äڵ带 Àß »ç¿ëÇ߾ º° Å»¾ø´Â Á¢±Ù Á¦¾î´Â °¡´ÉÇßÀ¸¸®¶ó º»´Ù. ´ÜÁö, Á» ´õ ¸íÈ®ÇÑ Á¢±Ù Á¦¾î ±â¹ýÀ» ±¸ÇöÇÏ°í ½Í¾ú³ªº¸´Ù. ¾î·µç Áö±Ý ±¸ÇöµÈ º¸¾È Á¤Ã¥Àº RBAC¶ó ºÒ¸®¿ì´Â Á¢±Ù Á¦¾î ±â¹ýÀÇ º¯Á¾À¸·Î½á, ÇÊÀÚ°¡ Á¦°øÇÏ´Â ´Ù¸¥ ¹®¼­¸¦ º¸¸é, ½±°Ô ÀÌÇØÇϸ®¶ó »ý°¢µÈ´Ù. È¥ÀÚ ÀÌ°Í Àú°Í ¸¸Áö¸é¼­ ÄÚµùÇÒ¶§ ´ç½Ã´Â ´Ü¼øÈ÷ Àç¹Ì·Î Ç߱⠶§¹®¿¡... ¸·ÆÇ ÀÛ¾÷¿¡¼­ ½Å°æÁú ³ª´Â ¹®¼­ÀÛ¾÷°ú ¹Ð·Á¿À´Â ½ºÆ®·¹½º¸¦ °¨´ç¸øÇϰí -_- ȱ±è¿¡ ¿©ÀÚÄ£±¸¸¦ ¸¸µå´Â µî ¾à°£Àº ¾îÀ̾ø´Â ÇൿÀ» ¸¶±¸ ÀúÁú·¶´ø °ÍÀ¸·Î ±â¾ïÇÑ´Ù. -_-... Áö±ÝÀº ´Ù½Ã ±× Àç¹Ì¸¦ µÇã±â À§ÇÑ ¹®¼­ÀÛ¾÷¿¡ ¸ôµÎÇϰí ÀÖ´Ù. :-) ÀÚ, ±×·³ Çϳª¾¿ ¼Ò½º ÄÚµåÀÇ ¼ø¼­´ë·Î ÀÌÇØÇØ¾ß ÇÏ´Â ¸íÈ®ÇÑ ºÎºÐ°ú ÄÚµåÀÇ ¸ñÀû, ¶Ç´Â ¿ªÇҵ ´ëÇØ ¤°í ³Ñ¾î°¡µµ·Ï ÇϰڴÙ. ¼Ò½º ÄÚµå ¶óÀ̼¾½º À̰ÍÀº INetCop Security¿¡ Á¦°øÇÑ Happinux Á¦Ç° ÄÚµåÀÇ °³¹ß ¹öÀü ÀϺÎÀÌ´Ù. ÄÚµåÀÇ ¸ðµÎ´Â ÇÊÀÚ°¡ Á÷Á¢ ÀÛ¼ºÇÏ¿´À¸¸ç, Çã¶ôÇÑ ´©±¸¶óµµ Äڵ忡 ÆÐÄ¡¸¦ °¡ÇÒ ¼ö ÀÖ´Ù. ´Ü, °ø°³¿ë ¼Ò½º ÄÚµå ¹öÀü¿¡ ÇÑÇÏ¿©. (ÇÊÀÚ´Â ÀÌ Äڵ带 ¹Ì¿Ï¼º ¹öÀüÀ̶ó ºÎ¸£°í ÀÖ´Ù) ±×·¸°Ô ¼öÁ¤µÈ ³»¿ëÀ» ÀÚüÀûÀ¸·Î °ø°³ ¶Ç´Â, À¯Æ÷¸¦ ±ÝÇÑ´Ù. ¾ÆÁ÷±îÁö °ø°³µÈ SecureOS ÄÚµå´Â ±¹³»¿¡ ¾ø´Â °ÍÀ¸·Î ÆÇ´ÜµÈ´Ù... ÀÌ ¶§¹®¿¡ Âü°íÇÒ¸¸ÇÑ ÀÚ·áµéÀÌ ºÎÁ·Çؼ­ ¸Ç¶¥¿¡ ÇìµùÇÏ´Â ±âºÐÀ» »ó´çÈ÷ ¸¹ÀÌ ´À³¥ ¼ö ÀÖ¾ú´Ù. -_-. SecureOS ¿î¿µÃ¼Á¦ °£·«ÇÑ Æ¯Â¡ -- Happinux Secure OS Kernel Happinux Project (Real codename): Security kernel operating system. Now, working. * RBAC (Role-Based Access Control) kernel based module. * root function separation module. * safe file system kernel based module. (ext2 support and, ext3 support) * safe process kernel based module. * safe library based module. * safe network socket kernel based module. * IPS (Intrusion Prevention System) kernel based module. (ipv4 support) about Happinux: http://inetcop.net/eng/happynux.htm -- SecureOS Ä¿³Î ºÐ¼® -- Áö±ÝºÎÅÍÀÇ ³»¿ëÀº ÇÊÀÚ°¡ °³¹ßÇÑ µð·ºÅ丮¿¡¼­ `ls'¸í·ÉÀ» ÅëÇØ ³ª¿Â ÄÚµåµé ¼ø¼­´ë·Î »ý°¢³ª´Âµ¥·Î ¼³¸íÇÑ °ÍÀÌ´Ù. Â÷ÈÄ¿¡ HTML ¼Ò½º ±Û·Î¹ö¸¦ »ç¿ëÇØ¼­ URLÀ» Á¦°øÇϵµ·Ï ÇϰڴÙ. Âü°í·Î, ºÐ¼®ÇÒ ÄÚµå´Â 2.4.x´ë¸¦ Áß½ÉÀ¸·Î °³¹ßÇÑ RedHat 9.0 ¹öÀüÀÌ´Ù. ºÐ¼® ¼ø¼­´Â ¿ì¼±, kernel code -> application code -> ´Ü¼ø script ¼ø¼­´ë·Î ÇϰڴÙ. scriptÀÇ ¿ªÇÒÀº SecureOS°¡ ¼³Á¤ µÇ±â±îÁöÀÇ ÀÌ½Ä °úÁ¤À» ´ã´çÇϰí ÀÖ´Ù. ½Ã½ºÅÛ¿¡ Á¤»óÀûÀ¸·Î ÄÄÆÄÀÏÇÏ¿© ¸ðµâ·Î addonµÇ±â ±îÁö scriptµéÀÇ ¿ªÇÒÀÌ Å©´Ù°í ºÁ¾ß°Ú´Ù. ¾î·µç ¸ðµâÀÌ installµÇ¸é, ±× ÀÌÈĺÎÅÍ´Â º¸¾È Á¤Ã¥¿¡ ÀÇÇØ ½Ã½ºÅÛÀÌ ±¸¼ºµÇ¹Ç·Î, º¸¾È °ü¸®ÀÚ Àü¿ëÀ¸·Î ½Ã½ºÅÛÀ» °ü¸®ÇÒ ¼ö ÀÖ´Â Àü¿ë µµ±¸¸¦ Á¦°øÇÑ´Ù. ÀÌ ºÎºÐÀÌ ¹Ù·Î application code ´ã´ç ºÎºÐÀÌ´Ù. __nonexec_sh.c: ½©ÄÚµå ¼öÇàÀ» °¡·Îä¾î ½ÇÇàÀ» Â÷´ÜÇÏ´Â Äڵ带 Æ÷ÇÔÇϰí ÀÖ´Ù. °ø°Ý üŷ ÇÔ¼öÀÎ __check_atk ÇÔ¼ö¸¦ ¾²´Âµ¥ ¿ì¼± ·¹Áö½ºÆ®¸® °ª¿¡¼­ ebx¿Í eip¸¦ ±¸ÇÑ´Ù. ¶ÇÇÑ, ½ºÅÃÀÇ ½ÃÀÛ°ú ÈüÀÇ ½ÃÀÛ. ÈüÀÇ ³¡ ºÎºÐÀ» ÇöÀç current task¿¡¼­ ±¸Çؿ´Ù. ÇØ´ç Ãë¾àÁ¡¿¡ ÀÇÇØ Äڵ尡 ½ÇÇàµÊÀ» °¨ÁöÇßÀ» °æ¿ì. °ø°Ý¿¡ ´ëÇÑ ¿¡·¯ ¸Þ¼¼Áö¸¦ Ãâ·ÂÇÏ¸ç ½ÇÇàÀÌ °­Á¦ Á¾·áµÈ´Ù. get_tty_nm ÇÔ¼ö´Â tty¹øÈ£¸¦ ¸®ÅÏÇÏ´Â ÇÔ¼ö. chdir.c: º°º¼ÀÏ ¾ø´Â Äڵ尰Áö¸¸ ¸Å¿ì Áß¿äÇÑ ¿ªÇÒÀ» ÇÏ´Â ±â´ÉÀ» °¡Áö°í ÀÖ´Ù. ÀÌÁß ºÐÇÒ ½Ã½ºÅÛ Áß, ½ÇÁ¦ ¿î¿µ ½Ã½ºÅÛ¿¡¼­ uid°¡ 0ÀÎ »ç¿ëÀÚÀÏ °æ¿ì chdir("get_igniz"); ÇÔ¼ö ³»¿ëÀ» È£ÃâÇÒ °æ¿ì, ±× »ç¿ëÀÚ¸¦ º¸¾È ÃÖ°í °ü¸®ÀÚ·Î ¸¸µé¾îÁØ´Ù. ÀÌ ±â´ÉÀº ¸Å¿ì Ưº°ÇÑ °æ¿ì¿¡¸¸ »ç¿ëµÇ¹Ç·Î, Æò¼Ò ½Ã½ºÅÛ¿¡¼± »ç¿ëµÇÁö ¾Ê´Â´Ù. chmod.c, chown.c: ÀÌÁ¦ Á¢±Ù Á¦¾îÀÇ ½ÃÀÛ ÄÚµåÀÎ °Í °°´Ù. Á¢±Ù Á¦¾î ¹æ½ÄÀº ¸Å¿ì ÀϹÝÀûÀε¥ ¿ì¼±, »ç¿ëÀÚÀÇ uid¸¦ °¡·Á³»¾î º¸¾È°ü¸®ÀÚÀÏ °æ¿ì, Á¢±Ù Á¦¾î¸¦ µÎÁö ¾Ê°í ³ª¸ÓÁö, root ¹× ÀÏ¹Ý »ç¿ëÀÚÀ϶§¸¸ Á¢±Ù Á¦¾î¸¦ µÎ´Â °ü¸® ¹æ¹ýÀ» »ç¿ëÇÑ´Ù. dentry´Â µð·ºÅ丮 ¿£Æ®¸®Àε¥, ÀÌ °ªÀº __n_name_user_func(°æ·Î); ÇÔ¼ö·Î ¾ò¾î¿Â´Ù. ÇØ´ç °ü·Ã inode¸¦ ¾ò±âÀ§ÇÑ ÀÛ¾÷À̶ó°í º¸¸é µÇ°Ú´Ù. dentry->d_inode¸¦ ÅëÇØ ÇØ´ç inode¿¡ Á¢±ÙÇÑ´Ù. ¸ÕÀú, ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚ, ±×·ì ¼ÒÀ¯ÀÚ¿¡ µû¶ó, Á¢±ÙÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ¸¦ ±¸ºÐÇÑ´Ù. ±× ÈÄ, ÆÄÀÏ °ü·Ã ÇØ´ç inode ºÎºÐÀ» üŷ -> µð·ºÅ丮 °ü·Ã ÇØ´ç inode ºÎºÐÀ» üŷ -> umask¶ó ºÒ¸®¿ì´Â ÇØ´ç inode ºÎºÐÀ» üŷ ÀÌ·¯ÇÑ °úÁ¤À» °ÅÄ£´Ù. ¸¸¾à ¼³Á¤µÈ ³»¿ëÀÌ ÀÖ´Ù¸é, °ü·Ã ºÎºÐ¿¡¼­ °­Á¦Àû Á¢±Ù Á¦¾î¸¦ ¼öÇàÇÏ°Ô µÈ´Ù. ¾ø´Ù¸é, Á¤»ó ½Ã½ºÅÛ ÄÝÀ» ¼öÇàÇÑ´Ù. creat.c: ¾Æ¸¶µµ 9.0À̻󿡼­ (2.4´ë Ä¿³Î) ¼öÇàÇϱâ À§ÇØ µû·Î ¸¸µç ÄÚµå °°´Ù. find_umask_inode()¶ó´Â ¸Å¿ì Áß¿äÇÑ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼ö´Â »õ·Î ¸¸µé¾îÁö´Â(»ý¼º) ÆÄÀÏÀÇ °æ·Î¿¡ µû¶ó Á¢±Ù Á¦¾î¸¦ ÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. creat ÇÔ¼ö¸¦ ÅëÇØ »ý¼ºµÇ´Â ÆÄÀÏÀº ´ëºÎºÐ óÀ½ »ý¼ºµÇ´Â inodeÀ̹ǷΠÁ¢±Ù Á¦¾î½Ã, ¸Å¿ì ±î´Ù·Ó´Ù. À̸¦ find_umask_inode() ÇÔ¼ö¸¦ ÅëÇØ ÇöÀç »óÀ§ µð·ºÅ丮¿Í umask ÃÖ»óÀ§ µð·ºÅ丮¸¦ ºñ±³ÇÏ¿© ¼³Á¤´ë·ÎÀÇ Á¢±Ù Á¦¾î¸¦ °¡´ÉÇÏ°Ô ÇÑ´Ù. execve.c: ÆÄÀÏ, µð·º, umask ÃÖ»óÀ§ °ü·Ã, suid, super user °ü·Ã ¿¬°á ±¸Á¶¸¦ »ç¿ëÇÑ´Ù. ¿ì¼±, º¸¾È °ü¸®ÀÚ »ç¿ëÀÚ°¡ ¾Æ´Ò °æ¿ì, _nonexec_sh ¼³Á¤¿¡ µû¶ó, °ø°Ý üŷ ÇÔ¼ö ¼öÇà ¿©ºÎ°¡ °áÁ¤µÈ´Ù. ±× ÈÄ, super user °ü·Ã ¿¬°á ±¸Á¶¸¦ ÅëÇØ °ü¸®ÀÚ Àü¿ë ¸í·ÉÀÎÁöÀÇ ¿©ºÎ¸¦ ÆÇ´ÜÇÑ´Ù. ¼³Á¤µÈ Àü¿ë ¸í·ÉÀ̶ó¸é, »ç¿ëÀÚÀÇ id¸¦ º¸¾È °ü¸®ÀÚ·Î º¯°æ ½ÃÄÑ, do_execve ÇÔ¼ö¸¦ ¼öÇàÇÑ´Ù. ¾Õ ¼­, ¸¶Âù°¡Áö·Î ÇÁ·Î±×·¥ÀÇ ¼ÒÀ¯ÀÚ, ±×·ì ¼ÒÀ¯ÀÚ¿¡ µû¶ó, Á¢±ÙÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ¸¦ ±¸ºÐÇÑ´Ù. ÇÁ·Î±×·¥, µð·ºÅ丮, umask ÃÖ»óÀ§ µð·ºÅ丮¿Í °ü·ÃÇÏ¿©, ÇØ´ç inode ºÎºÐÀ» üŷÇÏ´Â °úÁ¤À» °ÅÄ£´Ù. ¸¶Áö¸·À¸·Î, setuid ¿©ºÎ¸¦ °Ë»çÇϴµ¥ (__exec_chk), ÇØ´ç setuid°¡ ÀÎÁõµÇÁö ¾ÊÀº ÇÁ·Î±×·¥ÀÏ °æ¿ì ¿¡·¯ ¸Þ¼¼Áö¸¦ Ãâ·ÂÇÏ°í °­Á¦ Á¾·áµÈ´Ù. ¹Ý¸é, Çã¿ëµÈ setuid ÇÁ·Î±×·¥ÀÇ °æ¿ì, Á¤»ó ¼öÇàÇÒ ¼ö ÀÖ´Ù. fix_kernel_vul.c: 9.0¿¡¸¸ ÀÖ´Â ³à¼®ÀÌ´Ù. fix_do_brk ÇÔ¼ö´Â do_brk kernel exploit Ãë¾àÁ¡À» º¸¾ÈÇϰí, fk_mremap ÇÔ¼ö´Â mremap kernel exploit Ãë¾àÁ¡À» º¸¾ÈÇÏ´Â ¿ªÇÒÀ» ¸Ã°í ÀÖ´Ù. getid.c: get*id °è¿­ ÇÔ¼ö¿Í °ü·ÃµÈ ³»¿ëÀ» ´ã´çÇϰí ÀÖ´Ù. __SET_UID ¸ÅÅ©·Î¿Í __GET_UID ¸ÅÅ©·Î¸¦ ºÐ¼®ÇÏ¸é ´ÙÀ½°ú °°´Ù. (uid.h) #define __SET_UID(old_uid,old_gid,__n,wt_uid) {\ old_uid=__n->uid;\ old_gid=__n->gid;\ old_uid¿¡ current->uid ÀúÀå. old_gid¿¡ current->gid ÀúÀå. ÇöÀç current->uid°¡ º¸¾È°ü¸®ÀÚ »ç¿ëÀÚÀÇ uid¿Í °°À» °æ¿ì. if(__n->uid==wt_uid){\ ÇöÀç current->*uid ºÎºÐÀ» 0À¸·Î ¸¸µë. __n->uid=__n->euid=__n->suid=__n->fsuid=0;\ }\ ÇöÀç current->gid°¡ º¸¾È°ü¸®ÀÚ »ç¿ëÀÚÀÇ gid¿Í °°À» °æ¿ì. if(__n->gid==wt_uid){\ ÇöÀç current->*gid ºÎºÐÀ» 0À¸·Î ¸¸µë. __n->gid=__n->egid=__n->sgid=__n->fsgid=0;\ }\ } #define __GET_UID(old_uid,old_gid,__n,wt_uid) {\ old_uid °ªÀÌ º¸¾È°ü¸®ÀÚ »ç¿ëÀÚÀÇ uid¿Í °°À» °æ¿ì, (´Ü, current->uid°¡ 0À̾î¾ß ÇÔ) if(old_uid==wt_uid&&__n->uid==0){\ current->*uid ºÎºÐÀ» ¿¹Àü »ç¿ëÀÚ old_uid °ªÀ¸·Î ´ëÀÔ. __n->uid=__n->euid=__n->suid=__n->fsuid=old_uid;\ }\ old_gid °ªÀÌ º¸¾È°ü¸®ÀÚ »ç¿ëÀÚÀÇ gid¿Í °°À» °æ¿ì, (´Ü, current->gid°¡ 0À̾î¾ß ÇÔ) current->*gid ºÎºÐÀ» ¿¹Àü »ç¿ëÀÚ old_gid °ªÀ¸·Î ´ëÀÔ. if(old_gid==wt_uid&&__n->gid==0){\ __n->gid=__n->egid=__n->sgid=__n->fsgid=old_gid;\ }\ } ioctl.c: ÀÌ ³à¼®Àº º»·¡ snifferÀÇ »ç¿ëÀ» ÀûÀýÈ÷ Â÷´ÜÇϱâ À§Çؼ­, PROMISC ¹«ÀÛÀ§ ¸ðµå·Î Ç÷¡±×°¡ ¼³Á¤µÇ¾î ÀÖÀ» ½Ã, ÀÌ¿ëÀ» Áß´ÜÇϵµ·Ï ÀÛ¼ºÇÏ¿´´Ù. ±× ÈÄ, µÎ¹øÂ° ÆÄ¶ó¹ÌÅÍÀÎ cmd ÀÎÀÚ °ªÀ» °Ë»çÇÏ¿©, °ü¸®ÀÚ¸¸ »ç¿ëÇØ¾ß ÇÏ´Â ÁÖ¿ä ¿É¼ÇµéÀ» Á¦ÇÑÇØµÎ¾ú´Ù. Áö±Ý ¹®Á¦°¡ À־ °íÃÄ¾ß ÇÏ´Â ºÎºÐ. ip_conf.c: ip_conf() ÇÔ¼ö - ÁöÁ¤ÇÏ´Â ¼³Á¤ÆÄÀÏÀ» Àоî¿Â ÈÄ Ä¿³Î ¿¬°á ¸®½ºÆ®¿¡ ÇØ´ç °ªµéÀ» ÀúÀåÇÑ´Ù. (Á¶°Ç 1: ÇÑ ÁÙ´ç Å©±â°¡ 2byte ¹Ì´ÞÀÏ °æ¿ì, ±× lineÀº ¹«½Ã. Á¶°Ç 2: °¢ ÅäÅ« (':'·Î ±¸ºÐµÇ´Â) »çÀÌÀÇ ½ºÆäÀ̽º ¹®ÀÚ³ª tab ¹®ÀÚ Á¦°Å. Á¶°Ç 3: °¡Àå ù ÁÙ¿¡ '#'ÀÌ µé¾î°¡´Â ÁÖ¼®Àº Á¦¿Ü.) bash-2.04# cat tcp_in.allow # # tcp_in.allow - # # This file describes the names of the hosts which are # allowed to use the local INET services, as decided # by the 'IPS (Intrusion Prevention System)' server. # # USER # PORT # IP 500 : 23 : 211.171.151.1 82 : 23 : 211.171.151. LOCAL bash-2.04# º¸Åë, tcp_in.allow ¼³Á¤ÆÄÀÏÀº TCP ·¦ÆÛÀÇ ¼³Á¤ ÆÄÀϰú ºñ½ÁÇÑ ÀÎÅÍÆäÀ̽º¸¦ °¡Áö°í ÀÖ´Ù. ù¹øÂ° ÅäÅ« ³»¿ë¿¡´Â »ç¿ëÀÚÀÇ uid°¡ µé¾î°¡°Ô µÈ´Ù. ¸¸¾à '*'ÀÏ °æ¿ì, ¸ðµç »ç¿ëÀÚ¸¦ °¡¸®Å²´Ù. µÎ¹øÂ° ÅäÅ« ³»¿ëÀº port °ªÀ» ¾ò¾î¿Â´Ù. '*'ÀÏ °æ¿ì, ¸ðµç Æ÷Æ®¸¦ °¡¸®Å²´Ù. ¸ðµç Æ÷Æ®¸¦ °¡¸®Å°´Â ¹®¹ýÀº port º¯¼öÀÇ °ªÀº 0À¸·Î Ç¥ÇöµÈ´Ù. ¼¼¹øÂ° ÅäÅ« ³»¿ëÀº ¼±¾ðµÈ IP °ªÀ» ¾ò¾î¿Â´Ù. °¢ IP °ªÀº ½ºÆäÀ̽º, tab ¶Ç´Â, ',' ÄÞ¸¶·Î ±¸ºÐµÈ´Ù. ÀÌ·¸°Ô ¾òÀº ¼¼°¡Áö ÅäÅ« ³»¿ëµéÀ» ip_create_lnlist_datal() ¿¬°á ¸®½ºÆ® Ãß°¡ ÇÔ¼ö¸¦ ÅëÇØ Çϸç, ÇÑ ¶óÀÎÀÇ ³¡±îÁö ¹Ýº¹ ÈÄ, ´ÙÀ½ ÁÙ·Î ³Ñ¾î°£´Ù. k_ctrl() ÇÔ¼ö - user_id°¡ º¸¾È °ü¸®ÀÚÀÎ »ç¿ëÀÚ¸¸ ¼öÇàÇÒ ¼ö ÀÖÀ¸¸ç, exit ½Ã½ºÅÛ ÄÝ ÇÔ¼ö È£Ãâ ½Ã, ¼öÇàµÈ´Ù. ù¹øÂ° ÇÔ¼ö ÀÎÀÚ·Î µé¾î°¡´Â °ªÀÌ 0x82ÀÏ °æ¿ì, (0x82ºÎÅÍ 0x85 °ª±îÁö´Â Çã°¡ °ü·Ã ¼³Á¤) ±âÁ¸ÀÇ TCP_ALLOW_IN ¿¬°á ¸®½ºÆ®¸¦ reset ÇÑ´Ù. 0x83ÀÏ °æ¿ì, ±âÁ¸ÀÇ UDP_ALLOW_IN ¿¬°á ¸®½ºÆ®¸¦ reset ÇÑ´Ù. 0x84ÀÏ °æ¿ì, ±âÁ¸ÀÇ TCP_ALLOW_OUT ¿¬°á ¸®½ºÆ®¸¦ reset ÇÑ´Ù. 0x85ÀÏ °æ¿ì, ±âÁ¸ÀÇ UDP_ALLOW_OUT ¿¬°á ¸®½ºÆ®¸¦ reset ÇÑ´Ù. (0x86ºÎÅÍ 0x89 °ª±îÁö´Â °ÅºÎ °ü·Ã ¼³Á¤) 0x86ÀÏ °æ¿ì, ±âÁ¸ÀÇ TCP_DENY_IN ¿¬°á ¸®½ºÆ®¸¦ reset ÇÑ´Ù. 0x87ÀÏ °æ¿ì, ±âÁ¸ÀÇ UDP_DENY_IN ¿¬°á ¸®½ºÆ®¸¦ reset ÇÑ´Ù. 0x88ÀÏ °æ¿ì, ±âÁ¸ÀÇ TCP_DENY_OUT ¿¬°á ¸®½ºÆ®¸¦ reset ÇÑ´Ù. 0x89ÀÏ °æ¿ì, ±âÁ¸ÀÇ UDP_DENY_OUT ¿¬°á ¸®½ºÆ®¸¦ reset ÇÑ´Ù. ±× ¹Û¿¡, 0x90 °ªÀº ½Ã½ºÅÛ¿¡ ¼³Á¤µÈ Çã°¡ °ÅºÎ ¸®½ºÆ®¸¦ Ãâ·ÂÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. kill.c: ÇÁ·Î¼¼½º º¸È£ ¸ðµâ °ü·Ã ÇÔ¼ö´Ù. find_task ÇÔ¼ö¸¦ ÅëÇØ ÇöÀç ÇÁ·Î¼¼½ºÀÇ task¸¦ ¾ò¾î¿Â´Ù. ±× ÈÄ, taskÀÇ uid, euid, suid, fsuid, gid, egid, sgid, fsgid °ªÀÌ º¸¾È °ü¸®ÀÚÀÇ uid°ª°ú °°À» °æ¿ì, ÇÁ·Î¼¼½º°¡ killµÇÁö ¾Êµµ·Ï ¹æÁöÇÑ´Ù. ¶Ç´Â, taskÀÇ uid °ªÀÌ ÇöÀç »ç¿ëÀÚÀÇ uid°ª°ú ´Ù¸¦ °æ¿ì ´Ù¸¥ »ç¿ëÀÚÀÇ ÇÁ·Î¼¼½º¶ó °¡Á¤Çϰí, killÀ» ÁßÁöÇÑ´Ù. ¶ÇÇÑ, ÇöÀç current->tty °ªÀÌ task tty°ª°ú ´Ù¸¦ °æ¿ì, ´Ù¸¥ Å͹̳Π»ç¿ëÀÚÀÇ ÇÁ·Î¼¼½º¶ó °¡Á¤Çϰí, killÀ» ÁßÁö½ÃŲ´Ù. ±× ¹Û¿¡, ÁöÁ¤µÈ (º¸È£¹Þ¾Æ¾ß ÇÏ´Â) ÇÁ·Î¼¼½ºÀÇ °æ¿ì¿¡µµ KILL Ç÷¡±× ¼³Á¤¿¡ µû¶ó kill ¼öÇàÀ» ÁßÁöÇÑ´Ù. libnconf.c: Ä¿³Î¿¡ ¾ø´Â °¢Á¾ ÀÚü ÇÔ¼ö ÁýÇÕ ÄÚµå´Ù. chk_cmd(): ÇöÀç ¼öÇàµÇ´Â command°¡ /bin/su ÀÎÁö È®ÀÎÇÑ´Ù. its_r_root(): ÀÌÁß ºÐÇÒ ½Ã½ºÅÛ Áß, ÇöÀç ÃÖ»óÀ§ µð·ºÅ丮°¡ ÁøÂ¥ ·çÆ®ÀÎÁö È®ÀÎÇÑ´Ù. (inode °ªÀÌ 2ÀÏ °æ¿ì, 1 °ªÀ» ¸®ÅÏÇÑ´Ù) read_conf(): °¢ ¼³Á¤À» Àоî¿À´Â ÇÔ¼ö·Î½á, º¸È£ ÆÄÀÏ, µð·ºÅ丮, umask ½Ã½ºÅÛ ¼³Á¤, º¸È£ ¼ÒÄÏ ¼³Á¤, setuid º¸È£ ¼³Á¤, ½´ÆÛ À¯Àú º¸È£ ¼³Á¤, ÇÁ·Î¼¼½º º¸È£ ¼³Á¤µîÀÌ ÀÖ´Ù. °¢Á¾ º¸È£ ¼³Á¤Àº create_lnlist_datal() ÇÔ¼ö¿¡ ÀÇÇØ º¸È£ ¼³Á¤ ¿¬°á ¸®½ºÆ®¿¡ ÀúÀåµÈ´Ù. _buf_null(): ÁöÁ¤µÈ ¹öÆÛ °ªÀ» 0À¸·Î ºñ¿ì´Â ¿ªÇÒÀ» ÇÑ´Ù. _strcmp(): c library strcmp() ÇÔ¼ö¿Í °°Àº ¿ªÇÒÀ» ÇÑ´Ù. _memcpy(): system call memcpy() ÇÔ¼ö°ú °°Àº ¿ªÇÒÀ» ÇÑ´Ù. _strlen(): c library strlen() ÇÔ¼ö°ú °°Àº ¿ªÇÒÀ» ÇÑ´Ù. lst_tokn(): ¹®ÀÚ¿­ Áß, µÚ¿¡¼­ºÎÅÍ Æ¯Á¤ ¹®ÀÚ¸¦ ²÷¾î¿Â´Ù. fst_tokn(): ¹®ÀÚ¿­ Áß, ¾Õ¿¡¼­ºÎÅÍ Æ¯Á¤ ¹®ÀÚ¸¦ ²÷¾î¿Â´Ù. _atoi(): c library atoi() ÇÔ¼ö¿Í °°Àº ¿ªÇÒÀ» ÇÑ´Ù. stprint(): ÇöÀç »ç¿ëÀÚÀÇ tty Å͹̳Π°ªÀ» ¾ò¾î¿Â ÈÄ, NULLÀÌ ¾Æ´Ï¶ó¸é, Å͹̳ο¡ ÁöÁ¤ÇÑ ¸Þ¼¼Áö¸¦ Ãâ·ÂÇÑ´Ù. find_task(): ÇöÀç current task¸¦ ¾ò¾î¿Â ÈÄ, task ¿¬°á ¸®½ºÆ®¸¦ À̵¿Çϸç, ÇØ´çÇÏ´Â pid °ªÀ» ã´Â´Ù. °°Àº pid °ªÀ» ãÀº °æ¿ì, task Æ÷ÀÎÅ͸¦ ¸®ÅÏÇϸç, ãÁö ¸øÇÑ °æ¿ì NULLÀ» ¸®ÅÏÇÑ´Ù. link.c: ÀÌÀü °æ·ÎÀÇ inode¸¦ ¾ò¾î¿Â ÈÄ, ¼ÒÀ¯ÀÚ°¡ º¸¾È °ü¸®ÀÚÀÏ °æ¿ì link ±ÝÁö, ÆÄÀÏ, µð·ºÅ丮, umask¿¡ °¢ º¸¾È Çã°¡±ÇÀÌ ¼³Á¤µÇ¾î ÀÖÀ» °æ¿ì, link ±ÝÁö. find_umask_inode() ÇÔ¼ö¸¦ ÅëÇØ »õ·Î¿î °æ·Î¿¡ link °Å´Â °ÍÀ» Â÷´ÜÇÑ´Ù. linked_list.c: Ä¿³Î ¸Þ¸ð¸® ³»¿¡ ±¸ÇöµÈ ¿¬°á ¸®½ºÆ®ÀÌ´Ù. // head list // extern prog_ln_list *ghfl_head; º¸È£ ÆÄÀÏ ¼³Á¤ ¸®½ºÆ® extern prog_ln_list *ghdr_head; º¸È£ µð·ºÅ丮 ¼³Á¤ ¸®½ºÆ® extern prog_ln_list *prct_head; º¸È£ ÇÁ·Î¼¼½º ¼³Á¤ ¸®½ºÆ® extern prog_ln_list *ghal_head; º¸È£ umask ¼³Á¤ ¸®½ºÆ® extern prog_ln_list *suid_head; º¸È£ setuid ¼³Á¤ ¸®½ºÆ® extern prog_ln_list *supr_head; º¸È£ ½´ÆÛ À¯Àú ÇÁ·Î±×·¥ ¼³Á¤ ¸®½ºÆ® extern prog_ln_list *sock_head; º¸È£ ¼ÒÄÏ ¼³Á¤ ¸®½ºÆ® // tail list // ... search_lnlist_l(): ¿¬°á ¸®½ºÆ®¿¡ ÇØ´çÇÏ´Â °ªÀÌ ÀÖ´Â Áö °Ë»ç¸¦ ¼öÇà ÈÄ, Ç׸ñÀ» ¼öÁ¤ÇÏ´Â ÇÔ¼ö. print_all_lnlist(): °¢ ¿¬°á ¸®½ºÆ®¿¡ ÀúÀåµÈ °ªÀ» ·Î±×·Î ÀúÀåÇÏ´Â ÇÔ¼ö. create_lnlist(): data¸¦ ÀúÀåÇÒ ¸Þ¸ð¸® »ý¼º. create_lnlist_datal(): °¢ data¸¦ ¿¬°á ¸®½ºÆ®¿¡ ÀúÀåÇÏ´Â ÇÔ¼ö. delete_lnlist(): ÇØ´ç ¿¬°á ¸®½ºÆ®ÀÇ data¸¦ ÃʱâÈ­ ½ÃŰ´Â ÇÔ¼ö. delete_lnlist_data(): ¿¬°á ¸®½ºÆ®¿¡ ÇØ´ç data°¡ ÀÖ´ÂÁö °Ë»çÇÑ ÈÄ, delete_lnlist() ¼öÇà. delete_all_lnlist(): ÇØ´ç ¿¬°á ¸®½ºÆ®ÀÇ ¸ðµç data¸¦ ÃʱâÈ­ ½ÃŰ´Â ÇÔ¼ö. ¼öÇà ¼ø¼­ - create_lnlist_datal() -> search_lnlist_l();, create_lnlist(); delete_lnlist_data() -> delete_lnlist(); lnk_f.c: TCP/IP ¼ÒÄÏ Á¦¾î °ü·Ã ¿¬°á ¸®½ºÆ®. ip_search_lnlist_l(): ¿¬°á ¸®½ºÆ®¿¡ ³»¿ëÀ» °Ë»öÇÏ´Â ÇÔ¼ö, ÇØ´ç ³»¿ëÀÌ ÀÖÀ» °æ¿ì -1 ¸®ÅÏ. ip_print_all_lnlist(): ¿¬°á ¸®½ºÆ®¿¡ ³»¿ëÀ» ·Î±×¿¡ ÀúÀåÇÏ´Â ÇÔ¼ö. ip_create_lnlist(): data¸¦ ÀúÀåÇÒ ¸Þ¸ð¸® »ý¼º. ip_create_lnlist_datal(): °¢ data¸¦ ¿¬°á ¸®½ºÆ®¿¡ ÀúÀåÇÏ´Â ÇÔ¼ö. ip_delete_all_lnlist(): ÇØ´ç ¿¬°á ¸®½ºÆ®ÀÇ ¸ðµç data¸¦ ÃʱâÈ­ ½ÃŰ´Â ÇÔ¼ö. ¼öÇà ¼ø¼­ - ip_create_lnlist_datal() -> ip_search_lnlist_l();, ip_create_lnlist(); mkdir.c: find_umask_inode() ÇÔ¼ö¸¦ ÅëÇØ º¸È£ µð·ºÅ丮, umask ¼³Á¤À» °Ë»ç ÈÄ mkdir() ¼öÇàÇÏ´Â Äڵ带 Æ÷ÇÔÇϰí ÀÖ´Ù. mod_kern.c: do_brk´Â ½Ã½ºÅÛ¿¡¼­ »ç¿ëÀÚ¿¡°Ô ÁÖ¾îÁÖ´Â ½Ã½ºÅÛÄÝÀÌ ¾Æ´Ï¹Ç·Î, do_brk patch¸¦ µû·Î ±¸¼ºÇØÁÖ¾î¾ß ÇÑ´Ù. init_module() ÇÔ¼ö´Â module install½Ã, ¼öÇàµÈ´Ù. lisence_chk() ÇÔ¼ö´Â ¶óÀ̼¾½º¸¦ °Ë»çÇÏ´Â ÇÔ¼ö´Ù. ÁÖ¿ä ½Ã½ºÅÛ ÄÝÀ» °¡·Îæ ÈÄ, do_brk patch¸¦ ¼öÇàÇÑ´Ù. *(long *)&new_do_brk[1]=(long)fix_do_brk; // new_do_brk º¯¼ö¿¡ ÇöÀç patchµÈ do_brk ÇÔ¼ö ÁÖ¼Ò¸¦ ÀúÀå. memcpy(old_do_brk,do_brk,CODE_SIZE); // old_do_brk º¯¼ö¿¡ do_brk ÁÖ¼Ò°ªÀ» ÀúÀå. memcpy(do_brk,new_do_brk,CODE_SIZE); // do_brk ÁÖ¼Ò¿¡ new_do_brk °ªÀ» ÀúÀå. ±× ÈÄ, º¸È£ ÆÄÀÏ, µð·ºÅ丮 umask, setuid, process, ½´ÆÛ À¯Àú, ¼ÒÄÏ ¼³Á¤À» ÀÐ¾î ¿Â´Ù. ip_conf ÇÔ¼ö¸¦ ÅëÇØ, °¢ TCP/UDP Á¦¾î ¼³Á¤À» ÀÐ¾î ¿Â´Ù. cleanup_module() ÇÔ¼ö´Â module uninstall½Ã, ¼öÇàµÈ´Ù. ÀÌ ÇÔ¼ö´Â ±âÁ¸¿¡ º¯°æµÈ ½Ã½ºÅÛ ÄÝÀ» ¿ø»óÅ·Πº¹±¸Çϸç, do_brk ¿ª½Ã, old_do_brk¿¡ ÀúÀåµÈ ÁÖ¼Ò·Î º¹¿øÇÑ´Ù. ±× ¹Û¿¡ Ä¿³Î ¸Þ¸ð¸®¿¡ ±¸¼ºµÇ¾î ÀÖ´Â ¿¬°á ¸®½ºÆ®µéÀ» ¸ðµÎ Á¦°ÅÇÑ´Ù. lisence_chk() ÇÔ¼ö¸¦ ÅëÇØ, Á¤½Ä¹öÀüÀÎÁö, ½Ã°£ Á¦ÇÑ ¹öÀüÀÎÁöÀÇ ¿©ºÎ¸¦ ÆÇ´ÜÇÑ´Ù. ƯÁ¤ ¶óÀ̼¾½º ÆÄÀÏÀ» Àоî¿À¹Ç·Î, ÇØ´ç À§Ä¡¿¡ ¶óÀ̼¾½º°¡ Á¸ÀçÇÏÁö ¾Ê°Å³ª Ʋ¸° Á¤º¸¸¦ °¡Áö°í ÀÖÀ» °æ¿ì, moduleÀÌ install µÇÁö ¾Ê´Â´Ù. namei.c: 7.0¿¡´Â ±¸ÇöµÇ¾î ÀÖÁö¸¸, 9.0¿¡´Â ±¸ÇöµÇÁö ¾ÊÀº namei() °ü·Ã ÄÚµåµéÀÌ ÀÚ¸®Àâ°í ÀÖ´Ù. ... struct dentry *name_ino(const char *pathname); struct dentry *name_user_func(const char *pathname,int flags); #define __n_name_user_func(path) \ name_user_func(path,LOOKUP_FOLLOW|LOOKUP_POSITIVE) #define __l_name_user_func(path) \ name_user_func(path,LOOKUP_POSITIVE) ... name_ino ÇÔ¼ö´Â find_umask_inode ÇÔ¼ö¿Í À¯»çÇÑ ¹®¹ýÀ» Áö´Ï°í ÀÖ´Ù. ¿ªÇÒ: ÁÖ¾îÁø pathÀÇ dentry¸¦ ¸®ÅÏÇÏ¿©, inode¸¦ ±¸ÇÒ¶§ »ç¿ëÇÑ´Ù. name_user_func ÇÔ¼ö´Â flag¸¦ ¼³Á¤ÇÏ¿© ¼öÇàÇÒ ¼ö ÀÖ´Â inode °ü·Ã ÇÔ¼öÀÌ´Ù. (º» open_namei ÇÔ¼ö¿Í °°Àº ¹®¹ý Á¦°ø) __n_name_user_func ÇÔ¼ö´Â ÀÏ¹Ý ÆÄÀÏ ¹× µð·ºÀ» ¶æÇϰí, __l_name_user_func ÇÔ¼ö´Â ¸µÅ©µÈ ÆÄÀÏ, µð·ºÀ» ±¸ºÐÇÒ¶§ »ç¿ëÇÏ´Â ¹®¹ýÀÌ´Ù. open.c: find_umask_inode ÇÔ¼ö´Â Á¸ÀçÇÏ´Â dentry¸¦ ±¸ÇÏ¿©, ±× dentryÀÇ »óÀ§ µð·ºÅ丮 dentry¿Í inode¸¦ ±¸ÇÑ´Ù. »óÀ§ µð·ºÅ丮ÀÇ ¼ÒÀ¯ÀÚ, ±×·ìÀ» ºñ±³ ÈÄ, º¸È£ µð·ºÅ丮 -> umask ¼øÀ¸·Î ¿¬°á ¸®½ºÆ®ÀÇ ¼³Á¤ ³»¿ëÀ» °Ë»çÇÑ´Ù. open systemcall ÇÔ¼ö¸¦ ÈÄÅ·ÇÏ¿©, ½Ã½ºÅÛ¿¡ »ç¿ëµÇ´Â open ÇÔ¼ö °ü·Ã Á¢±Ù Á¦¾î¸¦ ±¸ÇöÇϰí ÀÖ´Ù. Âü°ñ, lookup_flags ÇÔ¼ö´Â kernel 2.4.18ÀÇ lookup_flags ÇÔ¼ö ¿øÇü°ú °°´Ù. (namei.c¿Í ±× ¹ÛÀÇ ½Ã½ºÅÛ ÄÝ¿¡¼­ ¾²ÀÌ´Â dentry °ªÀ» ¾ò´Â ¹æ¹ýÀº ´ëºÎºÐ kernel systemcall ¹®¹ýÀ» À¯ÁöÇϰí ÀÖ´Ù.) path.h °¢Á¾ ¼³Á¤ ÆÄÀÏÀÌ À§Ä¡Çϰí ÀÖ´Ù. #define FILE_CONF "/admin/etc/protection_config/files" #define DIR_CONF "/admin/etc/protection_config/dirs" #define UMASK_CONF "/admin/etc/protection_config/umask" #define SUID_CONF "/admin/etc/protection_config/suids" #define PROC_CONF "/admin/etc/protection_config/procs" #define SUPR_CONF "/admin/etc/protection_config/suprs" #define SOCK_CONF "/admin/etc/protection_config/socks" #define tcp_in_allow "/admin/etc/sock_conf/tcp_in.allow" #define tcp_in_deny "/admin/etc/sock_conf/tcp_in.deny" #define tcp_out_allow "/admin/etc/sock_conf/tcp_out.allow" #define tcp_out_deny "/admin/etc/sock_conf/tcp_out.deny" #define udp_in_allow "/admin/etc/sock_conf/udp_in.allow" #define udp_in_deny "/admin/etc/sock_conf/udp_in.deny" #define udp_out_allow "/admin/etc/sock_conf/udp_out.allow" #define udp_out_deny "/admin/etc/sock_conf/udp_out.deny" #define LF_F "/admin/etc/lisence.bin" read.c: inodeÀÇ Á¤º¸¸¦ ÇöÀç current taskÀÇ ¿ÀÇÂµÈ ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ÅëÇØ Àоî¿Â´Ù. ±× Á¤º¸¸¦ ÅëÇØ, ÇÁ·Î¼¼½ºÀÇ inode¿Í °°ÀºÁö ºñ±³ÇÏ¿©, ÇÁ·Î¼¼½º Àб⠱ÇÇÑÀ» Á¦¾îÇÑ´Ù. readdir.c: inodeÀÇ Á¤º¸¸¦ ÇöÀç current taskÀÇ ¿ÀÇÂµÈ ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ÅëÇØ Àоî¿Â´Ù. ±× Á¤º¸¸¦ ÅëÇØ, Àоî¿Ã µð·ºÅ丮ÀÇ inode¿Í °°ÀºÁö ºñ±³ÇÏ¿©, µð·ºÅ丮 Àб⠱ÇÇÑÀ» Á¦¾îÇÑ´Ù. (º¸È£ ÆÄÀÏ -> µð·ºÅ丮 -> umask ¼³Á¤ ¼ø¼­) rename.c: name_ino ÇÔ¼ö¸¦ ÅëÇØ dentry¸¦ Àоî¿Â´Ù. º¸È£ ÆÄÀÏ -> µð·ºÅ丮 -> umask ¼³Á¤ ¼ø¼­¿¡ µû¶ó, rename ÇÔ¼ö Á¢±Ù Á¦¾î¸¦ ¼öÇàÇÑ´Ù. find_umask_inode ÇÔ¼ö¸¦ ÅëÇØ »õ·Ó°Ô »ý¼ºµÉ newpathÀÇ Á¢±Ù Á¦¾î¸¦ ¼öÇàÇÏ°Ô µÈ´Ù. rmdir.c: name_ino ÇÔ¼ö¸¦ ÅëÇØ dentry¸¦ Àоî¿Â´Ù. º¸¾È °ü¸®ÀÚÀÇ uid¸¦ ÅëÇØ µð·ºÅ丮¸¦ »èÁ¦ÇÒ °æ¿ì¿¡µµ, inode¸¦ ±¸Çϴµ¥, ±× ÀÌÀ¯´Â Á¦°ÅµÇ´Â inode°¡ ¼³Á¤ ¿¬°á ¸®½ºÆ®¿¡ ÀÖÀ» °æ¿ì¸¦ ´ëºñÇÏ¿©, delete_lnlist_data() ÇÔ¼ö¸¦ ÅëÇØ »èÁ¦Çϱ⠶§¹®ÀÌ´Ù. ÀϹÝÀûÀÎ Á¢±Ù Á¦¾î¹æ¹ý°ú °°ÀÌ º¸È£ ÆÄÀÏ -> µð·ºÅ丮 umask ¼³Á¤ ¼ø¼­·Î ¼öÇàµÈ´Ù. setid.c: su ¼öÇàÀ» °Ë»çÇÑ´Ù. uid°¡ º¸¾È °ü¸®ÀÚ°¡ ¾Æ´Ò °æ¿ì, set*uid °ü·Ã ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. ¶ÇÇÑ, set*uid °ü·Ã ÇÔ¼ö·Î ÁÖ¾îÁö´Â ÀÎÀÚ°¡ º¸¾È °ü¸®ÀÚÀÇ uid¿Í ÀÏÄ¡ÇÒ °æ¿ì, ¼öÇàÀ» Áß´ÜÇÑ´Ù. socketcall.c: user_chk(): »ç¿ëÀÚ º° ¼ÒÄÏ °ü·Ã ÇÔ¼ö (socket, bind, setsockopt) Á¦¾î ÇÔ¼ö. socketcall() ½Ã½ºÅÛ ÄÝ ÇÔ¼ö¸¦ ÈÄÅ·ÇÏ¿©, °¢ »ç¿ëÀÚ º° ¼ÒÄÏ »ç¿ë Á¢±Ù Á¦¾î¸¦ µÑ ¼ö ÀÖ´Ù. ¶ÇÇÑ, TCP/UDP output input Á¾·ù º°·Î ³×Æ®¿öÅ© Á¢±Ù Á¦¾î¸¦ ±¸ÇöÇÏ¿´´Ù. super_user.c: °¢Á¾ ½Ã½ºÅÛ¿¡¼­ Á¦°øÇÏ´Â º¸¾È °ü¸®ÀÚ¿ë Á¢±Ù Á¦¾î ÇÔ¼öµéÀ» ±¸ÇöÇØ³õÀº ÄÚµåÀÌ´Ù. mount, umount, mknod, stime, ptrace, utime, nice, sethostname, setdomainname, chroot, setrlimit, swapon, swapoff, reboot, vhangup, quotactl À§¿Í °°Àº ÇÔ¼öµéÀ» ÈÄÅ·ÇÏ¿©, ½Ã½ºÅÛ ³»ºÎ¿¡¼­ rootÀÇ ±ÇÇÑÀ» º¸¾È °ü¸®ÀÚ¿Í ºÐÇÒÇÏ¿© ±ÇÇÑ ¾Ç¿ëÀ» ÃÖ¼ÒÈ­ ÇÒ ¼ö ÀÖ´Ù. symlink.c: name_ino ÇÔ¼ö¸¦ ÅëÇØ dentry Á¤º¸ ¹× inode¸¦ ¾ò´Â´Ù. º¸È£ ÆÄÀÏ -> µð·ºÅ丮 -> umask ¼³Á¤ ¼ø¼­¿¡ µû¶ó, symlink ÇÔ¼ö Á¢±Ù Á¦¾î¸¦ ¼öÇàÇÑ´Ù. find_umask_inode ÇÔ¼ö¸¦ ÅëÇØ »õ·Ó°Ô »ý¼ºµÉ newpathÀÇ Á¢±Ù Á¦¾î¸¦ ¼öÇàÇÏ°Ô µÈ´Ù. time.c: ½Ã°£ °ü·Ã ¶óÀ̺귯¸® ÇÔ¼öµéÀÌ Á¸ÀçÇÏ´Â ÄÚµåÀÌ´Ù. epoch2time(): get_time ÇÔ¼ö¿¡ ÀÇÇØ ¼öÇàµÇ¸ç, tm_v ±¸Á¶Ã¼ °ª¿¡ ¸Â´Â Á¤º¸¸¦ ºÒ·¯ »ç¿ëÇϱâ À§ÇØ ¾²ÀδÙ. get_time(): ½Ã½ºÅÛÀÇ ½Ã°£ Á¤º¸¸¦ ¾ò¾î, "[³â/¿ù/ÀÏ/½Ã°£/ºÐ/ÃÊ]"ÀÇ Çü½Ä¿¡ ¸Â°Ô ±¸¼ºÇÑ ¹öÆÛ¸¦ return ÇÑ´Ù. time_chk(): ÇöÀçÀÇ ½Ã½ºÅÛ ½Ã°£ Á¤º¸¸¦ ¾òÀº ÈÄ, ù¹øÂ° ÆÄ¶ó¹ÌÅÍ·Î µé¾î¿À´Â ½Ã°£ °ª°ú ºñ±³ÇÑ´Ù. ÇöÀç ½Ã°£ °ªÀÌ ÀÎÀÚ·Î µé¾î¿Â ½Ã°£ °ªº¸´Ù Ŭ °æ¿ì, -1À» return Çϰí, Å©Áö ¾ÊÀ» °æ¿ì, 0À» return ÇÑ´Ù. unlink.c: name_ino ÇÔ¼ö¸¦ ÅëÇØ dentry¸¦ Àоî¿Â´Ù. º¸¾È °ü¸®ÀÚÀÇ uid¸¦ ÅëÇØ ÆÄÀÏÀ̳ª µð·ºÅ丮¸¦ »èÁ¦ÇÒ °æ¿ì¿¡µµ, inode¸¦ ±¸Çϴµ¥, ±× ÀÌÀ¯´Â Á¦°ÅµÇ´Â inode°¡ ¼³Á¤ ¿¬°á ¸®½ºÆ®¿¡ ÀÖÀ» °æ¿ì¸¦ ´ëºñÇÏ¿©, delete_lnlist_data() ÇÔ¼ö¸¦ ÅëÇØ »èÁ¦Çϱ⠶§¹®ÀÌ´Ù. ÀϹÝÀûÀÎ Á¢±Ù Á¦¾î¹æ¹ý°ú °°ÀÌ º¸È£ ÆÄÀÏ -> µð·ºÅ丮 umask ¼³Á¤ ¼ø¼­·Î ¼öÇàµÈ´Ù. write.c: secureOSÀÇ ÃÑäÀûÀÎ ¸®¸ðÄÁ ¿ªÇÒÀ» ¸Â°í ÀÖ´Â ÇÔ¼ö ÄÚµåÀÌ´Ù. »ç¿ëÀÚ ±â¹Ý°ú Ä¿³Î ±â¹ÝÀÇ Åë½ÅÀÌ ÀÌ·ç¾îÁö´Â °÷À¸·Î½á, uid°¡ º¸¾È °ü¸®ÀÚ·Î È®ÀÎµÈ °æ¿ì¿¡¸¸ ±â´ÉÀ» ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ¼³°èµÇ¾î ÀÖ´Ù. writeÀÇ Ã¹¹øÂ° ÀÎÀÚ·Î ÀԷµǴ ÆÄÀÏ µð½ºÅ©¸³ÅÍÀÇ ¹øÈ£¿¡ ÀÇÇØ ¸í·É ¿É¼ÇÀÌ Á¤ÇØÁø´Ù. +8200: »ç¿ëÀÚÀÇ user_id °ªÀ» ¸®ÅÏÇÑ´Ù. +1097: logging º¯¼ö¸¦ Ȱ¼ºÈ­ ½ÃÄѼ­, Ä¿³Î ·Î±ëÀ» ½ÃÀÛÇÑ´Ù. -1097: logging º¯¼ö¸¦ ºñȰ¼ºÈ­ ½ÃÄѼ­, Ä¿³Î ·Î±ëÀ» Á¾·áÇÑ´Ù. +99990: stack ±â¹ÝÀÇ ½©ÄÚµå °ø°ÝÀ» Â÷´ÜÇÏ´Â ¸ðµå¸¦ on ÇÑ´Ù. +99991: heap ±â¹ÝÀÇ ½©ÄÚµå °ø°ÝÀ» Â÷´ÜÇÏ´Â ¸ðµå¸¦ on ÇÑ´Ù. +99992: rtl ±â¹ÝÀÇ ½©ÄÚµå °ø°ÝÀ» Â÷´ÜÇÏ´Â ¸ðµå¸¦ on ÇÑ´Ù. -99990: stack ±â¹ÝÀÇ ½©ÄÚµå °ø°ÝÀ» Â÷´ÜÇÏ´Â ¸ðµå¸¦ off ÇÑ´Ù. -99991: heap ±â¹ÝÀÇ ½©ÄÚµå °ø°ÝÀ» Â÷´ÜÇÏ´Â ¸ðµå¸¦ off ÇÑ´Ù. -99992: rtl ±â¹ÝÀÇ ½©ÄÚµå °ø°ÝÀ» Â÷´ÜÇÏ´Â ¸ðµå¸¦ off ÇÑ´Ù. +2003: º¸È£ ÇÁ·Î¼¼½º ¼³Á¤ Ãß°¡ ºÎºÐ. +0x82bab0: º¸È£ ÆÄÀÏ ¼³Á¤ Ãß°¡ ºÎºÐ. +0x82bab1: º¸È£ µð·ºÅ丮 ¼³Á¤ Ãß°¡ ºÎºÐ. +0x82bab2: º¸È£ umask ¼³Á¤ Ãß°¡ ºÎºÐ. +0x828822: º¸È£ socket ¼³Á¤ Ãß°¡ ºÎºÐ. +0x5371d: º¸È£ setuid ¼³Á¤ Ãß°¡ ºÎºÐ. +0x5599: º¸È£ super user ¼³Á¤ Ãß°¡ ºÎºÐ. -0xc8c8c8: º¸È£ socket ¼³Á¤ Á¦°Å ºÎºÐ. -0x82bab0: º¸È£ ÆÄÀÏ, µð·ºÅ丮, umask, setuid, super user, ÇÁ·Î¼¼½º ¼³Á¤ Á¦°Å ºÎºÐ. -0xde4: º¸È£ ÆÄÀÏ, µð·ºÅ丮, umask, setuid, super user, socket, ÇÁ·Î¼¼½º ¼³Á¤À» ÃʱâÈ­ ÇÔ. +8282: ¸ðµç ½©ÄÚµå ¼öÇàÀ» Â÷´ÜÇÏ´Â ºÎºÐ. -8282: ¸ðµç ½©ÄÚµå ¼öÇàÀ» Çã¿ëÇÏ´Â ºÎºÐ. +0xbab0: º¸È£ ¼³Á¤ ¿¬°á ¸®½ºÆ®ÀÇ Ç׸ñ ³»¿ëÀ» Ãâ·ÂÇÏ´Â ºÎºÐ. À§ÀÇ ¿É¼Ç¿¡ ÇØ´çÇÒ °æ¿ì, ÀÏ¹Ý ÇÁ·Î±×·¥Àº Ä¿³Î°ú Åë½ÅÇÏ°Ô µÇ¸ç, ÇØ´ç»çÇ×ÀÌ ¾øÀ» °æ¿ì, ÀÏ¹Ý write() ½Ã½ºÅÛ ÄÝÀ» ¼öÇàÇÑ´Ù. wrt_conf.c: ÇöÀç Ä¿³Î ¸Þ¸ð¸®¿¡ ¿¬°á ¸®½ºÆ® ÇüÅ·ΠÁ¸ÀçÇÏ´Â º¸È£ ÆÄÀÏ, µð·ºÅ丮, setuid, super user ¼³Á¤ Á¤º¸¸¦ °¢ ÇØ´ç ¼³Á¤ ÆÄÀÏ¿¡ ÀúÀåÇÑ´Ù. rmdir, unlink °è¿­ ÇÔ¼öµî¿¡ ¾²À̸ç, »èÁ¦µÈ inodeÀÇ ¿ÏÀüÇÑ Á¦°Å¸¦ À§ÇØ ¼öÇàµÈ´Ù. wrt_log.c: ÀÌ ÄÚµå´Â ½Ã½ºÅÛ¿¡¼­ ¹ß»ýÇÏ´Â À̺¥Æ®¸¦ "[½Ã°£:tty¹øÈ£:·Î±×³»¿ë]"ÀÇ Çü½ÄÀ¸·Î ÁöÁ¤ÇÏ´Â ·Î±× ÆÄÀÏ¿¡ ÀúÀåÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. --