FortiGuard 实验室最近发现,正在进行的 Konni 组织攻击活动中使用了带有恶意宏的俄语Word文档。虽然该文档的创建日期是9月,但内部遥测数据显示该活动的C2服务器目前仍在运行,如图 1 所示。
该活动已运营多年,采用多种策略进行初始访问、有效负载传输以及在受害者网络中建立持久性。在本文中,我们将详细介绍恶意软件在每个阶段的行为。
图 1:遥测数据
Dropper - Word文档
打开文档后,会出现一个黄色提示栏,显示“启用内容”以及一些模糊的俄语文本(图 2)。选择该按钮后,将启动一个 VBA 脚本,显示一篇俄语文章,其被翻译为“西方对特种军事行动进展的评估”。
图2:Word文档
VBA 脚本(图 3)从OLEFormat.IconLabel检索信息,并将其存储在文件名temp.zip下的临时文件夹中。提取文件内容后,它使用“vbHide”参数运行“check.bat”脚本,确保批处理脚本执行时不会向用户显示命令提示符窗口。当黑客试图在后台悄悄运行脚本时,此方法非常有价值。
图3:VBA内容
准备阶段—check.bat
名为“check.bat”的初始脚本文件(图 4)执行了多项检查。首先,它验证了远程连接会话的存在。如果检测到,会直接启动“netpp.bat”脚本。然后,该脚本评估当前系统是否正在运行 Windows 10,无论结果如何,都将为变量“%Num%”赋值为1。该变量稍后在选择 UAC 绕过方法时发挥作用。此 UAC 设置与过去的 KONNI 活动不同,后者针对不同的操作系统设置为4 或 1。
此外,它还会检查系统是否在 64 位架构上运行。如果是这样,它会将相应的 DLL 文件重命名为netpp.dll和wpns.dll,还会删除无关的DLL文件。最后,使用三个参数执行wpns.dll:“QQQQQQQQ”作为目标入口点名称,“%Num%”表示所选的UAC绕过方法,“netpp.bat”表示进一步操作。
图4:check.bat
UAC绕过模块—wpns.dll
Word文档中的每个DLL文件均已使用UPX进行压缩。因为32位版本文件具有类似的功能,我们将使用64位版本文件进行详细研究。首先,在批处理文件“check.bat”中调用了“wpns.dll”,它主要用于UAC绕过。在批处理文件中,参数配置为1,提示选择sub_180001B90函数,如图5所示。
图5:“QQQQQQQ”入口点的汇编代码
它启动进程“wusa.exe”,这是一个合法的 Windows 实用程序,负责安装和卸载 Windows 更新软件包。由于它是由操作系统签名和信任的,因此它可以以提升权限运行,且不会触发用户帐户控制 (UAC) 提示。建立“wusa.exe”后,它复制了其访问令牌,并继续使用该令牌所使用的CreateProcessWithLogonW执行命令。最后,运行一个继承提升权限的“netpp.bat”脚本。一段代码如图 6 所示。
图6:UAC旁路模块
安装—netpp.bat
图7:netpp.bat
图 7 显示了批处理文件“netpp.bat”的内容。下面对其功能进行简要说明:
- 服务停止和检查:该脚本尝试停止“netpp”服务以防止重复执行。然后它验证系统中是否存在字符串“system32”。
- 复制文件:如果字符串“system32”不存在,则脚本将继续执行“COPYFILE”功能。该段将多个文件(例如netpp.dll、netpp.dat、netpp.ini)复制到Windows 操作系统内的“System32”目录。复制过程完成后,特定文件将被删除。
- 服务创建:然后,脚本转换到“INSTALL”部分,其中使用“sc create”、“sc description”和“sc config”等命令生成并配置名为“netpp”的服务。它将服务配置使用“Internet Print Provider Service”来进行自启动。
- 注册表设置:该程序接着在HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost项中添加了一个注册表项,并使用新值“netpp”。此注册表设置可能将“netpp”服务与Windows服务主机相关联。随后,它添加了HKLM\SYSTEM\CurrentControlSet\Services\netpp\Parameters键,并创建了一个名为“Serviceb11”的新值,该值的类型为REG_EXPAND_SZ,其值数据为%windir%\System32\netpp.dll。这个注册表设置为"netpp"服务定义了一个参数,指定了“netpp.dll”文件在Windows系统目录中的位置。
- 服务启动和清理:最后,脚本启动“netpp”服务并执行跟踪删除。
最终有效负载—netpp.dll
最初,程序会验证各个库中的多个 Windows API 函数,如图 8 所示。如果成功加载这些函数,程序将继续执行。否则,返回 0 并终止。存储在“netpp.ini”中的C2配置使用AES-CTR进行加密,密钥源自前面步骤中建立的服务名称,即“netpp”。 “netpp.ini”的前16个字节用作初始化向量 (IV) 来解密和揭示C2服务器列表,如图9所示。
图 8:检查 Windows API 函数
图 9:“netpp.ini”中解密的 C2 列表
然后,该程序使用命令cmd /c REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 65001 /f添加注册表项,并开始从受感染的系统收集信息。它使用命令cmd /c systeminfo收集有关目标系统的全面详细信息,包括操作系统版本、系统制造商、可用的修补程序、系统正常运行时间和网络配置。该数据存储在临时文件中,程序将字符串“rr”与系统时间连接起来以创建文件名。接下来,它执行cmd /c makecab来压缩文件,除非临时文件具有以下扩展名之一:“.7z”、“.zip”、“.rar”、“.cab”、“.docx”、 ”或“.xlsx”,如图 10 所示。
图 10:将收集的数据转换为 cab 文件
接下来,使用 AES-CTR 算法及文件名作为密钥来加密 CAB 文件。然后,使用硬编码的 HTTP 语法,通过 POST 请求将加密数据上传到 C2 服务器,如图 11 所示。
图 11:创建 HTTP POST 请求
然后,它使用命令cmd /c tasklist获取系统上当前活动进程的列表,这有助于黑客了解系统的状态并有可能识别已实施的安全措施。获取的数据将与之前的进程数据相同,将被传输到C2服务器,整个C2请求会被定向到“up.php”,参数为name=%PCNAME%,如图12所示。上传完成后,程序会删除临时文件以消除痕迹。
图 12:上传任务列表数据的 POST 请求
接下来,它尝试通过向“dn.php”发送带有参数name=%PCNAME%”和“prefix的 HTTP 请求从 C2 服务器获取有效负载命令。“prefix的可能取值包括“cc”后跟一个数字或直接的字符串“tt”。C2 会话如图 13 所示。
图 13:到 dn.php 的 C2 会话
尽管来自 C2 服务器的实际命令尚未公开,但我们可以从 DLL 文件中的汇编代码推断出它。收到服务器的响应后,系统使用“#”作为分隔符解析数据,执行base64解码,并使用AES解密信息。解密后的内容随后被存储为临时文件。然后,程序执行cmd /c Expand –R以获取用于后续操作的有效负载,如图 14 所示。
图 14:处理来自 C2 服务器的响应数据
图 15 显示了它如何处理 C2 命令的部分代码,其中包括使用特定权限执行命令、下载文件和上传特定文件。
图 15:C2 命令
结论
本文探讨了黑客在Word文档中使用批处理脚本和DLL文件的高级工具集。该恶意软件有效负载包含UAC绕过功能,并实现了与C2服务器的加密通信,使黑客能够执行特权命令。鉴于这种恶意软件的持续发展,建议用户对可疑文档保持警惕。
翻译自:https://www.fortinet.com/blog/threat-research/konni-campaign-distributed-via-malicious-document
本文暂时没有评论,来添加一个吧(●'◡'●)