santhsecurity/gossan
GitHub: santhsecurity/gossan
一款 Rust 编写的快速模块化攻击面发现工具,将子域名、端口、技术栈、隐藏路径、云资产、DNS 安全等侦察能力整合为一体,并通过跨模块关联构建完整的攻击面图谱。
Stars: 0 | Forks: 1
# gossan
[](https://github.com/santhsecurity/gossan/actions/workflows/ci.yml) [](https://opensource.org/licenses/MIT) [](https://crates.io/crates/gossan)
**快速、模块化的攻击面发现工具。** 子域名、端口、技术栈、隐藏路径、云资产、DNS 安全、源站 IP:一站式扫描。
## 安装
```
cargo install gossan
```
## 使用方法
```
# Full recon 扫描
gossan scan example.com
# 特定模块
gossan scan example.com --modules subdomain,portscan,hidden
# 自定义端口
gossan scan example.com --ports 80,443,8080,8443
# JSON 输出
gossan scan example.com --format json -o results.json
# 探测 SYN engine 会选择哪个 packet I/O backend
gossan probe-engine
# 自适应 (AIMD) rate control — 在 TX-drop bursts 时减半,缓慢恢复
gossan scan example.com --adaptive-rate
# 其他格式:SARIF (security-tool 集成)、nmap-xml (-oX)、
# masscan-grep (-oG)、graphml (Gephi/Cytoscape/yEd)。
gossan scan example.com --format sarif -o report.sarif
gossan scan example.com --format nmap-xml -o scan.xml
```
## 输出格式
| `--format` | 别名 | 用途 |
|------------------|---------------------|----------|
| `text` | (默认) | 人类可读终端输出 |
| `json` | — | 脚本 / 流水线 (顶层 `Finding` 数组) |
| `jsonl` | `ndjson` | 流式处理 / 日志传输器 |
| `sarif` | — | GitHub 代码扫描, sarif-multitool |
| `markdown` | `md` | Issue 正文 / Wiki |
| `nmap-xml` | `nmap`, `xml`, `-oX`| 可直接用于 nmap 消费者 |
| `masscan-grep` | `grepable`, `-oG` | 可直接用于 masscan 消费者 |
| `graphml` | `graph-ml` | Gephi / Cytoscape / yEd |
## 环境变量
| 变量 | 效果 |
|--------------------------------------------|--------|
| `GOSSAN_LOG_JSON=1` | 结构化 JSON 日志 (Loki/CloudWatch/Datadog) |
| `GOSSAN_ALLOW_UNSAFE_PATHS=1` | 覆盖 `--out` 的路径穿越防护 |
| `GITHUB_TOKEN` | scm GitHub 组织枚举 |
| `GITLAB_TOKEN` | scm GitLab 组枚举 |
| `CENSYS_API_ID` + `CENSYS_API_SECRET` | 源站 Censys 集成 |
| `SHODAN_API_KEY` | 源站 favicon-hash 交叉引用 |
| `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY` | 云资产内部向外发现 |
## 截图
```
+-------------------------------------------------------------+
| gossan scan example.com |
+-------------------------------------------------------------+
| [✓] Subdomain Enum : 124 found |
| [✓] Port Scanning : 12 open ports |
| [✓] Tech Fingerprinting : React, Nginx, PHP |
| [✓] Cloud Assets : 1 S3 bucket found (public!) |
| |
| Findings: |
| - [HIGH] S3 Bucket 'example-backup' is publicly readable. |
| - [MED] Exposed .git directory at dev.example.com/.git/ |
| - [LOW] Missing DMARC record on mail.example.com |
+-------------------------------------------------------------+
```
## 架构
Gossan 是一个由独立、可复用 crate 组成的工作空间。每个 crate 都是一个独立的扫描器,可以单独使用,也可以通过 `gossan` CLI 组合使用。
| Crate | 描述 |
|-------|-------------|
| `gossan-core` | 核心类型、traits、配置、速率限制 |
| `gossan-subdomain` | 子域名枚举 (CT 日志, Wayback, DNS 暴力破解) |
| `gossan-portscan` | TCP 端口扫描,支持 TLS 检查和 Banner 抓取 |
| `gossan-techstack` | 技术栈指纹识别 (Headers, Cookies, HTML 模式) |
| `gossan-dns` | DNS 安全审计 (SPF, DMARC, DKIM, CAA, 区域传送) |
| `gossan-hidden` | 隐藏端点发现 (目录爆破, sitemap, robots.txt, swagger) |
| `gossan-cloud` | 云资产发现 (S3, GCS, Azure blobs) |
| `gossan-js` | JavaScript 分析 (secrets, API 端点, WASM) |
| `gossan-origin` | 源站 IP 发现 (绕过 CDN/WAF) |
| `gossan-crawl` | 带有表单/参数提取的认证 Web 爬虫 |
| `gossan-correlation` | 跨模块发现结果关联 |
| `gossan-checkpoint` | 扫描检查点与恢复 |
| `gossan-engine` | 无状态 masscan 级别的 SYN 引擎 (netforge, 需要 root 权限) |
| `gossan-headless` | 无头浏览器集成 |
| `gossan-horizontal` | 水平发现 (ASN/BGP 映射 + 所有权) |
| `gossan-graph` | 基于图的攻击面管理 (ASM) |
| `gossan-scm` | 源代码控制映射 (GitHub/GitLab 发现) |
| `gossan-intel` | 全球被动情报 (本地批量数据集索引) |
| `gossan-fleet` | 分布式 Master/Worker 编排 |
## 保守活动映射器
当设置了 `--conservative` 时,Gossan 会运行一个 **零误报水平资产验证器**,在将候选域名/IP 输入到下游的 Warpscan (静态规则扫描) 和 Sear (URL 触发) 之前,确认它们是否真正属于同一组织或活动。
**每个候选对象都会使用多个独立信号与种子进行成对测试:**
| 信号 | 权重 | 描述 |
|--------|--------|-------------|
| TLS 证书序列号 | 高 | 相同的叶子证书 = 相同的部署 |
| SSH 主机密钥 | 高 | 相同的密钥交换指纹 |
| 共享的 GA/GTM 跟踪器 | 高 | 相同的分析媒体资源 = 相同的运营者 |
| WHOIS 注册人匹配 | 中 | 所有权级别的关联 |
| Favicon 哈希 (mmh3) | 中 | 兼容 Shodan 的 favicon 指纹 |
| 内容哈希 | 中 | 完全相同的页面内容 |
| 错误页面结构 | 中 | 404 页面的 DOM 结构哈希 (不受内容轮换影响) |
| HTTP/2 SETTINGS 指纹 | 低 | 服务器 SETTINGS 帧 = 部署配置 |
| Header 排序 | 低 | 响应头序列 = 中间件栈 |
| JARM TLS 指纹 | 低 | TLS 栈指纹 (来自 CDN 的高环境噪声) |
| DNS 解析 IP | 低 | 共享主机使得此信号单独使用时噪声很大 |
**评分规则:**
- 已知的 CDN/共享主机值 (Cloudflare JARM、默认 favicon、AWS ELB IP) 会被**列入黑名单**,权重为零。
- 候选对象必须超过**多信号阈值**:任何单一的弱信号都不能产生匹配。
- 每个发出的匹配项都带有一个**置信度级别** (高/中/低),以便下游消费者可以决定自己的风险承受能力。
```
# 用于安全 downstream feeding 的 Conservative mode
gossan scan example.com --conservative
# 搭配使用:
warpscan scan ./campaign-assets --rules-dir ./rules # Static rule matching
sear analyze "https://candidate.evil.tk" --depth full # URL detonation
```
## 传奇般的准确性:差异化信号情报
Gossan 是唯一一款专为在**“镜像迷宫”**中生存而设计的扫描器:在这种环境中,成千上万的子域名或路径别名指向同一个根资产。
- **响应基线化**:每个新主机都会使用随机化的“垃圾”路径进行探测,以建立结构基线 (DOM 树、模糊哈希和 Header 签名)。
- **结构增量引擎**:随后的发现将与该基线进行比较。结构相似度大于 98% 的资产会被标记为 **镜像资产**,并自动**限流**以节省带宽。
- **信号狙击**:打破模式的异常值 (例如,隐藏在大量镜像中的单个 `openapi.json`) 将被提升为 **信号资产**,以进行深度分析。
- **响应炸弹防护**:强制切断超过安全 `Content-Length` 阈值 (5MB HTML / 10MB JS) 的 TCP 连接,以防止 OOM 攻击。
## 作为库使用
```
use gossan_portscan::PortScanner;
use gossan_core::{Config, Scanner, ScanInput, Target};
let scanner = PortScanner;
let config = Config::default();
let input = ScanInput { targets: vec![/* ... */] };
let output = scanner.run(input, &config).await?;
```
## 许可证
MIT: [Santh Security](https://santh.dev)
标签:ASM, DNS安全, Gephi, GitHub, LIDS, Linux安全, masscan, Rust, SARIF, 云资产发现, 反取证, 可视化界面, 威胁发现, 威胁情报平台, 子域名枚举, 安全工具集成, 安全评估, 实时处理, 密码管理, 开源安全工具, 技术栈指纹识别, 数据统计, 源站IP探测, 端口扫描, 系统安全, 网络安全, 网络流量审计, 网络资产测绘, 逆向工程平台, 通知系统, 隐私保护, 隐藏端点发现