# 安全模型

CyberStrikeAI 面向授权安全测试场景，内置命令执行、MCP 工具、WebShell、C2、批量任务和多代理编排等能力。部署者必须把它当作高权限安全工具管理，而不是普通聊天应用。

## 信任边界

主要边界：

- Web 登录用户：可以发起对话、调用工具、修改配置、管理 WebShell/C2/知识库。
- Agent：根据角色、工具列表、HITL 策略调用内置或外部工具。
- MCP 工具：可能访问本机文件、执行命令、调用外部服务或操作目标系统。
- 外部 MCP：由第三方进程或远端服务提供，需单独信任。
- 机器人入口：企业微信、钉钉、飞书等回调入口不走 Web 登录，但有平台验签和速率限制。

如果一个账号可以登录 Web，就应视为拥有该 CyberStrikeAI 实例的操作权限。

## 认证与会话

Web 登录凭据由 RBAC 用户管理（默认内置 `admin` 账号）。建议：

- 首次部署后立即修改 `admin` 初始密码（控制台首次启动会输出）。
- 使用长随机密码，并限制分享范围。
- 将服务放在内网、VPN、堡垒机或反向代理认证后面。
- 生产环境开启 HTTPS，避免明文传输 Cookie。
- 结合反向代理限制来源 IP。

登录态有效期由 `auth.session_duration_hours` 控制。

## 工具执行风险

工具来源包括：

- 内置安全执行工具。
- `tools/` 下的 YAML 命令工具。
- Eino Skills 文件系统工具，如 `read_file`、`write_file`、`edit_file`、`execute`。
- 外部 MCP 暴露的工具。
- C2 和 WebShell 相关 MCP 工具。

风险控制建议：

- 只启用当前任务需要的工具。
- 高风险命令工具不要加入全局白名单。
- 给角色绑定最小工具集合。
- 对 destructive、持久化、横向移动、凭证操作保持人工审批。
- 外部 MCP 尽量使用本地可信进程，远端 MCP 必须有认证和网络隔离。

## HITL

HITL 是工具调用前的审批层。常见模式：

- `human`：人工审批。
- `audit_agent`：审计 Agent 自动审批。
- `review_edit`：审计 Agent 可改参后放行。

建议策略：

- 新环境默认人工审批。
- 只把只读、低风险、稳定工具加入白名单。
- 扫描类工具按目标范围配置角色和提示词约束。
- 写入、删除、执行 payload、C2、WebShell、账号改动等操作必须谨慎审批。

详见 [HITL 最佳实践](hitl-best-practices.md)。

## 审计

平台审计由 `audit` 配置控制，记录登录、配置、资源管理等平台操作。它不记录完整对话正文，也不等同于取证日志。

工具执行记录由监控模块维护，保留时间由 `monitor.retention_days` 控制。

建议：

- 开启 `audit.enabled`。
- 定期导出审计日志。
- 配置合理保留期。
- 对失败登录、配置变更、C2/WebShell 操作重点复核。

## C2 风险

内置 C2 会启动监听器、生成 payload、接收会话并执行任务。仅在明确授权的靶场、内网演练或红队环境中启用。

建议：

- 不使用时设置 `c2.enabled: false`。
- 不在公网暴露 C2 监听端口，除非有明确授权和隔离。
- 对 payload 文件、回连地址、任务输出进行访问控制。
- C2 任务建议走 HITL。

## WebShell 风险

WebShell 管理允许对已登记连接执行命令和文件操作。建议：

- 只添加授权目标。
- 给连接使用清晰名称、标签和备注。
- 不在共享环境保存真实生产 WebShell。
- AI 使用 WebShell 前确认目标和命令。
- 清理失效或不再授权的连接。

## 数据与隐私

本地会保存：

- 对话和消息：`data/conversations.db`
- 知识库索引：`data/knowledge.db`
- WebShell、C2、漏洞、项目、任务等业务数据。
- 上传附件：`chat_uploads/`

建议：

- 限制文件权限。
- 备份加密。
- 不上传无授权的敏感数据。
- 清理不再需要的会话、附件、C2 输出和审计日志。

## 生产基线

最低建议：

- 强密码 + HTTPS + 内网访问。
- `audit.enabled: true`。
- `mcp.auth_header_value` 设置随机值。
- 不需要时关闭 `c2.enabled`。
- 外部 MCP 最小化启用。
- 高风险工具不进白名单。
- 定期备份和更新。

## 真实威胁模型

| 威胁 | 攻击路径 | 影响 | 防护点 |
| --- | --- | --- | --- |
| Web 密码泄露 | 登录管理面，调用终端/WebShell/C2 | 完整接管平台能力 | 强密码、HTTPS、内网、反向代理认证、审计 |
| Prompt Injection | 目标页面或文档诱导 Agent 调高权限工具 | 越权执行工具或泄露数据 | 角色边界、HITL、工具最小化、知识库来源标注 |
| 外部 MCP 恶意 | MCP 服务返回误导描述或执行副作用 | 本机或目标系统受影响 | 只接入可信 MCP、独立运行用户、网络隔离 |
| 工具 YAML 被篡改 | 改写命令模板或参数 | Agent 调用时执行恶意命令 | 文件权限、代码审查、工具白名单 |
| C2 滥用 | 生成 payload 或下发任务到非授权目标 | 法律和业务风险 | 默认关闭、审批、事件保留、网络隔离 |
| WebShell 误操作 | AI 或用户在生产目标执行破坏命令 | 业务中断或数据损坏 | 连接命名、人工确认、只读优先、删除过期连接 |
| 数据库泄露 | 复制 `data/*.db` 或上传目录 | 对话、目标、漏洞、连接信息泄露 | 文件权限、加密备份、最小保留 |

## 授权边界写法

每个高风险角色都应把授权边界写进提示词，而不是只依赖用户口头说明。示例：

```text
你只能在用户明确给出的目标范围内行动。若需要执行写入、删除、爆破、持久化、凭证访问、C2、WebShell 或横向移动相关操作，必须先说明目的、影响、目标和回滚方式，并等待 HITL 审批。
```

这段话不能代替技术控制，但能降低 Agent 在模糊任务中扩张行为边界的概率。

## HITL 不是万能保险

HITL 的风险在于审批者看到的是“工具名 + 参数 + 上下文摘要”，不是完整现实世界影响。下面几类情况要特别保守：

- 参数看似只读，但工具本身会触发大量请求或写缓存。
- 命令通过 `bash -c`、脚本、base64 包装隐藏真实动作。
- 外部 MCP 工具描述不可信。
- WebShell 目标名称模糊，无法确认是否生产环境。
- C2 payload 生成和分发链路不在平台内。

审计 Agent 适合筛掉普通低风险请求，不适合替代人类批准破坏性动作。

## 数据最小化原则

不要把这些内容长期留在平台里：

- 真实客户凭证。
- 未脱敏报告。
- 生产数据库导出。
- 长期有效 Cookie。
- 无关目标的扫描输出。
- 已结束项目的 WebShell/C2 会话。

建议按项目结束流程清理：附件、WebShell 连接、C2 payload、临时 workspace、长输出工具记录。

## 源码锚点

- 认证会话：`internal/security/auth_manager.go`
- 认证中间件：`internal/security/auth_middleware.go`
- 限流：`internal/security/ratelimit.go`
- Shell 执行：`internal/security/executor.go`
- HITL 执行：`internal/handler/hitl_execution.go`
- 审计服务：`internal/audit/service.go`
