誰ãããã¹ã¯ãŒããããŒãžã£ãŒãæããŠããŸãã 圌ãã¯å€ãã®çç±ã§çŽ æŽãããã§ãã å人çã«ã¯ããããŒãžã£ãŒã«200以äžã®ãšã³ããªããããŸãã éåžžã«å€ãã®æ©å¯ããŒã¿ã1ãæã«ããããããã«ãŠã§ã¢ããšã¯ã¹ããã€ãããŸãã¯æ°åéæŸçœ®ãããã³ã³ãã¥ãŒã¿ãŒãªã©ãèšé²ã䟵害ãããå Žåã®æ害ã®çšåºŠãç解ããããšãéèŠã§ãã ã¯ã·ã³ãã³ãã¹ãã¯æè¿ãç§ãã¡ã®ç 究ã«åºã¥ããèšäºãçºè¡ããŸããã ãã®èšäºã¯ããã¹ãŠã®ãã¹ã¯ãŒããããŒãžã£ãŒãåãã§ã¯ãªãããšã人ã ã«ç¥ãããã®ã«åœ¹ç«ã¡ãŸãã
ããã¯ããããã¹ã¯ãŒããããŒãžã£ãŒã¯ååã«ä¿è·ãããŠãããšç¢ºä¿¡ããŸããã 誰ããç§ã®ã³ã³ãã¥ãŒã¿ãŒã«ã¢ã¯ã»ã¹ããå Žåãæ å ±ã¯ã¡ã¢ãªãã確å®ã«ã¯ãªã¢ããããããæ倧å€ã¯ã©ã³ãã ãªãã€ãã®æã«é Œãããšãã§ããŸãã
ããã¯1Password 4ã«ãåœãŠã¯ãŸããŸãïŒææ°ããŒãžã§ã³ã¯ä»æ¥7æ¥ç®ã§ãïŒã æ°å¹Žåã«åãæ¿ããåã«ããããŒãžã£ãŒãããã¯ãããç¶æ ã®ãšãã«ã¯ãªã¢ã¡ã¢ãªã«ãã¹ã¯ãŒããå®éã«ãªãããšã確èªããŸããã ãã®ããã䟵害ãããå Žåãæ»æè ã¯æå·åãããã¹ãã¬ãŒãžãåŠçããå¿ èŠããããŸãã
é庫ã¯ããã¯ãããŠããŸãïŒ
ãã®ç¶æ ã§ã¯ããã¹ã¯ãŒããšã³ããªããã¹ã¿ãŒãã¹ã¯ãŒãããããŸããã éåžžã«åççãã€æ£ç¢ºã§ããã1Password 4ã¯ãã®ãã¹ãã«åæ ŒããŸããã ãã©ããïŒ
éå±ãªè©³çŽ°ãåãé€ãããã«ãããã«èšããŸãã次ã®ããã«ã1Password 4ã®ããã¯ãããã€ã³ã¹ã¿ã³ã¹ãããã¹ã¿ãŒãã¹ã¯ãŒãã埩å ã§ããŸããã
1Password 4ã®ããã¯ã解é€ãããã¹ã¿ãŒãã¹ã¯ãŒããå埩ããŸã
ãã®ã¢ãã¡ãŒã·ã§ã³ã¯ã1Password 4ãæåã«éåžžã®æ¹æ³ã§ããã¯è§£é€ããããã®åŸããã¯ãããããšã瀺ããŠããŸãã ãã®åŸããã¹ã¯ãŒããæ£åžžã«å埩ãããã«ããã¹ãŠãŒãã£ãªãã£ãå®è¡ããŸãã ãŠãŒãã£ãªãã£ã¯ã1Password 4ã®ãã¹ã¯ãŒãå ¥åãã£ãŒã«ãã®èª€ã£ãåŠçãå©çšããŠãé£èªåããããã¹ã¿ãŒãã¹ã¯ãŒããããã¡ãŒã埩å ããé£èªåã解é€ãã1Password 4ãèªåçã«ããã¯è§£é€ããæçµçã«ãã¹ã¿ãŒãã¹ã¯ãŒããã³ã³ãœãŒã«ã«è¡šç€ºããŸãã
éå±ãªè©³çŽ°
ãã¹ã¯ãŒããããŒãžã£ãŒãè©äŸ¡ããæåã®æé ã¯ãã¡ã¢ãªå ã®ã¯ãªã¢ãã¹ã¿ãŒãã¹ã¯ãŒãã確èªããããšã§ãã ããã¯ãããã»ã¹ã¡ã¢ãªç©ºéãšããåãã§ãã16é²ãšãã£ã¿ã§å¯èœã§ãã ããšãã°ãç¡æã®HxDãšãã£ã¿ãŒã ããã䜿çšããŠã1Password 4ã®ã¡ã¢ãªã¹ããŒã¹ãéããŸãã
ããã«1Password 4ã®ã¡ã¢ãªç©ºéã®æåã®èªã¿åãå¯èœãªé åã«åé¡ãããŸãã
HxDã¡ã¢ãªè¡šçŸã®äŸ
ãŸã ç¹å¥ãªãã®ã¯ãããŸããã ãã ããæ€çŽ¢ã¯ã§ããŸãã ããšãã°ã1Password 4ã®ããã¯è§£é€ãŠã£ã³ããŠã«ãã¹ã¯ãŒããå ¥åãããããã¯è§£é€ããã¿ã³ãã¯ãªãã¯ããªãå Žåã®ç¶æ³ã¯æ¬¡ã®ããã«ãªããŸãã
ãã£ãŒã«ãã«å ¥åããããã¹ã¿ãŒãã¹ã¯ãŒãã§ããã¯ãããVault 1Password 4
確ãã«ãã¹ã¯ãŒãã¯ã¡ã¢ãªå ã®ã©ããã«ãããŸããïŒ
HxDãéããŸããããã¹ã¿ãŒãã¹ã¯ãŒãïŒãZ3SuperpassïŒãïŒã§è¡ãæ€çŽ¢ããŠãçµæã¯çæãããŸããã
1Passwordã¯å ¥åããããã©ãŒã ãäœããã®æ¹æ³ã§æå·åãŸãã¯é£èªåããããã§ãã æé ãæ£ããæ©èœããå Žåããã¹ãŠãæ£åžžã§ãã
ããæ·±ãæœã
ããã¯è§£é€ãã€ã¢ãã°ããã¯ã¹ã«æ確ã«ååšãããã¹ã¿ãŒãã¹ã¯ãŒããã¡ã¢ãªã«èŠã€ãããªãçç±ãèŠã€ããã«ã¯ããããšå¯Ÿè©±ããã³ãŒããèŠã€ããå¿ èŠããããŸãã ããã€ãã®æ¹æ³ããããŸãã ãGetMessageãããPeekMessageãããGetWindowTextãããŸãã¯éåžžãŠãŒã¶ãŒå ¥åãåŠçããä»ã®Windows APIãããŒã«ã©ã€ãºããããšã«ãããããŒããŒãã€ãã³ããšããŠã¹ã€ãã³ãã®åŠçã远跡ã§ããŸãã ããã§ãããŒã¹ãããŒã¯ãèšé²ãããŠãããããã¡ãèŠã€ããããããä»ããŠæå·å/é£èªåã«ãŒãã³ã«é²ã¿ãŸãã ããããããã¯é·ããŠãšã©ãŒãçºçããããããã»ã¹ã§ããç¹ã«ãéåžžã«å¥åŠã«ã¡ã¢ãªã管çãã倧èŠæš¡ãªãã¬ãŒã ã¯ãŒã¯ã§ã¯ããããã¡ã远跡ããããã«å€ãã®ã³ããŒãšå€æãè¡ãå¿ èŠããããŸãã
代ããã«ãã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã§ãå¥åŠãªãç¬èªãããã³ã«ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ããããã«èšèšãããç¬èªã®Thread ImagerããŒã«ã䜿çšããŸãã ã¡ã¢ãªå ã®1Password 4ããã¹ã¿ãŒãã¹ã¯ãŒããšçžäºäœçšããå Žæãå€æããã®ã«åœ¹ç«ã¡ãŸãã ãã®ããŒã«ã¯ãé£èªåããããã¹ã¯ãŒããšããåããã1Password 4ã®ã³ãŒãã®é åããèªåçã«ãèå¥ããŸãïŒããã«åæããããã«ãç®çã®ããŒã¿ãšããåãããæ瀺ãåã«åŒ·èª¿è¡šç€ºããŸãïŒã çµæã¯æ¬¡ã®ããã«ãªããŸãã
Thread Imagerã¯ãçŠç¹ã®åã£ãŠããªããã¹ã¿ãŒãã¹ã¯ãŒããšããåããã1Password 4ã³ãŒããèŠã€ããŸã
ãã¹ã¿ãŒãã¹ã¯ãŒãã¯é£èªåããã圢åŒã§ã¡ã¢ãªã«ä¿åããããããããŒã«ã¯ãŸãé£èªåãçºçããå Žæã衚瀺ããå¿ èŠããããŸãã
æåã®çµæã®äžéšã¯ããã¹ã¿ãŒãã¹ã¯ãŒãã®æåã®åºçŸã«ãã¢ãã¬ã¹0x7707A75Dãã0x701CFA10ãžã®ã³ãŒãé·ç§»ã䌎ãããšã瀺ããŠããŸãã
Thread Imagerã®è©³çŽ°ãªãšã³ããªã¯ã0x7707A75Dãã0x701CFA10ãžã®ã³ãŒãé·ç§»ã匷調衚瀺ããŸãããEAXããã³ECXã¬ãžã¹ã¿ã¯ãã¹ã¿ãŒãã¹ã¯ãŒããæã€ãããã¡ãŒãåç §ããŸã
ãããã¬ãŒïŒx64dbgïŒã§ãã®å Žæ0x7707A75Dã調ã¹ããšãçè«ã確èªãããŸãã å®éãntdll.dllã©ã€ãã©ãªã®ãã³ãŒãé¢æ°ãRtlRunDecodeUnicodeStringããå®äºãããšãæååãZ3superpassïŒããåããŠçºçããŸãã
å°ãåæããçµæããã¹ã¯ãŒããé£èªåããããã«ãããã®2ã€ã®é¢æ°ãRtlRunEncodeUnicodeStringããšãRtlRunDecodeUnicodeStringãã䜿çšãããŠããããšã¯æããã§ãã ãã®ããããã¹ã¿ãŒãã¹ã¯ãŒãã¯ã¡ã¢ãªããã®åå§çãªã³ããŒããé ãããŠããããã以åã¯16é²ãšãã£ã¿ãŒã§èŠã€ããããšãã§ããŸããã§ããã
RtlRunEncodeUnicodeStringé¢æ°ã®æåŸã§ãšã³ã³ãŒãããããããã¡ã調ã¹ããšããã¹ã¿ãŒãã¹ã¯ãŒããå«ãæå·åãããè¡ã¯æ¬¡ã®ããã«ãªããŸãã
æå·åããããã¹ã¿ãŒãã¹ã¯ãŒã
RtlRunDecodeUnicodeStringã®åŸãããã³ãŒããããŸãïŒ
埩å·åããããã¹ã¿ãŒãã¹ã¯ãŒã
èå³æ·±ãããšã«ããã®é åã¯åãã¢ãã¬ã¹0x00DFA790ã«ä¿åãããŠããã1Password 4ã®ããã¯è§£é€ãŠã£ã³ããŠã«ãã¹ã¯ãŒããå ¥åãããšããã®å€æŽãæåéã芳å¯ã§ããŸãã
è匱æ§
ãRtlRunEncodeUnicodeStringãããã³ãRtlRunDecodeUnicodeStringãã¯ãåçŽãªXORæäœã§æååãå€æŽããåçŽãªé¢æ°ã§ãã ããã¯ããã»ã©æªãã¯ãããŸããïŒ 'ES_PASSWORD'ãã©ã°ãèšå®ããããã¹ãŠã®ãã€ãã£ãWindowsç·šéã³ã³ãããŒã«ããã¹ã¯ããæšæºçãªæ¹æ³ã®ããã§ãã
åé¡ã¯ã1Password 4ã®ããã¯ã解é€ããåŸãæå·åããããã¹ã¿ãŒãã¹ã¯ãŒããã¡ã¢ãªããæ¶å»ãããªãããšã§ãã
ããã«æªãããšã«ã1Password 4ãããã¯ãããåŸã§ãã¡ã¢ãªã«æ®ããŸããã€ãŸãããã¹ã¯ãŒãã¹ãã¢ã¯ããã¯ãããŠããŸãããã¡ã¢ãªå ã«æå·åããããã¹ã¿ãŒãã¹ã¯ãŒãããããŸãã
ããã«æªãããšã«ããã¹ã¿ãŒãã¹ã¯ãŒãå ¥åãã€ã¢ãã°ããã¯ã¹ãšå¯Ÿè©±ãããããåãã¡ã¢ãªé åãåãXORå€ã§åå©çšãããããããšã³ã³ãŒãããããããã¡ã«ç°¡åã«ã¢ã¯ã»ã¹ããŠãšã¯ã¹ããã€ããäœæã§ããŸãã
ææŠãã
1Password 4ã®ä¿¡é Œã§ãããšã¯ã¹ããã€ããäœæããã«ã¯ãããã°ã©ã ã®ã¯ãŒã¯ãããŒã«ãã£ãŠãã¹ã¿ãŒãã¹ã¯ãŒããã©ã®ããã«åŠçãããããããæ確ã«ææ¡ããå¿ èŠããããŸãã åè¿°ã®ããŒã«ã䜿çšããŠãåºåããŒã¿ã®å³ãäœæããŸããïŒäžå³ïŒã
ãã®å³ã䜿çšãããšããã¹ã¿ãŒãã¹ã¯ãŒããæœåºã§ããã¡ã¢ãªå ã®é åã確å®ã«èå¥ããããã«ãã©ãã§ã©ã®ã©ã€ãã©ãªãé¢ä¿ããŠããããç°¡åã«ç解ã§ããŸãã
ãšã¯ã¹ããã€ã
çŸæç¹ã§ã¯äœããããŸããïŒ ããã¯ãããã¹ãã¬ãŒãžããããããã°ã©ã ãã¡ã¢ãªãé©åã«ã¯ãªãŒãã³ã°ããªãã£ããããã¡ã¢ãªã®ã©ããã«é£èªåããããã¹ã¯ãŒããæ ŒçŽãããŠããŸãã
æœåºããã«ã¯ã1Password 4ã®ããã·ãŒãžã£ãåŒã³åºããŠã 'RââtlRunEncodeUnicodeString'ããã³ 'RtlRunDecodeUnicodeString'ãéå§ããå¿ èŠããããŸãã ãããã£ãŠãã¡ã¢ãªãããã¡ã®å Žæãšãšã³ã³ãŒãããããã¹ã¿ãŒãã¹ã¯ãŒãã衚瀺ãããŸãã
é£èªåããããã¹ã¿ãŒãã¹ã¯ãŒãã®ããã¡ã¢ãªé å
ãã®ãããã¡ããªããã°ãå éšããã·ãŒãžã£ãšWindowsã³ã³ãããŒã«ãããã³é¢é£ããã¡ã¢ãªç®¡çã¡ã«ããºã ã®æ·±byã«çªå ¥ããå¿ èŠããããŸãã ããããããã®åæã«ãã£ãŠãããã¡ãç°¡åã«èŠã€ããããšãã§ããŸãããç§ãã¡ã¯ãã®ããã«ã¯è¡ããŸããã§ããã
ãRtlRunEncodeUnicodeStringãããã³ãRtlRunDecodeUnicodeStringããåŒã³åºãå¯äžã®æ¹æ³ã¯ããã€ã¢ãã°ããã¯ã¹ã®æåã«ãã¹ã¿ãŒãã¹ã¯ãŒããå ¥åããããšã§ããããã§ãã ç®çã®ãããã¡ãŒãååŸããŸãã ãããããã¹ã¯ãŒãã®é·ãã¯ããããŸããã
ãããã¡ã®æåã®æåã«ã¢ã¯ã»ã¹ããã³ãŒããã€ã³ã¿ãŒã»ããããå€æŽã®è©Šã¿ããããã¯ããããšã«ããããã®åé¡ã解決ããŸããã ãã®ã«ãŒãã³ã¯ãcomctl32ã®å¶åŸ¡ã¡ãã»ãŒãžã«ãŒãå ã«ããã察å¿ããèŠçŽ ã®ãããã¡ãŒå¶åŸ¡ãåŠçããŸãã ãªãã»ãã0x70191731㧠'memmove'ãåŒã³åºããšãå ¥åãããæåã§ãããã¡ãŒãäžæžããããŸãã
ïŒå¯äœçšïŒåŒ·èª¿è¡šç€ºãããè¡ïŒé»è²ïŒã¯ãã¹ã¯ãŒãè¡å šäœãæŽæ°ããŸãïŒ
ããã§ããããããšã¯ã¹ããã€ããäœæããããã«å¿ èŠãªãã¹ãŠã®ãã®ãæã«å ¥ããŸããã 次ã®æé ã«ããããã¹ã¿ãŒãã¹ã¯ãŒããæœåºã§ããŸãã
- ãã¹ã¿ãŒãã¹ã¯ãŒãã®æåã®ãã€ããäžæžããããªãããã«ããmemmoveããããã¯ããŸãã
- 'RtlRunEncodeUnicodeString'ãããã¯ããŠãé£èªåããããã¹ã¿ãŒãã¹ã¯ãŒãã®ãããã¡ãŒã®å ŽæãååŸããŸãã
- ãRtlRunDecodeUnicodeStringããããã¯ããŠãåã®æé ã§ååŸããé£èªåããããããã¡ãŒã«ã¢ã¯ã»ã¹ããŸãã
- ãã¹ã¯ãŒãå ¥åãã£ãŒã«ãã«æåãå ¥åããã¹ããã1ïŒãã¹ã¿ãŒãã¹ã¯ãŒãå šäœãä¿åããïŒãæŸæ£ããã¹ããã2ãã¹ããã3ã«ãªãã€ã¬ã¯ãããŠãé£èªåããããã¹ã¿ãŒãã¹ã¯ãŒãããã³ãŒãããŸãã
ãããã®ãã¹ãŠã®ã¢ã¯ã·ã§ã³ãå®è¡ããã«ã¯ãããããã¹ãŠã®ããã¯ã®ãã³ãã©ãŒã³ãŒãã䜿çšããŠDLLãäœæããŸãã ã©ã€ãã©ãªã¯1Password 4ããã»ã¹ã«çµã¿èŸŒãŸããmemmoveãRtlRunEncodeUnicodeStringãRtlRunDecodeUnicodeStringã®åã¹ããããèµ·åããŠã1æåããã¹ã¿ãŒãã¹ã¯ãŒããã€ã¢ãã°ããã¯ã¹ã«éä¿¡ããŸãã ã»ãšãã©ã®éæ³ã¯DetourRtlRunEncodeUnicodeStringã§çºçããŸããããã¯ã以äžã«ç€ºããRtlRunEncodeUnicodeStringãé¢æ°ã®ããã¯ã§ãã
ããã§æçµçµæãåŸãããŸããWindowsAPIã§äœ¿çšããããã°ã®ããæé ã䜿çšããŠããã¹ãŠã®ããŒãžã§ã³ã®ããã¯ããããªããžããª1Password 4ã®ããã¯ã解é€ããŸãã
ãŸãšã
æåã«1Password 4ã®å éšãæãäžãããšããäœããã®è€éãªã»ãã¥ãªãã£ã·ã¹ãã ã«å¯Ÿå¿ããPBKDF2æé ããã¹ã¿ãŒãã¹ã¯ãŒãã䜿çšãããä»ã®é åã§çºçããããã«ããã¹ãŠã®æ©å¯æ å ±ãã¡ã¢ãªããæ¶å»ãããããšãæåŸ ããŠããŸããã 察å¿ãããšã³ããªãæ¶å»ãããŸãã ãã ããèŠèœãšãã®ããããã¹ã¯ãŒãå ¥åãã£ãŒã«ãã¯ããã¹ã¯ãŒããé ãããæšæºã®Windows APIã³ã³ãããŒã«ãšèŠãªããã1Password 4ã®ã»ãã¥ãªãã£ãæãªãããŸãã