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

128 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P0-01 安全边界加固方案实施报告
## 问题概述
执行安全边界不闭合路径访问与联网限制仅靠软约束prompt 提示),存在本地敏感文件读取、越界写入、潜在外联等高危风险。
## 解决方案
### 1. 静态硬阻断升级safety/rule_checker.py
**改进内容**
- 将网络模块requests, urllib, http 等)从 WARNING 升级为 CRITICAL_FORBIDDEN
- 新增绝对路径检查函数 `_check_absolute_paths()`,硬阻断所有非 workspace 路径访问
- 集成安全度量模块,自动记录所有违规事件
**关键代码**
```python
# 扩展禁止模块列表
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`
**注入示例**
```python
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` 内文件 → 应正常执行
### 度量验证
```python
from safety.security_metrics import get_metrics
# 执行若干任务后
metrics = get_metrics()
metrics.print_summary()
# 检查拦截率、分类统计是否符合预期
```
## 总结
通过"静态硬阻断 + 运行时硬隔离"双重边界,将安全策略从 prompt 软约束升级为执行强约束,彻底封堵路径越界和网络外联风险。配合安全度量系统,实现了可观测、可审计的安全防护体系。