ã©ã³ãµã ãŠã§ã¢ãŠã€ã«ã¹ã䜿çšããæ»æã¯ã2017幎ã«æ¬åœã®åŸåã«ãªããŸããã ãã®ãããªæ»æã®å€ããèšé²ãããŸããããæãæªåé«ãã®ã¯WannaCryãšNotPetyaïŒä»ã®å€ãã®åå-PetyaãPetya.AãExPetrãªã©ïŒã§ããã 以åã®æµè¡ã®çµéšãç¿åŸããäžçäžã®å°é家ã¯ãæ°ãã課é¡ã«è¿ éã«å¯Ÿå¿ããæåã®ã³ã³ãã¥ãŒã¿ãŒãææããŠããæ°æéã®ãã¡ã«ãæå·åããããã£ã¹ã¯ã®ã³ããŒã®èª¿æ»ãéå§ããŸããã ãã§ã«6æ27æ¥ã«ãNotPetyaã®ææããã³æ¡æ£ã®æ¹æ³ã«é¢ããæåã®èª¬æãç»å ŽããŸãã;ããã«ã ææã«å¯Ÿããã¯ã¯ãã³ãç»å ŽããŸãã ã
NotPetyaãèµ·åãããšãç¹å®ã®æ¡åŒµåãæã€AESãŠãŒã¶ãŒãã¡ã€ã«ãæå·åãããŸããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯åŒãç¶ãåäœããŸãã æå·åã«ã¯å¶éæéããããŸãïŒããã©ã«ãã¯1æéã§ãïŒã ãã®éã«æå·åããã»ã¹ãå®äºããå ŽåãREADME.TXTãã¡ã€ã«ã¯ã身代éèŠæ±ãšãšãã«ãã£ã¹ã¯ã®ã«ãŒãã«é 眮ãããŸãã æ®å¿µãªããããã®æ¹æ³ã§æå·åããããã¡ã€ã«ãå埩ããã«ã¯ãRSAç§å¯éµïŒ100ãããã³ã€ã³ã§Darknetã§è³Œå ¥ããããã«æäŸãããŠããããã§ãïŒãç¥ãå¿ èŠããããŸãã æå·åãæåããªãã£ãããŸãã¯äžæãããããŸãã¯ãã£ã¹ã¯ã®ã«ãŒããžã®æžã蟌ã¿èš±å¯ããªãã£ãå ŽåãREADME.TXTãã¡ã€ã«ïŒæå·åãããããŒãå«ãïŒã¯äœæããããAESã¢ã«ãŽãªãºã ã«ãã£ãŠæå·åããããã¡ã€ã«ã¯RSAç§å¯ããŒãåä¿¡ããåŸã§ã埩å ã§ããŸããã
以äžã«èª¬æããããŒã¿å埩æ¹æ³ã¯ãNotPetyaãŠã€ã«ã¹ã«ç®¡çè æš©éããããSalsa20ã¢ã«ãŽãªãºã ã䜿çšããŠããŒããã£ã¹ã¯å šäœãæå·åããå Žåã«é©çšã§ããŸãã
ããã¯æå·åã®2çªç®ã®å±€ã§ãã ãã ããããã€ãã®çç±ã§Salsa20ã埩å·åããããšããå§ãããŸãã
- AESã¯ãã¹ãŠã®ãã¡ã€ã«ã¿ã€ããæå·åããŸããïŒããšãã°ãç»åãã¹ãããããŸãïŒã
- AESã¯éãããæéïŒéåžžã¯1æéïŒåäœããAESãæå·åãããªãå Žåã¯ãæœåšçã«å埩å¯èœã§ãã
- AESã¯ãŠãŒã¶ãŒåºæã§ãã ã³ã³ãã¥ãŒã¿ãŒã§è€æ°ã®ãŠãŒã¶ãŒã¢ã«ãŠã³ãã䜿çšãããŠããå ŽåãAESã¯ä»ã®ãŠãŒã¶ãŒã®ããŒã¿ãžã®ã¢ã¯ã»ã¹æš©ãæã£ãŠããªãå¯èœæ§ããããŸãã
ãŸããSalsa20ã¯ãã¿ã€ããæéãã¢ã¯ã»ã¹æš©ã«é¢ä¿ãªãããã¹ãŠã®ããŒã¿ãæå·åããŸãã
å€æããããã«ããŠã€ã«ã¹ã®äœæè ã¯Salsa20ã¢ã«ãŽãªãºã ã®å®è£ ãééããŸãããããã¯ãæå·åããŒã®ååã®ãã€ãããŸã£ãã䜿çšãããªãã£ãããã§ãã æ®å¿µãªãããããŒã®é·ãã256ããããã128ãããã«æžãããšã劥åœãªæéå ã«ããŒãèŠã€ããå¯èœæ§ããªããªããŸãã
ãã ããSalsa20ã¢ã«ãŽãªãºã ã®ã¢ããªã±ãŒã·ã§ã³ã®ããã€ãã®æ©èœã«ãããããŒãç¥ããªããŠãããŒã¿ãå埩ããããšãã§ããŸãã
Salsa20ã®ä»çµã¿
Salsa20ã¯ãæå·åäžã«ããŒã«äŸåããã¬ã³ããçæãããåæã¹ããªãŒã æå·ã§ããããã®ã¬ã³ãã®ãã€ãã¯ãã¬ãŒã³ããã¹ããã€ããšã®XORæäœã䜿çšããŠè¿œå ãããããšãæãåºããŠãã ããã 埩å·åããã«ã¯ãæé ãç¹°ãè¿ãå¿ èŠããããŸãã
ã¹ããªãŒã å ã®ä»»æã®ãªãã»ããã«å¯ŸããŠã¬ã³ããèšç®ã§ããããã«ãs20_expand32ïŒïŒã¬ã³ããžã§ãã¬ãŒã¿ãŒã¯ãããã¯ã¹ãåãŸã64ãã€ãã®ããŒã¹ããªãŒã é åãçæããŸãã
- 256ãããïŒ32ãã€ãïŒã®æå·åããŒã
- 8ãã€ãã®éã·ãŒã¯ã¬ããã©ã³ãã ã·ãŒã±ã³ã¹ãã³ã¹ïŒæ°åã¯1å䜿çšïŒã
- 16ãã€ãã®ã·ã°ãå®æ°ïŒãexpand 32-byte kããŸãã¯ã-1nvalid s3ct-idãïŒã
- ã¹ããªãŒã å ã®ãããã¯çªå·ã®64ãããïŒ8ãã€ãïŒã
ãã§ãã¯ãã€ã³ãã¬ããŒãããæç²ãããã®å³ã¯ãããŒã¿ã®ã¬ã€ã¢ãŠãæ¹æ³ã瀺ããŠããŸãã
64ãã€ãã®ããŒã¹ããªãŒã ã¯ã·ã£ããã«æ©èœãä»ããŠæž¡ãããçµæã®64ãã€ãã¯ã¬ã³ããã©ã°ã¡ã³ããšããŠäœ¿çšãããŸãã
çæãããã¬ã³ããã©ã°ã¡ã³ãã¯åžžã«64ãã€ãã®åæ°ã«æããããããšã«æ³šæããŠãã ããã ãããŠãããšãã°ããªãã»ãã100ããå§ãŸã7ãã€ããæå·åããã«ã¯ãæåã®ãã€ããå«ãŸãããããã¯çªå·ïŒ100/64 == 1ïŒãèŠã€ãããã®ãããã¯ã®ã¬ã³ããèšç®ãããªãã»ããããå§ãŸã7ãã€ãã䜿çšããå¿ èŠããããŸãïŒ100ïŒ 64 == 36ïŒã ãããã¯ã«ååãªãã€ãããªãå Žåãã¬ã³ãã¯æ¬¡ã®ãããã¯ãªã©ã®ããã«çæãããŸãã
1ã€ã®ã¹ããªãŒã ïŒããã³ãã£ã¹ã¯ãNotPetyaã®èŠ³ç¹ããã¯ãããã¯1ã€ã®ã¹ããªãŒã ïŒãæå·åããããã»ã¹ã§ã¯ãããŒãŸãã¯ãã³ã¹ã®å€æŽã¯ãããŸããã ãããã£ãŠãæå·åããããã£ã¹ã¯ããšã«ãããŒã¹ããªãŒã ã®å¯äžã®å€æ°ã¯ãããã¯çªå·ã§ãã
Salsa20æå·ã®äœæè ãèããããã«ã64ãã€ãã®2 ^ 64ãããã¯ã§ã¯ããããã2 ^ 70ã10 ^ 21ãã€ãã®åšæã®ã¬ã³ããçæã§ããŸãã ããã¯ãã»ãšãã©ãã¹ãŠã®å®çšçãªã¢ããªã±ãŒã·ã§ã³ã«ååãªæéã§ããããã®ãµã€ãºã®ããŒããã©ã€ãã¯éåžžã«é·ãé衚瀺ãããŸããã
ãã ããå®è£ ã¯ããã»ã©ã¹ã ãŒãºã§ã¯ãããŸããã
NotPetyaã®å®éã®ã¬ã³ãåšæ
ãã£ã¹ã¯ã»ã¯ã¿ãŒãæå·åãããåŒã³åºããéããŠãs20_crypt32ïŒïŒé¢æ°ã®ãããã¿ã€ããèŠãŠã¿ãŸãããã
enum s20_status_t s20_crypt32(uint8_t *key, uint8_t nonce[static 8], uint32_t si, uint8_t *buf, uint32_t buflen)
siåŒæ°ïŒããããStream IndexïŒã¯ãã¹ããªãŒã ã®ãã€ããªãã»ãããæž¡ããŸãã ãŸããåŒæ°ã®ã¿ã€ãã«ãã£ãŠã64ãããã§ã¯ãªã32ãããããååšããªãããšã¯æããã§ãã ãã®å€ã¯ã64ã§å²ã£ãåŸã«ããŒã¹ããªãŒã ã«åé¡ãããŸããã€ãŸããæ倧26ããããæ®ããŸãã
// Set the second-to-highest 4 bytes of n to the block number s20_rev_littleendian(n+8, si / 64);
次ã«ãåãã¬ããŒãããæ®åœ±ããå¥ã®åçãèŠãŠã¿ãŸãããã
s20_rev_littleendianïŒïŒé¢æ°ã®å®è£ ã®ãšã©ãŒã«ããã¬ã³ãã®åœ¢æã«åœ±é¿ããªããã€ãã¯ç°è²ã§åŒ·èª¿è¡šç€ºãããŸãã ãããã£ãŠããããã¯çªå·ã®26ãããã®ãã¡ã16ãããïŒãªãã»ãã0x20-0x21ã®ãã€ãïŒã®ã¿ãããŒã¹ããªãŒã ã«åœ±é¿ããŸãã ãããã£ãŠãæ倧ã¬ã³ãæéã¯2 ^ 16 = 65536ãããã¯ã®64ãã€ããã€ãŸã4ã¡ã¬ãã€ãã«ãªããŸãã
æå·åãããããŒã¿ã®éã¯4ã¡ã¬ãã€ããå€§å¹ ã«è¶ ããå¯èœæ§ãé«ããããå€ãã®ç°ãªãããŒã¿ãåãã¬ã³ããã©ã°ã¡ã³ãã§æå·åãããŸãã ãããŠãããã«ãããããç¥ãããå¹³æã«åºã¥ããäºçŽ°ãªæ»æãå®è£ ããããšãã§ããŸãã
ãããŠããäžã€ã®ééã
éçºè ã®æ¬ é¥ã¯ããã§çµããã§ã¯ãããŸããã s20_crypt32ïŒïŒé¢æ°ãåŒã³åºããããšããã€ãåäœã®ãªãã»ããå€ã®ä»£ããã«... 512ãã€ãã»ã¯ã¿ãŒã®æ°ãæž¡ãããŸãïŒ
ã»ã¯ã¿ãŒã¯éåžžãã¢ã§æå·åãããŸãïŒ1ã¢ã¯ã»ã¹ããã1024ãã€ãïŒãããã¯ãé£æ¥ãã2ã€ã®ã»ã¯ã¿ãŒãã¢ã®æå·åã«äœ¿çšãããã¬ã³ãã1022ãã€ãïŒãªãã»ãã2ãã€ãïŒã§äžèŽããããšãæå³ããŸãã
æ¢ç¥ã®å¹³ææ»æã®çºèŠçææ³
Windowsã®ææ°ããŒãžã§ã³ã§ã¯ãéåžžã«å€ãã®ç°ãªãæ§é ã䜿çšããNTFSãã¡ã€ã«ã·ã¹ãã ã䜿çšãããŠããŸãã
ããã«ããã£ã¹ã¯äžã«ã¯å€ãã®ãã¡ã€ã«ãããããã®å 容ãç°¡åã«ïŒéšåçãŸãã¯å®å šã«ïŒäºæž¬ã§ããŸãã
ã¯ããã«512ã¬ã³ããã€ã
æå·åããŒã®æ£åœæ§ãæ€èšŒããããã«ãNotPetyaã¯äºåå®çŸ©ãããå€ïŒãã¹ãŠã®ãã€ã0x07ïŒãå«ã0x21ã»ã¯ã¿ãŒãæå·åããŸãã ããã«ããã512ãã€ãã®ã¬ã³ããåŸãããŸãã
MFTã«ããã¬ã³ãå埩
NotPetyaã¯ãMFTã®æåã®16ãšã³ããªïŒ32ã»ã¯ã¿ãŒïŒãæå·åããŸããããä»ã®ãã¹ãŠãæå·åããŸãã
åãã¡ã€ã«ã¬ã³ãŒãã¯ã·ãŒã±ã³ã¹ãFILEãã§å§ãŸããéåžžã¯ãã€ã30 00 03 00ãç¶ãããšãããã£ãŠããŸãïŒUpdateSequenceArrayOffset = 0x30ãUpdateSequenceArrayLength = 3ïŒã çè«çã«ã¯ããããã®4ãã€ãã«ã¯ä»ã®å€ãå«ãŸããŠããå ŽåããããŸãããåãNTFSè«çããªã¥ãŒã å ã®ãã¹ãŠã®ãã¡ã€ã«ã¬ã³ãŒãã§ã»ãŒåãã§ãã
ãããã£ãŠã1ã€ã®ãã¡ã€ã«ã¬ã³ãŒãïŒ2ã»ã¯ã¿ãŒãå æïŒãã8ãã€ãã®ã¬ã³ããååŸã§ããé£æ¥ããåã¬ã³ãŒããã2ãã€ããè¿œå ãããŸãïŒããã³ä»¥åã«åä¿¡ãã6ãã€ãããã§ãã¯ã§ããŸãïŒã æè¿ã®ãšã³ããªã¯ã»ãŒå®å šã«ãŒãã§æ§æãããŠãããæ倧1024ã¬ã³ããã€ããçæã§ããŸãã
ãŸããMFTæå·åã«äœ¿çšãããã¬ã³ããã©ã°ã¡ã³ãã埩å ãããšããã¡ã€ã«ã·ã¹ãã æ§é ãå®å šã«åŸ©å ã§ããŸãã
æ¢ç¥ã®ãã¡ã€ã«ããã¬ã³ãã埩å ãã
ã©ã³ãµã ãŠã§ã¢ã¯ãåãã¡ã€ã«ã®æåã®2ã€ã®ã»ã¯ã¿ãŒãæå·åããŸãããããã¯1024ãã€ããããé·ããªããŸãã ããã«ãã¯ã©ã¹ã¿ãŒãµã€ãºã¯éåžž2ã»ã¯ã¿ãŒïŒããšãã°ã8ïŒããã倧ãããªããŸãã ãã®å Žåããã¡ã€ã«ã®æå·åãããå é ãèŠã€ããŠ1024ãã€ããã¹ããããããšãæå·åãããŠããªã圢åŒã§æ¬¡ã®3ãããã€ããç°¡åã«ååŸã§ããŸãã ãŸããå é ãã1024ãã€ãã®ãªãã»ããã«ãŸã£ããåã3ãããã€ãããããã¡ã€ã«ãããå Žåããã¡ã€ã«ã®å é ãäžèŽããå¯èœæ§ãé«ããªããŸãã ãããŠãããã«1024ãã€ãã®ã¬ã³ããååŸããŸãã
ãã¯ãªãŒã³ãªãWindows XPãå ¥ããŠWindowsãã©ã«ããŒã調ã¹ããšã8315åã®ãã¡ã€ã«ãããã«ãããŸãã é »ç¹ã«äœ¿çšãããWindows 8.1ãã¡ã€ã«ã§ã¯ã20äžãè¶ ããŸãã ãããã®å€ããæå·åããããã©ã€ãäžã®ãã¡ã€ã«ãšäžèŽããå¯èœæ§ã¯ååã§ãã
ãã®ãããå©çšå¯èœãªWindowsã€ã³ã¹ããŒã«ïŒåãããŒãžã§ã³ã§ãåæ§ã®æŽæ°ããã°ã©ã ã䜿çšããããšãæãŸããïŒããDLLããã³EXEãã¡ã€ã«ã®ã€ã³ããã¯ã¹ãäœæããå Žåãããããããã§è²åãå®å šã«åŸ©å ã§ããŸãã
ãŸããã¬ã³ããã©ã°ã¡ã³ããåãåã£ãããäžæã®ãã¡ã€ã«ã埩å ããããšãã§ããŸãã
èŠç¹ãšèœãšãç©Ž
æå·åããããã£ã¹ã¯ã®ãæåããªã«ããªã®é£ããã¯ããã®ããã»ã¹ã«ããªãã®æéïŒæéïŒããããã倧éã®ç©ºããã£ã¹ã¯å®¹éãå¿ èŠã«ãªãããšã§ãã 空ã®ãã£ã¹ã¯ãæã£ãŠãããŠãŒã¶ãŒã¯ã»ãšãã©ãªãããã®ããªã¥ãŒã ã¯æå·åããããã£ã¹ã¯ã®ããªã¥ãŒã 以äžã§ãã ãããŠãæå·ãããªãªãžãã«ãå®éšããããšã¯èªæ®ºã«äŒŒãŠããŸãã
ãããã£ãŠãè¿ãå°æ¥ããã¹ãŠããSMSã䜿çšããã«ããã°ãã埩å ã§ãããŠãŒãã£ãªãã£ãç»å Žããããšã¯èããããŸããã ããããçŸåšæäŸãããŠãããã®ãšæ¯èŒããŠãããå®å šãªããŒã¿å埩ã®ããã®ãµãŒãã¹ã®åºçŸãæåŸ ã§ããŸãã
é¢é£ãœãããŠã§ã¢ãéçºããã¿ã¹ã¯ã¯ãããŒã¿å埩ãå°éãšããäŒæ¥ã«ãã£ãŠåŠçãããå¯èœæ§ãé«ããªããŸãã 圌ãã¯ãã®ãããªåé¡ã解決ããã®ã«ãŸãšããªçµéšãæã€ã¹ãã§ãã
ãã ããæå·åããã»ã¯ã¿ãéžæããã¢ã«ãŽãªãºã ïŒè§£èªããå¿ èŠãããããšãæå³ããŸãïŒã«ããšã©ãŒãå«ãŸããŠããããšãå¿ããªãã§ãã ããïŒNTFSæ§é ã®è§£ææãªã©ïŒãããã¯çµæã«åœ±é¿ããå¯èœæ§ããããŸãã
ãã®ææ³ã䜿çšããŠããŒããã£ã¹ã¯ããããŒã¿ãå埩ããã«ã¯ããã¥ãŒãªã¹ãã£ãã¯ã䜿çšããå¿ èŠããããŸãã 埩æ§ã®çšåºŠã¯å€ãã®èŠå ïŒãã£ã¹ã¯ãµã€ãºãå å¡«ããã³æçåã®çšåºŠïŒã«äŸåããå€ãã®ããããªãã¯ããã¡ã€ã«ïŒå€ãã®ãã·ã³ã§åããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã³ãœãããŠã§ã¢è£œåã®ã³ã³ããŒãã³ãïŒãå«ã倧容éãã£ã¹ã¯ã§100ïŒ ã«éããŸãã
æ®å¿µãªããããã®èšäºã§ææ¡ãããŠããæ¹æ³ã§ã¯ãèµ·åæã«ç®¡çè æš©éãååŸã§ããªãã£ãå ŽåãNotPetyaã䜿çšããAESã¢ã«ãŽãªãºã ã§æå·åããããã¡ã€ã«ã解èªããããšã¯ã§ããŸããã
äžèšã®æ¹æ³ãæãä»ãããšãã§ããææ¡ã«ã€ããŠãAlexander PeslyakïŒSolar DesignerïŒã«æè¬ããŸãã
Positive Technologiesãã¢ããªã±ãŒã·ã§ã³åæ責任è ãDmitry Sklyarovã«ããæçš¿ã