内容提要
Akamai Hunt 发现了一种试图隐藏在合法大语言模型 (LLM) API 端点背后的新型恶意软件。
该恶意软件并未采用常见的模式,而是发送一个看似经过 Base64 编码的字符串来建立命令和控制 (C2) 连接。
通过利用此方法,攻击者可能会完全控制系统并窃取数据。
这是攻击者快速演进其攻击方法的又一例证,进一步凸显了企业必须为应对此类现代威胁做好准备的必要性。
前言
威胁格局正随着技术热点极速演变,攻击者也在快速适应相关变化。随着大型语言模型 (LLM) 在企业内部得到广泛应用,攻击者开始利用其通信模式将恶意流量隐藏在眼皮底下。
在防御者竞相利用 LLM 来调查告警、生成相关摘要并关联指标,以便将 AI 集成到检测流程中的同时,恶意软件作者也在尝试使用 AI。通过 LameHug 和 PromptLock 等恶意软件,我们早已看到了早期证据,它们揭示了原本设计用于文本生成的 LLM 如何被滥用于恶意目的。
我们还观察到了攻击者如何在 SesameOp 后门中使用 OpenAI 的 API 来构建命令和控制 (C2) 基础架构的示例,这凸显了 AI 领域中出现的全新攻击面。
近期,Akamai Hunt 团队发现了一种新的恶意软件,它通过将恶意流量混入 LLM API 请求的背景噪声中,实现了一种全新的 LLM 滥用方式。在本博文中,Hunt 团队分享了一个他们在向 Hunt 客户提供服务过程中发现的新兴威胁示例。
端点滥用
在搜寻恶意软件利用 LLM 的新方式时,一个文件突然引起了我们的注意。它已在 VirusTotal 上被标记为恶意文件,并且符合多项 Yara 规则。在着手调查之初,我们本以为会看到又一种“通过 LLM 生成代码并在受害者机器上执行”的模式。
该恶意软件最初尝试使用套接字连接到 IP 地址 39.97.57[.]244,一旦失败,它便会回退到一个值得注意的 HTTP C2,即 1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com/v1/chat/completions。
在观察到针对 API 的第一个 HTTP 请求后,我们惊讶地发现,它并没有遵循此类请求所必需的标头。
API 端点
我们的研究工作包括寻找 LLM API 端点的使用方式,尤其是 /v1/chat/completions。
根据 OpenAI 的文档,此端点“用于为给定的聊天对话创建模型响应”(图 1 和图 2)。
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-5",
"messages": [
{
"role": "developer",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
{
"id": "chatcmpl-B9MBs8CjcvOU2jLn4n570S5qMJKcT",
"object": "chat.completion",
"created": 1741569952,
"model": "gpt-4.1-2025-04-14",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?",
"refusal": null,
"annotations": []
},
...
/v1/chat/completions 端点最初由 OpenAI 推出,随后迅速被众多提供 OpenAI 兼容 API 的供应商和网关(例如 OpenRouter 和 Hugging Face)所效仿。
但是,尽管请求模式相似,其他供应商的官方 API 可能使用了不同的原生端点,或者在参数、身份验证和流式传输行为方面可能有所不同。
请求模式
通常,使用此 API 时,需要添加以下必需参数:
Authorization:格式为“Authorization: Bearer YOUR_API_KEY”的持有者令牌标头是对请求进行身份验证所必需的
Model:用于选择支持聊天的模型(例如,gpt-3.5-turbo 或 Llama-4-Maverick-17B-128E-Instruct-FP8)的字符串标识符,端点会将您的请求路由到该模型
Messages:一组带有角色标记的消息对象(包含 role 和 content),表示模型将用于生成下一个答复的对话历史记录
正如我们在上面提到的,我们已看到有人在现实环境对此端点进行了恶意的实际利用:LameHug。恶意软件作者使用同一端点访问 Hugging Face 上的 LLM 模型,请求特的定命令,并动态生成要在受害者机器上执行的代码(图 3)。
通过聊天完成进行伪装
分析此二进制文件时,我们首先注意到的是它并未使用上述提到的任何字段。它会改为发送一个看似经过 Base64 编码的字符串(图 4)。
理论上,此 API 背后可能有一个 LLM,攻击者可以利用自定义编码在服务器端使用自定义代码构造提示。但是,在这种情况下,使用此 API 端点的原因也是为了伪装。
在观察来自我们的 API Security 产品的数据时,我们发现了 151 个来自客户的唯一端点。来自这些端点的每个会话都与该模式存在一定的相似之处。例如,一些 API 使用“query”而不是“messages”,但在所有会话中都有非常明显的相似性。
这表明,虽然每个人都可以开发自己的 /v1/chat/completions 端点,并且针对此端点并不存在评论请求 (RFC),但开发者之间仍然存在一种事实上的标准。
进一步研究
在对主体进行解码并使用 0xBB 进行 XOR 处理后,我们发现了疑似针对受害者发起的第一个侦察请求。
我们追踪了响应的解析流程,发现该恶意软件预期接收的响应内容与原始 API 模式并不匹配。它通过使用 XOR 和 Base64 进行解密来处理所接收到的数据,然后遵循响应中提供的指令执行操作(图 5)。
C2 服务器 1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com 是腾讯云上的一种无服务器云函数(类似于 AWS Lambda 或 Azure 函数),这是由腾讯运营的云计算服务。通过将云函数用作 C2 服务器,攻击者可以运行具有韧性且难以与良性流量区分开来的自动扩展基础架构。
我们推测,攻击者选择暴露此特定端点是为了在防御者和网络管理员面前显得更加合法,因为随着 AI 智能体、集成及自动化工具的兴起,此 API 端点的使用也变得日趋普及。
该恶意软件支持多种指令,因此被归类为远程访问木马 (RAT),并具备对受害者的完全远程控制能力。我们对它们进行了分析,以确认它们是否都与同一个端点进行通信(分析详情请参见附录)。
例如,图 6 是 $HunterInfo 指令的输出。它会查找特定远程访问工具的配置文件,并以发送第一条消息的方式(利用 XOR 和 Base64)将数据回传到 /v1/chat/completions。
该恶意软件还包含三个嵌入式文件,它们都使用 0x88 进行了 XOR 处理并进行了 Base64 编码。
所有文件都是名为 net_test.exe 的 .NET 文件。它们协同工作,在受害者网络中构建了一个使用 SOCKS5 或 HTTP 协议的小型代理工具套件。其中两个文件是 SOCKS5 和 HTTP 服务器,而第三个文件是可以接收和转发流量的客户端(图 7)。
其他文件
我们发现了此恶意软件的旧变体(可以在本博文的 IOC 部分中找到哈希值)。它们都有类似的指令,并包含多个远程访问工具 ($HunterInfo) 的硬编码路径,但 C2 服务器有所不同。
我们还在 VirusTotal 上发现了一个与 C2 服务器相关的 RAR 文件。该 RAR 中包含一个 .lnk 文件(个人简历.lnk,翻译为“Résumé”或“CV”),运行该文件会执行 ftp -s””:_/_/_/_/_/_/_/_/_。该 RAR 还在嵌套目录中包含了 .doc 文件,尽管其内容是二进制代码(图 8)。
“_”文件将文档构造为三个 PE 文件,并将它们复制到 C:\Users\Public\Update。
最终,它会调用
!call start /min C:\Users\Public\Update\svchost.exe -InstallLsp
C:\Users\Public\Update\360.%TIME:~4,1% >nul(图 9)。
有 10 个不同的 .doc 文件 (0–9.doc),它们除了一些随机字节外基本相同。%TIME:~4,1% 计算的是 %H:%M:%S.%f 格式中当前分钟的第二个数字。这些文档缺少 MZ 标头,可能是为了规避签名扫描。脚本会根据当前时间构造文档文件的标头,并将其复制到 C:\Users\Public\Update\360.<minute>。
svchost.exe
该文件实际上是“SangforPromote.exe”,这是深信服科技的一个经过验证的签名文件。在接收到参数 -InstallLsp 和一个 DLL 时,该合法文件会使用 LoadLibrary 加载该 DLL,并设置指向其导出的指针(图 10)。
360 DLL
这个名为 360 的 DLL 会分配具有读取、写入、执行 (RWX) 权限的内存,向其中读入“sc”,然后执行。
sc
通过分析,我们发现加载的代码会使用 LoadLibrary 和 GetProcAddress 来解析函数。它包含两个硬编码目标地址并向其发送 HTTP 请求,这两个地址与我们分析的恶意软件的 C2 地址相匹配:
https://1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com
39.97.57[.]244
与之前的样本一样,它也使用 Base64 结合 XOR 的方式来解码数据,这一共同特征在不同的工具集之间建立了关联。我们认为,该流程会将最终的 RAT 下载到受害者的文件系统中(图 11)。
Akamai Hunt 防护和抵御
得益于针对此类痕迹的全天候持续监控,Akamai Hunt 客户能够有效抵御这些攻击(图 12)。
即使在检测到活跃威胁之前,Hunt 的自适应分段功能也能够帮助企业减少暴露并遏制风险。通过分析正常的通信流和资产行为,自适应分段功能可以为策略的制定提供指导,从而限制对 AI 端点的不必要出站访问、隔离开发与生产环境,并最大限度地减少潜在的横向移动路径。
此功能通过将持续监测能力转化为抵御基于 LLM 的新兴威胁的主动韧性,使 Hunt 的防护范围不再局限于威胁检测。
结论
攻击者战略性地选择通过 /v1/chat/completions 端点来路由数据外泄和 C2 通信,正是利用了 LLM 服务无处不在及快速演进的特性。由于此方法可以利用现有云基础架构来构建能够融入正常企业流量中的通信渠道,因此它的潜在投资回报率很高。
其危险性在于,该技术利用了现代环境中的三大主流趋势。通过将这三者相结合,攻击者能够构建出在表面检查下看起来无害、稳定且隐蔽的 C2 路径:
指向云 API 的出站 HTTPS 流量普遍存在,且往往未经检查
对机器生成的流量(AI 智能体、应用程序、集成)的承受能力不断提升
云托管服务可轻松获取,它为攻击者提供了可利用、可靠且长期有效的端点
现实情况是,防御者都在摸着石头过河,在实践中探索 LLM 的工作机制以及它们带来的威胁。如果流量看起来足够合法,它就有可能在缺乏适当保护措施的情况下被放行。有时候,藏在眼皮底下反而是最容易蒙混过关的方法。
通过将恶意有效负载隐藏在发往合法 LLM 服务的流量中,攻击者便能够依托这种日益普遍的网络模式,从而降低其通信被标记或调查的概率。随着各企业纷纷采用 AI 工具和自动化技术,流向 LLM 端点的流量已日趋常态化——正是在这种背景噪声的掩护下,攻击者找到了可乘之机。
IOC
IOC |
类型 |
|---|---|
93cf0d545a872c393c053031570bc5eaebfa1aa6a0860fd0b08b679b8ce52fd2 - RAT |
散列值 |
10c444262994c05930394388e6112ddd98b83118661868bccd83b1fa61160a62 - 1.rar |
散列值 |
91c43e7ddd98af63d6b1b130e997b909100f3eaf71e30511858cca4348b509db - _ |
散列值 |
9f119d05403b1e079893fb77f6b8b2a9682d1df7ced31a189e7490924ccfb170 - 个人简历.lnk |
散列值 |
b7dcf661844e6f3e94eb140a79787be6dad77c09ab0b97cf41a62afd07219190 - 较旧的变体,2025 年 5 月 |
散列值 |
2e395436e97eaad9a087825d22005b6afc55044abf458604a5118c2ac9bde42a - 较旧的变体,2025 年 9 月 |
散列值 |
67ea3ea3c58a57dbbdac48d4ce3d546816f715eaf32bec33a64a63c91541e697 - net_test.exe(客户端) |
散列值 |
195c283703ee7df7c7ef17c85b0fdf88de22348bb0755daf5f0c3ed319c8d88a - net_test.exe(SOCKS5 服务器) |
散列值 |
e513d12abd03a4e07788dd85888d187cb6ca6e69a59f22f00853cae0a0b34712 - net_test.exe(HTTP 服务器) |
散列值 |
1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com/v1/chat/completions |
URL |
39.97.57[.]244 |
IP |
C:\Users\Public\Update |
目录 |
附录
指令 |
说明 |
|---|---|
$ActiveDos |
返回当前目录 |
$AddUser |
创建新的本地用户并将其添加到管理员组中 |
$ExecuteCommand |
命令执行 |
$FileDelete |
删除文件 |
$FileDownLoad \ $BigFileDownLoad |
从受害者的机器下载文件 |
$FileExist |
返回某个文件是否存在 |
$FileUpload \ $BigFileUpload |
将文件写入受害者的文件系统 |
$Get_LocalDisk |
获取受害者的驱动器信息 |
$GetFile |
获取文件数据(大小、时间戳) |
$GetFolder |
列出特定目录中的文件夹 |
$GetFolderAndFile |
列出文件夹并获取文件 |
$GetProcess |
列出进程 |
$GetThreadPermissionsInfo |
恶意软件进程的线程信息 |
$HunterInfo |
窃取 360 安全浏览器、向日葵远程控制软件、ToDesk 远程控制软件、NetSarang 以及 Chrome 的数据 |
$KillProcess |
终止具有给定 PID 的进程 |
$MessageBox |
显示包含所提供字符串的消息框 |
$Netstat |
执行 netstat 来查看活动连接 |
$OffLine |
终止进程 |
$Online |
再次发送受害者的初始数据(图 4) |
$PE64Loader |
启动 explorer.exe 并向其中注入 shellcode 加载器 |
$PEMemoryLoadOnSelf |
从缓冲区加载代码。该恶意软件会检查收到的多个参数(例如“JuicyPotato”或“PwDump”),并设置一个同名的环境变量,这表明它具备将其用作“模块”或插件的能力。 |
$Persistence |
从 C2 接收 DLL:
它还可以创建计划任务。 |
$ProgressSpawn |
在 C:\Users\Public 下创建或验证有效负载,并根据参数的不同,通过 ShellExecute、-InstallLsp 或在内存中加载等不同方法来执行该有效负载 |
$RegManage |
似乎尚未实现 |
$ScreenShot |
截取屏幕截图 |
$ScreenSpy |
更改 TightVNC 的注册表项以启用远程控制功能,这可能是基于受害者已安装 TightVNC 的假设,或是为攻击的先前/未来阶段做准备 |
标签