開源 EASM(External Attack Surface Management)資安曝險評級平台。
以 100% 開源工具實作七維度資安掃描與評級,產出 0-100 量化分數與 A/B/C/D 等級, 輸出繁體中文 HTML / PDF / CSV 報告。
資產探勘(5 工具聯動)
- subfinder / amass — 子網域被動列舉
- dnsx — DNS 解析驗證
- httpx — HTTP 存活與 Header 偵測
- naabu — 埠掃描
七大安全分析模組
| 模組 | 維度 | 權重 | 滿分 |
|---|---|---|---|
| M1 | Web Security(安全 Header / TLS / Nuclei) | 25% | 25 |
| M2 | IP Reputation(AbuseIPDB) | 15% | 15 |
| M3 | Network Security(高風險埠 / Nmap) | 20% | 20 |
| M4 | DNS Security(DNSSEC / Zone Transfer) | 15% | 15 |
| M5 | Email Security(SPF / DKIM / DMARC) | 10% | 10 |
| M6 | Dark Web Exposure(HIBP) | 10% | 10 |
| M7 | Fake Domains(dnstwist) | 5% | 5 |
其他
- 加權評分演算法(0-100 分,A/B/C/D 等級)
- 繁體中文 HTML / PDF 報告
- JSON / CSV 原始資料匯出
- 掃描差異比對與告警
- Slack / Email / LINE 通知
- Docker 容器化一鍵部署
git clone https://github.com/your-org/cypulse.git
cd cypulse
cp .env.example .env # 填入 API Key
docker-compose build
docker-compose run --rm cypulse scan example.com# 前置需求:Python 3.10+、ProjectDiscovery 工具(subfinder/httpx/dnsx/naabu)、nmap
pip install -e .
cypulse --helpcypulse scan example.com輸出範例:
[CyPulse] 開始掃描 example.com...
[CyPulse] Phase 1: 資產探勘...
[CyPulse] 子網域: 12, 存活: 10, HTTP: 8
[CyPulse] Phase 2: 風險分析...
[CyPulse] 完成 7 個模組分析
[CyPulse] Phase 3: 評分...
[CyPulse] 總分: 78/100 (C)
[CyPulse] Phase 4: 報告產出...
[CyPulse] HTML: data/example.com/20260312_020000/report.html
[CyPulse] PDF: data/example.com/20260312_020000/report.pdf
[CyPulse] CSV: 2 files
[SCAN COMPLETE] domain=example.com score=78 grade=C duration=1102s modules=7/7 findings=47
[CyPulse] 結果儲存於: data/example.com/20260312_020000
執行完整掃描(探勘 + 分析 + 評分 + 報告)。
cypulse scan example.com # 完整掃描
cypulse scan example.com --modules M1,M5 # 僅執行指定模組
cypulse scan example.com --output ./results # 指定輸出目錄以既有掃描結果重新產出報告。
cypulse report data/example.com/20260312_020000 # HTML(預設)
cypulse report data/example.com/20260312_020000 -f pdf # PDF
cypulse report data/example.com/20260312_020000 -f all # 全部格式比較兩次掃描結果差異。
cypulse diff data/example.com/20260301_020000 data/example.com/20260312_020000複製 .env.example 為 .env 並填入:
ABUSEIPDB_API_KEY=your_key # M2 IP Reputation
HIBP_API_KEY=your_key # M6 Dark Web
URLSCAN_API_KEY=your_key # 選用
SLACK_WEBHOOK_URL=https://... # 選用,Slack 通知或使用 config/config.yaml(參考 config/config.yaml.example)。
cypulse/
├── cli.py # CLI 入口
├── discovery/ # 資產探勘(subfinder/amass/dnsx/httpx/naabu)
├── analysis/ # 七大安全分析模組(M1-M7)
├── scoring/ # 加權評分引擎
├── report/ # HTML/PDF/CSV 報告產出
│ └── templates/ # Jinja2 報告模板
├── automation/ # 差異比對、通知
│ ├── diff.py
│ └── notifier.py
├── models/ # 資料模型(dataclass)
└── utils/ # 通用工具
pip install -e ".[dev]"
make test # 執行測試
make lint # 程式碼檢查
make coverage # 測試覆蓋率MIT License
| 文件 | 說明 |
|---|---|
| SRS.md | 軟體需求規格書 |
| SDS.md | 軟體設計規格書 |
| DEPLOY_SPEC.md | 部署規格書 |
| architecture.md | 架構概覽 |
| ADR-001 | 技術棧選型決策 |
| ADR-002 | 評分演算法設計決策 |
| ADR-003 | API Fallback 機制決策 |
| TROUBLESHOOTING.md | 常見問題排查 |
| CONTRIBUTING.md | 貢獻指南 |
| CHANGELOG.md | 版本變更記錄 |