博客

Dridex 正在监视你

F5 缩略图
F5
2016 年 6 月 22 日发布

Dridex 的作者经常发布更新,例如新的函数混淆和新的配置编码,以继续逃避安全供应商的检测和缓解技术。 他们的恶意软件的重点从针对欧洲金融机构转向美国的新银行机构。

显然,该恶意软件的开发人员在客户端和服务器范例以及混淆方面表现出很高的熟练程度。 以下研究概述了这套技能。 它与 Dridex 作者致力于不断频繁更新恶意软件的功能,使得 Dridex 非常灵活,因此难以检测、解密和分析。

Dridex 如何监视你?

那么,Dridex 是如何在未经你许可的情况下监视你而你却不知情的呢?

它通过远程会话在银行交易期间连接到受感染用户的机器。 此会话对于用户来说是不可见的,因为它保存在恶意软件使用 VNC 协议打开的桌面的另一个实例中。 该实例被复制但不共享,这意味着攻击者无法看到用户的鼠标和键盘移动,反之亦然。

在恶意软件安装到受害者的机器上后,它会“致电”僵尸网络的命令和控制中心 (C&C),以获取目标列表并请求以下模块: VNC 和 SOCKS。

激活过程可以通过以下两种方式之一触发:

  • 通过从 C&C 收到的命令
  • 通过检查配置中的 VNC 标志后通过浏览器函数挂钩

此项研究的重点是注入模块方法。 (早期的 F5文章中描述了在 Dridex 配置内部触发 VNC 启动的方式。)

VNC 激活流程

该流程涉及受感染的浏览器和受感染的explorer.exe进程之间的交互。

浏览器的作用

Dridex 注入浏览器的网络函数钩子中的恶意代码会检查配置中的 VNC 标志。

  1. 此钩子使 Dridex 能够在发送每个请求之前对其进行检查。

此钩子使 Dridex 能够在发送每个请求之前对其进行检查。
  1. 如果请求 URL 与“重定向”配置中的 URL 匹配,则从挂钩的网络功能向 C&C 发送恶意脚本的请求。
  2. 因此,访问了目标 URL 并向用户发送了恶意脚本。 下一步是什么?

  3. 收到脚本时,会检查 VNC 标志。
    如果 VNC 标志打开,恶意软件就会期望接收加密数据。 这些加密数据包含恶意软件稍后会用到的信息:

    • VNC IP 和 PORT — 启动 VNC 会话时要连接的远程地址
    • SOCKS IP 和 PORT — 启动 SOCKS 会话时要连接的远程地址
    • 数据使用 XOR 加密(前 4 个字节是密钥)
Dridex 图1: 完整解密程序
图 1: 完整解密程序

下面是来自服务器的简单 html 响应示例,其中附加了 IP + 端口(解密程序之后):

alt="Dridex 图 2: 解密后的脚本内容,附加了IP和PORT”
图 2: 解密后的脚本内容,附加了 IP 和 PORT

受感染的浏览器将这些加密的 IP 记录存储在注册表中与配置相同的项下,但在单独的子项下。
 

Dridex 图 3: IP 和 PORT 注册记录
图 3: IP 和 PORT 注册记录

受感染的浏览器使用 Windows 的事件对象 API 来通知受感染的 explorer.exe 启动 VNC。从此时起,受感染的 explorer 进程接管激活过程。


探险家的角色

  1. Explorer 中的恶意代码在负责 VNC 连接的专用线程中无限循环运行,并等待来自浏览器的事件信号。 一旦收到此信号,它就会从注册表中提取 IP + 端口记录并对其进行解码。
Dridex 图4: 受感染的浏览器在受感染的 explorer.exe 读取记录之前写入记录
图4: 受感染的浏览器在受感染的 explorer.exe 读取记录之前写入记录
  1. Explorer 使用 Windows API“LoadLibrary”的自定义实现加载 vnc_x32.dll。
    • 在此之前,VNC 模块作为原始数据驻留在 Explorer 的内存中。
    • 映射所有 PE 部分后,它会调用 vnc.dll 的 DllEntryPoint(带有 DLL_PROCESS_ATTACH 标志)
    • 该技术混淆了 VNC 模块的加载时间点,因为无法跟踪“LoadLibrary”,从而使分析变得更加困难。
Dridex 图 5:explorer.exe - 原始资源管理器代码,worker_x32.dll - 主 Dridex 模块,vnc_x32.dll - vnc 模块
图 5:explorer.exe - 原始 explorer 代码,worker_x32.dll - 主 Dridex 模块,vnc_x32.dll - vnc 模块
  1. vnc_x32.dll 导出两个函数来启动和停止服务器。
  2.  

Dridex 图6: VNC 导出函数
图6: VNC 导出函数

     

  1. Explorer 的工作模块以 IP 和端口作为参数调用 VncStartServer 函数以启动 VNC 连接。
     

     

Dridex 图7: 带参数调用 VNCStartServer
图 7: 带参数调用 VNCStartServer

     

  1. 如果在没有 SOCKS 模块的情况下收到外部 VNC IP 地址,VNC 模块将启动与攻击者的 VNC 服务器的连接。 受感染的机器启动远程会话。 这是使用协议的独特方式,因为通常观看者充当服务器。
    • 如果收到本地 VNC 地址,Dridex 模块将监听来自攻击者的传入 VNC 连接。
  2.  

     

  3. 在与 VNC 服务器建立 TCP 连接后,vnc_x32.dll 使用 bot_id 字符串(作为参数传递给 VncStartServer 例程)来生成挑战。 这是为了在 VNC 协议握手之前验证服务器的身份。

     

  4.  

Dridex 图 8: 受害者和攻击者的沟通方案
图 8: 受害者和攻击者的沟通方案

此后,如果所有阶段都成功,则会启动 VNC 远程会话,并且欺诈者可以在受害者不知情的情况下在其机器上执行操作。

该功能通常作为凭证窃取后的补充措施,以绕过银行内部的安全产品。 这些产品旨在利用浏览器的独特指纹来识别用户。

F5 研究团队正在关注 Dridex

安全供应商和网络犯罪分子之间的持续竞争促使犯罪分子创建更加混淆且具有许多不同且独立组件的恶意软件。 这些组件帮助恶意软件作者克服银行机构和安全供应商设置的障碍和保障措施。 这些组件还增加了分析过程的复杂性,因为现在需要了解模块之间的交互。

这场竞赛也促使我们作为研究人员,密切关注和警惕 Dridex 的活动和发展。