在监控 REF2924 团伙时,研究人员发现攻击者将注意力从数据窃取转移到持久化。2023 年 1 月 20 日,攻击者使用类似于 Microsoft 分布式事务处理协调服务(msdtc.exe)的合法二进制文件的命名约定,创建并安装了一个新的可执行文件 wmdtc.exe 作为 Windows 服务。
Wmdtc.exe 是一个用 C# 编写的 HTTP 监听程序,被命名为 NAPLISTENER。与 SIESTAGRAPH 开发的其他恶意软件类似,NAPLISTENER 旨在逃避各种形式的网络检测。根据遥测分析,NAPLISTENER 主要活跃在南亚与东南亚地区。
技术分析
NAPLISTENER 中包含一个名为 MsEXGHealthd 的 C# 类,该类有三个函数:Main、SetRespHeader 和 Listener。主要建立一个 HTTP 请求监听服务,处理来自互联网的请求,针对恶意命令和合法的 Web 流量进行相应的处理。如下所示:
MsEXGHealthd 类
HTTP 请求监听服务
SetRespHeader 函数用于设置 HTTP 响应的响应标头,采用 HttpListenerResponse 对象作为参数并定义 HTTP 头,例如 Server、Content-Type 和 X-Powered-By。例如 IIS 返回的 404 响应,响应头中表明 Microsoft-IIS/10.0,如下所示:
正常响应
但攻击者的 404 响应中增加了 Content-Type: text/html; charset=utf-8。不仅如此,在安装 NAPLISTENER 后,头中还会增加 Microsoft-HTTPAPI/2.0 字符串。这可能是为了避免被网络扫描或者其他探测技术发现。
用户可能会在 IIS 服务日志中检索这些错误响应,但 NAPLISTENER 会将这些请求重定向到已注册的应用程序。确保这些错误响应永远也不会被分析人员在 Web 服务日志中看到,而且提取 Web 服务日志的安全工具也无法识别。
攻击者的响应
如果由于某种原因(例如请求无效或丢失数据)而产生失败,则将会发送 404 Not Found 的响应,而响应体为空。在发送任一响应后,流会被刷新并关闭连接,然后循环返回以等待更多传入请求。
POC 先决条件
为了正确运行 NAPLISTENER,必须生成 SSL 证书并注册应用程序以使用。生成自签名证书如下所示:
证书信息
每个证书都包含一个指纹,下图为示例证书的指纹:
证书指纹
指纹是注册应用程序所必须的,如下所示:
注册指纹命令
攻击者使用其证书的指纹替换 certhash,而 appid 是程序的 GUID。正确配置了环境后,就可以从任何有权限的终端运行恶意软件。
分析人员创建的 Python 脚本演示了可用于触发 NAPLISTENER 的方法,如下所示:
演示脚本
在 POC 中,运行 Python 脚本就会调用计算器:
成功执行
来源归因
调查 NAPLISTENER 期间,研究人员发现 SharpMemshell与 NAPLISTENER 类似。代码存在相似的逻辑和相同的调试字符串,NAPLISTENER 可能参考了 SharpMemshell 的代码。