OpenSource-For-Freedom/git_warden
GitHub: OpenSource-For-Freedom/git_warden
一款防御性威胁情报引擎,通过多源情报聚合与两级静态分析自动发现、确认并编录 GitHub 上的恶意代码仓库。
Stars: 1 | Forks: 0
一个防御性的威胁情报引擎,用于发现、分析和编录
**恶意的 GitHub 仓库**。威胁情报源
([MITRE ATT&CK](https://attack.mitre.org)、[Google News](https://news.google.com)、
[CISA](https://www.cisa.gov)、[OpenSourceMalware](https://opensourcemalware.com))
是*溯源线索*;它们有助于查找和归因这些仓库。最终产出
是恶意仓库的注册表。
有关设计,请参阅 [docs/](docs/);有关已完成与计划中的功能,请参阅 [docs/IMPLEMENTATION.md](docs/IMPLEMENTATION.md)。
指导原则:**准确率优先于数量。**

## 工作原理
```
INGEST (breadcrumbs) HUNT (find malicious GitHub repos)
MITRE ATT&CK ─┐ ┌─ IOC search: mirror OSM IOCs into
Google News ─┼─ corroborate ─► │ GitHub code search ----|
CISA ─┘ threat actors ├─ red-team lineage: forks/│
OpenSourceMalware ─► malicious │ renames of pinned tools┤
packages/repos + IOCs ────────────┘ ▼
Tier-1 screen (name+README, no clone)
│
Tier-2 (clone + bash scanner + OSS
scanners + code-hash dedup)
▼
Wall of Shame ─► Discord gold
```

## 耻辱墙
Git Warden 通过静态分析确认的恶意仓库,每次运行时都会刷新。只有当存在
内在的恶意证据(注入到构建配置中的 `eval(atob(...))`、反向 shell、凭证窃取并发送)时,仓库才会被确认;
威胁情报线索(恶意所有者、共享特征)仅用于*筛选*需要扫描的仓库,
单凭线索本身无法确认仓库为恶意。
_经静态分析确认的 12 个恶意仓库,每次运行时重新生成。每一行的证据(文件、行号、规则)均位于运行产物的 CSV 中。如需申诉:请提交一个 issue,我们将重新审查。_
| 仓库 | 检测方式 | 评分 | 归因 | 首次发现 | 原因 |
|------------|-----------|-------|-------------|------------|-----|
| [`alexsander532/projeto_dashboard_versao1`](https://github.com/alexsander532/projeto_dashboard_versao1) | malicious_owner | 14 | unattributed | hunt-20260620T053126Z | 已知恶意仓库的所有者 Alexsander532 名下的仓库 \| Tier-2 已确认 (bash 评分 14) |
| [`usmanaliashraf/portfolio`](https://github.com/usmanaliashraf/portfolio) | signature_match | 12 | unattributed | hunt-20260620T052811Z | 共享已确认恶意软件的代码签名 ['Jzt2YXIgXyRfMWU0Mj0oZnVuY3Rpb24obCxlKXt2YXIgaD1sLm'] \| Tier-2 已确认 (bash 评分 12) |
| [`icecoldjay/bri`](https://github.com/icecoldjay/bri) | signature_match | 11 | unattributed | hunt-20260620T052811Z | 共享已确认恶意软件的代码签名 ['eval atob filename:tailwind.config.js'] \| Tier-2 已确认 (bash 评分 11) |
| [`alexsander532/atlas_landingpage`](https://github.com/alexsander532/atlas_landingpage) | signature_match | 9 | unattributed | hunt-20260620T052811Z | 共享已确认恶意软件的代码签名 ['Jzt2YXIgXyRfMWU0Mj0oZnVuY3Rpb24obCxlKXt2YXIgaD1sLm'] \| Tier-2 已确认 (bash 评分 8) |
| [`alexsander532/mvp_wain_group130`](https://github.com/alexsander532/mvp_wain_group130) | signature_match | 9 | unattributed | hunt-20260620T052811Z | 共享已确认恶意软件的代码签名 ['Jzt2YXIgXyRfMWU0Mj0oZnVuY3Rpb24obCxlKXt2YXIgaD1sLm'] \| Tier-2 已确认 (bash 评分 8) |
| [`alexsander532/synapseai_landingpage`](https://github.com/alexsander532/synapseai_landingpage) | signature_match | 9 | unattributed | hunt-20260620T052811Z | 共享已确认恶意软件的代码签名 ['Jzt2YXIgXyRfMWU0Mj0oZnVuY3Rpb24obCxlKXt2YXIgaD1sLm'] \| Tier-2 已确认 (bash 评分 8) |
| [`agrawalchirag/corex`](https://github.com/agrawalchirag/corex) | osm_repository | 8 | DPRK (North Korea) (per OSM) | hunt-20260620T043523Z | 在合法的 tailwind 配置之后,将混淆的 eval(atob(...)) payload 注入到 postcss.config.js 中(Tier-2 静态检测)。线索:OSM 查询 |
| [`alexsander532/portfolio-pessoal`](https://github.com/alexsander532/portfolio-pessoal) | malicious_owner | 8 | unattributed | hunt-20260620T053126Z | 已知恶意仓库的所有者 Alexsander532 名下的仓库 \| Tier-2 已确认 (bash 评分 8) |
| [`alexsander532/synapse_ai`](https://github.com/alexsander532/synapse_ai) | malicious_owner | 8 | unattributed | hunt-20260620T053126Z | 已知恶意仓库的所有者 Alexsander532 名下的仓库 \| Tier-2 已确认 (bash 评分 8) |
| [`alexsander532/synapseai`](https://github.com/alexsander532/synapseai) | signature_match | 8 | unattributed | hunt-20260620T052811Z | 共享已确认恶意软件的代码签名 ['Jzt2YXIgXyRfMWU0Mj0oZnVuY3Rpb24obCxlKXt2YXIgaD1sLm'] \| Tier-2 已确认 (bash 评分 8) |
| [`haroontaufiq/cosmic-questionnaire`](https://github.com/haroontaufiq/cosmic-questionnaire) | signature_match | 8 | unattributed | hunt-20260620T052811Z | 共享已确认恶意软件的代码签名 ['Jzt2YXIgXyRfMWU0Mj0oZnVuY3Rpb24obCxlKXt2YXIgaD1sLm'] \| Tier-2 已确认 (bash 评分 8) |
| [`usmanaliashraf/rag-bot-uet-science-society`](https://github.com/usmanaliashraf/rag-bot-uet-science-society) | malicious_owner | 8 | unattributed | hunt-20260620T053126Z | 已知恶意仓库的所有者 UsmanAliAshraf 名下的仓库 \| Tier-2 已确认 (bash 评分 8) |

## 快速开始
```
pip install -e ".[dev]" # or run without install: python gw.py
cp .env.example .env # add GW_GITHUB_TOKEN, GW_OSM_API_KEY, ...
```
凭据会自动从 `.env` 加载(实际的 env vars 优先)。Token:
| 变量 | 作用 | 备注 |
|-----|------|-------|
| `GW_GITHUB_TOKEN` | GitHub PAT,**只读公开仓库** | 代码搜索必需,速率限制提升至 5k/hr |
| `GW_OSM_API_KEY` | OpenSourceMalware token (`osm_…`) | Bearer auth |
| `GW_DISCORD_WEBHOOK` | gold/alert 频道 | 仅限已确认的发现 |
(无需 NVD key;目前免费的 OSINT 源和 OSM 已覆盖情报来源。)
## 命令
```
python gw.py ingest # feeds -> actors + OSM artifacts
python gw.py iocs # IOC pivot set mined from OSM
python gw.py discover # IOC code search -> new repos
python gw.py lineage --tool Sliver --screen 12 # red-team clones + Tier-1
python gw.py screen-artifacts # Tier-1 over OSM repo scan-list
python gw.py hunt --scan --gold # full pipeline -> Wall of Shame -> Discord
python gw.py review --approve owner/repo # analyst-validate a confirmed repo
python gw.py probe --feed github --term lazarus # probe any feed live
```
## 部署
GitHub Actions([.github/workflows/](.github/workflows/)):`ci.yml` 运行
lint + 测试;`run.yml` 每周运行摄取→狩猎(根据文档 05,初期为手动触发)。每个
工作流都会先加固 runner(Legion 出站审计)。
添加这些 **repo Actions secrets**;工作流会将它们映射到代码读取的 `GW_*` env vars
(本地 `.env` 直接使用 `GW_*` 名称):
| Repo secret | 映射到 env var. |
|-------------|----------------- |
| `GH_TOKEN` | `GW_GITHUB_TOKEN` |
| `OSM_TOKEN` | `GW_OSM_API_KEY` |
| `DISCORD_WEBHOOK` | `GW_DISCORD_WEBHOOK` |
编排配置位于 [config/settings.yaml](config/settings.yaml) 和
[config/trigger.yaml](config/trigger.yaml) 中。
## 开发
```
ruff check src tests gw.py
pytest -q
```
标签:Python, 威胁情报, 安全, 安全规则引擎, 开发者工具, 恶意代码分析, 无后门, 网络信息收集, 误配置预防, 超时处理, 配置审计, 配置文件