CyberTabletop CLI — 我把 GitHub Copilot 变成了桌面演练引导者

发布: (2026年2月13日 GMT+8 09:21)
6 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的具体文本内容,我将为您翻译成简体中文并保持原有的格式、Markdown 语法以及技术术语不变。

概述

大多数安全团队从未进行事件响应演练。传统的桌面演练需要准备、主持人以及难以安排的时间。CyberTabletop CLI 通过以下方式消除这些障碍:

  • 让您选择勒索软件情景并直接进入。
  • 在每回合提供情境更新,并给出 3–4 项可操作的选择。
  • 自动更新风险评分、资产状态以及游戏内时钟。
  • 生成 AI 生成的演练回顾或完整的 Markdown 文本记录,以供演练后审查。

入门指南

python main.py start
  1. 场景选择 – Copilot 生成三种勒索软件变体(例如,网络钓鱼、供应链妥协、内部威胁)。
  2. 公司初始化 – 创建完整的公司概况,包括资产、安全工具和基线风险水平。
  3. 游戏循环 – 每回合阅读更新,选择一个选项(A/B/C/D),游戏会推进时间(每回合 5–20 分钟),并相应调整运营、数据和法律风险分数(0–100)。

游戏内指令

CommandDescription
/status显示当前风险分数和资产健康状况。
/json查看原始游戏状态(JSON)。
/help列出可用指令。
/debrief生成会话的 AI 编写的简报。
/export导出完整的 Markdown 文本记录。
/exit保存并退出游戏。

技术栈

  • 语言: Python
  • CLI 框架: Typer
  • 终端 UI: Rich 用于颜色和布局
  • AI 后端: GitHub Copilot CLI (copilot -p "")

游戏 包含硬编码的情景树。每回合都会触发 copilot -p 调用,返回描述下一状态的 JSON。

提示工程与 JSON 处理

提示结构

每种交互类型(start menu、bootstrap、turn、debrief)都在提示中嵌入专用的 JSON 架构。系统提示 (FACILITATOR_RULES) 强制执行:

  • 仅 JSON 输出 – 不使用 markdown、反引号或评论。
  • 勒索软件聚焦 – 限制在所选情景类型。
  • 每回合 3–4 个选项 – 保持一致的决策空间。

解析鲁棒性

Copilot 有时会将 JSON 包裹在 markdown 边框中或添加零散的评论。解析器采用防御性策略:

  1. 对原始输出尝试 json.loads()
  2. 若失败,则回退到正则表达式,提取第一个 {…} 块。
  3. 在 Windows 上,处理偶尔出现的 PowerShell 对象表示法(@{}@()),将其转换为有效的 JSON。

状态管理

游戏状态是每回合传递给 Copilot 的单个字典。Copilot 返回包含以下内容的 state patch

  • 风险增量(运营、数据、法律)
  • 资产状态更新
  • 新的信号或标记

引擎应用该补丁,使游戏保持确定性,无需 Copilot 在调用之间保留记忆。为限制 token 使用量,仅返回最近的六个玩家动作,且状态仅包含下一步决策所需的字段。

面临的挑战

  • 一致的 JSON 输出 – 需要严格的模式和备用解析器。
  • 跨平台的怪癖 – Windows 上的 PowerShell 风格对象需要转换。
  • 提示的脆弱性 – Copilot 对系统指令的处理方式变化可能导致解析失败;未来版本可能会加入重试逻辑和模式验证。

未来方向

  • 将范围从勒索软件扩展到网络钓鱼、DDoS、供应链攻击等。
  • 为更多行业提供支持(例如金融、能源)。
  • 实现更丰富的重试和验证机制,以提升 AI 交互的鲁棒性。
  • 提供可选的“人工在环”模式,允许主持人编辑或批准 AI 生成的内容。

结论

CyberTabletop CLI 展示了 GitHub Copilot CLI 的一种新颖用法:它不仅是开发助手,还是实时的结构化游戏引擎。其结果是一个引人入胜、可重复的桌面演练,无需手动编写情景——非常适合希望以最小开销进行事件响应演练的团队。

0 浏览
Back to Blog

相关文章

阅读更多 »