MrAbubaker1/perimeter-scan
GitHub: MrAbubaker1/perimeter-scan
一个被动式外部攻击面扫描器,帮助组织在攻击者之前发现暴露的子域名、即将过期的证书、缺失的安全标头和悬空 DNS 记录。
Stars: 0 | Forks: 0
# perimeter-scan
**被动式外部攻击面扫描器。** 在攻击者(或潜在客户的安全团队)发现之前,找出您暴露的子域名、即将过期的证书、缺失的安全标头,以及可能被劫持的悬空 DNS。
一条命令,无需 agent,无需注册:
```
$ perimeter-scan example.com
```
它是**被动的**:它读取公开的 Certificate Transparency 日志和 DNS,并对其发现的主机发出标准的 Web 请求。没有漏洞利用,没有端口扫描,也没有经过身份验证的探测。**请仅扫描您拥有或被授权评估的域名。**
## 检查内容
| 检查项 | 方式 |
|-------|-----|
| **子域名** | 从公开的 Certificate Transparency 日志 (crt.sh) 中枚举 |
| **TLS 卫生** | 已过期、即将过期和自签名的证书 |
| **安全标头** | 缺失 HSTS / CSP / 防点击劫持 / MIME 嗅探标头 |
| **子域名接管** | 指向未声明的第三方服务的悬空 CNAME |
## 安装
```
$ pipx install perimeter-scan # recommended (isolated)
# 或
$ pip install perimeter-scan
```
需要 Python 3.11+。
## 用法
```
$ perimeter-scan example.com # human-readable report
$ perimeter-scan example.com --json # machine-readable JSON
$ perimeter-scan example.com --min-severity high # only high+ findings
$ perimeter-scan example.com --max-subdomains 100 # scan more hosts
$ perimeter-scan example.com --fail-on high # exit 1 if any high+ finding (for CI)
```
### 在 CI 中 — 遇到新的暴露时让构建失败
```
# .github/workflows/attack-surface.yml
- run: pipx install perimeter-scan
- run: perimeter-scan yourcompany.com --fail-on high --json
```
### 作为库使用
```
import asyncio
from perimeter_scan import passive_scan, ScanConfig
result = asyncio.run(passive_scan("example.com", config=ScanConfig(max_subdomains=50)))
print(result.risk_score, result.counts_by_severity())
for f in result.findings:
print(f.severity.value, f.asset, f.title)
```
## 一次性扫描只是快照。您的攻击面在每次部署时都会变化。
`perimeter-scan` 是 **[Perimeter](https://perimeter-hq.com)** 背后的开源扫描器。
CLI 会告诉您*现在*暴露了什么。Perimeter 会持续运行它,记住上一次看到的内容,并**在新情况出现的瞬间提醒您** —— 一个新的子域名、一个即将过期的证书、一条可能被他人劫持的悬空记录 —— 让您先于任何人发现它。
→ **[持续监控您的域名](https://perimeter-hq.com)**
## 许可证
MIT。欢迎贡献。
标签:Blue Team, GitHub, LNA, Python, Snort++, 子域名监控, 安全合规, 实时处理, 无后门, 网络代理, 被动扫描, 计算机取证, 逆向工具