SuperAPI AI 工具集

agent-security-hardening

安全与审计

查看项目

更新于 10-15 11:38

技能介绍

Agent Security Hardening 是一套针对 AI 智能体框架的安全加固指南,目标是加固智能体把不可信数据转化为文件系统、网络、内存或工具动作的边界。它强调要为被审查的框架产出具体控制与测试,仅有清单而没有执行证据是不完整的。

核心原则

  • 将模型输出、检索内容、工具输出、记忆以及跨智能体消息都视为不可信输入。
  • 外部集成默认只读,每项写能力单独授权。
  • 即使上游提示或模式已校验过值,仍要在动作边界重新校验。
  • 当身份、目标、归属或隔离无法证明时,在产生副作用前失败关闭。
  • 在执行删除、发布、凭据轮换等不可逆操作前,真实工具入口必须为已认证主体授权该确切操作与资源范围,然后要求显式确认或有效的限定范围预批准;缺失或无效证据则阻止操作。
  • 使用治理需求定义的硬边界,以及从部署配置验证出的更严格值;两者都未定义时,标记为待决事项,并测试实现会拒绝无边界配置,不要臆造一个看似合理的值。

何时启用

  • 构建自主智能体、工具网关、记忆服务或智能体间协议时。
  • 审查将模型输出映射为命令、路径、URL、凭据或 API 变更的代码时。
  • 在长时运行的智能体进程中隔离租户、项目、会话或工作区时。
  • 加固临时文件、日志、工具响应或外部内容摄取时。

加固工作流

  1. 映射信任边界

把每个边界列为 来源 -> 解析器 -> 校验器 -> 副作用。来源包括直接用户输入、模型输出、检索文档、记忆、环境变量、工具结果以及其他智能体的消息。对每个副作用记录:授权它的身份与范围;紧接其前运行的确切校验器;最大输入与输出大小;产生的审计证据;操作中断时的恢复路径。当每个写入、命令、网络变更和凭据使用都有一个具名授权边界时,此步完成。

  1. 校验标识符、环境值与 URL

对会成为文件名、键、选择器或命令参数的标识符使用允许列表。智能体 ID 有议题定义的硬上限 64 字符;部署配置可选择更严格的正数限制,但不能提高该边界。示例代码使用正则 ^[A-Za-z0-9_][A-Za-z0-9_-]*$ 与 HARD_MAX_AGENT_ID_LENGTH = 64,并校验配置限制必须在 1 到 64 之间。当标识符成为 CLI 参数时,通过 argv API 传递,并在支持时放在命令的选项结束标记之后;字符校验不能替代参数分离。在构造客户端前拒绝缺失和仅含空白的环境值。解析 URL,只允许部署所需的协议,要求主机,拒绝内嵌凭据,并在 URL 受攻击者控制时阻止私有网络目标。对每个出站连接和重定向跳转,将连接固定到已验证的公共地址,或在连接时验证对端地址,以防 DNS 重绑定跨越边界。携带凭据的请求必须在附加凭据前使用 HTTPS 并验证证书。禁用自动跨源凭据转发;当协议或源变化时,剥离凭据并重新授权新目标或拒绝重定向。每一跳都重新运行目标、已连接地址和传输校验。当测试能在任何副作用前拒绝空、超大、畸形、遍历形状、携带凭据和未授权目标的值,并证明 DNS 重绑定与跨源重定向无法把凭据带到未批准对端时,此步完成。

  1. 隔离文件系统访问

在拼接前拒绝绝对的用户控制路径和遍历组件。在每个平台都拒绝 Windows 不安全组件以保持可移植性:保留设备名(CON、NUL、COM1、LPT1,包括带扩展名如 nul.txt)、以点或空格结尾的名称(Win32 会剥离它们),以及 :(驱动器相对或 NTFS 备用数据流语法,如 report.txt:ads)。解析工作区和候选路径,然后证明包含关系。示例代码先统一平台分隔符,检查相对路径是否为绝对或含 ..,逐组件拒绝含 :、以点或空格结尾、匹配保留名的部分,再解析根与候选路径,用 is_relative_to 确认未逃逸。包含检查不能消除符号链接竞态;对敏感写入,在平台支持时相对可信目录句柄打开,拒绝符号链接目标,独占创建文件,并在打开后验证归属与权限。当测试覆盖同级前缀路径、嵌套 ..、绝对路径、符号链接逃逸、保留设备名、结尾点或空格、备用数据流语法以及有效嵌套工作区路径时,此步完成。

  1. 保护临时数据与凭据

以仅所有者权限创建敏感文件,如 0o600;以 0o700 创建私有目录。凭据或租户数据优先使用用户私有运行时目录而非共享临时目录。原子地创建不可预测名称,不要先检查再创建。在 finally 中移除临时数据,清理失败时保留已脱敏的错误记录。让秘密远离命令参数、模型上下文、日志、追踪、异常文本和工具响应。通过平台秘密存储或限定范围的环境注入传递秘密,并轮换已暴露凭据。将清零视为尽力而为:可变字节缓冲区可被覆写,但不可变语言字符串无法可靠擦除。当文件模式检查、强制错误清理测试和日志捕获测试表明秘密值从未持久化到批准边界之外时,此步完成。

  1. 限界与净化工具输出

以字节限制读取工具输出,而不是收集无界流。保留结构化字段,移除不允许的控制字符,并附加带原始字节数的显式截断标记。当后续取证比较重要时保留内容哈希。不要静默地把畸形输出变成空成功值;返回类型化失败,指明产生工具、边界和校验原因,但不回显敏感内容。当超大输出、无效编码、终端控制序列、畸形结构化数据和正常响应都有确定性测试时,此步完成。

验证门

在称框架已加固前,通过其真实入口点验证以下行为:不可信指令保持为数据,不能触发工具或写入;没有操作与资源授权加确认或限定范围预批准的不可逆操作不留下副作用;跨租户和跨工作区标识符在动作边界被拒绝;遍历和符号链接逃逸尝试不改变文件系统;强制失败不留下携带凭据的临时文件或日志;超大或畸形工具输出返回显式限界错误。报告所用命令、退出状态、被拒输入以及观察到的副作用缺失。仅模拟测试不能证明操作系统权限、符号链接处理、子进程隔离或网络出口控制。

常见问题

  • 校验只存在于提示中:提示指令是建议性的,要把同一不变量移入副作用前的确定性代码,并测试违反它的模型响应。
  • 规范化路径仍然逃逸:字符串前缀检查会混淆 /work/app 与 /work/application 这类同级路径;应解析路径并使用组件感知的包含检查,再单独测试符号链接。
  • 脱敏发生在日志之后:在值进入日志器、追踪器、异常或模型上下文之前脱敏;添加使用哨兵秘密的捕获测试,断言哨兵不存在于每个发出通道。

不适用场景

普通应用认证、授权、SQL 注入、XSS、CSRF 和 API 安全请使用 security-review;仓库级自动漏洞扫描请使用 security-scan;主机、容器、防火墙或云加固请使用基础设施专用指南。不要将此技能用于渗透测试、漏洞利用开发或未授权访问。

相关技能

agent-harness-construction、security-review、security-scan。