tmon3ygrc-sentinel/darksword
GitHub: tmon3ygrc-sentinel/darksword
DARKSWORD 是一个多源威胁情报自动化管线,利用 AI 将安全内容映射到 CMMC 2.0 合规控制项,帮助 GRC 分析师自动化完成差距分析。
Stars: 1 | Forks: 0
# ⚔️ Project DARKSWORD — GRC 情报平台
**威胁情报 → CMMC 2.0 差距分析 — 自动化**
这是一个多源情报 pipeline,每日从节目笔记、威胁情报源和 YouTube 获取安全内容,使用 Claude AI 进行分类,将其映射到 **CMMC 2.0 / NIST 800-171** 控制项,将记录链接到动态的 GRC 学习计划,并将结构化记录推送到 Notion GRC 知识库中。
本项目是 **STAR Project**(通过对抗性磨砺实现自我蜕变)的一部分——这是一个注重实战的 vCISO 发展项目。先实现手动掌握,再进行自动化。
## 为什么是 DARKSWORD
这种不对称性是真实存在的。
国家级攻击者和勒索软件运营商已经在利用 AI 来扩大攻击规模、加速侦察,并制作更具欺骗性的社会工程攻击——其速度是任何人类分析师都无法单独匹敌的。
DARKSWORD 的存在就是为了消除这一差距。
一个仅拿着电子表格的单枪匹马的 GRC 分析师,在与经过 AI 加持的对手对抗时并不占优势。但是,如果这位 GRC 分析师能够运行一个自主的情报 pipeline,每日获取多个威胁情报源,将每条消息映射到 CMMC 2.0 控制项,维护动态的审计追踪,并跨 131 个控制项展示关键的威胁强度——这将是一种截然不同的防御姿态。
这个项目证明了防御者同样可以利用这些技术来建立优势。这不是为了取代分析师的判断,而是为了放大他们的能力。
威胁行为者不会等待。你也不应如此。
## 架构
```
Simply Cyber (show notes / YouTube) AlienVault OTX (feed) Barricade Cyber (YouTube)
↓ ↓ ↓
get_show_notes() [primary] get_otx_pulses() get_barricade_latest() [RSS]
get_barricade_intel() [<500w fallback] ↓ get_barricade_intel() [transcript]
↓ analyze_with_claude_prompt() ↓
analyze_with_claude() (OTX_ANALYST_PROMPT) analyze_with_claude()
↓ ↓ ↓
└───────────────────────────────────┘─────────────────────────┘
↓
governance_input.txt
↓
notion_logger_v7.py
[DARKSWORD Engine]
↓
CPE Tracker DB
↙ ↘
Master Frameworks DB GRC Learning Plan DB
(CMMC 2.0) [Auto-linked by content]
```
### 数据库 (Notion)
| 数据库 | 脚本 | 来源 | 用途 |
|---|---|---|---|
| CPE Tracker | `notion_logger_v7.py` | Simply Cyber, AlienVault OTX, Barricade Cyber | 战术威胁情报 |
| STAR Strategy | `threat_ingest.py` | Barricade Cyber (旧版引擎) | 战略架构 |
| Master Frameworks | 共享 | CMMC 2.0 | 控制项映射(单一事实来源) |
| GRC Learning Plan | 共享 | 内部 | 从控制域自动链接 |
## 工作区结构
```
STAR_PROJECT (GRC-OCEG)
└── darksword/
├── notion_logger_v7.py ← DARKSWORD core engine (V7)
├── threat_ingest.py ← Barricade engine (legacy)
├── run_darksword_auto.ps1 ← Task Scheduler: Simply Cyber daily
├── run_darksword_otx.ps1 ← Task Scheduler: AlienVault OTX
├── run_darksword_barricade.ps1 ← Task Scheduler: Barricade Cyber
├── gemini_ingest_tool.py ← Standalone Gemini YouTube transcription tool
├── governance_input.txt ← Working file (gitignored)
├── barricade_last_ingested.txt ← Barricade dedup state (gitignored)
├── failed_records.txt ← Failed push log
├── prompts/ ← Analyst prompt library
├── archive/ ← Legacy scripts
├── GRC-Playground/ ← Experimental work
├── GovSCH/ ← Governance scheduler
├── .env ← API keys (gitignored)
├── requirements.txt
├── README.md
└── script_walkthrough_.md ← Full code walkthrough
```
## Pipeline 模式
### DARKSWORD (`notion_logger_v7.py`)
```
cpe # launches via alias
```
#### 交互式菜单
| 选项 | 描述 | 来源标签 |
|---|---|---|
| `1. Autonomous Pipeline` | Show Notes → Claude → Notion(提示输入日期) | Simply Cyber Daily Threat Brief |
| `2. Manual Pipeline` | `governance_input.txt` → Notion | *(用户指定)* |
| `3. Test Pipeline` | 模拟数据 → Notion(`$0.00`,仅限 `--test` 标志) | — |
| `4. OTX Pipeline` | AlienVault OTX → Claude → Notion | AlienVault OTX |
| `5. RSS Feed Pipeline` | RSS 自动检测日期 → Show Notes → Claude → Notion | Simply Cyber Daily Threat Brief |
| `6. Barricade Cyber` | YouTube URL → Transcript → Claude → Notion | Barricade Cyber |
| `7. Simply Cyber YouTube` | YouTube URL → Transcript → Claude → Notion | Simply Cyber Daily Threat Brief |
| `8. Gemini YouTube Ingest` | YouTube URL → Gemini transcript → Claude → Notion | *(用户选择)* |
选项 7 是节目笔记的备用方案——与选项 6 流程相同,但标记为 Simply Cyber。请在节目笔记页面尚未发布或内容不足时使用。
选项 8 使用 Gemini API (`gemini-2.0-flash`) 来转录 `YouTubeTranscriptApi` 无法获取的 YouTube 视频——包括受限、年龄限制或长视频内容。程序会提示输入规范的来源标签。要求在 `.env` 中配置 `GEMINI_API_KEY`。`gemini_ingest_tool.py` 是等效的独立运行脚本。
#### 非交互式标志(Task Scheduler)
| 标志 | Pipeline | 日志文件 |
|---|---|---|
| `--auto` | RSS 日期检测 → 节目笔记 → Claude → Notion(包含字数 <500 的 YouTube 备用方案) | `darksword_YYYY-MM-DD.log` |
| `--auto-otx` | AlienVault OTX → Claude → Notion | `darksword_otx_YYYY-MM-DD.log` |
| `--auto-barricade` | Barricade RSS → transcript → Claude → Notion(包含受限视频备用方案 + 去重) | `darksword_barricade_YYYY-MM-DD.log` |
各个标志互斥。`--test` 与所有自动运行标志也互斥。
#### 字数门控 (`--auto`)
在 `get_show_notes()` 返回后,脚本会对单词进行计数。如果结果低于 500:
1. 打印一条包含实际字数的警告
2. 从同一个 RSS 条目中提取 YouTube URL
3. 回退到 `get_barricade_intel()` 获取 YouTube 转录文本
4. 使用转录文本作为内容继续 Claude/Notion pipeline
5. 如果 RSS 条目中没有 YouTube URL,或者获取转录文本失败,则正常退出(退出码为 0)
## 快速开始
```
git clone https://github.com/tmon3ygrc-sentinel/darksword.git
cd darksword
python -m venv .venv
source .venv/Scripts/activate # Windows Git Bash
pip install -r requirements.txt
cp .env.example .env
```
填写 `.env`:
```
# Core
NOTION_TOKEN=secret_...
DATABASE_ID=... # CPE Tracker
CMMC_DATABASE_ID=... # Master Frameworks
ANTHROPIC_API_KEY=sk-ant-...
OTX_API_KEY=... # AlienVault OTX (for Choice 4 / --auto-otx)
GEMINI_API_KEY=... # Gemini API (for Choice 8 / gemini_ingest_tool.py)
# Learning Plan 周
LEARNING_WEEK_1=...
LEARNING_WEEK_2=...
LEARNING_WEEK_3=...
LEARNING_WEEK_5=...
LEARNING_WEEK_6=...
LEARNING_WEEK_7=...
LEARNING_WEEK_8=...
LEARNING_WEEK_10=...
LEARNING_WEEK_11=...
LEARNING_WEEK_12=...
LEARNING_WEEK_13=...
LEARNING_WEEK_14=...
LEARNING_WEEK_15=...
LEARNING_WEEK_17=...
LEARNING_WEEK_18=...
LEARNING_WEEK_19=...
LEARNING_WEEK_20=...
LEARNING_WEEK_21=...
LEARNING_WEEK_23=...
LEARNING_WEEK_24=...
LEARNING_WEEK_25=...
LEARNING_WEEK_26=...
LEARNING_WEEK_27=...
LEARNING_WEEK_28=...
LEARNING_WEEK_29=...
LEARNING_WEEK_30=...
LEARNING_WEEK_33=...
LEARNING_WEEK_35=...
LEARNING_WEEK_36=...
```
在 `~/.bashrc` 中设置 `cpe` 别名:
```
alias cpe='cd /c/Work/GRC/darksword && /c/Work/GRC/.venv/Scripts/python.exe notion_logger_v7.py'
```
### 安全:激活 pre-commit hook
本仓库自带了一个 `gitleaks` pre-commit hook (`.githooks/pre-commit`),它会扫描已暂存的更改,并 **拦截任何包含密钥的提交**。Git 不会在 clone 后自动运行 hook(这是一种出于安全考虑而默认防范远程代码执行的措施),因此在 clone 之后请启用一次:
```
git config core.hooksPath .githooks
```
要求在 `PATH` 中包含 [`gitleaks`](https://github.com/gitleaks/gitleaks) 二进制文件。要确认它是否生效,可以暂存一个伪造的密钥并尝试提交——该 hook 应该会拒绝它。
### 主要依赖
`notion-client` 在 `requirements.txt` 中被锁定为 `==2.2.1`。Notion SDK 在后续版本中更改了其异步行为,这会破坏同步 pipeline。未经测试,请勿升级。
Choice 8 和 `gemini_ingest_tool.py` 需要 `google-genai`。使用 `pip install google-genai` 安装。通过 `client.models.generate_content()` 和 `types.Part.from_uri()` 传递 YouTube URL,使用的是 `gemini-2.0-flash`。
## 情报来源
| 来源 | 频道 | 关注点 | 状态 |
|---|---|---|---|
| Simply Cyber | Show Notes | 每日战术威胁简报 | ✅ 运行中(自动 + 交互) |
| AlienVault OTX | Threat Feed | IOC 源,Pulse 情报 | ✅ 运行中(自动 + 交互) |
| Barricade Cyber | YouTube | DFIR,MSP/企业运营 | ✅ 运行中(自动 + 交互) |
| Cybernews | YouTube | 威胁行为者档案,地缘政治 | 计划中 |
## Task Scheduler
三个 Windows Task Scheduler 任务每天按计划以非交互方式运行 `notion_logger_v7.py`:
| 任务 | 脚本 | 触发器 |
|---|---|---|
| DARKSWORD Auto | `run_darksword_auto.ps1` | 工作日上午 9 点 |
| DARKSWORD OTX | `run_darksword_otx.ps1` | 每天 |
| DARKSWORD Barricade | `run_darksword_barricade.ps1` | 每天 |
每个 PS1 包装脚本都会设置 `PYTHONIOENCODING=utf-8` 和 `$OutputEncoding`,以防止日志文件中的 emoji 出现乱码,然后将 stdout 和 stderr 输出到带有日期的日志文件中。
## CMMC 缓存
脚本在启动时会查询 Master Frameworks 数据库,并在内存中构建包含所有 CMMC 2.0 控制项的缓存。当前已加载:**128 个控制项**。
`normalize_cid()` 会在查找缓存之前去除空格并统一大小写。未解析的 ID 会被记录在 `CMMC_MISSES` 中,并在运行后的未命中报告中打印出来,以便在不中断推送循环的情况下调查差距。
## 学习计划自动映射
每一条情报记录都会根据其 `control_domains` 和 `intel_category` 自动关联到相关的 GRC 学习计划周数——无需手动输入。
**域 → 周映射:**
| 控制域 | 学习周 |
|---|---|
| Incident Response (IR) | Week 23 |
| Supply Chain Risk Management (SR) | Week 19, Week 29 |
| Risk Assessment (RA) | Week 18, Week 20 |
| Access Control (AC) | Week 13 |
| Identification and Authentication (IA) | Week 13 |
| Configuration Management (CM) | Week 12 |
| System Integrity (SI) | Week 17 |
| System and Communications Protection (SC) | Week 17 |
| Security Awareness and Training (AT) | Week 5 |
| Audit and Accountability (AU) | Week 27, Week 28 |
**类别 → 周映射:**
| 情报类别 | 学习周 |
|---|---|
| regulatory | Week 25 |
| advisory | Week 26 |
| supply-chain | Week 19, Week 29 |
| incident / ransomware / phishing | Week 23 |
| vulnerability | Week 20, Week 21 |
| malware | Week 19 |
| breach | Week 28 |
| law-enforcement | Week 25 |
| ai-risk | Week 17 |
| identity-intelligence | Week 13 |
## 路线图
- [x] DARKSWORD v6 — 基于 Claude 的战术情报 pipeline
- [x] Manual Pipeline — 针对 Simply Cyber 内容的标准工作流
- [x] CMMC 关系映射(128 个控制项)
- [x] `SR.L2-3.15.2` 已添加至 Master Frameworks
- [x] `impacted_identity_provider` 字段映射已修复
- [x] 从 `control_domains` 和 `intel_category` 自动检测学习计划
- [x] 学习计划从 3 周扩展至 29 周
- [x] DARKSWORD v7 — `get_show_notes()` 替换了针对 Simply Cyber 的 YouTube 爬取方式
- [x] Autonomous Pipeline (选项 1) 通过节目笔记上线,适用于 Simply Cyber
- [x] OTX Pipeline (选项 4) — 整合 AlienVault 威胁情报源并带有三重过滤门
- [x] `analyze_with_claude_prompt()` — 针对不同来源的提示词微调
- [x] `OTX_ANALYST_PROMPT` — `content_type`, `content_category`, `impacted_identity_provider` 已修复
- [x] CMMC 缓存重试循环(3 次尝试,应对速率限制)
- [x] `max_tokens` 增加至 16000
- [x] RSS Feed Pipeline (选项 5) — 从 Transistor RSS 自动检测节目日期
- [x] `--auto` 标志 — 用于 Task Scheduler 的非交互式 Simply Cyber pipeline
- [x] `--auto-otx` 标志 — 用于 Task Scheduler 的非交互式 OTX pipeline
- [x] `--auto-barricade` 标志 — 用于 Task Scheduler 的非交互式 Barricade pipeline
- [x] Windows Task Scheduler 自动化(3 个任务,3 个 PS1 包装脚本)
- [x] Barricade Cyber pipeline (选项 6) — 通过 `YouTubeTranscriptApi` 获取 YouTube 转录文本
- [x] `get_barricade_latest()` — 基于 RSS 驱动,带有受限视频回退机制和去重功能
- [x] Simply Cyber YouTube 备用方案 (选项 7) — 在节目笔记内容单薄时使用转录文本
- [x] `--auto` 中的字数门控 — 如果字数 <500 则自动回退到 YouTube 转录文本
- [x] `normalize_cid()` + `CMMC_MISSES` 运行后未命中报告
- [x] `source_show` 在 `ANALYST_PROMPT` 中锁定为规范值
- [x] Gemini YouTube Ingest (选项 8) — 针对受限/长视频使用 `gemini-2.0-flash` 进行转录
- [x] `gemini_ingest_tool.py` — 独立的 Gemini 转录脚本
- [ ] Cybernews 威胁行为者数据库及关系映射
- [ ] Phoenix Lab VM 环境(攻击面测试)
## 已知限制
**针对 Simply Cyber,`get_transcript()` 仍然处于被阻止状态** — 在网络/IP 层面上,yt-dlp 对 Simply Cyber 内容的访问被阻止。这已不再是 pipeline 的限制:V7 的选项 1 使用 `get_show_notes()`,而 `--auto` 的字数门控会回退 `get_barricade_intel()`(使用 YouTubeTranscriptApi,而不是 yt-dlp)。保留 `get_transcript()` 仅供参考,但不会被任何活跃的 pipeline 调用。
**`unknown` 威胁行为者在 Notion 中显示为空** — 脚本会跳过占位符值(`none`、`unknown`、`empty`、`n/a`)以防止数据库中出现干扰信息。这是有意设计的行为。
**Barricade RSS 可能不包含 YouTube URL** — 如果 Simply Cyber 节目的 Transistor 源条目中没有 `yt_videoid`,并且在 `entry.links` 中也没有 YouTube href,那么 `--auto` 的 YouTube 备用机制将无法触发。Pipeline 会干净地退出并记录一条日志信息。
## 许可证
MIT — 开源。随意使用、复刻并在此基础上进行构建。
*基于 HardOPS 原则构建。自动化之前先实现手动掌握。自食其力。* ⚔️💎🦅
身份修复
标签:AI合规, CMMC 2.0, GRC, 合规自动化, 威胁情报, 开发者工具, 自动化数据流, 逆向工具