onurtnc/netsentry

GitHub: onurtnc/netsentry

零依赖的 Python 网络流量分析工具,从 PCAP 文件中自动检测 C2 beacon、DNS 隧道、数据泄露等恶意行为并生成优先级报告。

Stars: 0 | Forks: 0

# NetSentry **在 PCAP 文件中搜索 C2 beacon、DNS 隧道、端口扫描和数据泄露的零依赖网络分析工具。** ![Python](https://img.shields.io/badge/python-3.8%2B-blue) ![License](https://img.shields.io/badge/license-MIT-green) ![Dependencies](https://img.shields.io/badge/dependencies-none-brightgreen) ![Tests](https://img.shields.io/badge/tests-18%20passing-success) 无需安装 `scapy`、`dpkt`、`pyshark` 或 Wireshark。PCAP/PCAPNG 解析器, Ethernet/IP/TCP/UDP/DNS/HTTP/TLS 解析器以及九个探测器完全使用 Python 标准库编写。 ## 为什么需要它? Wireshark 是一款出色的工具,但它无法回答“这次抓包中有恶意行为吗?”这个问题——你需要自己编写过滤器。NetSentry 自动化了这第一步: 提取会话流,执行行为分析,并为您提供**已设置优先级的 发现列表**。之后您再打开 Wireshark 时,就会知道该查看哪个会话流了。 ## 检测能力 | 代码 | 发现 | 工作原理 | |---|---|---| | `NS-BEACON` | **C2 beacon** | 测量重复连接到同一目标的间隔差异(jitter)。机器生成的 beacon 非常有规律;而正常流量则不然。排除 DNS/NTP 等自然的周期性协议。 | | `NS-DNSTUN` | **DNS 隧道** | 综合评估子域名长度、Shannon 熵、唯一子域名比例以及 TXT/NULL 查询密度。 | | `NS-DGA` | **DGA 域名** | 通过高熵 + 低元音比例 + 数字密度检测算法生成的域名。 | | `NS-PORTSCAN` | **端口扫描** | 来自单一源的大量无响应 SYN。 | | `NS-SWEEP` | **主机扫描** | 来自单一源向大量不同目标发起的连接尝试。 | | `NS-EXFIL` | **数据泄露** | 发往单一外部目标的流量体积以及发送/接收字节比。 | | `NS-BADPORT` | **可疑端口** | 4444 (Metasploit)、1337、31337、6667 (IRC C2)、Tor、矿池端口。 | | `NS-CLEARAUTH` / `NS-FTPCLEAR` / `NS-TELNET` | **明文凭证** | HTTP `Authorization`、FTP `USER/PASS`、Telnet 会话。 | | `NS-EXEDL` | **通过 HTTP 下载 exe** | 通过明文 HTTP 请求 `.exe/.dll/.ps1/.hta`。 | | `NS-BADUA` | **自动化工具流量** | `curl`、`python-requests`、`powershell`、`sqlmap` 等 User-Agent 或缺失 UA。 | | `NS-BADTLD` | **高风险 TLD** | `.top`、`.xyz`、`.zip`、`duckdns.org`、`ngrok.io` 等目标 (HTTP Host + TLS SNI)。 | | `NS-ICMPTUN` | **ICMP 隧道** | 超过 128 字节的 ICMP 负载。 | 此外提取的元数据:DNS 查询列表、HTTP 请求、**TLS SNI 域名**、 会话流表、最活跃的通信源。 ## 安装说明 ``` git clone https://github.com//netsentry.git cd netsentry python -m netsentry samples/ornek_trafik.pcap ``` 将其添加为命令:`pip install -e .` ## 使用方法 ``` # 基础分析 python -m netsentry capture.pcap # HTML + JSON 报告 python -m netsentry capture.pcapng --html rapor.html --json bulgular.json # 仅 metadata 输出(可用 grep/awk 处理) python -m netsentry capture.pcap --dns python -m netsentry capture.pcap --http python -m netsentry capture.pcap --flows # 灵敏度设置 python -m netsentry capture.pcap --beacon-jitter 0.30 --beacon-min-events 4 python -m netsentry capture.pcap --exfil-mb 50 # CI / 自动化 python -m netsentry capture.pcap --fail-on high --quiet ``` ### 输出示例 ``` ============================================================================== NetSentry - Ag Trafigi Analiz Raporu ============================================================================== Paket : 1158 Veri: 1.3 MB Akis: 34 Zaman : 2026-07-25 17:20:00 - 2026-07-25 17:33:20 (799.6 sn) DNS : 66 sorgu HTTP: 2 istek TLS: 26 SNI Risk : [####################] 100/100 Bulgu: 12 ------------------------------------------------------------------------------ [CRITICAL] Duzenli aralikli baglanti (olasi C2 beacon) 10.0.0.23 adresi cdn-telemetry.top:443 hedefine 14 kez, ortalama 60.0 saniye araliklarla baglandi (jitter %0.6). - aralik ornekleri: 59.7s, 60.3s, 60.0s, 59.5s, 59.9s, 60.4s - toplam veri: 6.5KB [CRITICAL] DNS tunelleme / DNS uzerinden veri sizdirma 'datatransfer.xyz' alan adina yapilan sorgular veri tasima deseni gosteriyor: ortalama alt alan uzunlugu 48 karakter; yuksek entropi (4.59 bit/karakter); 46 farkli alt alan adi / 46 sorgu; 16 adet TXT/NULL sorgusu. - 23ztub1wgkfatmkmgfk9zpd1o0v934meeeixrybapd89hzr7.tun.datatransfer.xyz ``` ## 示例抓包 `samples/ornek_trafik.pcap` **完全是合成的** — 由 `tools/make_sample_pcap.py` 生成,并非来自真实网络。其中包含特意植入的 12 种不同场景(正常的 Web 流量 + 每种探测器的一个示例)。 重新生成: ``` python tools/make_sample_pcap.py ``` 为了减小文件大小,大型传输包被**截断**保存 (`tcpdump -s` 行为);由于原始包大小保留在头部中,字节 统计信息依然准确。 ## Beacon 检测的工作原理? ``` aralıklar = [t2-t1, t3-t2, ...] jitter = stdev(aralıklar) / mean(aralıklar) ``` | jitter | 解释 | |---|---| | < 0.08 | 几乎是机械般的规律 → **critical** | | 0.08 - 0.15 | 添加了微弱随机化的 beacon → **high** | | > 0.15 | 正常的应用程序/人工流量 → 不报告 | 在现实世界中,C2 框架会添加 jitter(例如 Cobalt Strike `%20 jitter`)。 您可以使用 `--beacon-jitter 0.35` 放宽阈值进行更广泛的扫描 — 误报数量会增加,但捕获隐藏 beacon 的几率也会提高。 ## 架构 ``` netsentry/ ├── pcap.py PCAP + PCAPNG okuyucu/yazici (saf struct) ├── decode.py Ethernet/VLAN, IPv4/IPv6, TCP/UDP/ICMP, DNS, HTTP, TLS SNI ├── flows.py Paket -> akis toplama, ic/dis ag ayrimi, istatistik ├── detect.py Dokuz dedektor + Shannon entropi yardimcilari ├── report.py Konsol / JSON / HTML ciktilari └── cli.py argparse arayuzu tools/ └── make_sample_pcap.py Sentetik ornek yakalama ureticisi ``` 支持的链路类型:Ethernet (1)、RAW IP (101)、Linux cooked (113)、NULL/loopback (0)。 ## 测试 ``` python tools/make_sample_pcap.py # ornek pcap'i uret python -m unittest discover -s tests -v ``` 测试中还包括像**“正常流量不应被标记为 beacon”**这样的 误报回归测试。 ## 路线图 - [ ] JA3/JA3S TLS 指纹 - [ ] TCP 会话流重组(文件提取) - [ ] Zeek `conn.log` / `dns.log` 导出 - [ ] 实时接口监听模式(需要 root 权限) - [ ] 与 IOCForge 集成:自动丰富发现的 IP/域名 - [ ] IPv6 扩展头部的完整解析 ## 免责声明 这是一款防御性工具。请仅在您有权抓包的网络中使用。 发现结果不是自动判定,而是调查的起点 —— 特别是 beacon 和 DGA 检测具有统计性质,可能会产生误报。 ## 许可证 MIT — 见 [LICENSE](LICENSE)。
标签:IP 地址批量处理, LNA, PCAP解析, Python, 威胁发现, 插件系统, 无后门, 网络流量分析, 逆向工具