AI 代理滥用:Local AI CLI Tools & MCP (Claude/Gemini/Warp)

Reading time: 9 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

概览

本地 AI 命令行接口(AI CLIs),例如 Claude Code、Gemini CLI、Warp 等,通常自带强大的内置能力:文件系统读/写、shell execution 和出站网络访问。许多工具充当 MCP 客户端(Model Context Protocol),允许模型通过 STDIO 或 HTTP 调用外部工具。由于 LLM 在规划工具链时具有非确定性,相同的 prompts 在不同运行或主机上可能导致不同的进程、文件和网络行为。

常见 AI CLI 的关键机制:

  • 通常以 Node/TypeScript 实现,使用一个薄包装器启动模型并暴露工具。
  • 多种模式:interactive chat、plan/execute 和 single‑prompt run。
  • 支持 MCP 客户端,具备 STDIO 和 HTTP 传输,既能扩展本地能力也能连接远程服务。

滥用影响:单个 prompt 就能 inventory 并 exfiltrate 凭证、修改本地文件,并通过连接到远程 MCP 服务器悄然扩展能力(如果这些服务器是第三方,会出现可见性缺口)。


Adversary Playbook – Prompt‑Driven Secrets Inventory

指示 agent 快速分类并准备凭证/secrets 以便 exfiltration,同时保持安静:

  • 范围:递归枚举 $HOME 和应用/钱包 目录;避免噪声或伪路径(/proc/sys/dev)。
  • 性能/隐蔽:限制递归深度;避免 sudo/提权;对结果做摘要。
  • 目标:~/.ssh~/.aws、cloud CLI creds、.env*.keyid_rsakeystore.json、浏览器存储(LocalStorage/IndexedDB 配置档)、crypto‑wallet 数据。
  • 输出:将简洁列表写入 /tmp/inventory.txt;若文件已存在,先创建带时间戳的备份再覆盖。

Example operator prompt to an AI CLI:

You can read/write local files and run shell commands.
Recursively scan my $HOME and common app/wallet dirs to find potential secrets.
Skip /proc, /sys, /dev; do not use sudo; limit recursion depth to 3.
Match files/dirs like: id_rsa, *.key, keystore.json, .env, ~/.ssh, ~/.aws,
Chrome/Firefox/Brave profile storage (LocalStorage/IndexedDB) and any cloud creds.
Summarize full paths you find into /tmp/inventory.txt.
If /tmp/inventory.txt already exists, back it up to /tmp/inventory.txt.bak-<epoch> first.
Return a short summary only; no file contents.

通过 MCP(STDIO 和 HTTP)扩展能力

AI CLIs 常作为 MCP 客户端以访问额外工具:

  • STDIO 传输(本地工具):客户端生成一个辅助链以运行工具服务器。典型血统: node → <ai-cli> → uv → python → file_write。观察到的示例: uv run --with fastmcp fastmcp run ./server.py 会启动 python3.13 并代表 agent 执行本地文件操作。
  • HTTP 传输(远程工具):客户端打开出站 TCP(例如端口 8000)到远程 MCP 服务器,服务器执行请求的操作(例如写入 /home/user/demo_http)。在端点上你只会看到客户端的网络活动;服务器端的文件操作发生在远端主机上。

注意:

  • MCP 工具会被描述给模型,并可能被规划自动选择。行为在不同运行间会有所不同。
  • 远程 MCP 服务器会扩大影响范围并降低主机端的可见性。

本地工件与日志(取证)

  • Gemini CLI 会话日志:~/.gemini/tmp/<uuid>/logs.json
  • 常见字段:sessionIdtypemessagetimestamp
  • 示例 message"@.bashrc what is in this file?"(捕获的用户/agent 意图)。
  • Claude Code 历史:~/.claude/history.jsonl
  • JSONL 条目包含诸如 displaytimestampproject 的字段。

将这些本地日志与在你的 LLM gateway/proxy(例如 LiteLLM)处观察到的请求进行关联,以检测篡改/模型劫持:如果模型处理的内容与本地提示/输出不符,就应调查注入的指令或被破坏的工具描述符。


端点遥测模式

以下是在 Amazon Linux 2023(Node v22.19.0,Python 3.13)上的代表性链:

  1. 内置工具(本地文件访问)
  • 父进程:node .../bin/claude --model <model>(或 CLI 的等价项)
  • 直接子操作:创建/修改本地文件(例如 demo-claude)。通过 parent→child 血统将文件事件关联回去。
  1. MCP 通过 STDIO(本地工具服务器)
  • 链:node → uv → python → file_write
  • 示例 spawn:uv run --with fastmcp fastmcp run /home/ssm-user/tools/server.py
  1. MCP 通过 HTTP(远程工具服务器)
  • 客户端:node/<ai-cli> 打开到 remote_port: 8000 的出站 TCP(或类似端口)
  • 服务器:远端 Python 进程处理请求并写入 /home/ssm-user/demo_http

由于 agent 的决策在每次运行中不同,预计具体进程和被触及路径会有变化。


检测策略

遥测来源

  • 在 Linux 上使用 eBPF/auditd 的 EDR,用于进程、文件和网络事件。
  • 本地 AI‑CLI 日志,用于提示/意图可见性。
  • LLM gateway 日志(例如 LiteLLM),用于交叉验证和模型篡改检测。

狩猎启发式

  • 将敏感文件访问关联回 AI‑CLI 父进程链(例如 node → <ai-cli> → uv/python)。
  • 对以下路径的访问/读取/写入触发告警:~/.ssh~/.aws、浏览器配置文件存储、云 CLI 凭证、/etc/passwd
  • 标记 AI‑CLI 进程到未批准 MCP 端点的意外出站连接(HTTP/SSE,诸如 8000 之类的端口)。
  • 将本地 ~/.gemini/~/.claude 工件与 LLM gateway 的提示/输出进行关联;若有偏差,则可能表示被劫持。

示例伪规则(请根据你的 EDR 调整):

yaml
- when: file_write AND path IN ["$HOME/.ssh/*","$HOME/.aws/*","/etc/passwd"]
and ancestor_chain CONTAINS ["node", "claude|gemini|warp", "python|uv"]
then: alert("AI-CLI secrets touch via tool chain")

- when: outbound_tcp FROM process_name =~ "node|python" AND parent =~ "claude|gemini|warp"
and dest_port IN [8000, 3333, 8787]
then: tag("possible MCP over HTTP")

加固建议

  • 对文件/系统工具要求用户明确批准;记录并呈现工具的执行计划。
  • 将 AI‑CLI 进程的网络出站限制到经批准的 MCP 服务器。
  • 传输/摄取本地 AI‑CLI 日志和 LLM gateway 日志,以实现一致且防篡改的审计。

蓝队复现说明

使用带有 EDR 或 eBPF 跟踪器的干净 VM 来复现如下链:

  • node → claude --model claude-sonnet-4-20250514 then immediate local file write.
  • node → uv run --with fastmcp ... → python3.13 writing under $HOME.
  • node/<ai-cli> establishing TCP to an external MCP server (port 8000) while a remote Python process writes a file.

验证检测能将文件/网络事件关联回发起的 AI‑CLI 父进程,以避免误报。


参考资料

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks