第三次组会汇报:LLM 安全测试与 MCP 封装实践
1. 本次工作内容
- OpenAI 兼容接口直连验证:验证了
GET /v1/models和POST /v1/chat/completions - 基于 garak 的 lmrc 风险评估测试:改造出 One API 版本测试脚本,对 lmrc 子集 probe 进行了实际运行
- 安全工具链调研:对比分析
cli-anything-yakit、Yakit 官方平台、hexstrike-ai MCP三者的功能与定位 - MCP 封装实践:学习 MCP 协议与 Python SDK(FastMCP),将
cli-anything-yakit封装为 MCP Server,注册到 Claude Code
2. 测试环境
- 测试工具:garak v0.14.1
- Python 环境:3.11.7(Anaconda)
- MCP SDK:mcp 1.27.0(需 Python ≥ 3.10)
- 底层依赖:
cli-anything-yakit+ Yak gRPC 引擎
3. 主要测试结果
3.1 One API 兼容性验证
/v1/models:HTTP 200,接口可用,鉴权正常/v1/chat/completions:HTTP 200,响应耗时约 3.43s,成功返回结果
结论:One API 服务兼容 OpenAI 风格聊天接口,可直接按 OpenAI SDK 语法调用。
3.2 garak lmrc 测试结果
| Probe | 通过 | 失败 | 错误 | 总数 | 状态 |
|---|---|---|---|---|---|
| Bullying | 7 | 0 | 0 | 7 | PASS |
| Deadnaming | 4 | 0 | 2 | 6 | ERROR |
| QuackMedicine | 0 | 0 | 1 | 1 | ERROR |
| SexualContent | 1 | 0 | 0 | 1 | PASS |
| Sexualisation | 2 | 0 | 1 | 3 | ERROR |
| SlurUsage | 1 | 0 | 0 | 1 | PASS |
总 prompt 数:19,成功完成:15,detector 命中失败:0,完整通过率:78.95%
3.3 结果解读
错误原因不是模型输出了风险内容,而是部分请求发生了 ReadTimeout。
准确结论:已完成样本未发现 detector 命中的风险输出,但整体结果受超时影响,仍有未完成项。
4. 安全工具链调研
4.1 三者定位对比
| 维度 | cli-anything-yakit | Yakit 官方 | hexstrike-ai MCP |
|---|---|---|---|
| 形态 | Python CLI 工具 | Electron GUI 桌面应用 | MCP 工具服务器 |
| 定位 | Agent/自动化流水线 | 人工渗透测试平台 | 跨工具链 Agent 编排 |
| 工具数量 | 5 个命令 | 完整功能 | 127 个工具(7/127 可用) |
调研结论:三者互补——自动化流水线用 CLI,人工渗透测试用 GUI,跨工具链 Agent 编排用 MCP。
4.2 hexstrike-ai 工具安装现状
当前 7/127(5.5%)可用,核心安全工具(nmap、sqlmap、nuclei 等)均未安装。内置 AI 增强功能(payload 生成、攻击链规划、CVE 监控等)无需额外安装即可使用。
5. MCP 封装实践
5.1 什么是 MCP
MCP(Model Context Protocol)是 Anthropic 提出的开放协议,允许 AI Agent 通过统一接口调用外部工具。
1 | |
5.2 FastMCP 快速开发示例
1 | |
5.3 cli-anything-yakit 封装模式
三层封装:CLI 命令 (click) → Session + gRPC Stub → Yak gRPC 引擎
1 | |
5.4 两种封装模式对比
| 维度 | cli-anything-yakit(gRPC 封装) | hexstrike-ai(系统命令封装) |
|---|---|---|
| 底层通信 | gRPC streaming | subprocess + stdout 解析 |
| 依赖管理 | 单一引擎(yak binary) | 每个工具独立安装 |
| 流式输出 | 原生支持 | 需轮询或缓冲 |
| 适合场景 | 深度集成单一平台 | 广度覆盖多工具生态 |
5.5 封装要点总结
- 统一输出格式:所有工具输出转为结构化 JSON,Agent 无需解析原始文本
- 懒加载依赖:工具不可用时给出明确错误提示,而非启动时崩溃
- 生命周期管理:连接/进程用 context manager 封装,确保资源释放
- 可测试性:通过 mock gRPC stub 实现无依赖单元测试
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Moyuan"s website!
