sanmaxdev/SentinelDeck
GitHub: sanmaxdev/SentinelDeck
被动式攻击面扫描器,将域名转化为安全风险评分、结构化数据和可交付客户的 HTML 报告,覆盖 DNS、HTTP、TLS、邮件安全及证书透明度五大维度。
Stars: 2 | Forks: 1
面向小型企业、代理机构和安全顾问的被动攻击面雷达。
一次安全的扫描即可将域名转化为清晰的风险评分、结构化的 JSON 以及可直接交付给客户的报告。
| Testing |
|
| Code quality |
|
| Code style |
|
| Package |
|
| Safety |
|
SentinelDeck 仅使用任何浏览器或邮件服务器都会进行的常规查询,检查域名在 DNS、HTTP、TLS、电子邮件身份验证及其证书透明度足迹方面的公开安全态势。没有侵入式扫描,没有漏洞利用,也没有任何域名所有者意料之外的操作。扫描结果是风险评分、A 到 F 的等级,以及一组已区分优先级的发现,每个发现都附带可直接复制粘贴的具体修复方法。
它专为需要快速获取安全全貌的人员而构建:无论是进行潜在客户评估的代理机构、撰写客户报告的顾问,还是检查自身安全足迹的小型团队。
## 目录
- [功能](#features)
- [检查项](#what-it-checks)
- [安装](#installation)
- [用法](#usage)
- [输出示例](#example-output)
- [工作原理](#how-it-works)
- [开发](#development)
- [安全模型](#safety-model)
- [支持](#support)
- [许可证](#license)
## 功能
设计上保证被动与安全
仅使用标准的 DNS、HTTP、TLS 和电子邮件查询,与任何浏览器或邮件服务器发出的请求相同。可对任何您获授权评估的域名运行此工具。
|
准确,并带有置信度模型
DNS 在进程内解析,证书直接解析。任何无法确认的检查项都会被标记为未验证并排除在评分之外,因此客户绝不会看到将猜测呈现为事实的情况。
|
一次检查覆盖五个面
DNS 卫生、HTTP 安全标头、TLS 证书质量、电子邮件身份验证和域名注册情报,将这些评分汇总为单一的安全全貌。
|
清晰的风险评分和等级
每一项发现都根据严重程度进行加权,计入 0 到 100 的风险评分以及 A 到 F 的等级中,每一项都配有一个优先的、通俗易懂的修复步骤。
|
可直接复制粘贴的修复方案
每一项发现都提供确切的修复方案,而不仅仅是建议:提供能解决问题的精确 DNS 记录、HTTP 标头或服务器配置,每一项均附有权威参考。这些内容同时包含在 JSON 和 HTML 报告中。
|
交互式修复模拟器
HTML 报告允许客户勾选计划实施的修复方案,并实时查看预测的分数和等级提升,还可以通过一键“速赢”功能,选择达到 A 级的最短路径。
|
攻击面映射
读取证书透明度日志以发现域名的公开子域名,标记潜在敏感名称(dev、staging、admin、vpn),并检测攻击者可能接管的悬空 CNAME。
|
监控与告警
对比任意两次扫描,或按计划运行 monitor 命令进行扫描、与上一次运行结果对比,并在域名安全态势出现退化时立即发布 webhook 告警(支持 Slack、Discord 或自定义)。
|
可直接生成报告的输出
用于自动化的结构化 JSON、为客户准备的精美深红主题 HTML 报告、可分享的评分卡、可嵌入的等级徽章以及 HTML 变更报告。
|
设计上保证高弹性
两个证书透明度来源(crt.sh 及 CertSpotter 备用)以及用于受限网络的 DNS-over-HTTPS 备用方案,确保在简单工具会静默失败的环境下,扫描依然能正常工作。
|
## 检查项
| 领域 | 检查项 |
| --- | --- |
| **DNS** | 解析、CAA 颁发控制、DNSSEC |
| **HTTP** | HTTPS 可达性、HTTP 到 HTTPS 重定向、安全标头的存在情况**以及**值的质量、security.txt、cookie 标志、版本信息泄露 |
| **TLS** | 信任状态及失败原因(过期、自签名、主机名不匹配、不受信任)、过期时间、协议版本、密钥强度、签名算法、主机名匹配 |
| **电子邮件** | MX、SPF(策略、多重记录、10 次查询限制)、DMARC(策略、子域名策略、强制执行覆盖率)、DKIM 检测 |
| **域名** | 通过 RDAP 获取注册商、注册时长及过期时间 |
| **子域名** | 通过证书透明度进行公开子域名发现(crt.sh、CertSpotter)、敏感名称标记以及悬空 CNAME 接管检测 |
每一个问题都会根据严重程度进行评分,计入 0 到 100 的风险评分以及 A 到 F 的等级中。
## 安装
SentinelDeck 要求 **Python 3.10 或更高版本**。
从 PyPI 安装(将在首个版本发布后提供,参见
[RELEASING.md](RELEASING.md)):
```
pip install sentineldeck
```
从源码安装:
```
git clone https://github.com/sanmaxdev/SentinelDeck.git
cd SentinelDeck
python3 -m venv .venv
. .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .
```
无论哪种方式,这都会将 `sentineldeck` 命令添加到您的路径中。验证方法:
```
sentineldeck --version
```
为了进行开发,请安装开发扩展依赖(pytest 和 ruff):
```
pip install -e ".[dev]"
```
## 用法
扫描域名并生成 JSON 报告:
```
sentineldeck scan example.com --output reports/example.json
```
生成可直接交付给客户的 HTML 报告、可分享的评分卡以及徽章。HTML 报告包含攻击面映射和交互式修复模拟器:
```
sentineldeck report reports/example.json \
--html reports/example.html \
--svg reports/example-card.svg \
--badge reports/example-badge.svg
```
跟踪域名安全态势在两次扫描间的变化:
```
sentineldeck diff reports/example-may.json reports/example-june.json \
--html reports/example-change.html
```
`diff` 命令会显示新增项、已解决问题、分数和等级变动以及任何严重程度的升级。当安全态势退化(出现新的高危或严重发现,或分数提高)时,它会配合 `--exit-code` 以非零状态退出,因此可以直接放入 cron job 或 CI 步骤中进行定时监控。
按计划监控域名并在退化时收到告警:
```
sentineldeck monitor example.com --webhook https://hooks.slack.com/services/...
```
`monitor` 命令会执行扫描,与上一次运行结果进行对比(默认存储在 `.sentineldeck/` 下),并将新报告保存为最新版本,从而将 cron job 或计划任务转化为持续的监控。配合 `--webhook`,它会在安全态势退化时发布告警(支持 Slack、Discord 或任何自定义 endpoint)。首次运行会建立基线;使用 `--alert-on change` 可以在发生任何变化时收到通知,使用 `--exit-code` 可以在退化时让任务失败。
常用标志:`--pretty` 将完整的 JSON 打印到 stdout,`--timeout` 限制 HTTP 和 TLS 探测的时间,`diff --json` 或 `diff -o` 输出结构化增量数据。
## 输出示例
```
{
"target": "example.com",
"risk_score": 27,
"grade": "B",
"findings": [
{ "id": "dmarc-missing", "severity": "medium", "confidence": "confirmed", "...": "..." }
]
}
```
## 工作原理
```
src/sentineldeck/
├── scanner.py # runs every probe concurrently and assembles the report
├── scanners/ # one module per surface: dns, dns_hygiene, tls, http_headers,
│ # email_security, domain_intel, subdomains, takeover
├── risk/scoring.py # turns raw check results into scored findings
├── remediation.py # maps each finding to a concrete copy-paste fix
├── diff.py # compares two reports into a structured change delta
├── monitor.py # scan, compare to the last run, and persist state
├── alerts.py # webhook delivery on regression
├── reporters/ # json, html, svg (card + badge), and diff renderers
└── models.py # Finding and ScanReport data models
```
每个扫描器都是独立的,并保持其网络调用的可注入性,因此整个测试套件都可以使用 mock 的 DNS、HTTP 和证书透明度数据进行离线测试。
## 开发
```
pip install -e ".[dev]"
ruff check .
pytest -q
```
可选:启用 pre-commit hooks,以便在每次提交时运行 linting:
```
pip install pre-commit && pre-commit install
```
CI 会在 Python 3.10、3.11 和 3.12 上运行 ruff 和完整的测试套件,并在每次推送时使用 CodeQL 扫描代码库以检查安全问题。
## 安全模型
SentinelDeck 是**被动优先**的。它仅对指定的域名执行常规的 DNS 查询以及标准的 HTTP 和 TLS 元数据请求,外加公开的证书透明度查询。它不会对任何内容进行探测、模糊测试或漏洞利用。请仅对您拥有或获授权评估的域名使用此工具。
## 支持
- **问题与 Bug 报告**:请在
[Issue 跟踪器](https://github.com/sanmaxdev/SentinelDeck/issues)上创建一个 Issue。
- **安全问题**:请遵循[安全策略](SECURITY.md),而不是
提交公开的 Issue。
- **贡献**:请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。新增的检查项
必须是被动安全的,并附带测试。本项目遵循
[行为准则](CODE_OF_CONDUCT.md)。
## 许可证
[MIT](LICENSE)
标签:Python, Snort++, 动态插桩, 安全合规与审计, 安全规则引擎, 实时处理, 无后门, 被动扫描, 逆向工具