ãã®ææ³ãç¿åŸããã«ã¯ãå°ãªããšãã«ãŒãã«ããŒã«ããã€ã¹ã®å€§ãŸããªæŠå¿µãå¿ èŠã§ãã ãã®èšäºã§ã¯ãããŒã«ã¹ãã¬ãŒæè¡ã®ã³ã³ããã¹ãã§éèŠãªå®è£ ã®è©³çŽ°ã®ã¿ã説æããããšããŸãã ã«ãŒãã«ããŒã«ã®ããã€ã¹ã¯ååã«ç 究ãããŠãããããããã«è©³çŽ°ãªç¥èãå¿ èŠãªå Žåã¯ãæ€çŽ¢ãµãŒãã¹ãŸãã¯èšäºã®æåŸã«ãããªã³ã¯ã«åãåãããŠãã ããã
ã«ãŒãã«ããŒã«æ§é ã®æŠèŠ
ã«ãŒãã«ã¡ã¢ãªããŒã«-ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã«ãŒãã«å ã§ã¡ã¢ãªã®å²ãåœãŠãèŠæ±ã§ããåäžã®å Žæã ã«ãŒãã«ã¢ãŒãã®ã¹ã¿ãã¯ã¯å°ãããé åã§ã¯ãªãããã€ãã®å€æ°ã®æ ŒçŽã«ã®ã¿é©ããŠããŸãã ãã©ã€ããŒã¯ã倧ããªããŒã¿æ§é ãŸãã¯æååãäœæããå¿ èŠãããå ŽåãããŸããŸãªã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãããšãã§ããŸãããæçµçã«ã¯ããŒã«ããã¡ã¢ãªã«ã¢ã¯ã»ã¹ããŸãã
ããŒã«ã«ã¯ããã€ãã®çš®é¡ããããŸããããããã¯ãã¹ãŠåãæ§é ãæã£ãŠããŸãïŒãã©ã€ããŒæ€èšŒãŠãŒãã£ãªãã£ã§äœ¿çšãããç¹å¥ãªããŒã«ïŒç¹å¥ãªããŒã«ïŒãé€ãïŒã åããŒã«ã«ã¯ãããŒã«èšè¿°åãšåŒã°ããå¶åŸ¡æ§é ããããŸãã ç¹ã«ãããŒã«ã®ç©ºãé åã圢æããããŒã«ã®ç©ºããããã¯ïŒãã£ã³ã¯ïŒã®ãªã¹ããæ ŒçŽããŸãã ããŒã«èªäœã¯ã¡ã¢ãªã®ããŒãžã§æ§æãããŸãã æšæºã®4ã¡ã¬ãã€ããŸãã¯å€§ããª2ã¡ã¬ãã€ãã«ããããšãã§ããŸãã 䜿çšãããããŒãžæ°ã¯åçã«èª¿æŽãããŸãã
ã«ãŒãã«ããŒã«ã®ããŒãžã¯ãç°ãªããµã€ãºã®ãã©ã°ã¡ã³ãïŒãããã¯ïŒãã£ã³ã¯ïŒïŒã«åå²ãããŸãã ã«ãŒãã«ã¢ãžã¥ãŒã«ãããŒã«ããã¡ã¢ãªã®å²ãåœãŠãèŠæ±ãããšãã«ãã«ãŒãã«ã¢ãžã¥ãŒã«ã«å²ãåœãŠãããã®ã¯ãããã¯ã§ãã
ãããã¯ã«ã¯æ¬¡ã®ã¡ã¿ããŒã¿ãå«ãŸããŸãã
- åã®ãµã€ãº-åã®ãããã¯ã®ãµã€ãºã
- ããŒã«ã€ã³ããã¯ã¹ã¯ãåãã¿ã€ãã®ããŒã«ãè€æ°ããç¶æ³ã§äœ¿çšãããŸãã ããšãã°ãã·ã¹ãã ã«ã¯è€æ°ã®ããŒãžããŒã«ããããŸãã ãã®ãã£ãŒã«ãã¯ããããã¯ãå±ããããŒã«ã決å®ããããã«äœ¿çšãããŸãã
- ãããã¯ãµã€ãº-çŸåšã®ãããã¯ã®ãµã€ãºã åã®ãµã€ãºãã£ãŒã«ããšåæ§ã«ããã®ãµã€ãºã¯æ¬¡ã®ããã«ãšã³ã³ãŒããããŸãã
ïŒãããã¯ããŒã¿ãµã€ãº+ããããŒãµã€ãº+ãããã¯ãå æããããã»ã¹ãžã®ãã€ã³ã¿ãŒã®ãªãã·ã§ã³ã®4ãã€ãïŒ>> 3ïŒãŸãã¯x64ã·ã¹ãã ã®å Žåã¯>> 4ïŒã - ããŒã«ã¿ã€ãã¯ãææžåãããŠããªãïŒïŒïŒããããã©ã°ã®ã»ããã§ãã
- TïŒè¿œè·¡ïŒïŒãããã¯ã¯ããã©ã€ããŒãã§ãã¯ãŠãŒãã£ãªãã£ã«ãã£ãŠè¿œè·¡ãããŸãã ãã®ãã©ã°ã¯ãããã°ã«äœ¿çšãããŸãã
- SïŒã»ãã·ã§ã³ïŒïŒãããã¯ã¯ã»ãã·ã§ã³ã®ããŒãžããŒã«ã«å±ãããŠãŒã¶ãŒåºæã®ã»ãã·ã§ã³ããŒã¿ã«ã¡ã¢ãªãå²ãåœãŠãããã«äœ¿çšãããŸãã
- QïŒã¯ã©ãŒã¿ïŒïŒãããã¯ã¯ã¯ã©ãŒã¿ç®¡çã·ã¹ãã ã«ç»é²ãããŠããŸãã ãã®ãã©ã°ã¯32ãããã·ã¹ãã ã«ã®ã¿é©çšãããŸãã èšå®ãããŠããå Žåããã®ãããã¯ãææããããã»ã¹ãžã®ãã€ã³ã¿ããããã¯ã®æåŸã«æžã蟌ãŸããŸãã
- UïŒäœ¿çšäžïŒïŒãããã¯ã¯çŸåšäœ¿çšäžã§ãã ã䜿çšæžã¿ãç¶æ ãšã¯ç°ãªãããããã¯ã¯è§£æŸã§ããŸããã€ãŸãããããã¯ããã¡ã¢ãªãå²ãåœãŠãããšãã§ããŸãã ãã®ãã©ã°ã¯ãWindows Vista以éã2çªç®ã®ãããã«ããããã以åã¯3çªç®ã®ãããã«ãããŸããã
- BïŒåºæ¬ããŒã«ïŒïŒãã®ãã£ãŒã«ãã¯ããããã¯ãå±ããåºæ¬ããŒã«ã決å®ããŸãã ããŒãžããŒã«ãšéããŒãžããŒã«ã®2ã€ã®åºæ¬çãªããŒã«ããããŸãã ãã³ããããŠããªããã®ã¯ãŒãã§ãšã³ã³ãŒãããããã³ãããããã®ã¯1ã§ãšã³ã³ãŒããããŸãã Windows Vistaããåã§ã¯ããã®ãã©ã°ã¯ïŒããŒã¹ããŒã«ã¿ã€ã+ 1ïŒãšããŠãšã³ã³ãŒããããŠããããã2ããããå æããŠããŸããã ããŒãžããŒã«ã®å Žåã¯0x10ãéããŒãžããŒã«ã®å Žåã¯0x1ã
- ããŒã«ã¿ã°ã¯ããããã°ã®ç®çã§äœ¿çšãããŸãã ã«ãŒãã«ã¢ãžã¥ãŒã«ã¯ããããã¯ãå±ãããµãã·ã¹ãã ãŸãã¯ãã©ã€ããŒãèå¥ãã4ã€ã®å°å·å¯èœãªæåã®çœ²åã瀺ããŸãã ããšãã°ãã¿ã°ãNtFsãã¯ããããã¯ãNTFS ntfs.sysãã¡ã€ã«ã·ã¹ãã ãã©ã€ããŒã«å±ããŠããããšãæå³ããŸãã
64ãããã·ã¹ãã ã§ã¯ããããã¯æ§é ã«ããã€ãã®éãããããŸãã ãŸããããããŒãã£ãŒã«ãã倧ãããªãã次ã«ããã®ãããã¯ã䜿çšããããã»ã¹ãžã®ãã€ã³ã¿ãŒãæã€8ãã€ããã£ãŒã«ãããããŸãã
ããŒã«å ã®ã¡ã¢ãªãå²ãåœãŠãããã®ååã®æŠèŠ
ããŒã«ã空ã§ãããšæ³åããŠãã ããã ã€ãŸããããã«ã¯ãŸã£ããå ŽæããããŸããã ã¡ã¢ãªãå²ãåœãŠãããšãããšïŒããšãã°ã0xFF0ãã€ãæªæºïŒãã¡ã¢ãªããŒãžãæåã«å²ãåœãŠããã次ã«ããŒãžã®å é ã«ãããããã¯ãå²ãåœãŠãããŸãã
ããã§ã2ã€ã®ãããã¯ãå²ãåœãŠãããŸãã-å²ãåœãŠããããããã¯ãšç©ºããããã¯ã§ãã 空ãã¡ã¢ãªã¯ããã®åŸã®ã¡ã¢ãªå²ãåœãŠæäœã§äœ¿çšã§ããŸãã ãã ãããã以éãããŒã«ã¢ãã±ãŒã¿ã¯ãå²ãåœãŠããããããã¯ãããŒãžã®æåŸãŸãã¯ãã®ããŒãžã®ç©ºãé åã«é 眮ããŸãã
ãããã¯ã®è§£æŸã«é¢ããŠã¯ã説æãããŠããããã»ã¹ã¯ãŸã£ããéã§ãã ãããã¯ã¯èªç±ã«ãªããé£æ¥ããŠããå Žåã¯1ã€ã®ãããã¯ã«ããŒãžãããŸãã
説æãããŠããç¶æ³ã¯æ¶ç©ºã®ãã®ã§ãããäŸãšããŠã®ã¿äœ¿çšãããŠããããšã«æ³šæããŠãã ãããå®éã«ã¯ãããŒã«ã¯ã«ãŒãã«ã¢ãžã¥ãŒã«ã§äœ¿çšã§ããããã«ãªããã£ãšåã«ã¡ã¢ãªããŒãžã§æºããããŸãã
ããŒã«ããã®ã¡ã¢ãªå²ãåœãŠã®å¶åŸ¡
ã«ãŒãã«ããŒã«ã¯è² è·ã®é«ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšã³ãã£ãã£ã§ããããšã«æ³šæããŠãã ããã ãŸã第äžã«ããããã¯ã«ãŒãã«ã®ããããçš®é¡ã®ãªããžã§ã¯ããšå éšããŒã¿æ§é ãäœæããããã«äœ¿çšãããŸãã ããã«ãå€ãã®ã·ã¹ãã ã³ãŒã«ã§ããŒã«ã䜿çšããŠããŠãŒã¶ãŒã¢ãŒããã©ã¡ãŒã¿ããããã¡ããŸãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãã©ã€ããŒãä»ããŠããŒããŠã§ã¢ããã·ã¹ãã ã³ãŒã«ãä»ããŠãœãããŠã§ã¢ãåžžã«ç¶æãããããã·ã¹ãã ã®ããŠã³ã¿ã€ã äžã§ãããŒã«ã®äœ¿çšé »åºŠãæŠç®ã§ããŸãã
é ããæ©ãããããŒã«ã¯æçåãããŸãã ããã¯ãç°ãªããµã€ãºã®ã¡ã¢ãªãããã¯ã®å²ãåœãŠãšå²ãåœãŠè§£é€ãç°ãªãé åºã§è¡ãããããã§ãã ãããã£ãŠãã¹ãã¬ãŒãšããçšèªã衚瀺ãããŸãã ããŒã«ããã¡ã¢ãªãé çªã«å²ãåœãŠãå Žåããããã¯ã¯é£ç¶ããŠããå¿ èŠã¯ãªããã»ãšãã©ã®å Žåãã¡ã¢ãªã®ç°ãªãéšåã«ãããŸãã ãããã£ãŠãã¡ã¢ãªãå¶åŸ¡ãããïŒèµ€ïŒãããã¯ã§æºãããšãå³åŽãããå·ŠåŽã«ç»åã衚瀺ãããå¯èœæ§ãé«ããªããŸãã
ãã ããæŸåã®ã³ã³ããã¹ãã§ã¯éèŠãªç¶æ³ããããŸãããã·ã§ãŒãã£ã³ã°ããããé»ãé åããªãå Žåãäœåãªã¹ãããã®ãªãçæ°ããé åãååŸããŸãã ãããŠãã®ç¬éããããã¹ãã¬ãŒãã©ã·ãã¯ãå¡ãã€ã¶ãã®ããéåžžã®ãã©ã·ã«å€ãããŸãã ãã®äºå®ã«ãããããŒã«ãšãã®ãç»åãã®åäœãå€§å¹ ã«å¶åŸ¡ã§ããŸãã éèŠãªã®ã¯å®å šãªå¶åŸ¡ã§ã¯ãããŸããããã®å Žåã§ããä»ã®èª°ããåžžã«å¥ã®è²ã®ãã¹ãã©ãã·ã¥ãã§ç§ãã¡ãé®ãããšãã§ããããããåçããå®å šã«ææããŠãããšããä¿èšŒã¯ãããŸããã
ããŒã«ã¹ãã¬ãŒã«äœ¿çšããããªããžã§ã¯ãã®çš®é¡ã«å¿ããŠãå¿ èŠãªæ°ã®ä»¥åã«äœæããããªããžã§ã¯ããåé€ããããšã«ããã空ããããã¯ããç¹å®ã®ãµã€ãºã®ãŠã£ã³ããŠãäœæããããšãã§ããŸãã ããããããŒã«ããã®ã¡ã¢ãªã®å²ãåœãŠãå¶åŸ¡ã§ããæãéèŠãªäºå®ã¯ãã¢ãã±ãŒã¿ãæ倧ã®ããã©ãŒãã³ã¹ãç®æããŠããããšã§ãã ããã»ããµãã£ãã·ã¥ãæãå¹ççã«äœ¿çšããããã«ãæåŸã«è§£æŸãããã¡ã¢ãªãããã¯ãæåã«å²ãåœãŠãããŸãã å²ãåœãŠããããããã¯ã®ã¢ãã¬ã¹ãæšæž¬ã§ããããããããå¶åŸ¡ãããå²ãåœãŠã®ãã€ã³ãã§ãã
ãã¡ããããããã¯ãµã€ãºãéèŠã§ãã ãããã£ãŠãæåã«è§£æŸããããããã¯ãããŠã£ã³ããŠãµã€ãºãèšç®ããå¿ èŠããããŸãã 0x20ãã€ããããŒã«ãããªããžã§ã¯ãã®ãµã€ãºã§0x315ãã€ãã®ãããã¯ãµã€ãºãéžæçã«å¶åŸ¡ããå Žåã¯ã0x315 / 0x20 =ïŒ0x18 + 1ïŒãããã¯ã解æŸããå¿ èŠããããŸãã ããã¯ç解ã§ãããšæããŸãã
ã«ãŒãã«ããŒã«ã¹ãã¬ãŒæè¡ã®äœ¿çšæ¹æ³ã«é¢ãã泚æäºé ïŒ
- ãªãã¬ãŒãã£ã³ã°ãã©ã€ããŒã䜿çšããŠããŒã«ããã¡ã¢ãªãå²ãåœãŠãå¯èœæ§ããªãå Žåã¯ãããŒã«ã¹ãã¬ãŒã®ãªããžã§ã¯ããšããŠãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãªããžã§ã¯ãã䜿çšããæ©äŒãåžžã«ãããŸãã å¥åŠãªããšã«ãOSãªããžã§ã¯ãã¯OSã«ãŒãã«ã«æ ŒçŽãããããããããã®ã¡ã¢ãªã¯ããŸããŸãªããŒã«ããå²ãåœãŠãããŸãã
- éããŒãžããŒã«ã«ã¯ãããã»ã¹ãã¹ã¬ãããã»ããã©ããã¥ãŒããã¯ã¹ãªã©ãæ ŒçŽãããŸãã
- ã¹ã¯ããããŒã«ã«ã¯ããã£ã¬ã¯ããªãªããžã§ã¯ããã¬ãžã¹ããªããŒãã»ã¯ã·ã§ã³ïŒãããããã¡ã€ã«ã®é¢é£ä»ããŸãã¯ãã¡ã€ã«ãããã³ã°ïŒãªã©ãå«ãŸããŸãã
- ã»ãã·ã§ã³ããŒã«ã«ã¯ãGDIããã³USERãµãã·ã¹ãã ã®ãªããžã§ã¯ãïŒãã¬ãããããã€ã¹ã³ã³ããã¹ãïŒDCïŒããã©ã·ãªã©ïŒãæ ŒçŽãããŸãã
- ããŒã«ããªããžã§ã¯ãã§æºããå§ãããŸã§ã«ãããã«ãããã¯ãå²ãåœãŠãããšãã§ããå€ãã®ã¡ã¢ãªããŒãžãå«ãŸããŸãã ãã ãããããã®ããŒãžã¯æçåãããŸãã å¶åŸ¡ããããããã¯ã§é£ç¶çã«åããŠã¹ããŒã¹ã確ä¿ããå¿ èŠããããããæåã«è¡ãå¿ èŠãããã®ã¯ãçŸåšã®ããŒãžã«ç©ºãã¹ããŒã¹ããªãããã«ããŒã«ããã¹ãã ãããããšã§ãã ãã®å Žåã«ã®ã¿ãæ°ããããŒãžã䜿çšå¯èœã«ãªããå¶åŸ¡ããããããã¯ã§é£ç¶ããŠæºããããšãã§ããŸãã ã€ãŸããå€ãã®ãªããžã§ã¯ããäœæããå¿ èŠããããŸãã
- å¿ èŠãªãŠã£ã³ããŠãµã€ãºãèšç®ãããšãã¯ããããã¯ããããŒã®ãµã€ãºã ãã§ãªãã32ãããã·ã¹ãã ã§ã¯æçµãµã€ãºã8ãã€ãã«ã64ãããã·ã¹ãã ã§ã¯16ãã€ãã«äžžããããããšãèæ ®ããŠãã ããã
- ãããã¯ã®å²ãåœãŠãå¶åŸ¡ã§ãããšããäºå®ã«ããããããããããã®çžå¯Ÿçãªäœçœ®ãäºæž¬ããããšã¯ããªãå°é£ã§ãã ãã ããããŒã«ã¹ãã¬ãŒã«OSãªããžã§ã¯ãã䜿çšããå ŽåãNtQuerySystemInformationïŒïŒé¢æ°ãšSystemExtendedHandleInformationãã©ã¡ãŒã¿ãŒã䜿çšããŠãèšè¿°åã«ãã£ãŠãªããžã§ã¯ãã®ã¢ãã¬ã¹ãèŠã€ããããšãã§ããŸãã 圌女ã«æäŸãããæ å ±ã¯ãããŒã«åŽé§ã®ç²ŸåºŠãåäžãããããã«å¿ èŠã§ãã
- ããŒã«ã«ã¹ãã¬ãŒãããšãã¯ãã©ã³ã¹ãä¿ã¡ãŸãã ãªããžã§ã¯ããéžæãããšãã«æ¬²åŒµãã«ãªããªãã§ãã ããã æããã«ãã·ã¹ãã ã®ã¡ã¢ãªãäžè¶³ããå Žåããããã¯ã®å²ãåœãŠãå¶åŸ¡ããããšã¯äžå¯èœã§ãã
- ã«ãŒãã«ããŒã«ã䜿çšãããšã¯ã¹ããã€ãã®ä¿¡é Œæ§ãé«ããããã®ç§Oneã®1ã€ã¯ãããŒã«ã¹ãã¬ãŒãå®è¡ããŠè匱æ§ãéå§ããã¹ã¬ããã®åªå 床ãäžããããšã§ãã ã¹ã¬ããã¯æ¬è³ªçã«ããŒã«ã¡ã¢ãªãåžžã«ç«¶åããŠãããããã·ã¹ãã å ã®ä»ã®ã¹ã¬ãããããé »ç¹ã«å®è¡ãããå¯èœæ§ãé«ããããšã«ãããããŒãã䜿çšããåªå é äœãäžãããšäŸ¿å©ã§ãã ããã«ããããã¯ããã¯ãããå šäœçã«ãªããŸãã ãŸããããŒã«ã¹ãã¬ãŒãšè匱æ§ã®éå§ã®éã®é 延ãèæ ®ã«å ¥ããŠãã ããããããå°ããã»ã©ãå¿ èŠãªãããã¯ã«é¥ãå¯èœæ§ãé«ããªããŸãã
VMware CVE 2013-1406
2æäžæ¬ã«ãVMware補åã®æŽæ°ã«é¢ããèå³æ·±ãæšå¥šäºé ããªãªãŒã¹ãããŸããã ãããããå€æãããšãæŽæ°ãããŠããªãã³ã³ããŒãã³ãã«è匱æ§ãååšããã¡ã€ã³OSãšã²ã¹ãOSã®äž¡æ¹ã§ããŒã«ã«æš©éãææ ŒãããŸããã ãã®ãããªããããããè匱æ§ã¯ç¡èŠã§ããŸããã
è匱ãªã³ã³ããŒãã³ãã¯vmci.sysã§ããã VMCIã¯ãä»®æ³ãã·ã³éä¿¡ã€ã³ã¿ãŒãã§ã€ã¹ã®ç¥ã§ãã ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãä»®æ³ãã·ã³ãšã¡ã€ã³OSéã®å¯Ÿè©±ã«äœ¿çšãããŸãã VMCIã¯ãvsocklib.dllã©ã€ãã©ãªã§Windowsãœã±ãããµãŒãã¹ãããã€ããŒãšããŠå®è£ ãããç¬èªã®ã¿ã€ãã®ãœã±ãããæäŸããŸãã vmci.sysãã©ã€ããŒã¯ãå¿ èŠãªæ©èœãå®è£ ããä»®æ³ããã€ã¹ãäœæããŸãã åžžã«ã¡ã€ã³OSã§å®è¡ãããŠããŸãã ã²ã¹ãã·ã¹ãã ã®å ŽåãVMCIãæ©èœããã«ã¯ãVMwareããŒã«ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ã¬ãã¥ãŒãæžããšããã¬ãã¥ãŒãæ¢åµå°èª¬ã«å€ããããã«ãè匱æ§ã®é«ã¬ãã«ã®ããžãã¯ã説æããããšã¯çŽ æŽãããããšã§ãã æ®å¿µãªããããã®å ŽåãVMCIã®å®è£ ã«é¢ããå ¬éæ å ±ãã»ãšãã©ãªããããããã¯æåããŸããã ãããããšã¯ã¹ããã€ãéçºè ã¯ããã«ã€ããŠå¿é ããŠããªããšæããŸãã å°ãªããšããã·ã¹ãã å šäœãã©ã®ããã«æ©èœããããåæããã®ã«å€ãã®æéãè²»ããããããå®çšçãªãšã¯ã¹ããã€ããååŸããæ¹ãæçã§ãã
PatchDiffã¯ãããããé©çšãã3ã€ã®æ©èœãæããã«ããŸããã ãããã¯ãã¹ãŠãåãIOCTLå¶åŸ¡ã³ãŒã0x8103208Cã®åŠçã«é¢é£ããŠããŸãã ã©ãããããã®åŠçã§ç¹ã«ãã¹ãŠãããŸããããªãã£ãããã§ã...
3çªç®ã«æŽæ°ãããé¢æ°ã¯ãæçµçã«æåãš2çªç®ã®äž¡æ¹ããåŒã³åºãããŸããã 圌女ã¯ãèŠæ±ããããµã€ãºã«0x68ãæãããããã¯ãå²ãåœãŠããŒãã§åããŠåæåããå¿ èŠããããŸããã ãã®ãããã¯ã«ã¯ããªã¯ãšã¹ããåŠçããããã®å éšããŒã¿æ§é ãå«ãŸããŠããŸãã åé¡ã¯ãå²ãåœãŠããããããã¯ã®ãµã€ãºããŠãŒã¶ãŒã¢ãŒãã§ç€ºãããå®éã«ãã§ãã¯ãããªãã£ããããå éšæ§é ãå²ãåœãŠãããªãã£ããããèå³æ·±ãçµæãããããããããšã§ããã
å¶åŸ¡ã³ãŒã0x8103208Cã®å Žåãå ¥åããã³åºåãããã¡ãŒãæå®ãããŸããã 匱ç¹ã«å°éããã«ã¯ããã®ãµã€ãºã¯0x624ãã€ãã§ãªããã°ãªããŸããã èŠæ±ãåŠçããããã«ã0x20Cãã€ãã®å éšæ§é ãå²ãåœãŠãããŸããã æåã®4ãã€ãã¯ãã¢ãã¬ã¹[user_buffer + 0x10]ã§æå®ãããå€ã§åããããŸããã å°æ¥ã2çªç®ã®ããŒã¿æ§é ã匷調衚瀺ããããã«ãããã®ãã€ãã䜿çšããããã®ã¢ãã¬ã¹ã¯æåã®ããŒã¿æ§é ã®æåŸã«ç€ºãããŸããã ããã«ããã2çªç®ã®æ§é äœã®å²ãåœãŠã®çµæã«é¢ä¿ãªããç¹å®ã®ãã£ã¹ãããé¢æ°ãåŒã³åºãããŸããã
ãã£ã¹ãããã£ãŒæ©èœ
.text:0001B2B4 ; int __stdcall DispatchChunk(PVOID pChunk) .text:0001B2B4 DispatchChunk proc near ; CODE XREF: PatchedOne+78 .text:0001B2B4 ; UnsafeCallToPatchedThree+121 .text:0001B2B4 .text:0001B2B4 pChunk = dword ptr 8 .text:0001B2B4 .text:0001B2B4 000 mov edi, edi .text:0001B2B6 000 push ebp .text:0001B2B7 004 mov ebp, esp .text:0001B2B9 004 push ebx .text:0001B2BA 008 push esi .text:0001B2BB 00C mov esi, [ebp+pChunk] .text:0001B2BE 00C mov eax, [esi+208h] .text:0001B2C4 00C xor ebx, ebx .text:0001B2C6 00C cmp eax, ebx .text:0001B2C8 00C jz short CheckNullUserSize .text:0001B2CA 00C push eax ; P .text:0001B2CB 010 call ProcessParam ; We won't get here .text:0001B2D0 .text:0001B2D0 CheckNullUserSize: ; CODE XREF: DispatchChunk+14 .text:0001B2D0 00C cmp [esi], ebx .text:0001B2D2 00C jbe short CleanupAndRet .text:0001B2D4 00C push edi .text:0001B2D5 010 lea edi, [esi+8] .text:0001B2D8 .text:0001B2D8 ProcessUserBuff: ; CODE XREF: DispatchChunk+51 .text:0001B2D8 010 mov eax, [edi] .text:0001B2DA 010 test eax, eax .text:0001B2DC 010 jz short NextCycle .text:0001B2DE 010 or ecx, 0FFFFFFFFh .text:0001B2E1 010 lea edx, [eax+38h] .text:0001B2E4 010 lock xadd [edx], ecx .text:0001B2E8 010 cmp ecx, 1 .text:0001B2EB 010 jnz short DerefObj .text:0001B2ED 010 push eax .text:0001B2EE 014 call UnsafeFire ; BANG!!!! .text:0001B2F3 .text:0001B2F3 DerefObj: ; CODE XREF: DispatchChunk+37 .text:0001B2F3 010 mov ecx, [edi+100h] ; Object .text:0001B2F9 010 call ds:ObfDereferenceObject .text:0001B2FF .text:0001B2FF NextCycle: ; CODE XREF: DispatchChunk+28 .text:0001B2FF 010 inc ebx .text:0001B300 010 add edi, 4 .text:0001B303 010 cmp ebx, [esi] .text:0001B305 010 jb short ProcessUserBuff .text:0001B307 010 pop edi .text:0001B308 .text:0001B308 CleanupAndRet: ; CODE XREF: DispatchChunk+1E .text:0001B308 00C push 20Ch ; size_t .text:0001B30D 010 push esi ; void * .text:0001B30E 014 call ZeroChunk .text:0001B313 00C push 'gksv' ; Tag .text:0001B318 010 push esi ; P .text:0001B319 014 call ds:ExFreePoolWithTag .text:0001B31F 00C pop esi .text:0001B320 008 pop ebx .text:0001B321 004 pop ebp .text:0001B322 000 retn 4 .text:0001B322 DispatchChunk endp
ãã®ãã£ã¹ãããé¢æ°ã¯ãããã»ã¹ãžã®ãã€ã³ã¿ãŒãæ¢ããŸããã åŠçã«ã¯ãæ§é ã«èšå®ããããã©ã°ã«å¿ããŠããªããžã§ã¯ãã®éåç §ãšé¢æ°ã®åŒã³åºããå«ãŸããŠããŸããã ãããã誀ã£ããã©ã¡ãŒã¿ãŒã§åŠçããããã«æ§é ãåé¢ããããšã¯äžå¯èœã ã£ãããããã£ã¹ãããé¢æ°ã¯æåã®ãããã¯ã®å¢çãè¶ããŠåã«ãééãããŸããã ãã®ãããªåŠçã«ãããã¢ã¯ã»ã¹éåãšãæ»ã®ãã«ãŒã¹ã¯ãªãŒã³ããçºçããŸããã
ãããã£ãŠãå¶åŸ¡ãããã¢ãã¬ã¹ã§ä»»æã®ã³ãŒããå®è¡ã§ããŸãã
.text:0001B946 UnsafeFire proc near .text:0001B946 .text:0001B946 .text:0001B946 arg_0 = dword ptr 8 .text:0001B946 .text:0001B946 000 mov edi, edi .text:0001B948 000 push ebp .text:0001B949 004 mov ebp, esp .text:0001B94B 004 mov eax, [ebp+arg_0] .text:0001B94E 004 push eax .text:0001B94F 008 call dword ptr [eax+0ACh] ; BANG!!!! .text:0001B955 004 pop ebp .text:0001B956 000 retn 4 .text:0001B956 UnsafeFire endp
éå¶
ãã£ã¹ãããé¢æ°ã¯ãããã¯ã®å¢çãè¶ ããŠæ¡åŒµããããããé£æ¥ãããã¯ãŸãã¯æªæ圱ããŒãžã®ããããã§çºçããŸãã æ圱ãããŠããªãã¡ã¢ãªã«å ¥ããšãæªåŠçã®äŸå€ãçºçãããããããã«ãŒã¹ã¯ãªãŒã³ãã衚瀺ãããŸãã ããããé£æ¥ãããã¯ã«ããããããšããã£ã¹ãããé¢æ°ã¯ããããŒãåŠççšã®æ§é äœãžã®ãã€ã³ã¿ãŒãšããŠè§£éããŸãã
x86ã·ã¹ãã ããããšããŸãã ãã£ã¹ãããé¢æ°ããã€ã³ã¿ãŒãšããŠè§£éããããšãã4ãã€ãã¯ãå®éã«ã¯ä»¥åã®ãããã¯ãµã€ãºãããŒã«ã€ã³ããã¯ã¹ãçŸåšã®ãããã¯ãµã€ãºãããã³ããŒã«ã¿ã€ããã©ã°ã§ãã åŠçäžã®ãããã¯ã®ããŒã«ã®ãµã€ãºãšã€ã³ããã¯ã¹ãããã£ãŠããããããã€ã³ã¿ãŒã®äžäœã¯ãŒãã®æå³ãããããŸãã
0xXXXX0043-0x43ã¯ãããã¯ã®ãµã€ãºã§ãããé£æ¥ãããããã¯ã®[åã®ãµã€ãº]ãã£ãŒã«ãã«ãªããŸãã 0-ããŒã«ã€ã³ããã¯ã¹ããããã®ãããã¯ã¯éãã³ãããŒã«ã«ãããã·ã¹ãã å ã§ã¯1ã€ã ãã§ãããããæ£ç¢ºã«ãŒãã§ããããšãä¿èšŒãããŸãã é£æ¥ãããã¯ãåãã¡ã¢ãªããŒãžãå ±æããŠããå Žåããããã¯åãã¿ã€ããšããŒã«ã®ã€ã³ããã¯ã¹ã«å±ããŠããããšã«æ³šæããŠãã ããã
äžäœã¯ãŒãã«ã¯ãäºæž¬ã§ããªããããã¯ãµã€ãºãšãéã«äºæž¬å¯èœãªããŒã«ã¿ã€ããã©ã°ãæ ŒçŽãããŸãã
- B = 0ïŒéããŒãžããŒã«ããã®ãããã¯
- U = 1ïŒãããã¯ã䜿çšäžã§ããããšãæå³ããŸã
- Q = 0/1ïŒãããã¯ã¯ã¯ã©ãŒã¿ã«ããããšãã§ããŸã
- S = 0ïŒããŒã«ã¯ã»ãã·ã§ã³ã§ã¯ãããŸãã
- T = 0ïŒãããã¯ã¯ããã©ã«ãã§è¿œè·¡ãããŸãã
- æªäœ¿çšãããã¯ãŒãã§ã
ãããã£ãŠãWindows 7ããã³8ã§æå¹ãªæ¬¡ã®ã¡ã¢ãªé åããããŸãã
- 0x04000000-éåžžãããã¯ã®å Žåã¯0x06000000
- 0x14000000-ã¯ã©ãŒã¿ãããã¯ã®å Žåã¯0x16000000
äžèšã®æ å ±ã«åºã¥ããŠãWindows XPãªã©ã®ã¡ã¢ãªé åãåå¥ã«èšç®ã§ããŸãã
ã芧ã®ãšããããããã®é åã¯ãŠãŒã¶ãŒç©ºéã«å±ããŠããããããã£ã¹ãããé¢æ°ã«ãç§ãã¡ãå¶åŸ¡ããã³ãŒããå«ãä»»æã®ã³ãŒããå®è¡ãããããšãã§ããŸãã ãããè¡ãã«ã¯ãæåã«ããã»ã¹å ã®æå®ãããã¡ã¢ãªé åãæ圱ãã次ã«0x10000ãã€ãããšã«ããã£ã¹ãããæ©èœã®èŠä»¶ãæºããå¿ èŠããããŸãã
- ã¢ãã¬ã¹[0x43 + 0x38]ã§ã次ã®æ¡ä»¶ãæºããããã«DWORD = 0x00000001ãé
眮ããå¿
èŠããããŸãã
.text:0001B2E1 010 lea edx, [eax+38h] .text:0001B2E4 010 lock xadd [edx], ecx .text:0001B2E8 010 cmp ecx, 1
- ã¢ãã¬ã¹[0x43 + 0xAC]ã«ãã·ã§ã«ã³ãŒããžã®ãã€ã³ã¿ãŒãé 眮ããå¿ èŠããããŸãã
- ã¢ãã¬ã¹[0x43 + 0x100]ã«ãObfDereferenceObjectïŒïŒé¢æ°ã«ãã£ãŠéåç §ãããã·ã§ã«ãªããžã§ã¯ããžã®ãã€ã³ã¿ãŒãé 眮ããå¿ èŠããããŸãã åç §ã«ãŠã³ã¿ã¯ããªããžã§ã¯ãã«å¯ŸããŠè² ã®ãªãã»ããã§ããããŒã«æ ŒçŽããããããObfDereferenceObjectïŒïŒé¢æ°ã®ã³ãŒããæ圱ãããŠããªãé åã«èœã¡ãªãããã«ããŠãã ããã ãŸããåç §ã«ãŠã³ã¿ãŒã«é©åãªå€ãæå®ããŸããããšãã°ãåç §ã«ãŠã³ã¿ãŒããŒãã«éãããšãObfDereferenceObjectïŒïŒã¯ãŠãŒã¶ãŒã¢ãŒãã¡ã¢ãªã«å®å šã«é©ããªãé¢æ°ã«ãã£ãŠã¡ã¢ãªã解æŸããããšããããã§ãã
VMware補åã«ãã£ãŠãªãã»ãããç°ãªãå Žåãããããšã«æ³šæããŠãã ããã
ãã¹ãŠãæ£ããè¡ãããŸããïŒ
ãšã¯ã¹ããã€ãã®å®å®æ§ãåäž
ãã®è匱æ§ãæªçšããããã®åªããæŠç¥ãéçºãããšããäºå®ã«ãããããããããã¯ãŸã ä¿¡é Œã§ããŸããã ããšãã°ããã£ã¹ãããé¢æ°ã¯ããã£ãŒã«ããäºæž¬ã§ããªã空ããããã¯ã«åé¡ãããå ŽåããããŸãã ãã®ãããªãããã¯ã®ã¿ã€ãã«ã¯ïŒãŒãã«çãããªãããïŒãã€ã³ã¿ãŒãšããŠè§£éããããšããäºå®ã«ããããããããã®åŠçã®çµæã¯ãã«ãŒã¹ã¯ãªãŒã³ãšã©ãŒã«ãªããŸãã ããã¯ããã£ã¹ãããé¢æ°ãæ圱ãããŠããªãã¡ã¢ãªé åã«èœã¡ããšãã«ãçºçããŸãã
ãã®å Žåãã«ãŒãã«ããŒã«ã¹ãã¬ãŒæè¡ãå©ãã«ãªããŸãã ããŒã«ã¹ãã¬ãŒãªããžã§ã¯ããšããŠãã»ããã©ã¯ãµã€ãºãæé©ã§ãããããéžæããŸããã ãã®ææ³ã䜿çšããçµæããšã¯ã¹ããã€ãã®å®å®æ§ãå€§å¹ ã«åäžããŸããã
SMEPãªã©ã®ã»ãã¥ãªãã£ã¡ã«ããºã ã®ãµããŒããWindows 8ã«ç»å ŽããããšãæãåºãããŠãã ããããã®ãããéçºè ã®æ lazãæªçšéçºãå€å°è€éã«ããŸãã SMEPãã€ãã¹ã䜿çšããŠããŒã¹ã«äŸåããªãã³ãŒããèšè¿°ããããšã¯ãèªè ã®èª²é¡ã§ãã
x64ã·ã¹ãã ã«é¢ããŠã¯ããã€ã³ã¿ãŒã®ãµã€ãºã8ãã€ãã«çãããªã£ããšããäºå®ã«åé¡ããããŸãã ããã¯ããã€ã³ã¿ãŒã®æãå€ãããã«ã¯ãŒãïŒDWORDïŒãããŒã«ã¿ã°ãã£ãŒã«ãã«å ¥ãããšãæå³ããŸãã ãŸããã»ãšãã©ã®ãã©ã€ããŒãšã«ãŒãã«ãµãã·ã¹ãã ã¯ãã®ãããªã©ãã«ã«ASCIIæåã䜿çšããŠããããããã€ã³ã¿ãŒã¯éæšæºã®ã¢ãã¬ã¹ç©ºéã«å ¥ããæäœã«äœ¿çšã§ããŸããã ãã®èšäºãæžããŠããæç¹ã§ã¯ãããã«ã€ããŠè³¢æãªããšã¯èããŠããŸããã§ããã
ãŸãšã
æäŸãããæ å ±ã圹ã«ç«ãŠã°å¹žãã§ãã å¿ èŠãªãã®ãã¹ãŠãããã€ãã®æ®µèœã«åããããšãã§ããªãããšããpoã³ããŸãã ã»ãã¥ãªãã£ã¬ãã«ã®å®å šãªåäžãšããåã®ããšãç 究ãšéçšã®æåãé¡ã£ãŠããŸãã
PSè匱æ§ãæé€ããã«ã¯ãã¡ã€ã³ã·ã¹ãã ã ãã§ãªãããã¹ãŠã®ã²ã¹ãã·ã¹ãã ãæŽæ°ããå¿ èŠãããããšãæãåºããŸãã
PPSç¹å®ã®çšèªã®ç¿»èš³ã«äžå¿«æãæããå Žåã¯ãMicrosoftèšèªããŒã¿ã«ã§ãã®ç¿»èš³ãæšå¥šãããŠãããã ãå°æ¥çã«ãããææ ¢ããæºåãããŠãã ããã
ãã¢ïŒ
åç §è³æ
[1] Tarjei Mandtã Windows 7ã§ã®ã«ãŒãã«ããŒã«ã®æªçšãBlackHat DCã2011
[2]ãããŒã¿ã»ã¿ã©ã«ããã Windows XPããWindows 8ãžã®ã«ãŒãã«ããŒã«ãªãŒããŒãããŒããŒããã€ãã2011幎
[3] Kostya Kortchinskyã å®äžçã®ã«ãŒãã«ããŒã«ã®æŽ»çšã SyScanã2008
[4] SoBeItã Windowsã«ãŒãã«ã¡ã¢ãªããŒã«ã掻çšããæ¹æ³ã X'conã2005