mikelobocyber/SniffSnorf

GitHub: mikelobocyber/SniffSnorf

基于 Rust 和 tokio 的异步端口扫描器,内置威胁面分析引擎,能自动识别主机类型、标记危险暴露并将发现映射到 MITRE ATT&CK 技术。

Stars: 0 | Forks: 0

# 🐽 SniffSnorf **内置威胁面分析的异步端口扫描器。** 大多数端口扫描器只告诉你*哪些端口*是开放的。SniffSnorf 告诉你*这意味着什么*。 扫描完成后,分析引擎会像人类分析师一样读取结果——对主机类型进行指纹识别,用通俗易懂的英语标记危险的暴露情况,并将每个发现映射到 MITRE ATT&CK 技术。你可以将输出直接放入渗透测试报告中。 ``` sniffsnorf -a 192.168.1.1 -p 1-1024 ``` ``` ███████╗███╗ ██╗██╗███████╗███████╗███████╗███╗ ██╗ ██████╗ ██████╗ ███████╗ ... 🐽 1 host · 1024 ports · 1024 total probes · concurrency 500 HOST PORT SERVICE STATE ───────────────────────────────────────────────────────────────────────────────── 192.168.1.1 22 ssh open 192.168.1.1 80 http open 192.168.1.1 3306 mysql open 192.168.1.1 6379 redis open ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🐽 SNIFFSNORF ANALYSIS · 192.168.1.1 Host type: web server Surface: 4 open ports ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SUMMARY 192.168.1.1 has 4 open ports and appears to be a web server. 2 high-severity findings present elevated risk. FINDINGS [1] HIGH MySQL database port exposed (port 3306) Ports: 3306 MITRE: T1190 Detail: MySQL (port 3306) is reachable from the network. Databases should never be directly exposed... [2] HIGH Redis database port exposed (port 6379) Ports: 6379 MITRE: T1190 Detail: Redis has no authentication by default and allows arbitrary data reads, writes, and in some configurations remote code execution via CONFIG SET... ``` ## 安装 ``` git clone https://github.com/mikelobocyber/sniffsnorf cd sniffsnorf cargo build --release ./target/release/sniffsnorf --help ``` 需要 Rust 1.75+(`curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`)。 ## 用法 ``` sniffsnorf [OPTIONS] Arguments: IP address, hostname, or CIDR range (e.g. 192.168.1.0/24) Options: -p, --ports Port or port range [default: 1-1024] -c, --concurrency Max concurrent connections [default: 500] -t, --timeout-ms Connect timeout per port in ms [default: 1000] -b, --banner Grab service banners from open ports -a, --analyze Run analyst engine (implies --banner) -j, --json Output results as newline-delimited JSON -q, --open-only Only print open ports -h, --help Print help ``` ## 示例 ``` # Basic scan — top 1024 ports sniffsnorf 192.168.1.1 # Full analyst report — the main feature sniffsnorf -a 192.168.1.1 # Analyst on a subnet — reports one host per IP with open ports sniffsnorf -a 192.168.1.0/24 -p 22,80,443,3306,5432,6379 # Common attack-surface ports with banners sniffsnorf -b -p 21,22,23,25,80,443,445,3306,3389,5432,5900,6379,8080,27017 192.168.1.1 # Fast full-range scan sniffsnorf -p 1-65535 -c 2000 -t 500 10.0.0.1 # JSON output for piping to jq sniffsnorf -j -p 1-1024 192.168.1.1 | jq 'select(.open == true)' # JSON with analyst findings (human report to stderr, JSON to stdout) sniffsnorf -a -j 192.168.1.1 ``` ## 分析引擎工作原理 扫描完成后,分析引擎会对结果进行三轮分析: **1. 主机指纹识别**(`analyst.rs: fingerprint_host`) 通过查看开放端口的*组合*来判断这大概是什么类型的主机。开放了端口 445 + 139 + 135 的主机是一台 Windows 机器。开放了端口 2375 的主机是一台 Docker 主机。开放了端口 3306 + 5432 且没有 Web 端口的主机是一台数据库服务器。指纹识别决定了叙述的基调。 **2. 发现检测**(`analyst.rs: check_*`) 每个检测器会检查一种特定的条件,并返回一个带有严重性标签和通俗易懂解释的发现。检测器涵盖: | 发现 | 严重性 | MITRE | |---|---|---| | Telnet 开放 | 严重 | T1021.004 | | Docker API 未启用 TLS | 严重 | T1610 | | 端口 4444(Metasploit 默认端口) | 严重 | T1571 | | RDP 暴露 | 高 | T1021.001 | | SMB 暴露(EternalBlue 攻击面) | 高 | T1021.002 | | 数据库端口暴露 | 高 | T1190 | | Jupyter Notebook 暴露 | 高 | T1059 | | Kubernetes API 暴露 | 高 | T1613 | | FTP 开放 | 中 | T1048.003 | | SNMP 开放 | 中 | T1602.001 | | VNC 暴露 | 中 | T1021.005 | | 未加密的 LDAP | 中 | T1552.004 | | 存在 SSH | 低 | T1021.004 | | 存在 HTTP 但无 HTTPS | 低 | T1557 | | 开发端口暴露 | 低 | T1190 | **3. Banner 分析**(`analyst.rs: check_banner_issues`) 检查从开放端口接收到的实际文本。能够捕获诸如过时的 OpenSSH 版本(8.x 之前)、欢迎 Banner 中的 FTP 匿名登录提示、SMTP 开放中继指示符,以及 HTTP 头中的 Web 服务器版本泄露等问题。 ## 架构 ``` src/ ├── main.rs CLI (clap), orchestration, task spawning, semaphore concurrency ├── scanner.rs Async TCP connect, ScanResult struct, port→service name map ├── banner.rs Banner grabbing — passive read or HTTP HEAD probe ├── cidr.rs CIDR expansion (IPv4, /16–/32), hostname passthrough ├── output.rs Colored table + NDJSON rendering └── analyst.rs Host fingerprinting, finding detectors, narrative engine ``` ### 并发模型 SniffSnorf 会立即为每个(主机,端口)对生成一个 `tokio::spawn` 任务。带有 `--concurrency` 许可证的 `tokio::sync::Semaphore` 可确保在任何时候最多有 N 个连接处于进行中状态。这避免了批处理的系统开销,同时仍然遵守并发上限。 ### 为什么选择 Rust? - 零成本异步:tokio 任务不是 OS 线程。数千个挂起的连接仅使用最少的内存。 - 无垃圾回收:连接循环的延迟是可预测的。 - `tokio::time::timeout` 与 `TcpStream::connect` 完美结合——没有回调地狱。 ## MITRE ATT&CK 映射 SniffSnorf 的发现映射到以下 ATT&CK 战术: - **侦察**:T1592(主机信息),T1602(SNMP) - **初始访问**:T1190(面向公众的应用/数据库),T1078(默认账户) - **执行**:T1059(Jupyter),T1610(容器部署) - **横向移动**:T1021.001(RDP),T1021.002(SMB),T1021.004(SSH/Telnet),T1021.005(VNC) - **收集**:T1114(电子邮件),T1557(AitM/无 TLS) - **数据渗出**:T1048.003(FTP) - **命令与控制**:T1571(非标准端口) 将 SniffSnorf 的发现与 Wazuh 检测规则结合使用,为你的蓝队资产组合构建完整的攻击者/防御者视角。 ## 法律声明 请仅扫描你拥有或已获得明确书面测试权限的网络。未经授权的端口扫描可能会违反你所在司法管辖区的 CFAA、《计算机滥用法》及同等法律。 ## 作者 [github.com/mikelobocyber](https://github.com/mikelobocyber)
标签:C2日志可视化, CISA项目, Cloudflare, MITRE ATT&CK, Rust, Tokio, 危险等级评估, 可视化界面, 威胁建模, 安全报告生成, 密码管理, 异步扫描器, 指纹识别, 插件系统, 攻击面分析, 数据统计, 无线安全, 服务器安全, 漏洞暴露检测, 端口扫描, 端口服务识别, 网络安全, 网络流量审计, 隐私保护