攻击者随后从数据库层“跳板”至底层的Windows操作系统,成功获得SYSTEM级远程代码执行(RCE)权限,提取了包含密码哈希的注册表配置单元并离线外泄 。Huntress已将攻击者基础设施追溯至IP 178.162.151[.]229 。
初始访问向量是一个运行在Apache Tomcat上的面向公众Java应用程序中的SQL注入漏洞 。该应用的自动补全搜索功能未能正确验证用户输入,使得攻击者能够通过与Oracle数据库的JDBC连接注入SQL命令 。Huntress研究员指出,这并非新型漏洞——SQL注入攻击存在了数十年,通常是处理传递给SQL服务器的用户输入时处理不当的结果 。仅仅是一个未对简单搜索框进行输入清洗的缺陷,就足以引发整个攻击链条。
攻击者没有在受感染服务器上部署传统的恶意软件文件,而是使用Oracle内置的Java虚拟机(JVM)和CREATE JAVA SOURCE语句,将整个后渗透工具包编译并存储为Oracle数据库中的Java模式对象 。这种方法让工具包对标准的操作系统级防御系统“隐形”,因为EDR和防病毒软件关注的是操作系统上的进程、二进制文件和文件——它们通常不会检查存储在Oracle内部的Java类和PL/SQL包装器 。
Khunt工具包包含以下组件,每个都以数据库对象的形式存储:
| 组件 | 功能 |
|---|---|
| KhuntCmd | 加载cmd.exe,通过将命令嵌入发送至数据库的SQL语句来执行任意操作系统命令 |
| KhuntHash | 从Oracle内部用户表中提取用户名和密码哈希,并保存至文件 |
| KhuntFS / KhuntFS2 | 用于列出、读取、搜索和检查受感染系统上文件大小的文件浏览器 |
| KhuntT | 一个简单的“ping”工具,用于在继续操作前确认工具包已安装并可访问 |
| KhuntUnzip | 解压文件的实用程序 |
| khunt_ PL/SQL 包装器* | 用于调用底层Java方法的PL/SQL包装器过程 |
攻击者并未止步于数据库层面的访问。他们使用Khunt工具包通过多步过程从数据库层跳板至底层Windows操作系统:
cmd.exe /c whoami,确认自己正以Windows服务器上的SYSTEM级权限运行,从而建立了从数据库到操作系统的远程代码执行(RCE)权限 。reg.exe并复制SECURITY和SYSTEM注册表配置单元,将其保存为F:\Oracle\目录下的khuntSECURITY.hiv和khuntSYSTEM.hiv 。tasklist /svc并将输出保存为khunttasks.txt 。esentutl.exe复制SAM及第二个SECURITY配置单元,保存为khuntSAM.hiv和khunt_SECURITY.hiv 。这些外泄的注册表配置单元可在离线环境下用于提取和解码系统所有本地账户的密码哈希 。
Huntress的调查揭示了几个关键盲区,这些盲区使得这次攻击能够得逞并逃避检测:
基于此次攻击,Huntress提出了以下缓解措施 :
这次攻击是一个鲜明的警示:当数据库引擎内置编程环境(如Oracle的JVM)时,即使只有一个未经验证的输入字段,也可能使其成为隐蔽的攻击平台。安全团队必须将监控范围从操作系统扩展到数据库对象层面。