CyberTabletop CLI — 我把 GitHub Copilot 变成了桌面演练引导者
Source: Dev.to
请提供您希望翻译的具体文本内容,我将为您翻译成简体中文并保持原有的格式、Markdown 语法以及技术术语不变。
概述
大多数安全团队从未进行事件响应演练。传统的桌面演练需要准备、主持人以及难以安排的时间。CyberTabletop CLI 通过以下方式消除这些障碍:
- 让您选择勒索软件情景并直接进入。
- 在每回合提供情境更新,并给出 3–4 项可操作的选择。
- 自动更新风险评分、资产状态以及游戏内时钟。
- 生成 AI 生成的演练回顾或完整的 Markdown 文本记录,以供演练后审查。
入门指南
python main.py start
- 场景选择 – Copilot 生成三种勒索软件变体(例如,网络钓鱼、供应链妥协、内部威胁)。
- 公司初始化 – 创建完整的公司概况,包括资产、安全工具和基线风险水平。
- 游戏循环 – 每回合阅读更新,选择一个选项(A/B/C/D),游戏会推进时间(每回合 5–20 分钟),并相应调整运营、数据和法律风险分数(0–100)。
游戏内指令
| Command | Description |
|---|---|
/status | 显示当前风险分数和资产健康状况。 |
/json | 查看原始游戏状态(JSON)。 |
/help | 列出可用指令。 |
/debrief | 生成会话的 AI 编写的简报。 |
/export | 导出完整的 Markdown 文本记录。 |
/exit | 保存并退出游戏。 |
技术栈
游戏 不 包含硬编码的情景树。每回合都会触发 copilot -p 调用,返回描述下一状态的 JSON。
提示工程与 JSON 处理
提示结构
每种交互类型(start menu、bootstrap、turn、debrief)都在提示中嵌入专用的 JSON 架构。系统提示 (FACILITATOR_RULES) 强制执行:
- 仅 JSON 输出 – 不使用 markdown、反引号或评论。
- 勒索软件聚焦 – 限制在所选情景类型。
- 每回合 3–4 个选项 – 保持一致的决策空间。
解析鲁棒性
Copilot 有时会将 JSON 包裹在 markdown 边框中或添加零散的评论。解析器采用防御性策略:
- 对原始输出尝试
json.loads()。 - 若失败,则回退到正则表达式,提取第一个
{…}块。 - 在 Windows 上,处理偶尔出现的 PowerShell 对象表示法(
@{}、@()),将其转换为有效的 JSON。
状态管理
游戏状态是每回合传递给 Copilot 的单个字典。Copilot 返回包含以下内容的 state patch:
- 风险增量(运营、数据、法律)
- 资产状态更新
- 新的信号或标记
引擎应用该补丁,使游戏保持确定性,无需 Copilot 在调用之间保留记忆。为限制 token 使用量,仅返回最近的六个玩家动作,且状态仅包含下一步决策所需的字段。
面临的挑战
- 一致的 JSON 输出 – 需要严格的模式和备用解析器。
- 跨平台的怪癖 – Windows 上的 PowerShell 风格对象需要转换。
- 提示的脆弱性 – Copilot 对系统指令的处理方式变化可能导致解析失败;未来版本可能会加入重试逻辑和模式验证。
未来方向
- 将范围从勒索软件扩展到网络钓鱼、DDoS、供应链攻击等。
- 为更多行业提供支持(例如金融、能源)。
- 实现更丰富的重试和验证机制,以提升 AI 交互的鲁棒性。
- 提供可选的“人工在环”模式,允许主持人编辑或批准 AI 生成的内容。
结论
CyberTabletop CLI 展示了 GitHub Copilot CLI 的一种新颖用法:它不仅是开发助手,还是实时的结构化游戏引擎。其结果是一个引人入胜、可重复的桌面演练,无需手动编写情景——非常适合希望以最小开销进行事件响应演练的团队。