ã泚æ ãã©ã³ã¹ã¬ãŒã¿ïŒ ããã¯ãPeter Brightã®èšäºãã»ãã¥ãªãã£ã®æ¬ é¥ã®ä»çµã¿ïŒãããã¡ãªãŒããŒãããŒãã®ç¿»èš³ã§ãããããã¡ãªãŒããŒãããŒã®ä»çµã¿ãšãè匱æ§ãšä¿è·æ¹æ³ã®éçºæ¹æ³ã«ã€ããŠã§ã ã
1988幎ã®Morris Wormããããã®åé¡ã¯LinuxãšWindowsã®äž¡æ¹ã«åœ±é¿ãäžããŸããã

ãããã¡ãªãŒããŒãããŒã¯ãã³ã³ãã¥ãŒã¿ã»ãã¥ãªãã£ã®åéã§é·ãéç¥ãããŠããŸãã æåã®èªå·±å¢æ®ã€ã³ã¿ãŒãããã¯ãŒã ã§ãã1988 Morris Wormã§ããããã£ã³ã¬ãŒUnixããŒã¢ã³ã®ãããã¡ãªãŒããŒãããŒã䜿çšããŠãã·ã³éã§æ¡æ£ããŸããã 27幎åŸããããã¡ãªãŒããŒãããŒã¯äŸç¶ãšããŠåé¡ã®åå ã§ãã Windowséçºè ã¯ã2000幎代ã®åãã«2ã€ã®ãšã¯ã¹ããã€ãããŒã¹ã®ãããã¡ãªãŒããŒãããŒãçºçããåŸãã»ãã¥ãªãã£ãžã®ã¢ãããŒããå€æŽããŸããã ãŸãã ä»å¹Ž5æã« ïŒæœåšçã«ïŒçºèŠãããLinuxãã©ã€ããŒã®ãããã¡ãŒãªãŒããŒãããŒã«ãããæ°çŸäžã®ããŒã ã«ãŒã¿ãŒããã³SMBã«ãŒã¿ãŒãæ»æã«ãããããŠããŸãã
æ¬è³ªçã«ããããã¡ãªãŒããŒãããŒã¯ãäžè¬çãªæ £è¡ã«èµ·å ããéåžžã«åçŽãªãã°ã§ãã ã³ã³ãã¥ãŒã¿ããã°ã©ã ã¯ãå€ãã®å Žåããã£ã¹ã¯ããããã¯ãŒã¯ããŸãã¯ããŒããŒãããèªã¿åãããããŒã¿ã®ãããã¯ã§åäœããŸãã ãã®ããŒã¿ãå²ãåœãŠãããã«ãããã°ã©ã ã¯æéãµã€ãºã®ã¡ã¢ãªãããã¯-ãããã¡ãå²ãåœãŠãŸãã ãããã¡ã®ãªãŒããŒãããŒã¯ããããã¡ãä¿æã§ããããã倧ããããŒã¿ããªã¥ãŒã ãèªã¿æžããããšãã«çºçããŸãã
è¡šé¢çã«ã¯ãããã¯éåžžã«æããªééãã®ããã«èŠããŸãã æçµçã«ãããã°ã©ã ã¯ãããã¡ã®ãµã€ãºãèªèããŸããã€ãŸããããã°ã©ã ããããã¡ã«æ¢ç¥ã®ãµã€ãºãè¶ ããŠé 眮ããããšããªãããšãç°¡åã«ç¢ºèªã§ããã¯ãã§ãã ãããŠãããªãã¯ãã®ããã«æšè«ããã®ãæ£ããã§ãããã ãã ãããããã¡ãªãŒããŒãããŒã¯åŒãç¶ãçºçãããã®çµæã¯å€ãã®å Žåãã»ãã¥ãªãã£äžã®é害ãšãªããŸãã
ãããã¡ãªãŒããŒãããŒãçºçããçç±ãšãçµæãéââåžžã«æ²æšãªçç±ãç解ããã«ã¯ãããã°ã©ã ãã¡ã¢ãªã䜿çšããæ¹æ³ãšããã°ã©ããã³ãŒããèšè¿°ããæ¹æ³ãèæ ®ããå¿ èŠããããŸãã
ïŒèè ã®ã¡ã¢ïŒã¹ã¿ãã¯ãããã¡ãªãŒããŒãããŒãäž»ã«èæ ®ããŸããããã¯ããªãŒããŒãããŒã®å¯äžã®ã¿ã€ãã§ã¯ãããŸããããå€å žçã§æãç 究ãããŠããã¿ã€ãã§ãïŒ
ã¹ã¿ãã¯
ãããã¡ãªãŒããŒãããŒã¯ããã€ãã£ãã³ãŒãã§ã®ã¿åé¡ãåŒãèµ·ãããŸãã JavaãPythonãªã©ã®ä»²ä»ãªãã§ãäžé£ã®ããã»ããµåœä»€ãçŽæ¥äœ¿çšããããã°ã©ã ã§ã ãªãŒããŒãããŒã¯ããã€ãã£ãã³ãŒãã®ããã»ããµãšããã°ã©ã ãã¡ã¢ãªã管çããæ¹æ³ã«é¢é£ããŠããŸãã ç°ãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ã¯ç¬èªã®ç¹æ§ããããŸãããææ°ã®äžè¬çãªãã©ãããã©ãŒã ã¯ãã¹ãŠäžè¬çãªèŠåã«åŸããŸãã æ»æãã©ã®ããã«æ©èœããã©ã®ããã«å¯Ÿæããããç解ããããã«ãæåã«ã¡ã¢ãªäœ¿çšéãå°ãèŠãŠã¿ãŸãããã
æãéèŠãªæŠå¿µã¯ãã¡ã¢ãªå ã®ã¢ãã¬ã¹ã§ãã ã¡ã¢ãªã®åãã€ãã«ã¯ã察å¿ããæ°å€ã¢ãã¬ã¹ããããŸãã ããã»ããµã¯ãã¡ã€ã³ã¡ã¢ãªïŒRAMãRAMïŒã«å¯ŸããŠããŒã¿ã®èªã¿åããŸãã¯æžã蟌ã¿ãè¡ããšããèªã¿åããè¡ãããå ŽæãŸãã¯æžã蟌ã¿ãè¡ãããå Žæã®ã¡ã¢ãªã¢ãã¬ã¹ã䜿çšããŸãã ã·ã¹ãã ã¡ã¢ãªã¯ããŒã¿ã«äœ¿çšãããã ãã§ã¯ãããŸããã ãŸããããã°ã©ã ãæ§æããå®è¡å¯èœã³ãŒãããã¹ãããããã«ã䜿çšãããŸãã ã€ãŸããå®è¡äžã®ããã°ã©ã ã®åæ©èœã«ãã¢ãã¬ã¹ããããŸãã
åœåãããã»ããµãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ç©çã¡ã¢ãªã¢ãã¬ã¹ã䜿çšããŠããŸãããåã¡ã¢ãªã¢ãã¬ã¹ã¯ãç¹å®ã®RAMã®ã¢ãã¬ã¹ã«çŽæ¥é¢é£ä»ããããŠããŸããã ææ°ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®äžéšã§ã¯ãŸã ç©çã¢ãã¬ã¹ã䜿çšãããŠããŸãããææ°ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãã¹ãŠä»®æ³ã¡ã¢ãªãšåŒã°ããã¹ããŒã ã䜿çšããŠããŸãã
ä»®æ³ã¡ã¢ãªã䜿çšããå Žåãã¡ã¢ãªã¢ãã¬ã¹ãšç©çRAMéšåã®çŽæ¥çãªå¯Ÿå¿ã¯ãããŸããã 代ããã«ãããã°ã©ã ãšããã»ããµã¯ä»®æ³ã¢ãã¬ã¹ç©ºéã§åäœããŸãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšããã»ããµã¯ãä»®æ³ã¡ã¢ãªã¢ãã¬ã¹ãšç©çã¡ã¢ãªã¢ãã¬ã¹éã®ãããã³ã°ãå ±åã§ãµããŒãããŸãã
ãã®ä»®æ³åã«ãããããã€ãã®éèŠãªæ©èœã䜿çšã§ããŸãã æåã§æãéèŠãªã®ã¯ã ä¿è·ãããã¡ã¢ãªã§ãã åã ã®ããã»ã¹ã¯ããããç¬èªã®ã¢ãã¬ã¹ã®ã»ãããåãåããŸãã 32ãããããã»ã¹ã®å Žåãã¢ãã¬ã¹ã¯ãŒãïŒæåã®ãã€ãïŒããå§ãŸãã4,294,967,295ïŒ16é²æ°ã§ã¯0xffff'ffff; 2 ^ 32-1ïŒãŸã§ã«ãªããŸãã 64ãããããã»ã¹ã®å Žåãã¢ãã¬ã¹ã¯18,446,744,073,709,551,615ïŒ0xffff'ffff'ffff'ffffã2 ^ 64-1ïŒãŸã§ç¶ããŸãã ãããã£ãŠãåããã»ã¹ã«ã¯ç¬èªã®ã¢ãã¬ã¹0ãããããã®åŸã«ã¢ãã¬ã¹1ãã¢ãã¬ã¹2ãªã©ãç¶ããŸãã
ïŒèè ã®ã¡ã¢ïŒãã®èšäºã®æ®ãã®éšåã§ã¯ãç¹ã«æèšããªãéãã32ãããã·ã¹ãã ã«ã€ããŠèª¬æããŸãããã®åŽé¢ã§ã¯ã32ããããš64ãããã®éãã¯éèŠã§ã¯ãããŸãããæ確ã«ããããã«ã1ããããå³å®ããŸãïŒ
åããã»ã¹ã¯ç¬èªã®ã¢ãã¬ã¹ã»ãããåãåãã®ã§ããã®ã¹ããŒã ã¯ãããããã»ã¹ããå¥ã®ããã»ã¹ãžã®ã¡ã¢ãªç Žæãé²ãç°¡åãªæ¹æ³ã§ããããã»ã¹ãã¢ã¯ã»ã¹ã§ãããã¹ãŠã®ã¢ãã¬ã¹ã¯ããã®ããã»ã¹ã®ã¿ã«å±ããŸãã ããã¯ãããã»ã¹èªäœã«ãšã£ãŠã¯ããã«ç°¡åã§ãã ç©çã¡ã¢ãªã¢ãã¬ã¹ã¯ãåºãæå³ã§ã¯æ©èœããŸããïŒãããã¯ãŒãããå§ãŸãæ°åã§ãïŒã䜿çšããã®ã«å€å°äžäŸ¿ãªæ©èœããããŸãã ããšãã°ãéåžžã¯éé£ç¶ã§ãã ããšãã°ãã¢ãã¬ã¹0x1ff8'0000ã¯ãããã»ããµã®ã·ã¹ãã å¶åŸ¡ã¢ãŒãã®ã¡ã¢ãªã«äœ¿çšãããŸããããã¯ãéåžžã®ããã°ã©ã ã§ã¯ã¢ã¯ã»ã¹ã§ããªãå°ããªã¡ã¢ãªã§ãã PCIeã«ãŒãã®ã¡ã¢ãªããã®ã¹ããŒã¹ã«ãããŸãã ä»®æ³ã¡ã¢ãªã¢ãã¬ã¹ã§ã¯ããã®ãããªäžäŸ¿ã¯ãããŸããã
ããã»ã¹ã®ã¢ãã¬ã¹ç©ºéã«ã¯äœããããŸããïŒ äžè¬çã«ã4ã€ã®å ±éãªããžã§ã¯ããããããã®ãã¡ã®3ã€ãèå³ãæã£ãŠããŸãã ã»ãšãã©ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ç§ãã¡ã«ãšã£ãŠèå³ã®ãªããããã¯ã¯ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®äžæ žãã§ãã ããã©ãŒãã³ã¹ã®ããã«ãã¢ãã¬ã¹ç©ºéã¯éåžž2ã€ã®ååã«åå²ããããã®äžååã¯ããã°ã©ã ã«ãã£ãŠäœ¿çšãããäžååã¯ã«ãŒãã«ã®ã¢ãã¬ã¹ç©ºéã«ãã£ãŠå æãããŸãã ã«ãŒãã«ã«äžããããååã¯ãããã°ã©ã ãå æããŠããååããã¯å©çšã§ããŸããããã«ãŒãã«èªäœã¯ããã°ã©ã ã¡ã¢ãªãèªã¿åãããšãã§ããŸãã ããã¯ãã«ãŒãã«é¢æ°ã«ããŒã¿ãæž¡ã1ã€ã®æ¹æ³ã§ãã
ãŸããå®è¡å¯èœéšåãšããã°ã©ã ãæ§æããã©ã€ãã©ãªãæ±ããŸãã ã¡ã€ã³ã®å®è¡å¯èœãã¡ã€ã«ãšãã®ãã¹ãŠã®ã©ã€ãã©ãªã¯ããã»ã¹ã®ã¢ãã¬ã¹ç©ºéã«ããŒããããããããæ§æãããã¹ãŠã®é¢æ°ã¯ã¡ã¢ãªå ã«ã¢ãã¬ã¹ãæã¡ãŸãã
ããã°ã©ã ã䜿çšããã¡ã¢ãªã®2çªç®ã®éšåã¯ãåŠçãããããŒã¿ãæ ŒçŽããããã«äœ¿çšãããéåžžã¯ããŒããšåŒã°ããŸã ã ããšãã°ããã®é åã¯ãç·šéãããããã¥ã¡ã³ãã衚瀺ãããWebããŒãžïŒãã¹ãŠã®JavaScritãªããžã§ã¯ããCSSãªã©ãå«ãïŒããŸãã¯ãã¬ã€ãããŠããã²ãŒã ã®ããããæ ŒçŽããããã«äœ¿çšãããŸãã
3çªç®ã®æãéèŠãªéšåã¯åŒã³åºãã¹ã¿ãã¯ã§ãããéåžžã¯åã«ã¹ã¿ãã¯ãšåŒã°ããŸãã ãããæãé£ããåŽé¢ã§ãã ããã»ã¹å ã®åã¹ã¬ããã«ã¯ç¬èªã®ã¹ã¿ãã¯ããããŸãã ããã¯ãã¹ããªãŒã ã§å®è¡å¯èœãªçŸåšã®é¢æ°ãšä»¥åã®ãã¹ãŠã®é¢æ°ïŒçŸåšã®é¢æ°ã«å ¥ãããã«åŒã³åºãããé¢æ°ïŒã®äž¡æ¹ãåæã«è¿œè·¡ããããã«äœ¿çšãããã¡ã¢ãªé åã§ãã ããšãã°ãé¢æ°aãé¢æ°bãåŒã³åºããé¢æ°bãé¢æ°cãåŒã³åºãå Žåãã¹ã¿ãã¯ã«ã¯a ã bãããã³cã«é¢ããæ å ±ããã®é åºã§å«ãŸããŸãã
åŒã³åºãã¹ã¿ãã¯ã¯ããã¹ã¿ãã¯ããšåŒã°ããããŒã¿æ§é ã®ç¹æ®ããŒãžã§ã³ã§ãã ã¹ã¿ãã¯ã¯ããªããžã§ã¯ããæ ŒçŽããããã®å¯å€é·æ§é ã§ãã æ°ãããªããžã§ã¯ããã¹ã¿ãã¯ã®æåŸïŒéåžžãã¹ã¿ãã¯ã®ããããããšåŒã°ããïŒã«ããã·ã¥ããã¹ã¿ãã¯ãããªããžã§ã¯ãããããã§ããŸãã ã¹ã¿ãã¯ã®æäžéšã®ã¿ãããã·ã¥ãšãããã䜿çšããŠå€æŽããããããã¹ã¿ãã¯ã¯å³å¯ãªãœãŒãé ã確ç«ããŸããã¹ã¿ãã¯ã«æåŸã«é 眮ããããªããžã§ã¯ãã次ã«ã¹ã¿ãã¯ããåé€ãããŸãã
åŒã³åºãã¹ã¿ãã¯ã«ä¿åãããæãéèŠãªãªããžã§ã¯ãã¯ããªã¿ãŒã³ã¢ãã¬ã¹ã§ãã ã»ãšãã©ã®å Žåãããã°ã©ã ãé¢æ°ãåŒã³åºããšããã®é¢æ°ã¯å¿ èŠãªåŠçïŒä»ã®é¢æ°ã®åŒã³åºããå«ãïŒãå®è¡ããåŒã³åºããé¢æ°ã«å¶åŸ¡ãè¿ããŸãã åŒã³åºãé¢æ°ã«æ»ãã«ã¯ããã®é¢æ°ã«é¢ããã¬ã³ãŒããä¿åããå¿ èŠããããŸããåŒã³åºãåœä»€ã«ç¶ãåœä»€ã§å®è¡ãç¶ç¶ããå¿ èŠããããŸãã ãã®åœä»€ã®ã¢ãã¬ã¹ã¯ããªã¿ãŒã³ã¢ãã¬ã¹ãšåŒã°ããŸãã ã¹ã¿ãã¯ã¯ããããã®ãªã¿ãŒã³ã¢ãã¬ã¹ãæ ŒçŽããããã«äœ¿çšãããŸããé¢æ°ãåŒã³åºããããã³ã«ããªã¿ãŒã³ã¢ãã¬ã¹ãã¹ã¿ãã¯ã«é 眮ãããŸãã åãªã¿ãŒã³ã§ãã¢ãã¬ã¹ã¯ã¹ã¿ãã¯ããåé€ãããããã»ããµã¯ãã®ã¢ãã¬ã¹ã§åœä»€ã®å®è¡ãéå§ããŸãã
ã¹ã¿ãã¯æ©èœã¯éåžžã«åºæ¬çã§å¿ èŠãªããããã¹ãŠã§ã¯ãªãã«ããŠããã»ãšãã©ã®ããã»ããµã«ãããã®æŠå¿µã®ãµããŒããçµã¿èŸŒãŸããŠããŸãã äŸãšããŠx86ããã»ããµãåãäžããŸãã x86ä»æ§ã§å®çŸ©ãããŠããã¬ãžã¹ã¿ïŒåœä»€ã«ã¢ã¯ã»ã¹å¯èœãªããã»ããµã®ã¡ã¢ãªã®å°ããªé åïŒã®ãã¡ãæãéèŠãª2ã€ã¯eip ïŒåœä»€ãã€ã³ã¿ïŒãšesp ïŒã¹ã¿ãã¯ãã€ã³ã¿ïŒã§ãã
ESPã«ã¯åžžã«ã¹ã¿ãã¯ã®æäžäœã®ã¢ãã¬ã¹ãå«ãŸããŸãã äœããã¹ã¿ãã¯ã«ããã·ã¥ããããã³ã«ãespå€ã¯æžå°ããŸãã ã¹ã¿ãã¯ããäœããåé€ããããã³ã«ãespå€ãå¢å ããŸãã ããã¯ãã¹ã¿ãã¯ããããŠã³ãããŠããããšãæå³ããŸãã ãªããžã§ã¯ããã¹ã¿ãã¯ã«è¿œå ããããšãespã«ä¿åãããã¢ãã¬ã¹ã¯ãŸããŸãå°ãããªããŸãã ããã«ãããããããespãæãã¡ã¢ãªé åã¯ãã¹ã¿ãã¯ã®ãããããšåŒã°ããŸãã
EIPã«ã¯ãçŸåšã®åœä»€ã®ã¢ãã¬ã¹ãå«ãŸããŸãã ããã»ããµã¯ãç¬èªã«eipå€ããµããŒãããŸãã ã¡ã¢ãªããåœä»€ã¹ããªãŒã ãèªã¿åããããã«å¿ããŠeipå€ãå€æŽãããããåžžã«åœä»€ã®ã¢ãã¬ã¹ãå«ãŸããŸãã x86å ã«ã¯ãé¢æ°callãåŒã³åºãããã®åœä»€ãš ã -retãè¿ãããã®åœä»€ããããŸãã
CALLã¯ãåŒã³åºãããé¢æ°ã®ã¢ãã¬ã¹ãšãã1ã€ã®ãªãã©ã³ããåãå ¥ããŸãïŒãã ããæž¡ãæ¹æ³ã¯ããã€ããããŸãïŒã åŒã³åºããè¡ããããšãespã¹ã¿ãã¯ãã€ã³ã¿ãŒã4ãã€ãïŒ32ãããïŒæžããåŒã³åºãã«ç¶ãåœä»€ã¢ãã¬ã¹ïŒæ»ãã¢ãã¬ã¹ïŒãespãæãã¡ã¢ãªé åã«é 眮ãããŸãã ã€ãŸãããªã¿ãŒã³ã¢ãã¬ã¹ãã¹ã¿ãã¯ã«ããã·ã¥ãããŸãã 次ã«ãeipå€ãåŒã³åºããªãã©ã³ããšããŠæž¡ãããã¢ãã¬ã¹ãšçããèšå®ããããã®æç¹ããå®è¡ãç¶ç¶ãããŸãã
RETã¯éã®æäœãå®è¡ããŸãã Simple retã¯ãªãã©ã³ããåãå ¥ããŸããã ããã»ããµã¯æåã«espã«æ ŒçŽãããŠããã¡ã¢ãªã¢ãã¬ã¹ã®å€ãèªã¿åãã次ã«espã4ãã€ãå¢ãããŸã-ã¹ã¿ãã¯ããæ»ãã¢ãã¬ã¹ãåé€ããŸãã å€ã¯eipã«é 眮ãããå®è¡ã¯ãã®ã¢ãã¬ã¹ããç¶ç¶ãããŸãã
ïŒç¿»èš³è 泚ïŒèè ã®ããã¹ãã®ãã®æç¹ã§ã åŒã³åºããšåè©Šè¡ã瀺ããããªããããŸãã ïŒ
åŒã³åºãã¹ã¿ãã¯ãæ»ãã¢ãã¬ã¹ã®ã»ããã®ã¿ãä¿æããŠããå Žåãåé¡ã¯ãããŸãã ã æ¬åœã®åé¡ã¯ãã¹ã¿ãã¯ã«ããã·ã¥ãããä»ã®ãã¹ãŠã®ãã®ã«ãããŸãã ã¹ã¿ãã¯ã¯ãããŒã¿ãä¿åããããã®é«éã§å¹ççãªå Žæã§ããããšãããããŸããã ããŒãã«ããŒã¿ãä¿åããããšã¯æ¯èŒçå°é£ã§ããããã°ã©ã ã¯ãããŒãã§äœ¿çšå¯èœãªã¹ããŒã¹ãåãªããžã§ã¯ããå ããéãªã©ã远跡ããå¿ èŠããããŸãã åæã«ãã¹ã¿ãã¯ã®æäœã¯ç°¡åã§ããå°ããªããŒã¿ãé 眮ããã«ã¯ããã€ã³ã¿ãŒã®å€ãåçŽã«æžããã ãã§ååã§ãã ãããŠãèªåã§ã¯ãªãŒã³ã¢ããããã«ã¯ããã€ã³ã¿ã®å€ãå¢ããã ãã§ãã
ãã®å©äŸ¿æ§ã«ãããã¹ã¿ãã¯ã¯ãé¢æ°ã§äœ¿çšãããå€æ°ãé 眮ããè«ççãªå Žæã«ãªããŸãã é¢æ°ã¯ãŠãŒã¶ãŒå ¥åãåãå ¥ããããã«256ãã€ãã®ãããã¡ãŒãå¿ èŠãšããŸããïŒ ç°¡åã§ããã¹ã¿ãã¯ãã€ã³ã¿ãã256ãåŒãã ãã§ããããã¡ã®æºåãæŽããŸãã é¢æ°ã®æåŸã§ããã€ã³ã¿ã«256ãè¿œå ããã ãã§ããããã¡ã¯ç Žæ£ãããŸãã
ãã ãããã®ã¢ãããŒãã«ã¯å¶éããããŸãã ã¹ã¿ãã¯ã¯ãéåžžã«å€§ããªãªããžã§ã¯ãã®ä¿åã«ã¯é©ããŠããŸããã䜿çšå¯èœãªã¡ã¢ãªã®ç·éã¯ãéåžžãã¹ããªãŒã ã®äœææã«åºå®ãããå€ãã®å Žåãããªã¥ãŒã ãçŽ1MBã§ãã ãããã£ãŠã倧ããªãªããžã§ã¯ãã¯ããŒãã«é 眮ããå¿ èŠããããŸãã ã¹ã¿ãã¯ã¯ãåŒã³åºãããé¢æ°ãå®è¡ããããããé·ãååšããå¿ èŠããããªããžã§ã¯ãã«ãé©çšã§ããŸããã é¢æ°ãçµäºãããšã¹ã¿ãã¯äžã®ãã¹ãŠã®å²ãåœãŠãåé€ããããããã¹ã¿ãã¯äžã®ãªããžã§ã¯ãã®å¯¿åœã¯å¯Ÿå¿ããé¢æ°ã®å®è¡æéãè¶ ããŸããã ããŒãäžã®ãªããžã§ã¯ãã®å Žåããã®å¶éã¯é©çšããããæ°žä¹ ã«ååšããå¯èœæ§ããããŸãã
ã¹ã¿ãã¯ã¹ãã¬ãŒãžã¯ãããã°ã©ããæ瀺çã«å®çŸ©ããå€æ°ã ãã§ãªãã䜿çšãããŸãã ã¹ã¿ãã¯ã¯ãããã°ã©ã ã§å¿ èŠãªå€ãæ ŒçŽããããã«ã䜿çšãããŸãã ããã¯ãx86ã§ç¹ã«æ·±å»ã§ãã X86ããŒã¹ã®ããã»ããµã¯ãå€æ°ã®ã¬ãžã¹ã¿ã§éãã¯ãããŸããïŒåèš8åã®æŽæ°ã¬ãžã¹ã¿ããããæ¢ã«èšåããeipãespã®ããã«ããããã®äžéšã¯æ¢ã«äœ¿çšãããŠããŸãïŒã ã¬ãžã¹ã¿ãŒã®ã¹ããŒã¹ã解æŸããããã«ãåŸã§äœ¿çšããããã«å€ãä¿æããªãããã³ã³ãã€ã©ãŒã¯ã¬ãžã¹ã¿ãŒã®å€ãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã åŸã§ã¬ãžã¹ã¿ããå€ãåé€ããŠãã¬ãžã¹ã¿ã«æ»ãããšãã§ããŸãã ã³ã³ãã€ã©ãŒã®å°éçšèªã§ã¯ãã¬ãžã¹ã¿ãŒãä¿ç®¡ããŠãåŸã§äœ¿çšããå¯èœæ§ã®ããããã»ã¹ãã¹ãã«ãšåŒã³ãŸãã
æåŸã«ãã¹ã¿ãã¯ã¯é¢æ°ã«åŒæ°ãæž¡ãããã«ãã䜿çšãããŸãã åŒã³åºãåŽã®é¢æ°ã¯ãååŒæ°ãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã åŒã³åºãããé¢æ°ã¯ããããã¹ã¿ãã¯ããåé€ã§ããŸãã ããã¯åŒæ°ãæž¡ãå¯äžã®æ¹æ³ã§ã¯ãããŸãã-ããšãã°ãã¬ãžââã¹ã¿ã䜿çšã§ããŸã-ããããæãæè»ãªæ¹æ³ã®1ã€ã§ãã
ã¹ã¿ãã¯äžã®é¢æ°ã«ãã£ãŠæ ŒçŽããããªããžã§ã¯ãã®ã»ããâç¬èªã®å€æ°ãæ ŒçŽãããã¬ãžã¹ã¿ãä»ã®é¢æ°ãžã®éä¿¡ã®ããã«æºåãããåŒæ°âã¯ãããã¹ãããããã¬ãŒã ããšåŒã°ããŸãã æ¥ç¶ããããã¬ãŒã ã®ããŒã¿ã¯ç©æ¥µçã«äœ¿çšããããããåçŽã«ã¢ãã¬ã¹æå®ããæ¹æ³ããããšäŸ¿å©ã§ãã
ã¹ã¿ãã¯ãã€ã³ã¿ãŒã䜿çšããŠãããå®è£ ããããšã¯å¯èœã§ãããå€å°äžäŸ¿ã§ããã¹ã¿ãã¯ãã€ã³ã¿ãŒã¯åžžã«æäžéšãæãããªããžã§ã¯ãã®é 眮ãšåé€ã«å¿ããŠå€ãå€åããŸãã ããšãã°ãå€æ°ã¯æåã«äœçœ®esp + 4ã«é 眮ãããŸãã ããã«2ã€ã®å€ãã¹ã¿ãã¯ã«é 眮ãããåŸãå€æ°ã¯esp + 12ã«é 眮ããå§ããŸããã ã¹ã¿ãã¯ããå€ã®1ã€ãåé€ãããšãå€æ°ã¯esp + 8ã«ãªããŸãã
説æãããŠããããšã¯äžå¯èœãªäœæ¥ã§ã¯ãªããã³ã³ãã€ã©ãŒã¯ããã«å¯ŸåŠããããšãã§ããŸãã ãã ããããã«ãããç¹ã«ã¢ã»ã³ãã©ãŒãæåã§èšè¿°ããå Žåã«ãã¹ã¿ãã¯ãã€ã³ã¿ãŒã䜿çšããŠé ç¹ã®ããã ã以å€ã«ã¢ã¯ã»ã¹ã§ããŸãã
ã¿ã¹ã¯ãç°¡çŽ åããããã«ãåãã¬ãŒã ã®ãããã ãã¢ãã¬ã¹ïŒã€ãŸããå é ïŒãæ ŒçŽãã2çªç®ã®ãã€ã³ã¿ãŒïŒãã¬ãŒã ãã€ã³ã¿ãŒãšåŒã°ããå€ïŒãä¿æããã®ãäžè¬çã§ãã ãŸããx86ã«ã¯ãéåžžebpã«äœ¿çšãããã¬ãžã¹ã¿ããããŸãã ãã®å€ã¯åžžã«é¢æ°å ã«ãããããé¢æ°å€æ°ãæ確ã«ã¢ãã¬ã¹ããæ¹æ³ããããŸããebp-4ã®å€ã¯ãé¢æ°ã®åç¶æéãéããŠebp-4ã§å©çšå¯èœãªãŸãŸã§ãã ãããŠãããã¯äººã ã ãã§ãªãããããã¬ãŒãäœãèµ·ãã£ãŠããããææ¡ããã®ãç°¡åã§ãã
![]()
Visual Studioã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãäŸãšããŠåçŽãªx86ããã°ã©ã ã䜿çšããŠãããããã¹ãŠã®åäœã瀺ããŠããŸãã x86ããã»ããµã§ã¯ã espã¬ãžã¹ã¿ã«ã¯ã¹ã¿ãã¯ã®æäžéšã®ã¢ãã¬ã¹ãå«ãŸãããã®å Žåã¯0x0019fee0 ïŒéã§åŒ·èª¿è¡šç€ºïŒã§ãã ïŒ èè ã®æ³šèšïŒx86ãã©ãããã©ãŒã ã§ã¯ãã¹ã¿ãã¯ã¯ã¡ã¢ãªã¢ãã¬ã¹0ã®æ¹åã«æé·ããŸããããã®ãã€ã³ãã¯ãã¹ã¿ãã¯ã®ãããããšããååãä¿æããŸã ïŒã 衚瀺ãããé¢æ°ã¯ãã¹ã¿ãã¯äžã§ãã³ã¯è²ã§åŒ·èª¿è¡šç€ºãããå€æ°åã®ã¿ãä¿åããŸãã ããã¯ãé·ãã64ãã€ãã®åºå®ãããã¡ãŒã§ãã ããã¯å¯äžã®å€æ°ã§ããããããã®ã¢ãã¬ã¹ã0x0019fee0ã§ãããã¹ã¿ãã¯ã®æäžéšãšåãã§ãã
X86ã«ã¯ãèµ€ã§åŒ·èª¿è¡šç€ºãããebpã¬ãžã¹ã¿ããããããã¯ïŒéåžžïŒãã¬ãŒã ãã€ã³ã¿ãæ ŒçŽããããã«å²ãåœãŠãããŸãã ãã¬ãŒã ãã€ã³ã¿ãŒã¯ãã¹ã¿ãã¯å€æ°ã®çŽåŸã«ãããŸãã ãã¬ãŒã ãã€ã³ã¿ãŒã®ããåŸãã«ãç·è²ã§åŒ·èª¿è¡šç€ºãããæ»ãã¢ãã¬ã¹ããããŸãã ãªã¿ãŒã³ã¢ãã¬ã¹ã¯ã 0x00401048ã®ã³ãŒããåç §ããŸãã ãã®åœä»€ã¯åŒã³åºãã®çŽåŸã«ç¶ããããã°ã©ã ãåŒã³åºãé¢æ°ãé¢ããå Žæã§å®è¡ãç¶ç¶ããããã«æ»ãã¢ãã¬ã¹ãã©ã®ããã«äœ¿çšããããã瀺ããŸãã
äžã®å³ã®NAMEã¯ãå®æçã«ãªãŒããŒãããŒãããããã¡ã®çš®é¡ãå ·äœçã«ç€ºããŠããŸãã ãµã€ãºã¯64ãã€ãã«åºå®ãããŠããŸãã ãã®å Žåãæ°åã®ã»ããã§åãããããŒãã§çµãããŸãã ãã®å³ã¯ãããŒã ãããã¡ã«64ãã€ã以äžãæžã蟌ãŸãããšãã¹ã¿ãã¯å ã®ä»ã®å€ãç Žæããããšã瀺ããŠããŸãã ããã«4ãã€ããæžã蟌ããšããã¬ãŒã ãã€ã³ã¿ãŒã¯ç Žæ£ãããŸãã ããã«8ãã€ããæžã蟌ããšããã¬ãŒã ãã€ã³ã¿ãŒãšæ»ãã¢ãã¬ã¹ãäžæžããããŸãã
æããã«ãããã¯ããŒã¿ã®ç Žæã«ã€ãªãããŸããããããã¡ãªãŒããŒãããŒã®åé¡ã¯ããæ·±å»ã§ãã[ä»»æã®]ã³ãŒãã®å®è¡ã«ã€ãªãããŸãã ããã¯ããããã¡ãªãŒããŒãããŒãããŒã¿ãäžæžãããã ãã§ã¯ãªãããã§ãã ã¹ã¿ãã¯ã«æ ŒçŽãããŠããããéèŠãªãã®ïŒè¿ä¿¡å ã¢ãã¬ã¹ïŒãäžæžããããå ŽåããããŸãã ãªã¿ãŒã³ã¢ãã¬ã¹ã¯ãçŸåšã®é¢æ°ãçµäºãããšãã«ããã»ããµãå®è¡ããåœä»€ãå¶åŸ¡ããŸãã ããã¯åŒã³åºãé¢æ°å ã®ããçš®ã®ã¢ãã¬ã¹ã§ãããšæ³å®ãããŠããŸããããã®å€ããããã¡ãªãŒããŒãããŒã«ãã£ãŠäžæžããããå Žåãã©ãã§ãæãããšãã§ããŸãã æ»æè ããããã¡ãªãŒããŒãããŒãå¶åŸ¡ã§ããå Žåããªã¿ãŒã³ã¢ãã¬ã¹ãå¶åŸ¡ã§ããŸãã æ»ãã¢ãã¬ã¹ãå¶åŸ¡ããå Žåã次ã«äœããã¹ãããããã»ããµã«äŒããããšãã§ããŸãã
ã»ãšãã©ã®å Žåãããã»ããµã«ã¯ãæ»æè ãèµ·åããããã·ã³ã劥åãããçŸãã䟿å©ãªæ©èœã¯ãããŸããããããã¯ããã»ã©éèŠã§ã¯ãããŸããã ãªã¿ãŒã³ã¢ãã¬ã¹ãå€æŽããããã«äœ¿çšãããã®ãšåããããã¡ãŒã䜿çšããŠãå®è¡å¯èœãªã³ãŒãïŒã·ã§ã«ã³ãŒããã·ã§ã«ã³ãŒãïŒã®å°ããªæçãä¿åããæªæã®ããå®è¡å¯èœãã¡ã€ã«ãããŠã³ããŒããããããããã¯ãŒã¯æ¥ç¶ãéãããæ»æè ã®ä»ã®åžæãæºããããšãã§ããŸãã
åŸæ¥ããããè¡ãã®ã¯ç°¡åã§ãããå€ãã®äººãé©ããçç±ããã§ããéåžžããã·ã³ãåèµ·åããŠãããã¹ãŠã®ããã°ã©ã ã¯èµ·åãããã³ã«ã¡ã¢ãªå ã®åãã¢ãã¬ã¹ã䜿çšããŸãã ããã¯ãã¹ã¿ãã¯äžã®ãââããã¡ã®äœçœ®ãæ¯ååãã«ãªããããæ»ãã¢ãã¬ã¹ãæªããããã«äœ¿çšãããå€ãæ¯ååãã«ãªãããšãæå³ããŸãã æ»æè ã¯ãã®ã¢ãã¬ã¹ã1åèŠã€ããã ãã§ãããæ»æã¯è匱ãªã³ãŒããå®è¡ãããã¹ãŠã®ã³ã³ãã¥ãŒã¿ãŒã§æ©èœããŸãã
æ»æè ããŒã«ããã
çæ³çãªäžçã§ã¯-æ»æè ã®èŠ³ç¹ãã-æžãæãããããªã¿ãŒã³ã¢ãã¬ã¹ã¯ãåã«ãããã¡ã¢ãã¬ã¹ã§ããå¯èœæ§ããããŸãã ãŸããããã°ã©ã ããã¡ã€ã«ãŸãã¯ãããã¯ãŒã¯ããããŒã¿ãèªã¿åãå Žåãããã¯éåžžã«å¯èœã§ãã
ãã以å€ã®å Žåãæ»æè ã¯ããªãã¯ãè¡ãå¿ èŠããããŸãã 人éãèªããããã¹ããåŠçããé¢æ°ã§ã¯ãå€ãã®å Žåãnullãã€ãã«ã¯ç¹å¥ãªæå³ããããŸãã ãã®ãããªãã€ãã¯è¡ã®çµããã瀺ããè¡ãæäœããããã«äœ¿çšãããé¢æ°ïŒã³ããŒãæ¯èŒãçµåïŒãåæ¢ããŸãã 圌ãããã®ã·ã³ãã«ã«åºäŒã£ããšãã ããã¯ãã·ã§ã«ã³ãŒãã«ãŒããå«ãŸããŠããå Žåããããã®ããã·ãŒãžã£ããããå£ãããšãæå³ããŸãã
ïŒç¿»èš³è ã®ã¡ã¢ïŒèè ã®ããã¹ãã®ãã®æç¹ã§ã ãªãŒããŒãããŒã瀺ããããªããããŸãããã®äžã«ãã·ã§ã«ã³ãŒãããããã¡ãŒã«å ¥ãããããªã¿ãŒã³ã¢ãã¬ã¹ãæžãæããããŸããã·ã§ã«ã³ãŒãã¯æšæºã®Windowsèšç®æ©ãèµ·åããŸããïŒ
ãããåé¿ããããã«ãæ»æè ã¯ããŸããŸãªããªãã¯ã䜿çšã§ããŸãã ãŒããå«ãã·ã§ã«ã³ãŒããåé¡ã®ãããã€ããåé¿ããåçã®ã·ãŒã±ã³ã¹ã«å€æããå°ããªã³ãŒãã ãããã£ãŠãéåžžã«å³ããå¶éãã¯ããŒã«ããããšãã§ããŸãã ããšãã°ãè匱ãªæ©èœã¯ãæšæºããŒããŒãããå ¥åã§ããããŒã¿ã®ã¿ãåãå ¥ããŸãã
å®éãã¹ã¿ãã¯ã¢ãã¬ã¹ã«ã¯å€ãã®å ŽåãŒããå«ãŸããåæ§ã®åé¡ããããŸããããã¯ãã¹ã¿ãã¯ãããã¡ãããªã¿ãŒã³ã¢ãã¬ã¹ã«æžã蟌ãããšãã§ããªãããšãæå³ããŸãããããã¡èªäœãåããïŒããã³ãªãŒããŒãããŒããå¯èœæ§ãããïŒããã«äœ¿çšãããé¢æ°ã®äžéšããŒããæžã蟌ããããããã¯æããªãå ŽåããããŸããããã€ãã®æ³šæãæã£ãŠããªã¿ãŒã³ã¢ãã¬ã¹ã«ã¹ã¿ãã¯ã¢ãã¬ã¹ãèšå®ããããšã«ããããã«ãã€ããæ£ããå Žæã«æ£ç¢ºã«é 眮ããããã«äœ¿çšã§ããŸãã
ãããããããäžå¯èœãªå Žåã§ããç¶æ³ã¯è¿åïŒè¿åïŒã§åé¿ãããŸããå®éããã¹ãŠã®ã©ã€ãã©ãªãåããããã°ã©ã ã¯ãã¡ã¢ãªå ã«å€§éã®å®è¡å¯èœã³ãŒããä¿æããŠããŸãããã®ã³ãŒãã®ã»ãšãã©ã«ã¯ããå®å šãªãã¢ãã¬ã¹ããããŸããã¢ãã¬ã¹ã«ãŒãã¯å«ãŸããŸããã
次ã«ãæ»æè ã¯call espãªã©ã®åœä»€ãå«ãé©åãªã¢ãã¬ã¹ãèŠã€ããå¿ èŠããããŸããïŒx86ïŒãé¢æ°ã®ã¢ãã¬ã¹ãšããŠã¹ã¿ãã¯ãã€ã³ã¿ãŒã®å€ã䜿çšãããã®å®è¡ãéå§ããŸããããã¯ãã¹ã¿ãã¯ãããã¡ãŒã«é ãããã·ã§ã«ã³ãŒãã«æé©ã§ããæ»æè ã¯call espåœä»€ã®ã¢ãã¬ã¹ã䜿çšããŠããªã¿ãŒã³ã¢ãã¬ã¹ãšããŠæžã蟌ã¿ãŸããããã»ããµã¯ãã®ã¢ãã¬ã¹ãããã«ãžã£ã³ãããŸãããããã§ãã·ã§ã«ã³ãŒãã«å°éããŸããå¥ã®ã¢ãã¬ã¹ããžã£ã³ããããã®ææ³ã¯ããã¹ããªã³ã°ããŒãããšåŒã°ããŸãã
ç¹°ãè¿ããŸãããããã¯ããã°ã©ã ãšãã®ã©ã€ãã©ãªãŒãåèµ·åæã«åãã¡ã¢ãªãŒé åã«é 眮ãããããã§ã-ãªããŒãéã§ããç°ãªããã·ã³äžã§ãããã®åé¡ã§èå³æ·±ãç¹ã®1ã€ã¯ãã¹ããªã³ã°ããŒããå®è¡ããã©ã€ãã©ãªãcall espæŒç®åã䜿çšããå¿ èŠãããªãããšã§ãã 2ã€ã®é©åãªãã€ããå«ãŸããŠããã°ååã§ãïŒãã®å Žåãå€0xffããã³0xd4ïŒæ¬¡ã ã«è¡ããŸãããããã¯ãä»ã®æ©èœã®äžéšã§ããå Žåããåãªãæ°åã®äžéšã§ããå ŽåããããŸãã x86ã¯ãã®ãããªããšãæ°ã«ããŸããã X86åœä»€ã¯éåžžã«é·ãïŒæ倧15ãã€ãïŒïŒãä»»æã®ã¢ãã¬ã¹ã«é 眮ã§ããŸããããã»ããµããããšãã°4ãã€ãåœä»€ã®2çªç®ã®ãã€ããªã©ãäžå€®ããåœä»€ã®èªã¿åããéå§ãããšãçµæã¯å®å šã«ç°ãªãããŸã æå¹ãªåœä»€ãšããŠè§£éãããŸãããã®ç¶æ³ã«ããã䟿å©ãªãžã£ã³ããç°¡åã«èŠã€ããããšãã§ããŸãã
ãã ããå Žåã«ãã£ãŠã¯ãæ»æããªã¿ãŒã³ã¢ãã¬ã¹ãæ£ç¢ºã«èšå®ã§ããªãããšããããŸããå¿ èŠãªå Žæãã¡ã¢ãªå ã®ãªããžã§ã¯ãã®å Žæã¯éåžžã«äŒŒãŠããŸããããã·ã³ããšã«ããŸãã¯éå§ããšã«ãããã«ç°ãªãå ŽåããããŸããããšãã°ãæ»æããããããã¡ã®æ£ç¢ºãªå Žæã¯ãã·ã¹ãã ã®ååãŸãã¯IPã¢ãã¬ã¹ã«å¿ããŠããŸãã¯ãã€ããŒãªããã°ã©ã ã®æŽæ°ã«ãããã€ããŒãªå€æŽãè¡ãããããã«ãæ°ãã€ãäžäžã«å€åããå ŽåããããŸããããã«å¯ŸåŠããã«ã¯ãã»ãŒæ£ããè¿éå ã¢ãã¬ã¹ãæå®ã§ãããšäŸ¿å©ã§ãããé«ã粟床ã¯å¿ èŠãããŸããã
ããã¯ããã©ã³ãã£ã³ã°ã¹ããªãããïŒNOPã¹ã¬ãããç¹ç¯ããNOPã¹ã¬ãããïŒHaltã«æè¬ïŒæ£ç¢ºãªãã·ã¢èªã®çšèª-çŽïŒãæ»æè ã¯ãã·ã§ã«ã³ãŒãããããã¡ã«çŽæ¥æžã蟌ã代ããã«ãå®éã®ã·ã§ã«ã³ãŒãã®åã«ãæã«ã¯äœçŸãã®NOPåœä»€ïŒãno-opããã€ãŸãæäœã®äžåš-ããã»ããµã«äœãããªãããã«æ瀺ããïŒãæžã蟌ã¿ãŸããã·ã§ã«ã³ãŒããèµ·åããã«ã¯ãæ»æè ã¯ãããã®NOPã®äžå€®ã®ã©ããã«ãªã¿ãŒã³ã¢ãã¬ã¹ãèšå®ããå¿ èŠããããŸãããããŠãNOPã®åéã«å ¥ããšãããã»ããµã¯ããããè¿ éã«åŠçããå®éã®ã·ã§ã«ã³ãŒãã«é²ã¿ãŸãã
C Blame Everything
ããããã¹ãŠå¯èœã«ããäž»ãªãã°-䜿çšå¯èœãªã¹ããŒã¹ãããå€ãã®ãããã¡ã«æžã蟌ã-ã¯ãç°¡åã«åé¿ã§ãããã®ã®ããã«èŠããŸãã Cããã°ã©ãã³ã°èšèªããŸãã¯å€ããå°ãªããäºææ§ã®ããåå«ãç¹ã«C ++ãšObjective Cãéé£ããã®ã¯èªåŒµã§ãïŒå°ãããªãããïŒãCèšèªã¯å€ããåºã䜿çšãããŠããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšããã°ã©ã ã«å¿ èŠã§ãããã®èšèšã¯å«ã§ããããã®ãã°ã¯ãã¹ãŠåé¿ã§ããŸãããCã¯äžæ³šæããã£ããããããã«ãã¹ãŠãè¡ããŸãã
å®å šãªéçºã«å¯ŸããCã®æµæã®äŸãšããŠãgetsïŒïŒé¢æ°ãèŠãŠãã ããããã®é¢æ°ã¯1ã€ã®ãã©ã¡ãŒã¿ãŒ-ãããã¡ãŒ-ãåããæšæºå ¥åïŒéåžžã¯ãããŒããŒãããæå³ããŸãïŒããããŒã¿ã®è¡ãèªã¿åããããããããã¡ãŒã«å ¥ããŸãã泚ææ·±ãèŠããšãé¢æ°ãgetsïŒïŒã«ã¯ãããã¡ãµã€ãºãã©ã¡ãŒã¿ãå«ãŸããŠããããCèšèšã®æ¥œããäºå®ãšããŠãgetsïŒïŒé¢æ°ãããèªäœã§ãããã¡ãµã€ãºã決å®ããæ¹æ³ã¯ãããŸãããããã¯ãgetsïŒïŒã®å Žåãåã«åé¡ã§ã¯ãªãããã§ããããŒããŒãã®äººãEnterããŒãæŒããŸã§ãé¢æ°ã¯æšæºå ¥åããèªã¿åããŸãã次ã«ããã®äººããããã¡ã«åãŸããªãã»ã©å€ãå ¥åããå Žåã§ããé¢æ°ã¯ãã®ãã¹ãŠããããã¡ã«ããã·ã¥ããããšããŸãã
ããã¯ãæåéãå®å šã«äœ¿çšã§ããªãé¢æ°ã§ããããŒããŒãããå ¥åãããããã¹ãã®éãå¶éããæ¹æ³ããªããããgetsïŒïŒé¢æ°ã§ãããã¡ãªãŒããŒãããŒãé²ãæ¹æ³ã¯ãããŸããã Cèšèªæšæºã®äœæè ã¯ããã«åé¡ãèªèããŸããã Cä»æ§putã®1999ããŒãžã§ã³ã§ã¯ïŒïŒãæµéããªããªãã2011ã¢ããããŒãã§ã¯å®å šã«åé€ãããŸãããããããã®ååšïŒããã³å®æçãªäœ¿çšïŒã¯ãCããŠãŒã¶ãŒã«å¯ŸããŠã©ã®ãããªãã©ãããæã£ãŠãããã瀺ããŠããŸãã
Morrisã®ã¯ãŒã ã¯ã1988幎ã«æ°æ¥ã§åæã®ã€ã³ã¿ãŒããããã¯ããŒã«ããæåã®èªå·±æ¡æ£åãã«ãŠã§ã¢ã§ããããã®æ©èœãæªçšããŸãããBSD 4.3 ã®fingerdããã°ã©ã ã¯ããããã¯ãŒã¯ããŒã79ãfingerããŒãã§ãªãã¹ã³ããŸããæUnixçšã®å€ä»£ã®ããã°ã©ã ã§ããããªã¢ãŒãã·ã¹ãã ã«ãã°ãªã³ããŠãããŠãŒã¶ãŒãèŠã€ããããã«äœ¿çšããã察å¿ãããããã¯ãŒã¯ãããã³ã«ã§ãã2ã€ã®äœ¿çšäŸããããŸãããªã¢ãŒãã·ã¹ãã ã«åãåãããŠããã°ã€ã³ããŠãããã¹ãŠã®ãŠãŒã¶ãŒãèŠã€ããããç¹å®ã®ãŠãŒã¶ãŒåãèŠæ±ãããšãããã°ã©ã ã¯ãŠãŒã¶ãŒã«é¢ããæ å ±ãè¿ããŸãã
fingerããŒã¢ã³ãããã¯ãŒã¯ã«æ¥ç¶ãããã³ã«ãgetsïŒïŒã䜿çšããŠãããã¯ãŒã¯ãã512ãã€ãã®ã¹ã¿ãã¯ãããã¡ãŒãžã®èªã¿åããéå§ããŸãããéåžžã®æäœäžãfingerdã¯fingerããã°ã©ã ãå®è¡ãããŠãŒã¶ãŒåïŒååšããå ŽåïŒãæž¡ããŸãã fingerããã°ã©ã ã¯ããŠãŒã¶ãŒãåæããããç¹å®ã®ãŠãŒã¶ãŒã«é¢ããæ å ±ãæäŸãããããå®éã®ä»äºãããŸããã Fingerdã¯ãåã«ãããã¯ãŒã¯æ¥ç¶ãšfingerã®èµ·åãæ åœããŠããŸããã
å¯äžã®ãå®éã®ããã©ã¡ãŒã¿ãŒããªãã·ã§ã³ã®ãŠãŒã¶ãŒåã§ããå Žåã512ãã€ãã¯ããªã倧ããªãããã¡ãŒã§ããããããã誰ããŠãŒã¶ãŒåãæããããã®é·ãã«è¿ãã§ãããããã ããã·ã¹ãã å ã®ã©ãã«ããã²ã©ãgetsïŒïŒé¢æ°ãããããã«ãã®å¶éãå³ãããããŸããã§ããããããã¯ãŒã¯çµç±ã§512ãã€ã以äžãéä¿¡ãããšãfingerdã¯ãããã¡ãŒããªãŒããŒãããŒãããŸãããããŠãããã¯ãŸãã«ãããŒãã»ã¢ãªã¹ããã£ãããšã§ãïŒåœŒã®ãšã¯ã¹ããã€ãã¯537ãã€ããfingerdã«éä¿¡ãïŒ536ãã€ãã®ããŒã¿ãšã©ã€ã³ãã£ãŒãã«ããèªã¿åããåæ¢ããŸããïŒããããã¡ãŒããªãŒããŒãããŒããããªã¿ãŒã³ã¢ãã¬ã¹ãæžãæããŸãããæ»ãã¢ãã¬ã¹ã¯ãåã«ã¹ã¿ãã¯ãããã¡é åã«èšå®ãããŸããã
Morrisã¯ãŒã ã®å®è¡å¯èœãªããŒãã¯ç°¡åã§ãããã¹ã¿ãã¯ã¬ã€ã¢ãŠãããããã«ç°ãªãå Žåã«åããŠã400åã®NOPåœä»€ã§å§ãŸãã次ã«çãã³ãŒããç¶ããŸãããã®ã³ãŒãã¯ãã·ã§ã«/ bin / shãšåŒã°ããŸããããã¯å žåçãªæ»æè² è·ã§ãã fingerdããã°ã©ã ã¯ã«ãŒãã®äžã§èµ·åãããããæ»æäžã«ã·ã§ã«ãèµ·åãããšãã·ã§ã«ãã«ãŒãã®äžã§èµ·åããŸããã Fingerdã¯ãããã¯ãŒã¯ã«æ¥ç¶ããããããŒããŒãå ¥åããåãå ¥ããåæ§ã«åºåããããã¯ãŒã¯ã«éãè¿ããŸããããããã®äž¡æ¹ã¯ããšã¯ã¹ããã€ãã«ãã£ãŠåŒãèµ·ããããã·ã§ã«ãç¶æ¿ããŸãããããã¯ãã«ãŒãã·ã§ã«ãæ»æè ããªã¢ãŒãã§å©çšã§ããããã«ãªã£ãããšãæå³ããŸãã
getsïŒïŒã䜿çšããããšã¯ç°¡åã«åé¿ã§ãããšããäºå®ã«ãããããã-Morrisã¯ãŒã ã®é åžäžã§ãã£ãŠããgetsïŒïŒã䜿çšããªããã£ã³ã¬ãŒãããŒãžã§ã³ã¯å©çšã§ããŸããã§ãã-ä»ã®Cã³ã³ããŒãã³ãã¯ç¡èŠããã®ãããé£ããããšã©ãŒãå°ãªããããŸãããåé¡ã®å žåçãªåå ã¯ãCã§ã®æåååŠçã§ããåè¿°ã®åäœïŒãŒããã€ãã§åæ¢ïŒã¯ãCã®æååã®åäœã«æ»ããŸããCã§ã¯ãæååã¯ãŒããã€ãã§çµäºããæåã·ãŒã±ã³ã¹ã§ãã Cã«ã¯ãæååãæäœããããã®äžé£ã®é¢æ°ããããŸããããããæè¯ã®äŸã¯strcpyïŒïŒãããå Žæããå¥ã®å Žæã«æååãã³ããŒããããšããããŠstrcatïŒïŒã§ãããããœãŒã¹è¡ãå®å ã®åŸã«æ¿å ¥ããŸãããããã®é¢æ°ã«ã¯ãå®å ãããã¡ãµã€ãºãã©ã¡ãŒã¿ã¯ãããŸãããäž¡æ¹ãNULLã«ééãããŸã§ãœãŒã¹ããç¡éã«æ¥œããèªã¿ãå®å ãããã¡ãæºããããããæ°æ¥œã«ãã£ã±ãã«ããŸãã
Cã®æååé¢æ°ã«ãããã¡ãµã€ãºãã©ã¡ãŒã¿ãããå Žåã§ãããšã©ãŒãšãªãŒããŒãããŒãåŒãèµ·ããæ¹æ³ã§ãããå®è£ ããŸãã Cã«ã¯ãstrncatïŒïŒããã³strncpyïŒïŒãšåŒã°ãããããã€ãã®é¢é£ããé¢æ°strcatïŒïŒããã³strcpy ïŒïŒããããŸããæçŽnãããã®é¢æ°ã®ååã®æå³ã¯ãäœããã®æ¹æ³ã§ãã©ã¡ãŒã¿ãŒãšããŠãµã€ãºãåãããšã§ãããã ããnã¯ãå€ãã®çŽ æŽãªããã°ã©ããŒã®èãæ¹ã¯ç°ãªããŸãããæžã蟌ãŸãããããã¡ãŒã®ãµã€ãºã§ã¯ãªãããœãŒã¹ããèªã¿åãæåæ°ã§ãããœãŒã¹ã®æåããªããªã£ãå ŽåïŒã€ãŸãããŒããã€ãã«éããå ŽåïŒãstrncpyïŒïŒããã³strncatïŒïŒã¯æ®ãããŒãã§åããŸãããããã®é¢æ°ã«ã¯ãå®å ã®å®éã®ãµã€ãºããã§ãã¯ãããã®ã¯ãããŸããã
getsïŒïŒãšã¯ç°ãªãããããã®é¢æ°ã¯å®å šãªæ¹æ³ã§äœ¿çšã§ããŸãããããã¯ç°¡åã§ã¯ãããŸããã C ++ããã³Objective-Cã«ã¯ããããã®Cé¢æ°ã®ããåªãã代æ¿æ段ããããæååã®æäœãç°¡åãã€å®å šã«ãªããŸãããäžäœäºææ§ã®ããã«Cé¢æ°ããµããŒããããŠããŸãã
ããã«ããããã¯Cèšèªã®åºæ¬çãªæ¬ é¥ãä¿æããŸãããããã¡ã¯ãµã€ãºãç¥ãããèšèªã¯ãããã¡ã§å®è¡ãããèªã¿åããšæžã蟌ã¿ããã§ãã¯ããããªãŒããŒãããŒãèš±å¯ããŸãããã®åäœã«ãããOpenSSLã®æè¿ã®Heartbleedãã°ãçºçããŸãããããã¯ãªãŒããŒãããŒã§ã¯ãªããOpenSSLã®Cã³ãŒãããããã¡ã«å«ãŸããŠãã以äžã®èªã¿åããè©Šã¿ãŠãæ å ±ãããŒãžããããšãããšãã®åèªã¿åãã§ãã
ç©Žããã
ãã¡ããã人é¡ã¯ãèªã¿åããããã¡ãšæžã蟌ã¿ãããã¡ããã§ãã¯ããå€ãã®èšèªãéçºããŠããããªãŒããŒãããŒãé²ããŸãã MozillaããµããŒãããRustãªã©ã®ã³ã³ãã€ã«ãããèšèªãJavaã.NETãªã©ã®ã»ãã¥ã¢ã©ã³ã¿ã€ã ãPythonãJavaScriptãLuaãPerlãªã©ã®ã»ãšãã©ãã¹ãŠã®ã¹ã¯ãªããèšèªã¯ãã®åé¡ã®åœ±é¿ãåããŸããïŒãã ãã.NETéçºè ã¯æ瀺çã«ä¿è·ãç¡å¹ã«ããŠå ¬éã§ããŸãïŒèªåã¯ãã°ã®ããã§ãããããã¯å人çãªéžæã§ãïŒã
ãããã¡ãªãŒããŒãããŒãåŒãç¶ãã»ãã¥ãªãã£ç°å¢ã®äžéšã§ãããšããäºå®ã¯ãCã®äººæ°ã瀺åããŠããŸããããã®çç±ã®1ã€ã¯ããã¡ããã倧éã®ã¬ã¬ã·ãŒã³ãŒãã§ããäžçã«ã¯ããã¹ãŠã®äž»èŠãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã«ãŒãã«ãOpenSSLãªã©ã®äžè¬çãªã©ã€ãã©ãªãªã©ãèšå€§ãªéã®Cã³ãŒãããããŸããéçºè ãCïŒã®ãããªå®å šãªèšèªã䜿çšãããå Žåã§ããCã§èšè¿°ããããµãŒãããŒãã£ã©ã€ãã©ãªã«äŸåããŠããå ŽåããããŸãã
Cãç¶ç¶ããŠäœ¿çšãããã1ã€ã®çç±ã¯ããã©ãŒãã³ã¹ã§ããããã®ã¢ãããŒãã®æå³ã¯å¿ ãããæ確ã§ã¯ãããŸãããã³ã³ãã€ã«ãããCããã³C ++ã¯éåžžãé«éãªå®è¡å¯èœã³ãŒããçæããããšã¯äºå®ã§ãããå Žåã«ãã£ãŠã¯ããã¯éåžžã«éèŠã§ããããããç§ãã¡ã®å€ãã«ãšã£ãŠãããã»ããµã¯ã»ãšãã©ã®æéã¢ã€ãã«ç¶æ ã§ããããšãã°ããã©ãŠã¶ã®ããã©ãŒãã³ã¹ã®10ïŒ ãç ç²ã«ããããšãã§ããŠããåæã«ãããã¡ãªãŒããŒãããŒã®äžå¯èœæ§ã®éã®ä¿èšŒãååŸã§ããå Žåãããã³ãã®ä»ã®äžè¬çãªããŒã«ã¯ããããæªã亀æã§ã¯ãªããšå€æããå¯èœæ§ããããŸãããã®ãããªãã©ãŠã¶ãæ¥ãã§äœæãã人ã¯èª°ãããŸããã
ãã¹ãŠã«ãããããããCã®ä»²éã¯ã©ãã«ãè¡ããªãããããã¡ãªãŒããŒãããŒãåæ§ã§ãã
ãã®çš®ã®ãšã©ãŒãé²ãããã«ãããã€ãã®æé ãåãããŠããŸããéçºäžã«ãç¹å¥ãªããŒã«ã䜿çšããŠãœãŒã¹ã³ãŒããšå®è¡äžã®ããã°ã©ã ãåæãããããã®ãã°ããªãªãŒã¹ã«å¿ã³å¯ãåã«å±éºãªæ§é ãŸãã¯ãªãŒããŒãããŒãšã©ãŒãæ€åºããããšãã§ããŸããAddressSanitizerãªã©ã®æ°ããããŒã«ãšValgrindã®ãããªå€ãããŒã«ã¯ããã®ãããªæ©èœãæäŸããŸãã
ãã ãããããã®ããŒã«ã¯äž¡æ¹ãšãç©æ¥µçãªéçºè ã®ä»å ¥ãå¿ èŠãšããŸããã€ãŸãããã¹ãŠã®ããã°ã©ã ããããã䜿çšããããã§ã¯ãããŸããããããã¡ãªãŒããŒãããŒãçºçããå Žåã®ãããã¡ãªãŒããŒãããŒã®å±éºæ§ãæžããããšãç®çãšããã·ã¹ãã ä¿è·ã¯ãããå€ãã®ç°ãªããœãããŠã§ã¢ãä¿è·ã§ããŸãããããç解ããŠããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšã³ã³ãã€ã©ã®éçºè ã¯ããããã®è匱æ§ã®æªçšãè€éã«ããå€ãã®ã¡ã«ããºã ãå®è£ ããŠããŸãã
ãããã®ã·ã¹ãã ã®äžéšã¯ãç¹å®ã®æ»æãè€éã«ããããšãç®çãšããŠããŸãã Linuxçšã®ãããã»ããã®1ã€ã¯ãã¢ãã¬ã¹ã«å°ãªããšã1ã€ã®ãŒããã€ããå«ãŸããããã«ããã¹ãŠã®ã·ã¹ãã ã©ã€ãã©ãªãäžäœã¢ãã¬ã¹ã«ããŒããããããã«ããŸããããã«ãããCã§æåååŠçãå©çšãããªãŒããŒãããŒã§ã®äœ¿çšãéåžžã«è€éã«ãªããŸãã
ä»ã®ææžçã¯ããäžè¬çã§ããå€ãã®ã³ã³ãã€ã©ã«ã¯ãããçš®ã®ã¹ã¿ãã¯ä¿è·ããããŸããå®è¡æ®µéã§æ±ºå®ãããå€ã¯ãã«ããªã¢ãšåŒã°ããæ»ãã¢ãã¬ã¹ã®é£ã®ã¹ã¿ãã¯ã®æåŸã«æžã蟌ãŸããŸããåé¢æ°ã®æåŸã§ããã®å€ã¯returnã¹ããŒãã¡ã³ããå®è¡ããåã«ãã§ãã¯ãããŸããã«ããªã¢ã®å€ãå€æŽãããå ŽåïŒãªãŒããŒãããŒäžã®äžæžãã«ããïŒãããã°ã©ã ã¯ç¶è¡ããã«çŽã¡ã«ã¯ã©ãã·ã¥ããŸãã
ããããæãéèŠãªã»ãã¥ãªãã£æ©èœã¯ãW ^ XïŒãæä»çæžã蟌ã¿ãŸãã¯å®è¡ãæžã蟌ã¿ïŒãDEPïŒãããŒã¿å®è¡é²æ¢ãïŒãNXïŒãXecuteãªããïŒãXDïŒãeXecuteç¡å¹åãïŒãEVP ïŒAMDåºæã®çšèªã§ããã匷åããããŠã€ã«ã¹ä¿è·ãïŒãXNïŒãeXecute NeverãïŒããããããã®ä»ãååã¯ã·ã³ãã«ã§ãããããã®ã·ã¹ãã ã¯ãã¡ã¢ãªãã©ã€ãããŠã³ïŒãããã¡ãŒã«é©ããïŒãšå®è¡å¯èœïŒã©ã€ãã©ãªããã³ããã°ã©ã ã³ãŒãïŒããã ãäž¡æ¹åæã«ã§ã¯ãªããããæ»æè ããããã¡ããªãŒããŒãããŒãããŠãªã¿ãŒã³ã¢ãã¬ã¹ãå¶åŸ¡ã§ããå Žåã§ããããã»ããµã¯shellkãå®è¡ããŸããodã
ããªãããããåŒã¶ãã®ã¯äœã§ããããã¯æè³ãå¿ èŠãšããªãã®ã§ããããéèŠãªã¡ã«ããºã ã§ãããã®ã¢ãããŒãã¯ãä»®æ³ã¡ã¢ãªã®ããŒããŠã§ã¢ãµããŒãã¡ã«ããºã ã®äžéšã§ãããããããã»ããµã«çµã¿èŸŒãŸããä¿è·æ段ã䜿çšããŸãã
åè¿°ã®ããã«ãä»®æ³ã¡ã¢ãªã¢ãŒãã§ã¯ãåããã»ã¹ã¯ç¬èªã®ãã©ã€ããŒãã¡ã¢ãªã¢ãã¬ã¹ã®ã»ãããåãåããŸãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšããã»ããµã¯ãä»®æ³ã¢ãã¬ã¹ãšä»ã®äœãã®æ¯çãå ±åã§ãµããŒãããŸããä»®æ³ã¢ãã¬ã¹ãç©çã¡ã¢ãªã«ããããããããšãããã°ããã£ã¹ã¯äžã®ãã¡ã€ã«ã®äžéšã«ããããããããšãããã°ãã©ãã«ããªãããšããããŸããåã«å²ãåœãŠãããŠããªãããã§ãããã®ãããã³ã°ã¯ãã现ãã§ãéåžžãããŒãžãšåŒã°ãã4096ãã€ãã®éšåã§çºçããŸãã
衚瀺ã«äœ¿çšãããããŒã¿æ§é ã«ã¯ãåããŒãžã®å ŽæïŒç©çã¡ã¢ãªããã£ã¹ã¯ãã©ãã«ããããŸããïŒã ãã§ãªãããŸããéåžžãããŒãžã®ã»ãã¥ãªãã£ãå®çŸ©ãã3ã€ã®ãããïŒããŒãžãèªã¿åãå¯èœãæžã蟌ã¿å¯èœãââå®è¡æžã¿ãã©ããïŒãå«ãŸããŸãããã®ãããªä¿è·ã«ãããã¹ã¿ãã¯ãªã©ã®ããŒã¿ã«äœ¿çšãããããã»ã¹ã¡ã¢ãªé åã¯ãèªã¿åãããã³æžã蟌ã¿çšã«ããŒã¯ã§ããŸãããå®è¡ã§ããŸããã
NXã®èå³æ·±ãç¹ã®1ã€ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãä¿è·ããµããŒããããã®ã«æŽæ°ããã ãã§ãæ¢åã®ããã°ã©ã ã«é¡åçã«é©çšã§ããããšã§ããããã°ã©ã ã§åé¡ãçºçããå ŽåããããŸãã Javaããã³.NETã§äœ¿çšãããJITïŒJust-in-timeïŒã³ã³ãã€ã©ã¯ãå®è¡æã«ã¡ã¢ãªã«å®è¡å¯èœã³ãŒããçæãããããæžã蟌ã¿ããã³å®è¡å¯èœãªã¡ã¢ãªãå¿ èŠã§ãïŒãã ãããããã®ããããã£ã®åææ§ã¯å¿ èŠãããŸããïŒã NXããŸã ãªãå Žåã¯ãèªã¿åãå¯èœãªä»»æã®ã¡ã¢ãªããã³ãŒããå®è¡ã§ããããããã®ãããªJITã³ã³ãã€ã©ã®ç¹å¥ãªèªã¿åã/æžã蟌ã¿ãããã¡ã«åé¡ã¯ãããŸããã§ããã NXã®ç»å Žã«ãããã¡ã¢ãªä¿è·ãèªã¿åã/æžã蟌ã¿ããèªã¿åã/å®è¡ã«å€æŽãããããšã確èªããå¿ èŠããããŸãã
NXã®ãããªãã®ã®å¿ èŠæ§ã¯ãç¹ã«Microsoftã«ãšã£ãŠæããã§ããã 2000幎代åé ã2ã€ã®ã¯ãŒã ãã³ãŒãã»ãã¥ãªãã£ã«æ·±å»ãªåé¡ãæ±ããŠããããšãæããã«ããŸããã2001幎7æã«Microsoft IIS WebãµãŒããŒã§Windows 2000ãå®è¡ããŠããå°ãªããšã359,000ã·ã¹ãã ã«ææããCode Redãšã75,000以äžã®ã·ã¹ãã ã«ææããSQL Slammer 2003幎1æã«Microsoft SQL Serverã䜿çšããŸããããããã®ã±ãŒã¹ã¯è©å€ãããæã¡ãŸããã
äž¡æ¹ã®ã¯ãŒã ã¯ã¹ã¿ãã¯ãããã¡ãªãŒããŒãããŒãæªçšããMorrisã¯ãŒã ããããããã13幎åŸãš15幎åŸã«åºçŸããã«ãããããããæäœæ¹æ³ãã»ãŒåãã ã£ãããšã¯é©ãã¹ãããšã§ãããšã¯ã¹ããã€ãã®è² è·ã¯ã¹ã¿ãã¯ããŒã¹ã®ãããã¡ã«çœ®ããããªã¿ãŒã³ã¢ãã¬ã¹ãæžãçŽããŸããïŒããããªéãã¯ãäž¡æ¹ã®ã¯ãŒã ãã¹ããªã³ã°ããŒãæ¹åŒã䜿çšããããšã§ããçŽæ¥ã¹ã¿ãã¯ã¢ãã¬ã¹ã®ä»£ããã«ãã¹ã¿ãã¯ã«å¶åŸ¡ãæ»ãåœä»€ã®ã¢ãã¬ã¹ããªã¿ãŒã³ã¢ãã¬ã¹ã«æžã蟌ãŸããŸããïŒã
åœç¶ããããã®ã¯ãŒã ã¯ä»ã®åéã§ããé«åºŠã§ããã Code Redã®ããŒãã¯ãåãªãèªå·±è€è£œã§ã¯ãããŸããã§ããã圌女ã¯WebããŒãžãæ¹ããããDoSæ»æãè©Šã¿ãŸããã SQL Slammerã¯ãææãããã·ã³ã«çè·¡ãæ®ããã«ããããã¯ãŒã¯äžã®ææãšé åžã®æ°ããã¿ãŒã²ãããæ€çŽ¢ããããã«å¿ èŠãªãã¹ãŠãå®è¡ããŸããããã·ã³ãåèµ·åããŸã-ããã«ã¯ãããŸãããã©ã¡ãã®ã¯ãŒã ãã€ã³ã¿ãŒãããã§åäœããŸãããããã¯ãã¢ãªã¹ã¯ãŒã ãåºãã£ãã¯ãŒã ãããäœåã倧ããã£ããããæææ°ã¯ã¯ããã«å€ããªããŸããã
ãã ããäž»ãªåé¡-ç°¡åã«æªçšãããã¹ã¿ãã¯ãããã¡ãªãŒããŒãããŒ-ã¯åããŸãŸã§ãããããã®ã¯ãŒã ã¯èŠåºãã«ç»å Žããå€ãã®çš®é¡ã®Windowsãã€ã³ã¿ãŒãããäžã®ãµãŒããŒãšããŠäœ¿çšããå¯èœæ§ãçã£ãŠããŸããããã€ã¯ããœããã®çãã¯ãã»ãã¥ãªãã£ã«ã€ããŠçå£ã«èãå§ããããšã§ããã Windows XP Service Pack 2ã¯æåã®ã»ãã¥ãªãã£ã€ã³ã¹ããŒã«ã§ããããœãããŠã§ã¢ãã¡ã€ã¢ãŠã©ãŒã«ã®è¿œå ãããŒã«ããŒãšãã©ã°ã€ã³ã®ãµã€ã¬ã³ãã€ã³ã¹ããŒã«ã劚ããInternet Explorerã®å€æŽãNXã®ãµããŒããªã©ãããã€ãã®ãœãããŠã§ã¢ã®å€æŽãè¡ãããŸããã
NX察å¿ããŒããŠã§ã¢ã¯ã2004幎é ã«IntelãPrescott Pentium 4ãå°å ¥ãããšãã«ç»å Žãå§ããWindows XP SP2以éãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãµããŒããäžè¬çã«ãªããŸãããWindows 8ã§ã¯ãNXã®å®è¡æ¹æ³ãããããªãããã»ããµã®ãµããŒããæåŠããŠããã®ç¬éãããã«åŒ·å¶ããããšã«ããŸããã
NXã®åŸã®åºæ¥äº
NXãµããŒãã®æ®åã«ããããããããããã¡ãªãŒããŒãããŒã¯äŸç¶ãšããŠç·æ¥ã®æ å ±ã»ãã¥ãªãã£åé¡ã§ãããã®çç±ã¯ãNXããã€ãã¹ããå€ãã®æ¹æ³ã®éçºã§ãã
ãããã®æåã®ãã®ã¯ãäžèšã®ã¹ããªã³ã°ããŒãã«é¡äŒŒããŠãããå¥ã®ã©ã€ãã©ãªãŸãã¯å®è¡å¯èœãã¡ã€ã«ã«ããåœä»€ãä»ããŠã¹ã¿ãã¯ãããã¡å ã®ã·ã§ã«ã³ãŒãã«å¶åŸ¡ã転éããŸããæ»æè ã¯ãå¶åŸ¡ãã¹ã¿ãã¯ã«çŽæ¥è»¢éããå®è¡å¯èœã³ãŒãã®ãã©ã°ã¡ã³ããæ¢ã代ããã«ãäœãæçšãªããšãè¡ããã©ã°ã¡ã³ããèŠã€ããŸãã
ããããããã®åœ¹å²ã®æé©ãªåè£ã¯ãUnixé¢æ°ã·ã¹ãã ïŒïŒã§ããã 1ã€ã®ãã©ã¡ãŒã¿ãŒãå¿ èŠã§ããå®è¡ããã³ãã³ããè¡šãæååã®ã¢ãã¬ã¹ã§ããéåžžããã®ãã©ã¡ãŒã¿ãŒã¯ã¹ã¿ãã¯ãä»ããŠæž¡ãããŸããæ»æè ã¯å¿ èŠãªã³ãã³ããäœæããããããªãŒããŒãããŒãããããã¡ãŒã«å ¥ããããšãã§ããŸããïŒåŸæ¥ïŒã¡ã¢ãªå ã®ãªããžã§ã¯ãã®å Žæã¯å€ãããªãããããã®è¡ã®ã¢ãã¬ã¹ãããã£ãŠãããæ»æäžã«ã¹ã¿ãã¯ã«ããã·ã¥ã§ããŸãããã®å Žåãæžãæããããæ»ãã¢ãã¬ã¹ã¯ããããã¡å ã®ã¢ãã¬ã¹ã瀺ããŠããŸãããsystemïŒïŒé¢æ°ãæããŸãããªãŒããŒãããŒãçºçããããé¢æ°ãçµäºãããšãåŒã³åºãå ã®é¢æ°ã«æ»ã代ããã«systemïŒïŒãèµ·åããæ»æè ã«ãã£ãŠæå®ãããã³ãã³ããå®è¡ãããŸãã
ããã¯ãNXãåé¿ããæ¹æ³ã§ããæ©èœã·ã¹ãã ïŒïŒã·ã¹ãã ã©ã€ãã©ãªã®äžéšã§ããããšã¯æ¢ã«å®è¡å¯èœã§ãããã®ãšã¯ã¹ããã€ãã§ã¯ãã¹ã¿ãã¯ããã³ãŒããå®è¡ããå¿ èŠã¯ãããŸãããããããã³ãã³ããèªãã ãã§ãããã®ææ³ã¯ãreturn-to-libcãïŒlibcã«æ»ããã·ã¹ãã ïŒïŒãå«ãå€ãã®äž»èŠãªæ©èœãå«ãUnixã©ã€ãã©ãªã§ãããéåžžãã¹ãŠã®Unixããã»ã¹ã«ããŒããããããããã®ãããªäœ¿çšã«é©ããã¿ãŒã²ããã«ãªããŸãïŒ 1997幎ããã·ã¢ã®æ å ±ã»ãã¥ãªãã£ã®å°é家ã§ããSolar Designerã
ãã®ææ³ã¯äŸ¿å©ã§ãããå¶éããããŸããå€ãã®å Žåãé¢æ°ã¯ã¹ã¿ãã¯ããã§ã¯ãªããã¬ãžã¹ã¿ããåŒæ°ãåãåããŸããå®è¡ã®ããã«ã³ãã³ãã転éããã®ã¯äŸ¿å©ã§ãããå€ãã®å Žåããããã®æããªãŒããå«ãŸããŠãããããã¯å€§ããªé害ã§ããããã«ããã®æ¹æ³ã§äžé£ã®ç°ãªãåŒã³åºããæ§æããã®ã¯ç°¡åã§ã¯ãããŸããã1ã€ã§ã¯ãªãè€æ°ã®ãªã¿ãŒã³ã¢ãã¬ã¹ãç»é²ããããšã¯å¯èœã§ããããªã¿ãŒã³å€ãŸãã¯ãã®ä»ã®ãã®ã䜿çšããŠåŒæ°ã®é åºãå€æŽããæ¹æ³ã¯ãããŸããã
é·å¹Žã«ãããããããã®å¶éãåé¿ããããã«ãlibcãžã®åŸ©åž°ãäžè¬åãããŠããŸããã 2001幎ã®çµããã«ããã®ã¡ãœããã®ããã€ãã®æ¡åŒµãªãã·ã§ã³ãææžåãããŸãããè€æ°åŒã³åºãã®å¯èœæ§ãšãŒããã€ãåé¡ã®è§£æ±ºçã§ãã ãããã®åé¡ã®ã»ãšãã©ã解決ããããè€éãªæ¹æ³ã¯ã 2007幎ã«æ£åŒã«èšè¿°ãããŸããïŒãªã¿ãŒã³æåããã°ã©ãã³ã°ïŒROPããªã¿ãŒã³æåããã°ã©ãã³ã°ïŒã
return-to-libcããã³springboardãšåãåçã䜿çšããŸãããããäžè¬åãããŠããŸãã ã¹ããªã³ã°ããŒããå®è¡ããããã¡å ã®ã·ã§ã«ã³ãŒãã«è»¢éããããã«åäžã®ã³ãŒãã䜿çšããå ŽåãROPã¯å ã®åºçç©ã§ãã¬ãžã§ããããšåŒã°ããå€ãã®ã³ãŒãã䜿çšããŸãã åã¬ãžã§ããã¯ç¹å®ã®ãã¿ãŒã³ã«åŸããŸããç¹å®ã®æäœïŒã¬ãžã¹ã¿ãžã®å€ã®æžã蟌ã¿ãã¡ã¢ãªãžã®æžã蟌ã¿ãã¬ãžã¹ã¿ã®è¿œå ãªã©ïŒãå®è¡ããåŸããªã¿ãŒã³ã³ãã³ããå®è¡ããŸãã x86ãã¹ããªã³ã°ããŒãã«é©ãããã®ã«ãããŸãã«ãã®ç¹æ§ãããã§æ©èœããŸãã ããã»ã¹ã¡ã¢ãªã«èªã¿èŸŒãŸããã·ã¹ãã ã©ã€ãã©ãªã«ã¯ããã¢ã¯ã·ã§ã³ãšãªã¿ãŒã³ããšããŠè§£éã§ããæ°çŸã®ã·ãŒã±ã³ã¹ãå«ãŸããŠããŸããããã¯ãROPæ»æã«äœ¿çšã§ããããšãæå³ããŸãã
ã¬ãžã§ãããåäžã®ãŠãããã«çµåããã«ã¯ããããã¡ãªãŒããŒãããŒäžã«ã¹ã¿ãã¯ã«æžã蟌ãŸããé·ãäžé£ã®ãªã¿ãŒã³ã¢ãã¬ã¹ïŒããã³æçšã§å¿ èŠãªããŒã¿ïŒã䜿çšãããŸãã æ»ãåœä»€ã¯ã¬ãžã§ããããã¬ãžã§ããã«ãžã£ã³ãããŸãããããã»ããµã¯é¢æ°ãåŒã³åºãããšã¯ãã£ãã«ãªãïŒãŸãã¯ãŸã£ããããªãïŒ ããé¢æ°ããã¯æ»ããŸãã èå³æ·±ãããšã«ãå°ãªããšãx86ã§ã¯ãæçšãªã¬ãžã§ããã®æ°ãšçš®é¡ãå€ããæ»æè ã¯æåéãäœã§ãã§ããŸãã ç¹å¥ãªæ¹æ³ã§äœ¿çšããããã®x86ã®ãµãã»ããã¯ãå€ãã®å Žåãã¥ãŒãªã³ã°å®å šã§ãïŒãã ããæ©èœã®å šç¯å²ã¯ãããã°ã©ã ã«ãã£ãŠããŒããããã©ã€ãã©ãªããããã£ãŠå©çšå¯èœãªã¬ãžã§ããã®ãªã¹ãã«äŸåããŸãïŒã
return-to-libcãšåæ§ã«ãå®éã«å®è¡å¯èœãªã³ãŒãã¯ãã¹ãŠã·ã¹ãã ã©ã€ãã©ãªããååŸããããããNXã®ãããªä¿è·ã¯åœ¹ã«ç«ã¡ãŸããã ãã®ã¢ãããŒãã®åªããæè»æ§ã¯ããšã¯ã¹ããã€ãããäŸãã°ãã¬ãžââã¹ã¿ãŒãä»ããŠåŒæ°ãåãé¢æ°ãåŒã³åºããä»ã®é¢æ°ã®æ»ãå€ã䜿çšãããªã©ãlibcã«æ»ãã·ãŒã±ã³ã¹ã§æŽçããã®ãå°é£ãªããšãè¡ããããšãæå³ããŸãã
ROPæ»æã®è² è·ã¯ç°ãªããŸãã ããã¯ãã·ã§ã«ïŒã·ã§ã«ãžã®ã¢ã¯ã»ã¹ïŒãååŸããåçŽãªã³ãŒãã§ããå ŽåããããŸãã ãã1ã€ã®äžè¬çãªãªãã·ã§ã³ã¯ãROPã䜿çšããŠã·ã¹ãã é¢æ°ãåŒã³åºããã¡ã¢ãªããŒãžã®NXãã©ã¡ãŒã¿ãŒãå€æŽããŠãæžã蟌ã¿æžã¿ããå®è¡å¯èœã«å€æŽããããšã§ãã ããã«ãããæ»æè ã¯éåžžã®éROPããŒãã䜿çšã§ããŸãã
ã©ã³ãã å
NXã®ãã®åŒ±ç¹ã¯å€ãããç¥ãããŠããããã®ã¿ã€ãã®ãã¿ãŒã³ãæªçšããŠããŸããæ»æè ã¯ã¡ã¢ãªå ã®ã¹ã¿ãã¯ããã³ã·ã¹ãã ã©ã€ãã©ãªã®ã¢ãã¬ã¹ãäºåã«ç¥ã£ãŠããŸãã ãã¹ãŠã¯ãã®ç¥èã«åºã¥ããŠãããããæãããªè§£æ±ºçã¯æ»æè ãããã®ç¥èã奪ãããšã§ãã ããã¯ãŸãã«ASLRãè¡ãããšã§ãïŒã¢ãã¬ã¹ç©ºéã¬ã€ã¢ãŠãã®ã©ã³ãã åïŒãã¹ã¿ãã¯ã®äœçœ®ãšãã©ã€ãã©ãªããã³å®è¡å¯èœã³ãŒãã®ã¡ã¢ãªå ã®äœçœ®ãã©ã³ãã åããŸãã éåžžãããã°ã©ã ãèµ·åãåèµ·åããŸãã¯ãããã®çµã¿åããã®ãã³ã«å€æŽãããŸãã
éåžžã«äºæ³å€ãªããšã«ãæ»æè ã¯ROPã«å¿ èŠãªåœä»€ãã©ã°ã¡ã³ããã©ãã«ãããããŸãã¯å°ãªããšããªãŒããŒãããŒã¹ã¿ãã¯ãã©ãã«ããããç¥ããªãããããã®ç¶æ³ã¯æäœãèããè€éã«ããŸãã
ASLRã¯äž»ã«NXã«ä»å±ããŠãããlibcãŸãã¯ROPã«æ»ããªã©ã®å€§ããªããŒã«ãéããŸãã æ®å¿µãªãããNXãããééæ§ããããã«å£ããŸãã JITã³ã³ãã€ã©ãŒãä»ã®å€ãã®ç¹å®ã®ã±ãŒã¹ãšã¯å¥ã«ãNXã¯æ¢åã®ããã°ã©ã ã«å®å šã«çµ±åã§ããŸãã ASLRã«ã¯ããã«åé¡ããããŸããããã«ãããããã°ã©ã ãã©ã€ãã©ãªã¯ãããŒãå ã®ã¢ãã¬ã¹ã®å€ã«äŸåããããšãã§ããªããªããŸãã
ããšãã°ãWindowsã§ã¯ãããã¯DLLã«ãšã£ãŠå€§ããªåé¡ã§ã¯ãããŸããã Windowsã§ã¯ãDLLã¯åžžã«ç°ãªãã¢ãã¬ã¹ãžã®èªã¿èŸŒã¿ããµããŒãããŠããŸããããEXEã§ã¯ãããåé¡ã«ãªãå¯èœæ§ããããŸãã ASLR以åã¯ãEXEã¯åžžã«0x0040000ã§ããŒããããŠããããããã®äºå®ã«äŸåããŠããŸããã ASLRã§ã¯ãããã¯åœãŠã¯ãŸããŸããã æœåšçãªåé¡ãé²ãããã«ãWindowsã§ã¯ãããã©ã«ãã§ASLRãµããŒããæ瀺çã«æå®ããããã°ã©ã ãå¿ èŠã§ãã ãã ããã»ãã¥ãªãã£ææ³å®¶ã¯ãWindowsã«ãã¹ãŠã®ããã°ã©ã ãšã©ã€ãã©ãªã®ASLRãæå¹ã«ããããšã«ããããã®ããã©ã«ãã®åäœãå€æŽã§ããŸãã ãããåé¡ãåŒãèµ·ããããšã¯ã»ãšãã©ãããŸããã
x86äžã®Linuxã§ã¯ããã®ãã©ãããã©ãŒã ã§ASLRãå®è£ ããã¢ãããŒãã«ãããããã©ãŒãã³ã¹ãæ倧26ïŒ äœäžãããããç¶æ³ã¯ããããæªåããŸãã ããã«ããã®ã¢ãããŒãã§ã¯ ãASLRããµããŒãããããã°ã©ã ãšã©ã€ãã©ãªãã³ã³ãã€ã«ããå¿ èŠããããŸãã Windowsã®ããã«ã管çè ãASLRã匷å¶ããæ¹æ³ã¯ãããŸããïŒx64ã§ã¯ãããã©ãŒãã³ã¹ã®äœäžã¯ãŸã£ãããªããªããŸããããå€§å¹ ã«åæžãããŸãïŒ
ASLRãã¢ã¯ãã£ããªå ŽåãåçŽãªãããã³ã°ã«å¯Ÿãã匷åãªä¿è·ãæäŸããŸãã ãããã圌ã¯å®ç§ã§ã¯ãããŸããã ããšãã°ãå¶éã®1ã€ã¯ãååŸã§ããã©ã³ãã æ§ã®çšåºŠã§ããããã¯ã32ãããã·ã¹ãã ã§ç¹ã«é¡èã§ãã ã¢ãã¬ã¹ç©ºéã«ã¯40åã®ç°ãªãã¢ãã¬ã¹ããããŸããããããã®ãã¹ãŠãã©ã€ãã©ãªã®ããŒããã¹ã¿ãã¯ã«äœ¿çšã§ããããã§ã¯ãããŸããã
ããã«ã¯å€ãã®å¶éããããŸãã ãããã®ããã€ãã¯ç®çã®å¹ åºãã§ãã äžè¬ã«ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãããã»ã¹ã®ã¢ãã¬ã¹ç©ºéã®äžæ¹ã®ç«¯ã§ã©ã€ãã©ãªãäºãã«è¿ãã«ããŒãããããšãéžæããŠãã¢ããªã±ãŒã·ã§ã³ã§ã§ããã ãå€ãã®é£ç¶ãã空éãå©çšã§ããããã«ããŸãã 256 MBã®ã¡ã¢ãªããšã«1ã€ã®ã©ã€ãã©ãªãååŸããã®ã¯æãŸãããããŸãããã¡ã¢ãªã®æ倧åäœå²ãåœãŠã¯256 MBæªæºã«ãªããããã¢ããªã±ãŒã·ã§ã³ã倧éã®ããŒã¿ãåŠçããèœåãå¶éãããããã§ãã
éåžžãå®è¡å¯èœãã¡ã€ã«ãšã©ã€ãã©ãªã¯ãå°ãªããšãããŒãžã®å¢çã§å§ãŸãããã«ããŒãããå¿ èŠããããŸãã éåžžãããã¯ã4096ã§å²ãåããã¢ãã¬ã¹ã«ããŒãããå¿ èŠãããããšãæå³ããŸããç°ãªããã©ãããã©ãŒã ã«ã¯ãåæ§ã®ã¹ã¿ãã¯å¶éããããŸãã ããšãã°ãLinuxã¯16ã§å²ãåããã¢ãã¬ã¹ã§ã¹ã¿ãã¯ãéå§ããŸããã¡ã¢ãªå¶éã®ããã·ã¹ãã ã§ã¯ããã¹ãŠãé 眮ã§ããããã«ããããã«ãã©ã³ãã æ§ãããã«å¶éããªããã°ãªããªãå ŽåããããŸãã
çµæã¯ç°ãªããŸãããæ»æè ããããããå¯èœæ§ãé«ãå Žåã«ãæ£ããã¢ãã¬ã¹ãæšæž¬ã§ããå ŽåããããŸãã ç¶æ³ã«ãã£ãŠã¯ãäœã確çïŒããšãã°256ã®1ã€ïŒã§ãååãªå ŽåããããŸãã ã¯ã©ãã·ã¥ããããã»ã¹ãèªåçã«åèµ·åããWebãµãŒããŒãæ»æããå Žåã256ã®æ»æã®ãã¡255ãããã»ã¹ãã¯ã©ãã·ã¥ããããšã¯åé¡ã§ã¯ãããŸããã åèµ·åãããåè©Šè¡ã§ããŸãã
ãããã64ãããã·ã¹ãã ã§ã¯ãã¢ãã¬ã¹ç©ºéãéåžžã«å€§ããããããã®ãããªã¢ãããŒãã¯åœ¹ã«ç«ã¡ãŸããã æ»æè ã¯ã100äžåã«1åããŸãã¯10ååã«1åãããã£ã³ã¹ãæããªãå¯èœæ§ããããããã¯éèŠã§ã¯ãªãã»ã©ååã«å°ãããã®ã§ãã
ããšãã°ããã©ãŠã¶ãæ»æããã®ã¯æšæž¬ãèœäžã¯è¯ãæŠç¥ã§ã¯ãããŸããã æ»æè ã«ãã£ã³ã¹ãäžããããã ãã«ããŠãŒã¶ãŒãé£ç¶ããŠ256åãã©ãŠã¶ãåèµ·åããããšã¯ãããŸããã ãã®çµæãã¢ã¯ãã£ããªNXããã³ASLRãåããã·ã¹ãã ã§ã®ãã®ãããªè匱æ§ã®æªçšã¯ãæ¯æŽãªãã§ã¯å®è¡ã§ããŸããã
ãã®ãããªæ¯æŽã«ã¯ããã€ãã®çš®é¡ããããŸãã ãã©ãŠã¶ã§JavaScriptãŸãã¯Flashã䜿çšãããšïŒã©ã¡ãã«ãå®è¡å¯èœã³ãŒããçæããJITã³ã³ãã€ã©ãå«ãŸããŠããŸãïŒããã¡ããšèšèšãããå®è¡å¯èœã³ãŒãã§ã¡ã¢ãªãåããããšãã§ããŸãã ããã«ããã倧ããªçéžåž¯ã®ãããªãã®ãäœæãããŸããããã¯ããããŒãã¹ãã¬ãŒãïŒãããŒãã¹ãã¬ãŒãïŒãšåŒã°ããæè¡ã§ãã å¥ã®ã¢ãããŒããšããŠãã©ã€ãã©ãªã®ã¢ãã¬ã¹ãéããããã¡ã¢ãªå ã«ã¹ã¿ãã¯ãããããããã®2次çãªãã°ãèŠã€ããæ»æè ã«ROPã®ç¹å®ã®ãªã¿ãŒã³ã¢ãã¬ã¹ã»ãããäœæããã®ã«ååãªæ å ±ãäžããããšãã§ããŸãã
3çªç®ã®ã¢ãããŒãã¯ãã©ãŠã¶ã§ãäžè¬çã§ãããASLRã®æ¹æ³ãããããªãã©ã€ãã©ãªã䜿çšããŸãã Adobe PDFãã©ã°ã€ã³ãMicrosoft Officeãªã©ã®å€ãããŒãžã§ã³ã¯ASLRããµããŒãããŠããããWindowsã¯ããã©ã«ãã§ASLRã匷å¶ããŸããã æ»æè ããã®ãããªã©ã€ãã©ãªã®ããŒããåŒãèµ·ããå¯èœæ§ãããå ŽåïŒããšãã°ãé衚瀺ã®ãã©ãŠã¶ãã¬ãŒã ã«PDFãããŠã³ããŒãããããšã«ããïŒãASLRãå¿é ããå¿ èŠã¯ãªããªããŸãããROPç®çã§ãã®ã©ã€ãã©ãªã䜿çšããŸãã
çµããã®ãªãæŠäº
è匱æ§ãæªçšãã人ã ãšé²åŸ¡ãã人ã ã®éã«ã¯ã絶ãéãªãè»æ¡ç«¶äºããããŸãã ASLRãNXãªã©ã®åŒ·åãªé²åŸ¡ã·ã¹ãã ã¯æ°ŽæºãåŒãäžããæ¬ é¥ã®äœ¿çšãå°é£ã«ããŸãããããã®ãããã§ãåçŽãªãããã¡ãŒãªãŒããŒãããŒã®æ代ãæ®ããŸããããè³¢æãªæ»æè ã¯ç©Žã®çµã¿åãããèŠã€ããŠããããã®ä¿è·å¯Ÿçãåé¿ã§ããŸãã
ãšã¹ã«ã¬ãŒã·ã§ã³ã¯ç¶ããŸãã Microsoft EMET ïŒEnhanced Mitigation Experience ToolkitïŒã«ã¯ãããŒãã¹ãã¬ãŒãŸãã¯ROPãšã¯ã¹ããã€ãã®ç¹å®ã®éèŠãªæ©èœã®åŒã³åºããæ€åºã§ããäžé£ã®åå®éšçé²åŸ¡ãå«ãŸããŠããŸãã ããããç¶ç¶çãªããžã¿ã«æŠäºã§ã¯ããããã®ããªãã¯ã®ããã€ãã§ãããã§ã«æåããŠããŸãã ããã«ããããããã圹ã«ç«ããªããªãããšã¯ãããŸãã-è匱æ§ãæªçšããè€éãïŒããã³ãã®ããã®äŸ¡æ ŒïŒã¯ãå察çãé©çšããããã³ã«å¢å ããŸã-ããããããã¯çµ¶ãéãªãèŠæã®å¿ èŠæ§ãæãåºãããŸãã