
6æäžæ¬ãã«ã¶ãã¹ã¿ã³ã§ã®ã³ãããŠã€ã«ã¹ãšã®æŠããæ¬æ ŒåããŸãããäºä»¶ã®å¢å ã«èŠéã鳎ããïŒãã®åŸãNursultan Nazarbayevå倧統é ã§ããææããïŒãå°æ¹èªæ²»äœã¯ãã¹ãŠã®ã·ã§ããã³ã°ããã³ãšã³ã¿ãŒãã€ã¡ã³ãã»ã³ã¿ãŒããã§ãŒã³ã¹ãã¢ãåžå Žããã¶ãŒã«ãåã³ééããããšã決å®ããŸãããåœæããµã€ããŒç¯çœªè ã¯ãã®ç¶æ³ãå©çšããŠããã·ã¢ãåœéçãªäŒæ¥ã«æªæã®ããã¡ãŒã«ãéä¿¡ããŠããŸããã
ã«ã¶ãã¹ã¿ã³å ±ååœã®ä¿å¥å€§è£ã®èšŽããè£ ã£ãå±éºãªæçŽã¯ãè åšæ€åºã·ã¹ãã ïŒTDSïŒã°ã«ãŒãIBã«ãã£ãŠååãããŸãããæ·»ä»ãã¡ã€ã«ã«ã¯ãèµ·åæã«ãææããã³ã³ãã¥ãŒã¿ãŒãããã°ã€ã³ãšãã¹ã¯ãŒããçãããã«èšèšãããLoki PWSïŒPassword StealerïŒãã¡ããªãŒã®æªæã®ããããã°ã©ã ãã€ã³ã¹ããŒã«ããããã¥ã¡ã³ããå«ãŸããŠããŸãããå°æ¥çã«ã¯ãæ»æè ã¯ãããã䜿çšããŠãéèè©æ¬ºãã¹ãã€è¡çºã®ããã«é»åã¡ãŒã«ã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ããããããã«ãŒãã©ãŒã©ã ã§è²©å£²ãããããå¯èœæ§ããããŸãã
ãã®èšäºã§ã¯ãCERT-GIBã®ã¢ããªã¹ãã§ããNikita KarpovããçŸåšæã人æ°ã®ããããŒã¿ã¹ãã£ãŒã©ãŒã®1ã€ã§ããLokiã®ã€ã³ã¹ã¿ã³ã¹ã調ã¹ãŸãã
仿¥ã¯ããããã®äººæ°ã®ããããŒãžã§ã³ã®1ã€ã§ãã1.8ã«ã€ããŠæ€èšããŸããããã¯æŽ»çºã«è²©å£²ãããŠããã管çããã«ã¯ãããªãã¯ãã¡ã€ã³ã«ããããŸãïŒããã
管çããã«ã®äŸïŒ

Lokiã¯C ++ã§èšè¿°ãããŠãããææããã³ã³ãã¥ãŒã¿ãŒãããŠãŒã¶ãŒæ å ±ãçãããã«äœ¿çšãããæã人æ°ã®ãããã«ãŠã§ã¢ã®1ã€ã§ããç§ãã¡ã®æä»£ã®æšå-身代éãŠã€ã«ã¹-DataStealerã¯ã被害è ã®ã³ã³ãã¥ãŒã¿ãŒã«æ»æãããåŸãéåžžã«é«éã§ã¿ã¹ã¯ãå®è¡ããŸã-è¶³å Žãç¯ããŠã·ã¹ãã ã§ã®ç¹æš©ãå¢ããå¿ èŠã¯ãªããæ»æãã身ãå®ãæéã¯ã»ãšãã©ãããŸããããããã£ãŠããŠãŒã¶ãŒããŒã¿ãçããã«ãŠã§ã¢ã®ã€ãã³ãã§ã¯ãã€ã³ã·ãã³ãã®èª¿æ»ãäž»ãªåœ¹å²ãæãããŸãã
å®è¡å¯èœãªãã«ãŠã§ã¢ãã³ããè§£åããŠååŸãã
ã»ãšãã©ã®å Žåãé åžã¯ã¡ãŒãªã³ã°ãªã¹ãã®æ·»ä»ãã¡ã€ã«ãä»ããŠè¡ãããŸããæ£åœãªãã¡ã€ã«ãè£ ã£ããŠãŒã¶ãŒãæ·»ä»ãã¡ã€ã«ãããŠã³ããŒãããŠéãããã«ãŠã§ã¢ãèµ·åããŸãã
æ³šå ¥ããŒã«ãŒã¯ãããŒããŒã®ååšã瀺åããŠããŸãã

DIEã®å©ããåããŠããœãŒã¹ãã¡ã€ã«ãVB6ã§æžã蟌ãŸããŠãããšããæ å ±ãååŸããŸãã

ãšã³ããããŒã°ã©ãã¯ã倧éã®æå·åãããããŒã¿ã瀺ããŠããŸãã

èµ·åããããšãæåã®ããã»ã¹ã¯åããã»ã¹ãäœæãããããæ³šå ¥ããŠçµäºããŸãã2çªç®ã®ããã»ã¹ã¯ããã«ãŠã§ã¢ã®åäœãæ åœããŸãããã°ãããããšãããã»ã¹ã忢ããŠã¡ã¢ãªãã³ããä¿åããŸããLokiããã³ãå ã«ããããšã確èªããã«ã¯ãã³ãã³ãã»ã³ã¿ãŒã®URLå ã調ã¹ãŸããããã¯ãã»ãšãã©ã®å Žåãfre.phpã§çµãããŸãã

Lokiãå«ãã¡ã¢ãªãã©ã°ã¡ã³ãããã³ãããPEããããŒãä¿®æ£ããŸãã
TDSãã³ãããã¯ã¹ã·ã¹ãã ã䜿çšããŠããã³ãã®ããã©ãŒãã³ã¹ã確èªããŸãã

ãããæ©èœ
éã³ã³ãã€ã«ããããã«ãŠã§ã¢ã³ãŒãã調ã¹ãéçšã§ãæäœã«å¿ èŠãªã©ã€ãã©ãªã®åæåã®çŽåŸã«å®è¡ããã4ã€ã®é¢æ°ãå«ãéšåãèŠã€ãããŸããããããã®ãããããå éšã§åè§£ããåŸããã«ãŠã§ã¢ã®ç®çãšæ©èœã決å®ããŸãã

颿°åã¯ãããããããããããã«ååã倿ŽãããŸããã
ãããã®æ©èœã¯ã次ã®2ã€ã®äž»èŠãªæ©èœã«ãã£ãŠæ±ºå®ãããŸãã
- Data Stealerã¯ã101åã®ã¢ããªã±ãŒã·ã§ã³ããããŒã¿ãçãã§ãµãŒããŒã«éä¿¡ããæåã®æ©èœã§ãã
- ããŠã³ããŒããŒ-å®è¡ã®ããã®CnCïŒã³ãã³ãïŒã³ã³ãããŒã«ïŒã³ãã³ãããã®èŠæ±ã
䟿å®äžã次ã®è¡šã«ã調æ»å¯Ÿè±¡ã®Lokiã€ã³ã¹ã¿ã³ã¹ãããŒã¿ãçãããšãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã瀺ããŸãã
æ©èœID | å¿çš | æ©èœID | å¿çš | æ©èœID | å¿çš |
---|---|---|---|---|---|
1 | Mozilla Firefox | 35 | FTPInfo | 69 | ClassicFTP |
2 | ã³ã¢ãã¢ã€ã¹ãã©ãŽã³ | 36 | LinasFTP | 70 | PuTTY / KiTTY |
3 | ã¢ããã«ãµãã¡ãª | 37 | FileZilla | 71 | ãµã³ããŒããŒã |
4 | K-ã¡ã¬ãªã³ | 38 | ã¹ã¿ãã-FTP | 72 | Foxmail |
äº | æµ·ç¿ | 39 | BlazeFtp | 73 | ãã³ã¡ã€ã« |
6 | 矀ã | 40 | NETFile | 74 | IncrediMail |
7 | NETGATE BlackHawk | 41 | GoFTP | 75 | Gmailéç¥ãã |
8 | ã«ãã¹ã±ãŒã | 42 | ALFTP | 76 | ã¡ãŒã«ããã§ãã¯ãã |
ãã€ã³ | ã°ãŒã°ã«ã¯ããŒã | 43 | DeluxeFTP | 77 | WinFtp |
å | ãªãã© | 44 | ç·åžä»€å® | 78 | ããŒãã£ã³ã»ããªã¯ãªã« |
åäž | QTWebãã©ãŠã¶ | 45 | FTPGetter | 79 | 32BitFtp |
12 | QupZilla | 46 | WS_FTP | 80 | FTPããã²ãŒã¿ãŒ |
13 | ã€ã³ã¿ãŒããããšã¯ã¹ãããŒã© | 47 | ã¡ãŒã«ã¯ã©ã€ã¢ã³ãæ§æãã¡ã€ã« | 81 | éµé
ïŒsoftwarenetzïŒ |
14 | ãªãã©2 | 48 | ãã«ãã«ãããŒã«ãŒ | 82 | ãªãã©ã¡ãŒã« |
15 | Cyberââfox | 49 | ããŒã«ãŒã¹ã¿ãŒ | 83 | ãã¹ãããã¯ã¹ |
16 | æ·¡ãæ | 50 | ExpanDrive | 84 | FossaMail |
17 | ãŠã©ãŒã¿ãŒãã©ãã¯ã¹ | 51 | ã¹ãã£ãŒã | 85 | ããããŒïŒ |
18 | ããžã³ | 52 | FlashFXP | 86 | POP3 |
19 | SuperPutty | 53 | NovaFTP | 87 | èŠéã |
20 | FTPShell | 54 | NetDrive | 88 | Ymail2 |
21 | NppFTP | 55 | ããŒã¿ã«ã³ãã³ããŒ2 | 89 | Trojitá |
22 | MyFTP | 56 | SmartFTP | 90 | TrulyMail |
23 | FTPBox | 57 | FARãããŒãžã£ãŒ | 91 | .spnãã¡ã€ã« |
24 | ã·ã§ãããFTP | 58 | Bitvise | 92 | To-Doãã¹ã¯ãªã¹ã |
25 | ä»ããFTP | 59 | RealVNC
TightVNC |
93 | ã¹ãã£ãã㌠|
26 | NexusFile | 60 | mSecure Wallet | 94 | NoteFly |
27 | Xftp | 61 | åææ§ | 95 | NoteZilla |
28 | EasyFTP | 62 | FreshFTP | 96 | ãã¹ãã€ãã |
29 | SftpNetDrive | 63 | BitKinex | 97 | KeePass |
30 | AbleFTP | 64 | UltraFXP | 98 | ãšã³ãã¹ |
31 | JaSFtp | 65 | FTP Now 2 | 99 | ç§ã®RoboForm |
32 | èªåå | 66 | Vandyk SecureFX | 100 | 1ãã¹ã¯ãŒã |
33 | ãµã€ããŒãã㯠| 67 | Odin Secure FTP Expert | 101 | Mikrotik WinBox |
34 | ãã«ã·ã³ã¯ | 68 | ããªã³ã° |
ãããã¯ãŒãã³ã°
ãããã¯ãŒã¯ã®çžäºäœçšãèšé²ããããã«å¯ŸåŠããå¿ èŠããã2ã€ã®åé¡ããããŸãã
- ã³ãã³ãã»ã³ã¿ãŒã¯ãæ»ææã«ã®ã¿äœ¿çšã§ããŸãã
- Wiresharkã¯ã«ãŒãããã¯ã§ãããéä¿¡ãèšé²ããªããããä»ã®ææ®µã䜿çšããå¿ èŠããããŸãã
æãç°¡åãªè§£æ±ºçã¯ãLokiãéä¿¡ããCnCã¢ãã¬ã¹ãlocalhostã«è»¢éããããšã§ãããããã®å ŽåããµãŒããŒã¯å¿çããŸãããããã€ã§ã䜿çšã§ããããã«ãªããŸãããããããã®éä¿¡ãèšé²ããå¿ èŠã¯ãããŸããã2çªç®ã®åé¡ã解決ããããã«ãRawCapãŠãŒãã£ãªãã£ã䜿çšããŸããããã«ãããpcapã«å¿ èŠãªéä¿¡ãèšè¿°ã§ããŸããæ¬¡ã«ãWiresharkã§èšé²ãããpcapãè§£æããŸãã

åéä¿¡ã®åã«ããããã¯CnCã®å¯çšæ§ããã§ãã¯ããå©çšå¯èœãªå Žåã¯ãœã±ãããéããŸãããã¹ãŠã®ãããã¯ãŒã¯éä¿¡ã¯ãTCPãããã³ã«ã䜿çšããŠãã©ã³ã¹ããŒãã¬ãã«ã§è¡ãããã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã§ã¯HTTPã䜿çšãããŸãã
次ã®è¡šã¯ãLokiãæšæºã§äœ¿çšãããã±ããããããŒã瀺ããŠããŸãã
ãã£ãŒã«ã | å€ | 説æ |
---|---|---|
ãŠãŒã¶ãŒãšãŒãžã§ã³ã | Mozilla / 4.08ïŒCharon; InfernoïŒ | Lokiã®å žåçãªãŠãŒã¶ãŒãšãŒãžã§ã³ã |
åãå ¥ãã | * / * | |
ã³ã³ãã³ãã¿ã€ã | ã¢ããªã±ãŒã·ã§ã³/ãªã¯ãããã¹ããªãŒã | |
ã³ã³ãã³ããšã³ã³ãŒãã£ã³ã° | ãã€ã㪠| |
ã³ã³ãã³ãã㌠| 7DE968CC | 以åã®ããããŒã®ããã·ã¥çµæïŒããã·ã¥ã¯ãå€é åŒ0xE8677835ã䜿çšããã«ã¹ã¿ã CRCã¢ã«ãŽãªãºã ã«ãã£ãŠå®è¡ãããŸãïŒ |
æ¥ç¶ | éãã |
- èšé²ãããããŒã¿ã®æ§é ã¯ãããã®ããŒãžã§ã³ã«ãã£ãŠç°ãªãã以åã®ããŒãžã§ã³ã§ã¯ãæå·åãšå§çž®ã®ãªãã·ã§ã³ãæ åœãããã£ãŒã«ãã¯ãããŸããã
- ãµãŒããŒã¯ãèŠæ±ã®ã¿ã€ãã«ãã£ãŠãåä¿¡ããããŒã¿ã®åŠçæ¹æ³ã決å®ããŸãããµãŒããŒãèªã¿åãããšãã§ããããŒã¿ã«ã¯ã次ã®7çš®é¡ããããŸãã
- 0x26çãŸãããŠã©ã¬ããããŒã¿
- 0x27çãŸããã¢ããªã±ãŒã·ã§ã³ããŒã¿
- 0x28ãµãŒããŒããã®ã³ãã³ãèŠæ±
- 0x29çãŸãããã¡ã€ã«ã®ã¢ã³ããŒã
- 0x2A POS
- 0x2BããŒãã¬ãŒããŒã¿
- 0x2Cã¹ã¯ãªãŒã³ã·ã§ãã
- 調ã¹ãäŸã§ã¯ã0x27ã0x28ãããã³0x2Bã®ã¿ãååšããŠããŸããã
- åãªã¯ãšã¹ãã«ã¯ãããããšææããã·ã¹ãã ã«é¢ããäžè¬çãªæ å ±ãå«ãŸããŠããŸããããã«ããããµãŒããŒã¯1å°ã®ãã·ã³ã®ãã¹ãŠã®ã¬ããŒããèå¥ãããªã¯ãšã¹ãã®ã¿ã€ãã«å¿ããæ å ±ããããŸãã
- ãããã®ææ°ããŒãžã§ã³ã§ã¯ãããŒã¿å§çž®ã®ã¿ãå®è£ ãããŠãããæå·åããããã£ãŒã«ãã¯å°æ¥ã®ããã«æºåããããµãŒããŒã«ãã£ãŠåŠçãããŸããã
- ãªãŒãã³ãœãŒã¹ã®APLibã©ã€ãã©ãªã¯ãããŒã¿ã®å§çž®ã«äœ¿çšãããŸãã
çãŸããããŒã¿ã䜿çšããŠãªã¯ãšã¹ããäœæããå Žåããããã¯ãµã€ãº0x1388ïŒ5000ãã€ãïŒã®ãããã¡ãŒãå²ãåœãŠãŸãã0x27ãªã¯ãšã¹ãã®æ§é ãæ¬¡ã®è¡šã«ç€ºããŸãã
ãã€ã¢ã¹ | ãµã€ãº | å€ | 説æ |
---|---|---|---|
0x0 | 0x2 | 0x0012 | ãããããŒãžã§ã³ |
0x2 | 0x2 | 0x0027 | ãªã¯ãšã¹ãã¿ã€ãïŒçãŸããããŒã¿ã®éä¿¡ïŒ |
0x4 | 0xD | ckav.ru | ãã€ããªIDïŒXXXXX11111ãçºçããŸãïŒ |
0x11 | 0x10 | - | ãŠãŒã¶ãŒå |
0x21 | 0x12 | - | ã³ã³ãã¥ãŒã¿ããŒã |
0x33 | 0x12 | - | ã³ã³ãã¥ãŒã¿ãŒã®ãã¡ã€ã³å |
0x45 | 0x4 | - | ç»é¢ã®è§£å床ïŒå¹
ãšé«ãïŒ
|
0x49 | 0x4 | - | |
0x4D | 0x2 | 0x0001 | ãŠãŒã¶ãŒæš©éãã©ã°ïŒç®¡çè ã®å Žåã¯1ïŒ |
0x4F | 0x2 | 0x0001 | SIDãã©ã°ïŒèšå®ãããŠããå Žåã¯1ïŒ |
0x51 | 0x2 | 0x0001 | ã·ã¹ãã ããããã¹ãã©ã°ïŒx64ã®å Žåã¯1ïŒ |
0x53 | 0x2 | 0x0006 | WindowsããŒãžã§ã³ïŒã¡ãžã£ãŒããŒãžã§ã³çªå·ïŒ |
0x55 | 0x2 | 0x0001 | WindowsããŒãžã§ã³ïŒãã€ããŒããŒãžã§ã³çªå·ïŒ |
0x57 | 0x2 | 0x0001 | 远å ã®ã·ã¹ãã æ å ±ïŒ1 = VER_NT_WORKSTATIONïŒ |
0x59 | 0x2 | - | |
0x5B | 0x2 | 0x0000 | çãŸããããŒã¿ã¯éä¿¡ãããŸããã |
0x5D | 0x2 | 0x0001 | ããŒã¿å§çž®ã䜿çšãããŸãã |
0x5F | 0x2 | 0x0000 | å§çž®ã¿ã€ã |
0x61 | 0x2 | 0x0000 | ããŒã¿æå·åã䜿çšãããŸãã |
0x63 | 0x2 | 0x0000 | æå·åã®çš®é¡ |
0x65 | 0x36 | - | MachineGuidã¬ãžã¹ã¿å€ããã®MD5 |
0x9B | - | - | å§çž®ãããçé£ããŒã¿ |
ãããã¡ãŒãµã€ãºïŒ0x2BCïŒ700ãã€ãïŒ
ãã€ã¢ã¹ | ãµã€ãº | å€ | 説æ |
---|---|---|---|
0x0 | 0x2 | 0x0012 | ãããããŒãžã§ã³ |
0x2 | 0x2 | 0x0028 | ãªã¯ãšã¹ãã¿ã€ãïŒã³ãã³ãã»ã³ã¿ãŒããã®ã³ãã³ããªã¯ãšã¹ãïŒ |
0x4 | 0xD | ckav.ru | ãã€ããªIDïŒXXXXX11111ãçºçããŸãïŒ |
0x11 | 0x10 | - | ãŠãŒã¶ãŒå |
0x21 | 0x12 | - | ã³ã³ãã¥ãŒã¿ããŒã |
0x33 | 0x12 | - | ã³ã³ãã¥ãŒã¿ãŒã®ãã¡ã€ã³å |
0x45 | 0x4 | - | ç»é¢ã®è§£å床ïŒå¹ ãšé«ãïŒ |
0x49 | 0x4 | - | |
0x4D | 0x2 | 0x0001 | ãŠãŒã¶ãŒæš©éãã©ã°ïŒç®¡çè ã®å Žåã¯1ïŒ |
0x4F | 0x2 | 0x0001 | SIDãã©ã°ïŒèšå®ãããŠããå Žåã¯1ïŒ |
0x51 | 0x2 | 0x0001 | ã·ã¹ãã ããããã¹ãã©ã°ïŒx64ã®å Žåã¯1ïŒ |
0x53 | 0x2 | 0x0006 | WindowsããŒãžã§ã³ïŒã¡ãžã£ãŒããŒãžã§ã³çªå·ïŒ |
0x55 | 0x2 | 0x0001 | WindowsããŒãžã§ã³ïŒãã€ããŒããŒãžã§ã³çªå·ïŒ |
0x57 | 0x2 | 0x0001 | 远å ã®ã·ã¹ãã æ å ±ïŒ1 = VER_NT_WORKSTATIONïŒ |
0x59 | 0x2 | 0xFED0 | |
0x5B | 0x36 | - | MachineGuidã¬ãžã¹ã¿å€ããã®MD5 |
ãããã¡ãµã€ãºïŒãã±ããå ã®åã³ãã³ãã«å¯ŸããŠ0x10ïŒ16ãã€ãïŒ+ 0x10ïŒ16ãã€ãïŒã
HTTPããããŒïŒããŒã¿ã®éå§ïŒ | \ r \ n \ r \ n | [0D 0A 0D 0A] | 4ãã€ã | ||
- | - | 4 | |||
2 | [00 00 00 02] | 4 | |||
4 |
4 |
4 |
4 |
() |
|
---|---|---|---|---|---|
#0
EXE- |
[00 00 00 00] | [00 00 00 00] | [00 00 00 00] | [00 00 00 23] | www.notsogood.site/malicious.exe |
#1
DLL |
[00 00 00 00] | [00 00 00 01] | [00 00 00 00] | [00 00 00 23] | www.notsogood.site/malicious.dll |
#2
EXE- |
[00 00 00 00] | [00 00 00 02] | [00 00 00 00] | [00 00 00 23] | www.notsogood.site/malicious.exe |
#8
(HDB file) |
[00 00 00 00] | [00 00 00 08] | [00 00 00 00] | [00 00 00 00] | - |
#9
|
[00 00 00 00] | [00 00 00 09] | [00 00 00 00] | [00 00 00 00] | - |
#10
|
[00 00 00 00] | [00 00 00 0A] | [00 00 00 00] | [00 00 00 00] | - |
#14
Loki |
[00 00 00 00] | [00 00 00 0E] | [00 00 00 00] | [00 00 00 00] | - |
#15
Loki |
[00 00 00 00] | [00 00 00 0F] | [00 00 00 00] | [00 00 00 23] | www.notsogood.site/malicious.exe |
ïŒ16
ãµãŒããŒããã®å¿çããã§ãã¯ããé »åºŠã倿Žãã |
[00 00 00 00] | [00 00 00 10] | [00 00 00 00] | [00 00 00 01] | äº |
ïŒ17
ãããåé€ããŠçµäºããŸã |
[00 00 00 00] | [00 00 00 11] | [00 00 00 00] | [00 00 00 00] | - |
ãããã¯ãŒã¯ãã©ãã£ãã¯ããŒãµãŒ
ãã®åæã®ãããã§ãLokiã®ãããã¯ãŒã¯çžäºäœçšãè§£æããããã«å¿ èŠãªãã¹ãŠã®æ å ±ãåŸãããŸããã
ããŒãµãŒã¯Pythonã§å®è£ ãããå ¥åãšããŠpcapãã¡ã€ã«ãåãåãããã®äžã®Lokiã«å±ãããã¹ãŠã®éä¿¡ãæ€çŽ¢ããŸãã
ãŸããdkptã©ã€ãã©ãªã䜿çšããŠãã¹ãŠã®TCPãã±ãããæ€çŽ¢ããŸããããhttpãã±ããã®ã¿ãåä¿¡ããããã«ã䜿çšããããŒãã«ãã£ã«ã¿ãŒãèšå®ããŸããããåä¿¡ããhttpãã±ããã®äžãããããç¥ãããŠããLokiããããŒãå«ããã±ãããéžæããèªã¿åãå¯èœãªåœ¢åŒã§æ å ±ãæœåºããããã«è§£æããå¿ èŠã®ããéä¿¡ãååŸããŸãã
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
if not isinstance(eth.data, dpkt.ip.IP):
ip = dpkt.ip.IP(buf)
else:
ip = eth.data
if isinstance(ip.data, dpkt.tcp.TCP):
tcp = ip.data
try:
if tcp.dport == 80 and len(tcp.data) > 0: # HTTP REQUEST
if str(tcp.data).find('POST') != -1:
http += 1
httpheader = tcp.data
continue
else:
if httpheader != "":
print('Request information:')
pkt = httpheader + tcp.data
httpheader = ""
if debug:
print(pkt)
req += 1
request = dpkt.http.Request(pkt)
uri = request.headers['host'] + request.uri
parsed_payload['Network']['Source IP'] = socket.inet_ntoa(ip.src)
parsed_payload['Network']['Destination IP'] = socket.inet_ntoa(ip.dst)
parsed_payload_same['Network']['CnC'] = uri
parsed_payload['Network']['HTTP Method'] = request.method
if uri.find("fre.php"):
print("Loki detected!")
pt = parseLokicontent(tcp.data, debug)
parsed_payload_same['Malware Artifacts/IOCs']['User-Agent String'] = request.headers['user-agent']
print(json.dumps(parsed_payload, ensure_ascii=False, sort_keys=False, indent=4))
parsed_payload['Network'].clear()
parsed_payload['Compromised Host/User Data'].clear()
parsed_payload['Malware Artifacts/IOCs'].clear()
print("----------------------")
if tcp.sport == 80 and len(tcp.data) > 0: # HTTP RESPONCE
resp += 1
if pt == 40:
print('Responce information:')
parseC2commands(tcp.data, debug)
print("----------------------")
pt = 0
except(dpkt.dpkt.NeedData, dpkt.dpkt.UnpackError):
continue
ãã¹ãŠã®Lokiãªã¯ãšã¹ãã§ã¯ãæåã®4ãã€ãããããã®ããŒãžã§ã³ãšãªã¯ãšã¹ãã¿ã€ããæ åœããŸãããããã®2ã€ã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠãããŒã¿ã®åŠçæ¹æ³ã決å®ããŸãã
def parseLokicontent(data, debug):
index = 0
botV = int.from_bytes(data[0:2], byteorder=sys.byteorder)
parsed_payload_same['Malware Artifacts/IOCs']['Loki-Bot Version'] = botV
payloadtype = int.from_bytes(data[2:4], byteorder=sys.byteorder)
index = 4
print("Payload type: : %s" % payloadtype)
if payloadtype == 39:
parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Application/Credential Data"
parse_type27(data, debug)
elif payloadtype == 40:
parsed_payload['Network']['Traffic Purpose'] = "Get C2 Commands"
parse_type28(data, debug)
elif payloadtype == 43:
parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Keylogger Data"
parse_type2b(lb_payload)
elif payloadtype == 38:
parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Cryptocurrency Wallet"
elif payloadtype == 41:
parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Files"
elif payloadtype == 42:
parsed_payload['Network'].['Traffic Purpose'] = "Exfiltrate POS Data"
elif payloadtype == 44:
parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Screenshots"
return payloadtype
次ã®è¡ã¯ããµãŒããŒããã®å¿çãè§£æããããšã§ããæçšãªæ å ±ã®ã¿ãèªã¿åãã«ã¯ã\ r \ n \ r \ nã·ãŒã±ã³ã¹ãæ¢ããŸããããã¯ããã±ããããããŒã®çµãããšãµãŒããŒããã®ã³ãã³ãã®å§ãŸããå®çŸ©ããŸãã
def parseC2commands(data, debug):
word = 2
dword = 4
end = data.find(b'\r\n\r\n')
if end != -1:
index = end + 4
if (str(data).find('<html>')) == -1:
if debug:
print(data)
fullsize = getDWord(data, index)
print("Body size: : %s" % fullsize)
index += dword
count = getDWord(data, index)
print("Commands: : %s" % count)
if count == 0:
print('No commands received')
else:
index += dword
for i in range(count):
print("Command: %s" % (i + 1))
id = getDWord(data, index)
print("Command ID: %s" % id)
index += dword
type = getDWord(data, index)
print("Command type: %s" % type)
index += dword
timelimit = getDWord(data, index)
print("Command timelimit: %s" % timelimit)
index += dword
datalen = getDWord(data, index)
index += dword
command_data = getString(data, index, datalen)
print("Command data: %s" % command_data)
index += datalen
else:
print('No commands received')
return None
ããã§ããŒãµãŒã®ã¢ã«ãŽãªãºã ã®äž»èŠéšåã®åæãçµäºããåºåã§åŸãããçµæã«ç§»ããŸãããã¹ãŠã®æ å ±ã¯json圢åŒã§è¡šç€ºãããŸãã
以äžã¯ãããŸããŸãªãããã®éä¿¡ããååŸãããããŸããŸãªCnCã䜿çšããããŸããŸãªç°å¢ã§èšé²ãããããŒãµãŒã®äœæ¥çµæã®ç»åã§ãã
Request information:
Loki detected!
Payload type: 39
Decompressed data:
{'Module': {'Mozilla Firefox'}, 'Version': {0}, 'Data': {'domain': {'https://accounts.google.com'}, 'username': {'none@gmail.com'}, 'password': {'test'}}}
{'Module': {'NppFTP'}, 'Version': {0}, 'Data': {b'<?xml version="1.0" encoding="UTF-8" ?>\r\n<NppFTP defaultCache="%CONFIGDIR%\\Cache\\%USERNAME%@%HOSTNAME%" outputShown="0" windowRatio="0.5" clearCache="0" clearCachePermanent="0">\r\n <Profiles />\r\n</NppFTP>\r\n'}}
{
"Network": {
"Source IP": "-",
"Destination IP": "185.141.27.187",
"HTTP Method": "POST",
"Traffic Purpose": "Exfiltrate Application/Credential Data",
"First Transmission": true
},
"Compromised Host/User Data": {},
"Malware Artifacts/IOCs": {}
}
äžèšã¯ããµãŒããŒ0x27ïŒã¢ããªã±ãŒã·ã§ã³ããŒã¿ã®ã¢ããããŒãïŒãžã®èŠæ±ã®äŸã§ãããã¹ãã®ããã«ãã¢ã«ãŠã³ãã¯Mozilla FirefoxãNppFTPãFileZillaã®3ã€ã®ã¢ããªã±ãŒã·ã§ã³ã§äœæãããŸãããLokiã«ã¯ãã¢ããªã±ãŒã·ã§ã³ããŒã¿ãèšé²ããããã®3ã€ã®ãªãã·ã§ã³ããããŸãã
- SQLããŒã¿ããŒã¹ã®åœ¢åŒïŒããŒãµãŒã¯ããŒã¿ããŒã¹ãä¿åãããã®äžã®äœ¿çšå¯èœãªãã¹ãŠã®è¡ã衚瀺ããŸãïŒã
- äŸã®Firefoxã®ããã«ãéãã圢åŒã§ã
- NppFTPãFileZillaã®ãããªxmlãã¡ã€ã«ãšããŠã
Request information:
Loki detected!
Payload type: 39
No data stolen
{
"Network": {
"Source IP": "-",
"Destination IP": "185.141.27.187",
"HTTP Method": "POST",
"Traffic Purpose": "Exfiltrate Application/Credential Data",
"First Transmission": false
},
"Compromised Host/User Data": {},
"Malware Artifacts/IOCs": {}
}
2çªç®ã®èŠæ±ã¯ã¿ã€ã0x28ã§ããµãŒããŒããã®ã³ãã³ããèŠæ±ããŸãã
Responce information:
Body size: 26
Commands: 1
Command: 1
Command ID: 0
Command type: 9
Command timelimit: 0
Command data: 35
ããŒãã¬ãŒã®éå§ã«å¿çããŠ1ã€ã®ã³ãã³ããéä¿¡ããCnCããã®å¿çã®äŸããããŠããã®åŸã®ããŒãã¬ãŒããŒã¿ã®ã¢ã³ããŒãã
Request information:
Loki detected!
Payload type: : 43
{
"Network": {
"Source IP": "-",
"Destination IP": "185.141.27.187",
"HTTP Method": "POST",
"Traffic Purpose": "Exfiltrate Keylogger Data"
},
"Compromised Host/User Data": {},
"Malware Artifacts/IOCs": {}
}
äœæ¥ã®æåŸã«ãããŒãµãŒã¯ãããããã®åèŠæ±ã«å«ãŸããæ å ±ïŒããããšã·ã¹ãã ã«é¢ããæ å ±ïŒãããã³Lokiã«é¢é£ä»ããããèŠæ±ãšå¿çã®æ°ãpcapãã¡ã€ã«ã«åºåããŸãã
General information:
{
"Network": {
"CnC": "nganyin-my.com/chief6/five/fre.php"
},
"Compromised Host/User Description": {
"User Name": "-",
"Hostname": "-",
"Domain Hostname": "-",
"Screen Resolution": "1024x768",
"Local Admin": true,
"Built-In Admin": true,
"64bit OS": false,
"Operating System": "Windows 7 Workstation"
},
"Malware Artifacts/IOCs": {
"Loki-Bot Version": 18,
"Binary ID": "ckav.ru",
"MD5 from GUID": "-",
"User-Agent String": "Mozilla/4.08 (Charon; Inferno)"
}
}
Requests: 3
Responces: 3
å®å šãªããŒãµãŒã³ãŒãã¯ãgithub.com / Group-IB / LokiParserã§å ¥æã§ããŸãã
çµè«
ãã®èšäºã§ã¯ãLokiãã«ãŠã§ã¢ã詳ãã調ã¹ããã®æ©èœãåè§£ããã€ã³ã·ãã³ãåæããã»ã¹ãå€§å¹ ã«ç°¡çŽ åããææããã³ã³ãã¥ãŒã¿ãŒããäœãçãŸããããæ£ç¢ºã«çè§£ããã®ã«åœ¹ç«ã€ãããã¯ãŒã¯ãã©ãã£ãã¯ããŒãµãŒãå®è£ ããŸãããLokiã®éçºã¯ãŸã é²è¡äžã§ãããããŒãžã§ã³1.8ïŒããã³ãã以åïŒã®ã¿ãããŒãžãããŠããŸããããã¯ãã»ãã¥ãªãã£ã®å°éå®¶ãæ¯æ¥ééããããŒãžã§ã³ã§ãã
次ã®èšäºã§ã¯ãå¥ã®äººæ°ã®ããããŒã¿ã¹ãã£ãŒã©ãŒã§ãããããŒãåæãããããã®ãã«ãŠã§ã¢ãæ¯èŒããŸãã
äŸµå®³ã®ææšïŒIOCïŒïŒ
ãŠã«ã¹ïŒ
- nganyin-my.com/chief6/five/fre.php
- wardia.com.pe/wp-includes/texts/five/fre.php
- broken2.cf/Work2/fre.php
- 185.141.27.187/danielsden/ver.php
- MD5ããã·ã¥ïŒB0C33B1EF30110C424BABD66126017E5
- User-Agent String: «Mozilla/4.08 (Charon; Inferno)»
- Binary ID: «ckav.ru»