概述
奇安信威胁情报中心红雨滴团队在日常的威胁狩猎过程中发现,Donot组织的攻击活动从去年年末就保持着较高的频率,这个趋势一直延续到今年。在今年1月底,我们还捕获到该组织以克什米尔地区相关文档为诱饵的攻击样本[1]。
在对近期捕获的Donot样本进行梳理后,我们发现该组织的主要攻击流程仍保持着一贯的风格,但攻击者也在尝试不同的恶意代码植入手段,变换着攻击组件的代码细节,因此本文将对Donot组织近期攻击手法做一个简单的汇总。
Donot常通过携带宏的文档执行shellcode下载后续DLL组件,进一步下载诸如木马插件管理器和木马插件的恶意DLL。在以克什米尔地区相关文档为诱饵的攻击样本中,攻击者则直接通过自解压rar压缩包投递下载器DLL组件。此外,在某些攻击活动中,Donot组织还使用EXE组件,借助宏文档直接释放压缩包,解压出其中的EXE组件下载后续。
DLL组件植入方式
宏文档
Donot使用的宏文档类样本其中部分文件信息如下表所示。
MD5 |
大小 |
文件名 |
VT上传时间 |
文件创建时间 |
06adbb4ba31a52cc5c9258bf6d99812c |
144384字节 |
REQUIREMENT LIST OF SPARES.xls |
2022-11-30 12:04:38 UTC |
2021-08-09 13:30:37 UTC |
d98e2d7c8e91a9d8e87abe744f6d43f9 |
602624字节 |
Monthly Action Plan.xls |
2022-12-22 10:42:28 UTC |
2021-08-09 13:30:37 UTC |
c839d8a01c97407526b3407022823c8a |
603136字节 |
2023-01-24 05:10:11 UTC |
2021-08-09 13:30:37 UTC |
|
1c4fb7c41e7928bfb74784d910522771 |
91781字节 |
PMDU Report 8-2-23.doc |
2023-02-13 08:59:03 UTC |
2021-03-30 12:06:00 UTC |
e1d235c95a7c06b1203048972cf179fa |
69296字节 |
Cyber Security Instructions.doc |
2023-02-28 05:22:09 UTC |
2021-03-30 12:06:00 UTC |
6de75b200652eefa4a6a3bb84da7f798 |
603136字节 |
TRAINING NOMINATION.xls |
2023-03-02 04:09:53 UTC |
2021-08-09 13:30:37 UTC |
0ec8911f9764ea7b254ea19cd171535e |
87870字节 |
2023-03-03 10:01:33 UTC |
2021-03-30 12:06:00 UTC |
从上面可以看出,xls和docx类文档分别具有一致的创建时间,说明这些攻击样本可能基于相同的原始文档生成。
(1) VBA
VBA代码以字母ijl大小写生成的名称对变量名和函数名进行混淆,调用NtAllocateVirtualMemory分配内存,通过WideCharToMultiByte函数将编码后的shellcode按照文档使用的字符编码方式进行解码,然后调用EnumUILanguages函数执行shellcode。具体解码执行的shellcode根据系统位数而定。
(2) Shellcode
通过hash导入API,导入时会异或0xBAADC0D3。
调用urlmon.dll模块的URLDownloadToCacheFileA函数下载后续,后续URL如下:
http://orangevisitorss.buzz/QcM8y7FsH12BUbxY/XNJxFhZdMSJzq1tRyF47ZXLIdqNGRqiHQQHL6DJIjl2IoxUA.png |
获取的第二阶段shellcode首先按字节异或进行自解密,然后导入相关API。调用Wow64DisableWow64FsRedirection关闭文件系统重定向。通过GetLocalTime获取系统时间,如果当前时间大于硬编码的日期则shellcode结束运行。如下图所示,下面硬编码的日期为0x7e70214,可分解为0x07e7-0x02-0x14,转换为10进制为2023-02-20。
依次检查各个杀软驱动文件在”C:WindowsSystem32drivers”目录下是否存在。如果某个杀软驱动存在,则根据当前日期是否大于相应内置时间点决定给该杀软有关的标记变量赋值:小于等于该时间点赋值为1,大于则为2。
杀软驱动文件名称 |
相关厂商 |
gzflt.sys |
Bitdefender |
klif.sys |
Kaspersky |
ehdrv.sys |
ESET |
aswsp.sys |
Avast |
bsfs.sys |
Quick Heal |
360AvFlt.sys |
360 |
无任何杀软的情况下,调用URLDownloadToFileA下载后续载荷,保存为当前用户temp目录下的Unincored.dll文件,即”%tmp%Unincored.dll”。获取后续的URL为:
http://orangevisitorss.buzz/QcM8y7FsH12BUbxY/XNJxFhZdMSJzq1tRyF47ZXLIdqNGRqiHQQHL6DJIjl2IoxUA.mp4 |
在有杀软存在的情况下,如果相应标记变量为2,则直接通过执行int3中断或者其他指令触发中断或异常,终止shellcode运行。如果标记变量为1,某些杀软对应的shellcode执行情况与无杀软时一致;而在另一些杀软存在时,会加载bcrypt.dll,将后续shellcode复制到bcrypt.dll映射的内存中执行。
宏代码启动的32位版本shellcode与64位基本一致,不过下载后续shellcode和DLL载荷的URL有所不同。
后续载荷类型 |
URL |
Shellcode |
http://orangevisitorss.buzz/QcM8y7FsH12BUbxY/XNJxFhZdMSJzq1tRyF47ZXLIdqNGRqiHQQHL6DJIjl2IoxUA.ico |
DLL |
http://orangevisitorss.buzz/QcM8y7FsH12BUbxY/XNJxFhZdMSJzq1tRyF47ZXLIdqNGRqiHQQHL6DJIjl2IoxUA.mp3 |
SFX文件
SFX文件基本信息如下。
文件名 |
Kashmir Solidarity Day Material .exe |
MD5 |
4eaa63dd65fc699260306c743b46303b |
文件类型 |
WinRAR SFX |
文件大小 |
1684242字节 |
DLL组件分析
DLL三部曲
以上面SFX样本植入的DLL组件攻击流程为例进行分析。
(1) 下载器
文件名 |
dn2272iosUp.dll |
MD5 |
07a3c19bc67c5f44c888ce75d4147ecf |
文件类型 |
pe32 dll |
文件大小 |
296960字节 |
编译时间 |
2023-01-10 14:16:06 UTC |
SFX文件调用dn2272iosUp.dll的导出函数StTskloipy。该函数将DLL当前文件路径经AES加密后写入”C:Users[user]AppDataLocalwindin.txt”。如果该DLL在当前用户的temp目录中不存在,则复制到temp目录下。然后通过COM接口设置计划任务调用另一个导出函数SDtuiopnhukm。
除了直接调用COM接口,Donot组织在其他下载器DLL中还采用过释放并执行bat文件的方式设置计划任务。释放的bat文件运行schtasks命令,执行完毕再将bat文件删除。
下载器dn2272iosUp.dll的另一个导出函数SDtuiopnhukm先创建互斥量”olgui1Pigg”保证单例运行。创建”C:Users[user]AppDataLocalNsget”目录。通过注册表收集本机安装的软件信息。
获取当前用户名、计算机名,以及通过cpuid指令获取CPU标识信息,将这三者组合为受害者标识(victim id)。拼接victim id和收集的软件信息,并以”|||S4”为结尾标识符,对这些信息进行AES加密并用Base64编码。加密数据作为POST请求的batac参数发送给C2服务器。回传信息的URL如下:
https://briefdeal.buzz/Treolekomana/recopereta |
如果C2服务器有响应,则请求下载后续组件WingMndre.dll。拼接victim id和后续组件的名字,加密后作为POST请求的data参数。下载后续DLL的URL如下:
https://briefdeal.buzz/Likorecasta/mikachar |
若下载成功,将WingMndre.dll保存在之前创建的Nsget目录下。删除导出函数StTskloipy执行时释放的windin.txt文件,设置计划任务调用WingMndre.dll的StConectert导出函数。因为该计划任务与运行导出函数SDtuiopnhukm时设置的计划任务同名(”OneDriveUpdaton”),相当于更改原计划任务的执行内容。
在Nsget目录下释放Uwn.txt文件,保存AES加密后的victim id。然后通过CreateProcessW调用如下格式化字符串,删除当前DLL在磁盘上的文件。
cmd.exe /C ping 1.1.1.1 -n 1 -w 3000 > Nul & Del /f /q “%s” |
(2) 插件管理器
后续组件WingMndre.dll功能为插件管理器,基本信息如下。
文件名 |
WingMndre.dll |
MD5 |
d7e123fe7fb8a5f56ec9d89f7787340d |
文件类型 |
pe32 dll |
文件大小 |
343040字节 |
编译时间 |
2023-01-24 06:42:57 UTC |
导出函数StConectert首先调用的函数sub_100112D0主体部分是一个while循环,循环开始首先向C2服务器发送victim id作为信标消息。Victim id从Nsget目录下的Uwn.txt中获取,如果该文件不存在则重新生成。值得注意的是,插件管理器解密Uwn.txt内容所使用的AES密钥与iv和下载器组件相同,而发送信标消息时使用另一套AES密钥和iv加密victim id。发送信标消息的URL为:
https://repidyard.buzz/Romexicarto/terokanama |
如果获取到C2的响应消息则进行下一步操作,否则休眠30s,进入下一次循环。
响应消息用”|”分隔,每一部分表示针对某一插件组件(包括插件管理器自身)的具体操作,捕获的一条响应消息如下所示:
CKyLongD.dll>287744>0>Kystub>0|SSrtuioUpd.dll>270848>7>Stbingo>0|FoThreeDut.dll>363520>0>StNgtop>0|RRRvso.dll>164872>0>wavervs>0|WingMndre.dll>343040>40>StConectert| |
序号 |
含义 |
说明 |
1 |
组件名称 |
|
2 |
组件大小 |
下载相应组件时进行校验 |
3 |
指令代码 |
对该组件的具体操作 |
4 |
导出函数 |
运行该组件时调用的导出函数 |
https://repidyard.buzz/xoexapolicreate/ertyprmekabiops |
指令代码 |
功能 |
说明 |
0 |
禁用 |
改变插件相关的某个变量值,等待其运行状态改变,然后卸载插件DLL |
7 |
启动 |
检查Updates目录下是否存在相应插件,若不存在则从C2服务器下载,加载插件DLL,调用指定的导出函数 |
-5 (0xFFFFFFFB) |
删除 |
首先执行插件禁用操作,然后从Updates目录删除DLL文件 |
-3 (0xFFFFFFFD) |
更新 |
首先执行插件删除操作,再执行插件启动操作(启动时因为插件不存在会从C2服务器下载) |
41 (0x29) |
更新插件管理器 |
将新的插件管理器保存到Updates目录下,释放alex.bat,通过设置计划任务进行更新,同时设置循环退出标志 |
其他 |
无操作 |
Copy C:Users[user]AppDataLocalNsgetUpdates[插件名称] C:Users[user]AppDataLocalNsget del “C:Users[user]AppDataLocalNsgetUpdates[插件名称]” schtasks /delete /tn Windows /f |
然后设置另一个计划任务”WindowsMainHawk”,执行新插件管理器的导出函数StConectert。
旧插件管理器在退出while循环后,同下载器DLL一样,会执行自删除操作。函数sub_1000A960调用CreateProcessA执行如下格式化字符串命令。
cmd.exe /C ping 1.1.1.1 -n 1 -w 3000 > Nul & Del /f /q “%s” |
(3) 插件
文件名 |
SSrtuioUpd.dll |
MD5 |
20c581284cccadd8b6193c2e1c84a900 |
文件类型 |
pe32 dll |
文件大小 |
270848字节 |
编译时间 |
2023-01-23 14:04:33 UTC |
截屏通过模拟按下截屏键完成。截屏文件保存在创建的目录”C:Users[user]AppDataLocalNsgetsrt”中,以生成的GUID命名。截屏数据首先以jpg后缀名直接保存在磁盘上,然后加密处理得到同名的upr后缀文件,原jpg文件被删除。
然后将srt目录中upr文件数据回传到C2服务器,回传URL如下:
https://salcomp.buzz/Terolekaremos/romeosata |
轻量型插件下载器
在样本关联过程中,我们发现了一种功能更为简单的插件下载器DLL组件,该组件通过宏文档加shellcode的方式植入,样本信息如下。
MD5 |
文件类型 |
编译时间 |
5e464d04b35a83d28c4e26c06eec28f5 |
pe32 dll |
2022-11-22 13:39:46 UTC |
9946df6c429b83009535dca8d1a5d321 |
pe64 dll |
2022-11-22 13:43:00 UTC |
以上两个样本功能一致,因此以32位版本为例进行说明。导出函数Rfvgyrty复制样本自身到创建的目录”C:Users[user]AppDataLocalLogo”中,名称为difg02rf.dll。创建计划任务调用复制后DLL的另一个导出函数rgbrgbbgr。
而另一个导出函数rgbrgbbgr会依次检查插件保存目录”C:ProgramDataWinstomDnt”下是否存在Kyingert.dll, tr2201dcv.dll, SSrtfgad.dll三个插件,如果不存在则从C2服务器下载,然后调用插件DLL的St函数启动插件。获取插件的URL如下:
https://grapehister.buzz/DoPstRgh512nexcvv.php |
名称 |
功能 |
Kyingert.dll |
键盘记录并回传 |
tr2201dcv.dll |
收集当前用户Desktop, Documents, Downloads目录下特定后缀的文件信息并回传,包括.doc, .xls, .ppt, .pdf, .rtf等 |
SSrtfgad.dll |
截屏并回传 |
https://orangeholister.buzz/kolexretriya78ertdcxmega895200.php |
EXE组件攻击过程
MD5 |
文件名 |
VT上传时间 |
171c011571f94ea2f5c928bdf5d560dc |
OUTSTANDING PAYMENTS.xls |
2023-01-19 11:30:41 UTC |
79cff3bc3cbe51e1b3fecd131b949930 |
New SOPs Consular Services.xls |
2023-02-10 09:26:12 UTC |
dcac3a03c0c58b90cd4cbcc814d12847 |
Visit Details.xls |
2023-02-24 09:26:00 UTC |
VBA
宏文档1(MD5: 171c011571f94ea2f5c928bdf5d560dc)的VBA使用大量注释填充,整理代码后,可以看到样本首先释放pkhfg.bat,用于创建3个计划任务,为执行后续组件做铺垫。
然后调用gtru_fdtr函数释放dfer.cab文件。
接着再释放tbreah.bat文件,该文件负责从dfer.cab文件解压出下载器组件dfer.exe。该bat文件通过上面创建的名为”fghru”计划任务执行,执行完毕删除该计划任务。
宏文档2和3的VBA代码相似,因此以宏文档2(MD5: 79cff3bc3cbe51e1b3fecd131b949930)为例进行说明。与之前不同,宏代码的执行时机从文档打开(Open)换成了关闭前(BeforeClose)。
直接调用Schedule.Service接口创建计划任务,不再通过释放bat文件完成。
释放压缩包djkd.zip后,直接在代码中解压缩,并将解压后的文件重命名为之前计划任务中设置的路径名mnvc.exe,推测攻击者试图以这种修改后缀名的方式躲避杀软对解压文件的查杀。
EXE下载器
3个宏文档释放的EXE组件代码基本一致,功能较为简单,作用是从C2下载两个后续组件,通过初值为1的全局变量控制组件下载顺序,其中的bat文件对应在上述VBA代码中设置计划任务的文件路径。主体代码如下所示。
整理上面宏文档涉及的EXE组件信息如下。
宏文档MD5 |
171c011571f94ea2f5c928bdf5d560dc |
下载器MD5 |
a84d7a5b8831d7494ee20b939e37e56f |
下载路径1 |
https://blogs.firelive.pics/pooireoairoeeae/yuytetyur3544uyraif (保存文件C:\Users\Public\Music\aco) |
下载路径2 |
https://blogs.firelive.pics/yureyuryquyey/dskjrhekjjkdhjrae (保存文件C:\Users\Public\Music\aco.bat) |
宏文档MD5 |
79cff3bc3cbe51e1b3fecd131b949930 |
下载器MD5 |
3b730afd4ed953a9031a3facf111a64e |
下载路径1 |
https://records.libutires.info/loproiaoroaspdrjro/reoriaweoprdpoi (保存文件C:\Users\Public\Videos\nota) |
下载路径2 |
https://records.libutires.info/yryerewuaoirjljrq/bcalkrhwejkarje (保存文件C:\Users\Public\Videos\nota.bat) |
宏文档MD5 |
dcac3a03c0c58b90cd4cbcc814d12847 |
下载器MD5 |
cf646416025a84c5ef25b99dc999da9d |
下载路径1 |
https://forum.winidowtech.info/jkdegqgegcqegog/hfogrcgegdhpgdgeq (保存文件C:\Users\Public\Videos\nota) |
下载路径2 |
https://forum.winidowtech.info/jilmvldfhqohcqhog/ntbahoghbhcghqo (保存文件C:\Users\Public\Videos\nota.bat) |
遗憾的是我们未能获取到上述攻击样本的后续,EXE组件攻击活动与之前友商披露的Donot活动一致[3]。Donot在去年年中就借助宏文档释放压缩包的方式植入恶意软件,并且至少从2022年9月起在该植入流程中使用EXE组件。
字符串加密
01变换
在这类加密方式中,字符串的ASCII码按字节转换为二进制形式,并以01字符串格式存在于样本中。如果只经过一次这样的转换,就是单重01变换。在2022年底出现的Donot样本中,开始出现双重01变换,经过一轮转换得到的01字符串再以同样的方式进行转换,这意味着原始字符串的每个字符需要用64个字符长度的01字符串表示。
自定义多层加密
采用这类加密方式的样本在恢复原始字符串时,会在base64解码和AES解密后,对解密数据再依次进行如下操作:(1)按字节减1;(2)每相邻两字节交换位置;(3)字符串逆序。
总结
尽管暂未发现国内受到相关攻击活动影响,不过奇安信红雨滴团队仍在此提醒广大用户,切勿打开社交媒体分享的来历不明的链接,不点击执行未知来源的邮件附件,不运行夸张标题的未知文件,不安装非正规途径来源的APP。做到及时备份重要文件,更新安装补丁。
若需运行,安装来历不明的应用,可先通过奇安信威胁情报文件深度分析平台(https://sandbox.ti.qianxin.com/sandbox/page)进行判别。目前已支持包括Windows、安卓平台在内的多种格式文件深度分析。
目前,基于奇安信威胁情报中心的威胁情报数据的全线产品,包括奇安信威胁情报平台(TIP)、天擎、天眼高级威胁检测系统、奇安信NGSOC、奇安信态势感知等,都已经支持对此类攻击的精确检测。
IOCs
(宏文档)
06adbb4ba31a52cc5c9258bf6d99812c
d98e2d7c8e91a9d8e87abe744f6d43f9
c839d8a01c97407526b3407022823c8a
1c4fb7c41e7928bfb74784d910522771
e1d235c95a7c06b1203048972cf179fa
6de75b200652eefa4a6a3bb84da7f798
0ec8911f9764ea7b254ea19cd171535e
171c011571f94ea2f5c928bdf5d560dc
79cff3bc3cbe51e1b3fecd131b949930
dcac3a03c0c58b90cd4cbcc814d12847
(DLL)
e46cd1c4b32355cad39b41ef3b66b659
c231254ced08ca556bf35e587469628f
5557b32672ee9ad6be20395d447a3e52
3feb4de4375dcc3ffb4144e2fc61dd94
4c0dadc4b6938dcc9ca8951d34cb2a09
d30631ba67a28a6e4ab0c4e9584e26c2
2abc60fa1e042612e723360ccd8220c6
3c6ad03f0ab284350d8b0d3d4cf22196
07a3c19bc67c5f44c888ce75d4147ecf
d7e123fe7fb8a5f56ec9d89f7787340d
20c581284cccadd8b6193c2e1c84a900
5e464d04b35a83d28c4e26c06eec28f5
9946df6c429b83009535dca8d1a5d321
ee24afbe471b5e63b06a759fa0eba0cc
7750cac1cab5e6fd9e5cadecbc3c51f6
0844b582c202dca08083d04d10bdf36e
(SFX)
4eaa63dd65fc699260306c743b46303b
(EXE)
a84d7a5b8831d7494ee20b939e37e56f
3b730afd4ed953a9031a3facf111a64e
cf646416025a84c5ef25b99dc999da9d
C2
one.localsurfer.buzz
orangevisitorss.buzz
morphylogz.buzz
crezdlack.buzz
crushter.info
monitoriing.buzz
m.seasurfer.buzz
bloggerboy.buzz
sky.ydnmovers.buzz
itygreyhound.buzz
balancelogs.buzz
mayosasa.buzz
goldliney.buzz
briefdeal.buzz
repidyard.buzz
salcomp.buzz
grapehister.buzz
orangeholister.buzz
blogs.firelive.pics
records.libutires.info
forum.winidowtech.info
URL
hxxp://one.localsurfer.buzz/jl60UwJBkaWEkCSS/MU3gLGSnHhfDHRnwhlILSB27KZaK2doaq8s9V5M2RIgpeaD8[.ico|.png|.mp3|.mp4]
hxxp://orangevisitorss.buzz/QcM8y7FsH12BUbxY/XNJxFhZdMSJzq1tRyF47ZXLIdqNGRqiHQQHL6DJIjl2IoxUA[.ico|.png|.mp3|.mp4]
hxxp://morphylogz.buzz/Ik3EIidq3fc2GGig/aFwrDmHIiBWh62kZPVb4bmV0waydPv0WtgqM0QTte5iAFzF0[.ico|.png|.mp3|.mp4]
hxxp://crezdlack.buzz/icsJOzJVtdTcGPB3/PT0w3akYLzLtd5AGs3PVEjMKJ1aO5xtfGvWbFmc4ubgXBvJO[.ico|.png|.mp3|.mp4]
hxxp://crushter.info/m4k1doWVqrvvbjsc/AOg9AQ2SVeHsiL61tkS53q02NnMToZuOb8s5yUe8jEcBxAs0[.ico|.png|.mp3|.mp4]
hxxp://monitoriing.buzz/3fHYKahOXhkVV3Uj/dqyWpAfXBcyQkTkzoamk25hn3cbTbeuhImfJO08uTOFCkhIa[.ico|.png|.mp3|.mp4]
hxxp://m.seasurfer.buzz/33lhGEeiVe57s8gY/nmEVLghL0B5dMtBiZMAgeIVniuP4bVFETWfsZqQ2jZ1bMJYd[.ico|.png|.mp3|.mp4]
hxxps://bloggerboy.buzz/zapterserty512wer/plekobakarester
hxxps://bloggerboy.buzz/zapterserty512wer/xcvderioneytr
hxxps://sky.ydnmovers.buzz/Kolpt523ytcserstrew/torel
hxxps://sky.ydnmovers.buzz/Kolpt523ytcserstrew/meoko/P/sa
hxxps://itygreyhound.buzz/Kolpt523ytcserstrew/torel
hxxps://itygreyhound.buzz/Kolpt523ytcserstrew/meoko/P/sa
hxxps://balancelogs.buzz/Kolpt523ytcserstrew/torel
hxxps://balancelogs.buzz/Kolpt523ytcserstrew/meoko/P/sa
hxxps://mayosasa.buzz/Testoresisty/kolimekatares
hxxps://mayosasa.buzz/Testoresisty/bekolopexar
hxxps://goldliney.buzz/Lomiapekaso/texadikkomanapel
hxxps://goldliney.buzz/Lomiapekaso/ertopikana
hxxps://briefdeal.buzz/Treolekomana/recopereta
hxxps://briefdeal.buzz/Likorecasta/mikachar
hxxps://repidyard.buzz/Romexicarto/terokanama
hxxps://repidyard.buzz/xoexapolicreate/ertyprmekabiops
hxxps://salcomp.buzz/Terolekaremos/romeosata
hxxps://grapehister.buzz/DoPstRgh512nexcvv.php
hxxps://orangeholister.buzz/kolexretriya78ertdcxmega895200.php
hxxps://blogs.firelive.pics/pooireoairoeeae/yuytetyur3544uyraif
hxxps://blogs.firelive.pics/yureyuryquyey/dskjrhekjjkdhjrae
hxxps://records.libutires.info/loproiaoroaspdrjro/reoriaweoprdpoi
hxxps://records.libutires.info/yryerewuaoirjljrq/bcalkrhwejkarje
hxxps://forum.winidowtech.info/jkdegqgegcqegog/hfogrcgegdhpgdgeq
hxxps://forum.winidowtech.info/jilmvldfhqohcqhog/ntbahoghbhcghqo
参考链接
[2] https://ti.qianxin.com/blog/articles/Donot-uses-Google-Drive-to-distribute-malware/
[3] https://mp.weixin.qq.com/s/rslBGQgTL_jZD73AJqI05Q
点击阅读原文至ALPHA 6.0
即刻助力威胁研判
原文始发于微信公众号(奇安信威胁情报中心):暗影重重:肚脑虫(Donot)组织近期攻击手法总结