夜雨聆风学习资料网

ARTICLE · 1315765

你的 AI 编程助手,可能正在后台替木马“打工”:恶意软件 Iris C2Agent 深度分析

你的 AI 编程助手,可能正在后台替木马“打工”:恶意软件 Iris C2Agent 深度分析

近期我们捕获了一个 8.9 MB 的 Go 语言静态编译样本。在传统的隔离沙箱里,它安静得像个无害的系统组件,几乎没有触发任何高危告警。它既没有尝试修改系统关键注册表,也没有释放任何已知的恶意载荷。

但沙箱日志里有一组极其边缘的动作引起了我们的注意。它在启动后疯狂检索进程表,对比的对象全部是 cursor、copilot、claude 等 AI 编程工具。同时,它还在尝试与本地的 11434 等端口建立连接。

传统的凭据窃取木马只关心浏览器的密码数据库、网银凭证或 SSH 密钥。这个样本为什么对受害者主机上有没有大模型服务、有没有 AI 命令行工具如此执着?它是不是在寻找某种新型的 AI 会话凭证?

为了验证这个假设,我们构建了一个高保真的仿真测试环境:在隔离网络中拉起 Ollama 本地服务,并登录了一个测试用的 AI 编程工具。

再次运行样本后,预想中的“打包文件并外传”并未发生,检测日志呈现出反常的状态。样本没有读取任何敏感配置文件,而是直接在后台静默调用了我们登录好的 AI 编程助手。它向该助手写入复杂的任务拆解指令,并根据输出反馈自主决定下一步的攻击动作。

原来它在沙箱里“装死”,只是因为沙箱里没有它需要的“推理引擎”。根据样本残留的源码目录字符串,国外威胁情报团队将植入体名为  Iris C2Agent 。它体内没有一行 AI 推理代码,也没有硬编码任何 API 密钥。整条攻击链最终劫持的,是受害者本地已登录的 AI 活跃会话,并以此作为后门自主规划并执行复杂 RAT 动作的决策大脑。

核心发现

  • 推理能力就地征用。它将本机运行的本地推理服务(Ollama、LM Studio、vLLM)与开发机上已登录的 AI 编程工具(Claude Code、Cursor、Copilot)连同环境变量中的 API 密钥一并接入本地模型池,作为其决策大脑。
  • 隐蔽管道劫持。植入体不读取 AI 凭证文件,而是通过 stdin/stdout 管道向合法 AI 命令行工具注入提示词并截取首行输出。这导致其父子进程关系在进程树上呈现为完全受信任的合法开发调用,实现天然规避。
  • 决策与动作分离。操作员即便开启了人工审批模式,也只能拦截最终的敏感操作(如文件读写、执行命令),而模型在内存和管道中的规划过程、对环境的真实评估结果,并不经过任何安全系统的审计。
  • 13 段内置提示词构成指纹锚点。其推理骨架完全由 13 段硬编码的固定系统提示词拼接而成。这些提示词中特定的身份宣称、示例格式和编号规则是不可消除的静态特征,构成了识别该家族版本的最稳定指纹。

一、主载荷静态结构

主样本为 PE32+ x86-64 GUI 程序,体积约 8.9 MB,基于 Go 1.27.1 静态编译,且 CGO_ENABLED=0,在 Windows 平台仅导入 kernel32.dll 中的 48 个基础 API。

在逆向分析中,我们发现该样本在编译时显式指定了 -gcflags=all=-l 以强制禁用函数内联(Inlining)。这种构建配置在正常的生产发布版中极为罕见,通常为开发测试或调试版本的典型遗留,表明该家族可能仍处于频繁迭代的早期开发阶段。尽管其 .rdata 段内的敏感字符串均以 ASCII hex 混淆存放,并在运行时由 agent.hx 动态解码,但由于函数未被内联,且 Go 语言的 pclntab(进程链接表)被完整保留,我们成功恢复了 12342 个原始函数名。这为后续的技术细节推导提供了高可信度的符号支撑。

在外联设计上,该载荷内置了两个硬编码的默认端点,分别对应控制通道(C2)与外部工具服务(MCP):

用途
端点
存储形式
默认 C2
https://agent.x90[.]dev
hex 混淆,运行时由初始化函数写入全局变量
默认 MCP
https://mcp.firecrawl[.]dev/v2/mcp
明文存放,紧随混淆名称表项之后

注册 MCP 端点时,样本显式开启了 WithInsecure 选项以跳过 TLS 证书校验。这也是整个载荷中唯一明文硬编码的外部 URL 字符串。

C2 基址是该植入体所有默认配置的寻址锚点。在无命令行参数与环境变量覆盖时,后续的心跳信标维持、上线状态注册、配置推送以及大语言模型端点的下放,均默认以此基址作为通信终点。样本内部未保存任何明文的大语言模型 API 接口地址与模型密钥。这意味着,其推理决策所需的模型凭据只能完全依赖受害主机的执行环境,或通过被征用的本机服务来提供。

图 1 展示了该载荷在职责分工上的三层架构设计。最外层是确定性执行骨架,主要负责环境感知、防御规避、长连接维持以及管理命令交互;中间层为模型决策层,负责接收任务、拆解逻辑并编排步骤;最底层是系统能力调用层,提供 19 项本地与云端操作工具(工具名表 0x14044a2f0)。其中,只有中间的决策层需要大语言模型的推理支持。外层与底层在模型可用之前即可独立运行,这解释了为何在本地模型池为空、大语言模型缺位时,受害主机依然会产生完整的初始化和上线行为。

二、初始化与常驻骨架

作为该样本的基础底座,其确定性执行逻辑(即无需模型参与的部分)占了载荷总代码量的大部分。

在发送首个心跳信标前,入口函数 runCmd 会同步执行约 60 次初始化调用。其具体执行流如下:解析并解密混淆的命令行参数;抑制标准错误(stderr)并伪装父进程;解码硬编码的默认 C2 寻址基址;加载内置 PEM 格式根证书,注册默认 MCP 服务器,并初始化本地技能库、记忆库与工具执行器;从环境变量中提取 Ed25519 签名私钥并派生 ECIES 密钥对,以此构建双向 TLS(mTLS)证书池;同步构建本地模型池,建立基于 DNS、HTTPS 与 ICMP 的三重复合信道;最后注册系统信号处理函数,正式将控制权移交至主循环。

主循环启动阶段的系统动作同样具有高度的确定性:依次收集本地运行进程、网络连接、网卡配置及防病毒软件指纹完成环境感知;根据 stealth 模式配置,通过注册回调动态抑制 ETW(事件追踪)日志;执行反调试探测并计算带抖动延迟的信标节律;依据主机物理内存容量及 EDR 驱动特征动态调整规避强度;在条件满足时启动跳板监督进程;执行自我修复性检查并重新写入持久化注册表项与计划任务。在完成上述规避与常驻动作后,植入体向控制台发送首次上线报文(hello),同步提交持久化名称、ECIES 签名公钥、当前可用本地工具列表、大模型池及可用 MCP 服务器配置。

随后,主程序创建四个并行的守护协程,分别负责 ConPTY 交互式会话管理、目标卡死守护(Watchdog)、信标失联守护以及执行结果异步重传。两个守护协程在满足触发条件时,会立即强行重启整个代理进程以维持控制链的稳定。

在常驻心跳循环中,控制台下发的任务采用分层派发设计。管理型任务不经过模型,由控制台直接下发并提供参数,包含进程终止、自删除、持久化部署、内存注入、BOF(信标对象文件)加载、二进制文件自我升级、主机侦察及配置热更新。执行型任务则统一由 HandleTask 调度,只有当任务类型命中 goal 分支时,程序才会调用核心的 runToolLoop。这也是整个载荷运行过程中,唯一允许大语言模型介入的入口。

如图 2 所示,该样本的生命周期被划分为四个阶段,且仅在阶段三(受命规划)涉及大语言模型的调用。这种将“指令交互、驻留规避”与“自主推理规划”相分离的设计,具备极高的战术灵活性。推理引擎失效并不影响植入体的生存与通信维持能力,其心跳循环与管理任务执行保持正常。若受害主机内无可用模型,植入体会将待执行目标置于静默挂起状态,等待控制台配置更新下发远程可用模型端点后再重新放行。

三、本地模型池获取路径

作为该样本最具威胁性的设计,其本地推理供给链在载荷初始化阶段同步构建,且不依赖任何实时网络交互或控制台指令下发。

3.1 借用本地 AI 命令行

优先级最高的路径是征用受害主机上现存的 AI 编程工具作为本地推理引擎。样本使用 CreateToolhelp32Snapshot 遍历进程表,将获取的进程名转为小写后,与内置的三张特征名单进行比对。一旦命中,则在内存中实例化一个 CLI 模型对象。

特征名单共包含 29 个进程名称,分别是:claude、aider、opencode、codex、gemini、ollama、llm、nanobot、cursor、windsurf、cody、copilot、codebuddy、pi、hermes、openclaw、gptme、aichat、lms、lmstudio、llama-cli、llama、gpt4all、jan、koboldcpp、localai、open-webui、openwebui、vllm。

在命中后,其调用方式基于 Go 语言的标准库 os.Pipe 与 exec.CommandContext 实现。植入体通过管道向拉起的子进程标准输入(stdin)注入拼装完毕的系统提示词与当前任务目标,并挂起等待子进程执行返回,最终截取标准输出(stdout)的第一行内容作为模型补全结果。该过程中,子进程的环境变量已被清洗,窗口属性亦被改写,提示词文本完全不出现在命令行参数中。

此调用路径的核心威胁在于它彻底绕过了安全凭据审计。植入体不读取 ~/.claude 等目录下的任何物理配置文件,不解析 OAuth 访问令牌,亦无需获知该命令行工具采用何种登录认证方式,而是直接共享宿主上已登录的活跃会话。该路径对攻击者而言零调用成本,对防守方则具有极高的归因难度。在端点检测与响应(EDR)的审计视野中,该行为仅呈现为一次正常的开发工具被调用。除标准输入注入的数据包长度异常外,进程树的父子关系与调用特征均无明显异样。

若目标命令行工具已安装但未在运行,样本则使用 LookPath 进行可用性路径探测并记入候选模型池,待该工具被用户启动或需要时再行借用。

3.2 读取环境变量中的密钥

若进程检索未命中,样本则读取本地环境变量中的凭据。其检索优先级首选 IRIS_LLM_URL 与 IRIS_LLM_KEY,若不存在则逐级回落检索 OPENAI_BASE_URL、OPENAI_MODEL 以及 OPENAI_API_KEY。一旦静态凭据命中,样本将按照标准 OpenAI 兼容协议构造客户端对象,并在上游请求体中带上 Authorization: Bearer 报头。相关的命令行参数(如 --llm-url、--llm-key 等)在被读取后会被写回同名环境变量,其明文均由内置混淆串动态解码。

本地模型池构建完毕后,植入体会对 URL、MODEL、KEY 三个敏感变量循环调用三次 os.Unsetenv 进行擦除。此动作同时具备两重防护作用:避免子进程继承高价值的模型接口密钥,并极大限度地减少磁盘与内存取证留存的静态痕迹。

3.3 探测本地推理端口

第三条路径针对受害者本地部署的大模型推理服务。样本内置 9 个候选端口,通过回环地址 127.0.0.1 逐个请求 /v1/models 与 /api/tags:

端口
常见服务
11434
Ollama
11500 / 1234 / 1235
LM Studio
8000
vLLM
5001
GPT4All
7860
Gradio / Open WebUI 后端
8080 / 5000
通用 OpenAI 兼容服务

相关请求完全发往本地回环地址,不产生网卡外物理流量。一旦探测到响应非空,即将其作为可用端点并入模型池,并打上 local:服务名:地址 标签。这些服务组件与端口的绑定关系属于推断,需在特定运行环境中进行动态取证。

3.4 模型路由与调用机制

模型入池后,由 rankModels 函数进行加权排序。排序算法通过三条正则表达式,依次对模型的参数规模、量化位数及上下文长度进行打分评估。模型参数越大、量化位数越低、上下文容量越长,在模型池中的优先级排序越靠前。

在调用决策阶段,由 Router.PickPref 接口选择通信端点。该过程引入了随机权重扰动与容错计数机制,其内部日志会精确审计每次调用的尝试、成功与失败状态。

目前,植入体支持三类底层调用方式:

方式
实现
对防守方的含义
OpenAI 兼容 HTTP
向 /chat/completions 发起 POST 请求,支持 ECIES 封装
目标为本地回环时,流量完全不出网卡
借用本地 AI 命令行
stdin 写入,取 stdout 首行
进程树呈合法开发工具调用特征
控制台代理端点
运行期由控制台下发热更新端点与密钥
密钥留存于控制台侧,植入体无静态 Key 留存

该代理模式的技术架构逻辑极为清晰:凭据资产严格留存于控制台侧,植入体仅消耗订阅额度而不持有密钥。结合可选的 ECIES 封装,即便流量经由受害主机流向外部云端接口,其敏感载荷在中间网络节点也完全不可见。

3.5 无可用模型时的挂起逻辑

若在启动阶段构建的模型池为空,植入体接收到的所有规划类任务将被强制挂起,并在内部日志中记录为 startup goal ... HELD。一旦后期接收到包含可用模型端点的配置热更新,挂起任务将立即转为 RELEASED 状态并执行。此外,样本会严格校验本地模型的上下文窗口大小,自动拒用窗口过窄的模型,以防大语言模型在复杂的逻辑规划中产生死循环,造成控制链失稳。

3.6 调用路径的凭据处理差异

四条推理供给渠道(包含控制台代理端点)在凭据管理上表现出本质差异,对防守方而言意味着完全不同的防御面:

  • 静态凭据窃取(读取环境变量):直接窃取并读取主机配置的 OPENAI_API_KEY 等静态密钥。这类凭据具有物理实体,泄露后可被攻击者打包带走。
  • 额度劫持(控制台代理):密钥不落地,保留在攻击者控制台。但攻击者通过该通道下发的每一个推理指令,消耗的依然是受害者云端账户的账单配额。
  • 会话越权劫持(借用本地命令行):不读取任何物理密钥文件,直接利用并共享已被授权的活跃进程会话。

在防守方的吊销与应急响应体系中,前两类静态凭据和配额极易通过在云端后台吊销 API 密钥实现快速阻断;而第三类被借用的活跃开发会话则难以通过常规的凭据作废机制实施防御。

图 3 直观展示了四条推理供给渠道向模型池注入决策算力的工作流。模型池是决策与执行解耦的核心。在池中无可用模型时,任务将保持挂起,但植入体自身进程并不会退出,从而保证了即使遭遇断网或模型服务不可用,后门通道依然能常驻存活。

四、内置的 19 项执行工具

在本地模型池就绪后,植入体所有的决策动作空间均由底层工具执行器提供。样本内共定义了 19 项核心工具(工具名表 0x14044a2f0),可划分为四个功能组别:

组别
工具
能力
执行
run、spawn、build、lolbin、wait
任意命令、派生新副本、现场编译 C 代码、白利用模板、延时
文件与情报
read、write、list、net、env、recon
文件读写、目录列举、连接与环境变量、免进程创建的主机侦察
动作外取
inject、bof、exfil、mcp
反射式注入、COFF 内存加载、分块外传、调用外部 MCP 工具
协作与进化
message、skill、skill_save、memory
代理间通信、技能取用、技能提案、历史目标记忆

此外,该载荷还基于 ConPTY 实现了交互式键盘会话能力 pty,该功能作为实时交互调试手段,未列入提供给大语言模型的工具集中。

在上述工具定义中,有两处工程设计对端点检测具有直接影响:

第一,其 write 工具被强制限制向系统临时目录(TEMP)写入,且单次写入载荷限制在 1 KB 左右。攻击者需通过多次追加拼接完成完整写入。此种小流追加的行为特征,在端点取证上表现为独特的文件写入痕迹。

第二,inject、bof 与 recon 接口具备双重调度机制。它们既能作为操作员的直接指令执行,亦可由大语言模型在规划循环中作为内置工具自主调用。这种底层执行器的复用,导致了两种截然不同的执行信任级别。

模型可通过模型上下文协议(MCP)向外扩展其动作边界。样本在启动时默认注册 firecrawl 网页抓取服务,且在常驻期间可由控制台动态增删任意 MCP 服务器。工具列表在每轮推理循环开始前进行动态刷新,并无缝并入大语言模型的工具集中。这意味着操作员可在植入体常驻期间,动态改变大语言模型的工具感知边界与行为边界。

技能库则是该载荷实现“能力自进化”的另一通道。技能库在启动时初始化为空,并在内部日志中具有明确自证。后续技能包由控制台按需下发,每个技能包基于带 Ed25519 签名校验的 HTTP 协议进行拉取,其响应体分为 HEADERS 与 DATA 两段,并设置有严格的超时与长度限制。在无有效签名公钥时,该通道将自动降级为仅进行存活探测。此外,该通道亦支持逆向回传:模型可在实战规划中将总结出的有效解法作为“新技能提案”回传至控制台,经操作员人工审计批准后入库。

五、动作审批机制的局限

该载荷内置了可选的进程级监督审批模式,而非处于完全放任的无约束状态。

在监督模式下,大语言模型每轮生成的决策输出均会被包装为一次“行动计划”,挂起并阻塞等待操作员的下步审计。模型会针对计划内的每个动作进行自主风险等级评估,并提供执行后的验证检查点与中止条件。一旦该计划被操作员否决,操作员可附带拒绝说明,模型接收到反馈后将实时修正并重新提交,相关的审批裁决指令均通过心跳信标通道回传。

在策略配置层面,控制台可下发全局操作员指令。该指令在系统提示词中被显式声明具有最高优先级,能覆盖模型的默认偏好,并对后续的所有执行目标强制生效。

大语言模型输出的契约校验由 classifyReply 函数完成。该函数基于规则匹配,实时识别模型回复中的自然语言杂质、格式错误、未知工具调用、参数缺失以及目标不存在等异常标记。一旦判定输出违规,系统会调用 contractNudge 在上下文中追加一段格式契约纠正消息,强制模型重新输出。当模型回复因截断导致缺失右括号时,salvageSummary 函数将尝试从会话历史中提取并恢复关键结论。

此校验的技术本质在于确保输出格式的机器可解析性,而非对恶意规划内容进行安全逻辑审计。任何通过本地文件、命令执行返回或进程间通信注入大语言模型上下文的外部输入,均可能对其下一步决策产生改写。操作员的动作审批虽是该后门控制链的唯一硬件隔离带,但它仅能在敏感指令下发至端点执行器时实施拦截,却对模型内存中的认知恶意规划完全无能为力。

内置系统提示词本身亦提供了高可信度的检测价值。其组装方式固定由 13 段硬编码的静态文本、4 个条件变体块及 4 段动态尾部拼接而成。首部的身份声明是一句结构固定的英文申明,可供安全设备实施精确匹配。此外,其规则编号、输入输出示例格式以及工具执行结果的回填格式均具有极强的静态稳定性,其任何微小偏离均可作为判断变体版本或后门被改写的特征指纹。值得注意的是,这些提示词中还详细罗列了 MITRE ATT&CK 战术编号与规避手法,技术人员在逆向中形同在载荷内部发现了一份“自动攻击战术手册”。

图 4 直观呈现了单轮推理规划与审批交互的工作流。后门循环以每轮单动作为节律,从拼装提示词到结果回填共包含六个标准步骤。当监督模式开启时,动作审批门将横置于步骤三(格式判定)与步骤五(工具执行)之间,强行阻断模型直接调用底层工具执行器的通路。

六、典型攻击链的推演

通过静态逆向分析,我们完整恢复了该后门的核心执行时序。其在接收到攻击目标(Goal)后的典型动作规划与全链路流转如下:

在初始状态下,后门的长连接已成功建立,环境指纹信息已完成加密上报,控制台亦已向其推送模型池端点、Ed25519 签名密钥对、动作审批策略、外部 MCP 服务及技能列表。

当操作员在控制台下发攻击目标后,该指令通过心跳信标通道传送至端点。由路由函数 HandleTask 捕获并分发给 dispatchTask。后者记录目标原文并将其写入本地上下文,同时启动防卡死监视协程,最终通过创建独立协程执行核心的推理规划主循环 runToolLoop。

推理规划主循环的单步迭代动作具有固定的时序特征:

  1. 组装系统提示词:后门将当前系统环境指纹、可用工具文档、会话历史与内置提示词片段拼接,在末尾以 GOAL: 标记直接附带目标原文。目标文本在传递给大模型时不做任何本地改写或摘要,完全保留控制台输入的原始语义。
  2. 选取决策引擎:调用 Router.PickPref 从本地模型池中选取当前优先级最高的可用推理端点。若全池调用失败,则在日志中审计记录无人应答。
  3. 输出判定与抢救:通过 classifyReply 实时解包并判定大模型回复的格式规范。
  4. 条件挂起与审批:若监督审批模式开启,后门将本轮动作组装为临时行动计划,挂起当前协程并阻塞等待控制台下发审计结果。
  5. 分发并执行动作:指令放行后,工具执行器根据回复中提取的工具名称路由至特定处理器(如执行系统命令、加载 BOF 载荷等),并将执行进度与端点瞬时状态实时发回控制台。
  6. 回填执行结果:执行结果以 TOOL RESULT (step N/max) 的固定格式回填进模型会话历史中,作为下轮规划的上下文依据。

针对定位并窃取密钥这类典型目标,该模型规划执行器通常会自适应推演并产生如下执行序列:首轮调用无进程派生的主机信息快照,确认当前权限、活动连接与高价值进程;次轮利用内置的白利用检索模板或特定目录枚举命令定位敏感文件;第三轮通过读取工具获取文件内容;第四轮将文件数据写入系统临时目录(TEMP)作为暂存,因为其数据外传工具仅接受文件路径作为输入;第五轮调用分块传输模块,经隐蔽数据通道完成数据的拆分上传;第六轮向控制台发送通知报文;最终在最后一轮向操作员输出包含执行链和汇总结果的回复。

值得注意的是,由于具备自适应推理属性,模型在复杂的实战对抗中并不会机械地复制上述固定路径。它在系统提示词约束下,会遵循“优先执行只读动作、执行失败则读取标准错误重试、不重复相同失败参数”的试错规则进行自适应调整。

该行为链对传统防护系统展现出极强的防御规避性:其主机信息收集与枚举动作在内存中直接调用 API 完成,不产生任何子进程派生,导致传统的进程树审计设备直接丢失该阶段的行为痕迹;其敏感数据暂存强制落在系统临时目录,且单块写入载荷微小;数据渗出过程完全复用控制信道进行分块上传,在端点表现为高度碎片化的微小动作,避开了传统基于大文件或异常端口传输的安全基线。

如图 5 所示,当我们将该时序映射至时间轴上时,异常特征才会在宏观时间维度上显现:大语言模型与后门之间存在着秒级、乃至亚秒级的高频交互,但由于本地执行动作的解耦,主机端点在这些高频决策间隙中,仅能观测到极度稀疏、且彼此孤立的合法工具调用。

七、检测规则与响应顺序

7.1 高信噪比检测规则

  1. 回环算力扫描识别:同一进程在短时间内对本地回环地址 127.0.0.1 的 9 个特定推理服务端口(如 11434、1234、8000 等)轮询发起 /v1/models 或 /api/tags 请求。此行为模式在正常开发业务中无合理场景。因本地回环流量默认不经过物理网卡,安全团队需通过端点侧的主机网络事件(EtwTI 或系统过滤驱动)进行采集与关联分析。
  2. AI 命令行非交互式劫持:监测本地 AI 编程命令行(如 claude、cursor 等)进程的父进程属性。若其父进程非交互式 Shell、终端(Terminal)或受信任的 IDE,且子进程的 stdin(标准输入)管道在短时间内写入大量提示词文本,而其 stdout(标准输出)仅被父进程读取首行,此类高非对称性的输入输出行为,通常表明会话已被恶意进程劫持。
  3. 敏感环境变量瞬时擦除:检测进程读取 IRIS_LLM_URL、IRIS_LLM_KEY 或 OPENAI_API_KEY 等变量后,在未产生外部大语言模型接口调用流量的前提下,短时间内对该组敏感变量执行取消设置(Unsetenv)的动作。这种“即读即擦”的行为时序是典型的防御逃逸特征。

7.2 失陷指标(IoC)

类型
值
说明
文件哈希
88341e1a6595fa5c29b94577d5c7e152
主分析样本,MD5 格式
文件哈希
838c138787021bfabac5ac2f068a4c69
同批关联样本,未经深度逆向验证
文件哈希
0468663bda858a7e1b0dae902a1194a0
同批关联样本,未经深度逆向验证
域名
agent.x90[.]dev
默认 C2 基址
域名
mcp.firecrawl[.]dev
默认 MCP 端点,未启用 TLS 校验
构建特征
模块路径 o0b968,构建标签 implant,etw
Go 编译指纹特征
字符串
You are Iris, an AI red-team operator running directly on the target host.
内置提示词身份声明
环境变量
IRIS_LLM_URL
、IRIS_LLM_KEY、IRIS_LLM_CTX、IRIS_LLM_MODEL
后门内置的环境感知参数

注:上述三个文件哈希的算法口径在原始报告中存在不一致标签,建议在安全系统部署前重新进行哈希值计算。

7.3 MITRE ATT&CK 映射

编号
技术
对应能力
T1071.004
DNS 协议 C2
构建 DNS、HTTPS、ICMP 三重复合隐蔽信道
T1105
远程文件导入
基于 Ed25519 签名校验下发动态技能包
T1218
系统二进制文件代理执行
白利用模板调用(如 certutil、regasm 等)
T1059
命令与脚本解释器
基于本地执行器或 ConPTY PTY 交互会话
T1055
进程注入
进程挂起与反射式注入(PEB 解链)
T1547
持久化机制
计划任务、注册表 Run 键与跳板进程
T1562.001
削弱防御
抑制 ETW 日志、自适应规避强度
T1564
隐藏工件
TEMP 临时目录下的小分块拼接写入
T1622
反调试
软硬件调试器探测与 EDR 指纹探测
T1041
经 C2 通道渗出
隐蔽数据通道分块外传
T1082
系统信息发现
免进程派生的主机信息快照

7.4 推荐处置顺序

  1. 切断推理供给:封禁两个默认外联域名(agent.x90[.]dev、mcp.firecrawl[.]dev),审计并管控内网开发环境中的 Ollama、LM Studio、vLLM 推理服务,配置其严格仅监听 127.0.0.1 环回接口,并全面清理受害主机上残留的 IRIS_LLM_* 敏感变量。
  2. 收紧借用面:对开发机上部署的 AI 编程命令行(CLI)启用严格的父进程调用限制与安全审计,禁止非终端父进程向其标准输入(stdin)中注入高字符密度的非交互式文本。此举虽存在一定的落地工程成本,但对本家族防御阻断最为有效。
  3. 清除持久化项:排查并清除系统计划任务、注册表 Run 启动键、隐藏临时副本文件以及白利用注册项,终止并清理关联的跳板监督进程。
  4. 规范取证顺序:优先抓取主机物理内存,提取动态模型池、当前解密密钥及信标节律参数。随后检索磁盘,将系统临时目录下的微小拼接文件作为可观测特征。由于敏感环境变量在模型池构建完毕后会被立即擦除,API 密钥不会在物理磁盘留存,因此应急取证窗口期极短。

八、结语:寄生推理下的攻防变局

恶意软件家族 Iris 的捕获,揭示了网络空间中一种正在发生的、被称为寄生推理(Parasitic Reasoning)的全新威胁范式。通过将决策大脑“外包”给宿主上已登录的合法 AI 会话或本地大模型服务,这类后门不仅极大地降低了自身的开发与运行成本,更对现有的端点安全防护体系发起了颠覆性的挑战。

在这种新兴的攻防博弈中,恶意代码不再需要自行携带复杂的攻击逻辑或硬编码敏感的外部端点,而是将自身的意图完全伪装在与合法开发工具高频、隐蔽的管道通信中。这导致传统的静态网络特征匹配与基于进程链审计的动态规避检测方法在很大程度上宣告失效。防守方所面临的,是一个能够根据本地环境实时试错、自我进化且调用路径完全合法的“隐形操作员”。

针对此类高级寄生威胁,防御范式必然要求从“网络边界拦截”向“端点内生审计”深度位移。安全团队应当收紧端点侧的 AI 借用面,对本地 AI 命令行的调用源进行严格的父进程完整性校验,实施细粒度的管道行为审计,并对本地推理端口进行严格的环回套接字访问控制。只有通过将行为检测能力深度下沉至端点内部的每一次进程间交互,才能在这场寄生与反寄生的新型攻防变局中,重新为企业蓝队夺回防御的主动权。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料