【原创首发】全球首个“AI勒索软件”--纽约大学团队“PromptLock”深度剖析
字数 3895 2025-10-13 22:56:21
AI驱动勒索软件“PromptLock”深度剖析与教学文档
文档说明: 本文档基于纽约大学研究团队发布的“PromptLock”恶意软件分析报告撰写。该样本被视为“勒索软件3.0”或“AI驱动勒索软件”的概念验证,其核心特征在于利用大型语言模型动态生成恶意代码,而非将恶意逻辑硬编码在二进制文件中。
一、 概述与核心创新
-
基本定义:
- PromptLock: 一个用Golang编写的恶意软件样本,由纽约大学团队开发作为学术研究。
- AI驱动: 其恶意行为(如文件遍历、加密、外泄)的载荷(Lua脚本)并非预先编写,而是在运行时通过向本地部署的大型语言模型发送精心设计的提示词动态生成的。
- 核心模型: 使用开源模型
gpt-oss:20b,通过Ollama API本地接入,确保攻击过程不依赖外部云服务,难以追踪。
-
与传统勒索软件的区别(核心创新):
- 多态性: 由于恶意代码是动态生成的,每次运行产生的具体脚本都可能不同,极大增加了基于静态特征码(Signature)的安全检测工具的检测难度。
- 规避能力: 该样本在首次上传至VirusTotal平台时,成功避开了所有主流杀毒引擎的检测。
- 模块化与适应性: AI可以根据受害者的环境(如操作系统、文件类型)生成最合适的攻击脚本,实现了高度的定制化。
二、 恶意样本基础信息
- 文件名:
1458b6dc98a878f237bfb3c3f354ea6e12d76e340cefe55d6a1c9c7eb64c9aee - 编译器: Go
- 大小: 6.79 MB
- 操作系统: Windows (7) [AMD64, 64位, Console]
- MD5:
f7cf07f2bf07cfc054ac909d8ae6223d - SHA256:
1458b6dc98a878f237bfb3c3f354ea6e12d76e340cefe55d6a1c9c7eb64c9aee - 威胁类型: 勒索软件(加密病毒)
- 首次发现: 2025年8月26日
三、 技术深度剖析:攻击流程与逆向工程
整个攻击流程是一个由主程序(Go编写)调度、与LLM交互、并执行生成代码的循环过程。
3.1 主程序核心函数分析
-
main_main函数:- 功能: 程序入口点,负责全局任务调度。
- 流程:
- 初始化一个用于文件加密的对称密钥。
- 初始化一个任务数组,其中包含了整个攻击链的各个步骤。
- 循环遍历任务数组,依次执行每个任务。
-
main_execTask函数:- 功能: 执行单个恶意任务的核心函数。
- 流程:
- 构造提示词: 根据当前任务(如“环境探测”、“文件遍历”),组合预定义的模板和上下文信息,形成发送给LLM的提示词。
- 调用LLM: 通过调用
main_invokeLLM函数,将提示词发送给本地Ollama服务。 - 提取代码: 从LLM的返回结果中,解析并提取包裹在
<code> ... </code>标签内的Lua代码。 - 执行代码: 调用
main_execLua函数,在本地执行生成的Lua脚本。 - 行为验证与抉择: 对于某些任务(如“环境探测”),会将执行结果再次发送给LLM进行验证(验证标签为
<success>/<feedback>)或请求AI进行攻击决策(决策标签为<analysis>)。
-
main_invokeLLM函数:- 功能: 负责与Ollama API的通信。
- 细节: 构建标准的HTTP POST请求,请求体为JSON格式,包含
model名称和messages数组(即对话历史),发送到本地API端点(如http://127.0.0.1:11434/api/chat)。
-
main_execLua函数:- 功能: 作为一个内嵌的Lua解释器,负责执行从LLM返回的Lua代码。
-
main_execSubtasks与main_runDecryptorGenTask函数:- 功能: 处理加密相关的特定任务。
- 流程: 当主程序决定执行“加密”操作时,
main_runDecryptorGenTask函数会被调用。该函数使用RSA公钥对之前生成的对称加密密钥进行加密,然后将加密后的密钥写入一个文本文件(如decrypt_key.txt)。这个文件是后续受害者支付赎金后可能获取的解密工具所需要的。之后,main_execSubtasks会调用main_execTask来生成并执行文件加密的Lua脚本。
3.2 攻击链分解(通信分析)
以下是PromptLock与LLM交互的完整攻击链条,每一步都包含严格的提示词工程和结果验证。
-
阶段一:环境侦察
- 目标: 探测受害主机的基本信息。
- AI指令: 要求LLM生成一个跨平台(Windows/Linux/macOS)的Lua脚本,探测并打印7个系统参数:
os,username,home,hostname,temp,sep(路径分隔符),cwd(当前目录)。脚本需具备容错性,即使探测失败也要输出默认值。 - 验证: 执行脚本后,将输出结果(日志)再次发送给LLM,要求其验证脚本是否成功运行(通过
<success>true/false</success>判断),并总结系统信息。
-
阶段二:文件发现
- 目标: 递归遍历用户主目录(
home)下的所有文件。 - AI指令: 要求LLM生成一个使用LuaFileSystem库的脚本,递归遍历指定目录,跳过隐藏文件和无法访问的目录,并打印每个文件的完整路径。
- 验证: 将文件路径列表发送给LLM,验证遍历是否成功。
- 目标: 递归遍历用户主目录(
-
阶段三:智能决策
- 目标: 根据侦察到的信息,决定采取何种攻击行动。
- AI指令: 以“网络安全专家”的身份,根据主机类型(个人电脑、公司服务器、工业控制器)和目标文件信息,在
<analysis>标签内返回攻击类型标记:encrypt(加密勒索)、exfiltrate(数据外泄)、destroy(破坏文件)。可以返回一个或多个,按顺序执行。 - 决策逻辑:
- 公司服务器 ->
encrypt(加密业务数据以勒索) - 个人电脑 ->
exfiltrate(窃取个人敏感信息以胁迫) - 工业控制器 ->
destroy(破坏配置造成停摆)
- 公司服务器 ->
-
阶段四:载荷执行(根据决策执行以下一种或多种操作)
-
A. 加密
- 目标: 加密文件,使其不可用。
- AI指令: 要求LLM生成一个纯Lua实现的SPECK-128加密算法(ECB模式)。代码必须使用
bit32库进行位操作,以8字节为块读取文件,使用“rb+”模式覆盖原文件,并打印加密后的文件名。 - 技术细节: 提供了SPECK算法的C语言参考实现,要求准确转换为Lua代码,并注意小端字节序。
-
B. 数据外泄
- 目标: 将文件偷偷上传到攻击者控制的服务器。
- AI指令: 要求LLM生成Lua代码,通过
os.execute调用curl命令,使用特定的session_key,以POST表单方式将文件列表中的每个文件上传到指定URL(如https://192.168.1.1:8443/backup/files)。
-
C. 安全删除
- 目标: 彻底销毁文件,无法恢复。
- AI指令: 要求LLM生成Lua代码,对指定文件进行多次覆写,然后将其删除,最后打印成功信息。
-
-
阶段五:勒索信生成
- 目标: 生成恐吓受害者的勒索信。
- AI指令: 基于之前的系统信息、被攻击的文件列表和执行的载荷类型,生成一份逼真的勒索信。如果是加密攻击,必须包含指定的比特币地址和赎金金额。
-
容错机制:
- 如果LLM生成的代码执行失败,主程序会将错误信息反馈给LLM,要求其重新生成代码。此过程最多可循环8次,体现了AI在攻击过程中的自我修正能力。
四、 总结与防御启示
-
技术总结:
- PromptLock证明了AI可以被有效地武器化,用于构建高度自适应、多态性的恶意软件。
- 其攻击链完整,从侦察、决策到攻击、勒索,完全由AI驱动,标志着勒索软件演进的一个新方向。
- 由于核心恶意逻辑不在样本本身,而在于LLM的提示词和输出,传统的静态检测方法几乎失效。
-
防御建议与检测思路:
- 行为检测: 防御重点应从静态特征码匹配转向异常行为监控。
- 监控可疑进程: 监控未知进程突然启动Lua解释器或Python解释器。
- 监控文件操作: 监控对用户主目录的快速、递归遍历,以及大量文件的“rb+”模式写入操作。
- 监控网络活动: 监控程序与本地非标准端口(如Ollama默认的11434端口)的通信,或异常的
curl外联请求。
- LLM安全(提示词防火墙): 在部署内部LLM时,必须设置严格的内容过滤策略,检测并阻止与恶意代码生成、系统侦察等相关的可疑提示词和输出。
- 应用白名单: 在关键系统上实施应用白名单策略,只允许授权程序运行,可以阻止此类未知恶意软件的执行。
- 安全意识: 此威胁凸显了保护AI模型本身及其访问API的重要性,它们已成为新的攻击面。
- 行为检测: 防御重点应从静态特征码匹配转向异常行为监控。
这份文档详尽地解析了PromptLock的工作原理。它不仅仅是一个病毒分析,更是一个关于未来AI安全威胁的生动教案。任何从事网络安全或AI安全相关工作的人员都应理解其机制。