retr0verride/NotTheNet
GitHub: retr0verride/NotTheNet
一款面向恶意软件分析的虚假互联网模拟器,通过提供全协议 catch-all 服务和实时 GUI,在隔离环境中安全地捕获和分析样本的网络行为。
Stars: 1 | Forks: 0
# NotTheNet — Fake Internet 模拟器
NotTheNet 为在隔离环境中被分析的恶意软件模拟互联网。它通过一个简洁的 Python 应用程序和实时 GUI,解决了 INetSim 和 FakeNet-NG 的核心问题——特别是 DNS 竞争条件、服务重启 Socket 泄漏以及不透明的配置。
## 文档
| 指南 | 描述 |
|-------|-------------|
| [安装说明](docs/installation.md) | 系统要求,安装步骤,virtualenv 设置 |
| [配置说明](docs/configuration.md) | `config.json` 每个字段的完整参考 |
| [使用方法](docs/usage.md) | GUI 演示,CLI/无头模式,命令行参数 |
| [服务](docs/services.md) | DNS, HTTP/HTTPS, SMTP, POP3, IMAP, FTP, Catch-All, DoH/WebSocket sinkhole, 动态响应 |
| [Network & iptables](docs/network.md) | 流量重定向, loopback vs gateway 模式, TCP/IP 指纹欺骗 |
| [安全加固](docs/security-hardening.md) | 实验室隔离, 接口绑定, 权限模型, OpenSSF 实践 |
| [故障排除](docs/troubleshooting.md) | 常见错误及修复 |
| [实验室搭建: Proxmox + Kali + FlareVM](docs/lab-setup.md) | 隔离实验室网络布线, IP 转发, 引爆工作流 |
Man page 位于 [`man/notthenet.1`](man/notthenet.1) — 可通过 `sudo notthenet-install.sh` 安装,或手动执行 `man ./man/notthenet.1` 查看。
## 功能特性
| 服务 / 功能 | 详情 |
|---------|---------|
| **DNS** | 将每个主机名解析为您配置的 IP。PTR/rDNS 处理干净。支持每主机覆盖记录。 |
| **HTTP/HTTPS** | 可配置的响应代码、body 和 `Server:` 头。仅限 TLS 1.2+ 及 ECDHE+AEAD 密码套件。 |
| **SMTP** | 接收邮件并存档至 `logs/emails/`。UUID 文件名,强制执行磁盘容量限制。 |
| **POP3 / IMAP** | 满足轮询检查器的最小状态机。零存储状态。 |
| **FTP** | 接受 UUID 文件名的上传,存储大小受限。主动 (PORT) 模式已禁用 (SSRF)。 |
| **TCP Catch-All** | 接收任何由 iptables 重定向的 TCP 连接;响应 `200 OK`。 |
| **UDP Catch-All** | 可选 UDP 吸收器;响应 `OK`。 |
| **iptables 管理器** | 自动应用 NAT REDIRECT 规则;停止时干净地恢复原始规则。 |
| **Public-IP 欺骗** | 对 20 多个知名公网 IP 检查服务(`api.ipify.org`, `icanhazip.com`, `checkip.amazonaws.com`, `ifconfig.me`, `httpbin.org` 等)的 HTTP/HTTPS 响应返回一个可配置的虚假 IP。挫败恶意软件通过查询这些端点来检测沙箱环境。 |
| **响应延迟** | HTTP/HTTPS 响应上的毫秒级人工延迟。50–200 ms 模拟真实的网络延迟并挫败基于时间的沙箱检测。 |
| **动态响应** | 基于扩展的响应引擎(70+ 文件类型)。对 `.exe`, `.dll`, `.pdf`, `.zip` 等的请求返回带有最小有效文件桩(魔数 + 头)的正确 MIME 类型。支持自定义正则规则。 |
| **DNS-over-HTTPS sinkhole** | 通过 GET 和 POST 拦截 DoH 查询(`application/dns-message`, `/dns-query`)。防止恶意软件绕过虚假 DNS 服务器。 |
| **WebSocket sinkhole** | 完成 RFC 6455 握手,吸收高达 4 KB 的帧,记录十六进制预览,发送干净的关闭帧。满足基于 WebSocket 的 C2。 |
| **动态 TLS 证书** | 通过 SNI 自动生成 Root CA + 每个域名的证书伪造。每个 HTTPS 连接获得一个与请求主机名匹配的证书。在分析 VM 中安装 `certs/ca.crt` 以实现无缝拦截。 |
| **TCP/IP 指纹欺骗** | 修改监听 Socket 上的 TTL、TCP 窗口大小、DF 位和 MSS 以模拟 Windows, Linux, macOS 或 Solaris。挫败基于 OS 指纹识别的沙箱检测。 |
| **JSON 事件日志** | 结构化的 JSONL 每请求日志记录。适用于 CAPEv2, Splunk, ELK 的流水线。GUI 包含支持搜索和过滤的实时 JSON Events 查看器。 |
| **Dark GUI** | 分组侧边栏,实时颜色编码的日志面板(带级别过滤器),JSON Events 查看器,缩放控制(70%–200%),每个字段和按钮都有工具提示。 |
| **桌面集成** | 应用菜单图标,pkexec/polkit 权限提示 — 无需终端即可启动。 |
## 系统要求
- Kali Linux / Debian 12 / Ubuntu 22.04+
- Python 3.9+
- `python3-tk`(用于 GUI — Kali 上预装)
- Root 权限(用于绑定端口 < 1024 和 iptables)
## 安装
```
cd ~
git clone https://github.com/retr0verride/NotTheNet
cd NotTheNet
sudo bash notthenet-install.sh
```
## 更新
```
cd NotTheNet
sudo bash update.sh
```
拉取最新代码,重新安装包,并自动重新同步图标、桌面项和 polkit 动作。
## 卸载
安装后,卸载程序可作为系统命令使用:
```
# 移除系统文件,保留 repo/logs/certs
sudo notthenet-uninstall
# 移除所有内容
sudo notthenet-uninstall --purge
```
## 使用方法
### GUI (推荐)
```
sudo notthenet
```
### 无头模式 / CLI
```
sudo notthenet --nogui --config config.json
```
### 自定义配置
```
sudo notthenet --config /etc/notthenet/mylab.json
```
## 配置
所有设置位于 `config.json`。GUI 公开了每个字段。
关键设置:
| 键 | 描述 |
|-----|-------------|
| `general.redirect_ip` | 所有 DNS 查询解析到的 IP(通常为 `127.0.0.1`) |
| `general.interface` | 应用 iptables 规则的网络接口 |
| `general.auto_iptables` | 自动管理 iptables NAT 规则 |
| `general.spoof_public_ip` | 返回给知名 IP 检查服务的虚假公网 IP(例如 `"93.184.216.34"`)。留空以禁用。 |
| `general.json_logging` | 启用结构化 JSON 事件日志记录至 `json_log_file`(JSONL 格式)。 |
| `general.tcp_fingerprint` | 启用 TCP/IP OS 指纹欺骗(`tcp_fingerprint_os`: `windows`/`linux`/`macos`/`solaris`)。 |
| `http.dynamic_responses` | 启用基于扩展的 MIME 类型 + 70 多种扩展的有效文件桩。 |
| `http.doh_sinkhole` | 拦截 DNS-over-HTTPS 查询(GET + POST 线缆格式)。 |
| `http.websocket_sinkhole` | 接受并 sinkhole WebSocket 升级请求。 |
| `https.dynamic_certs` | 通过自动生成的 Root CA + SNI 回调伪造每域 TLS 证书。 |
| `dns.custom_records` | 每主机名覆盖:`{"c2.evil.com": "127.0.0.1"}` |
| `http.response_delay_ms` / `https.response_delay_ms` | 每次 HTTP/HTTPS 响应前的人工延迟(以 ms 为单位)(推荐 50–200 ms 以挫败时间检测)。 |
| `https.cert_file` / `key_file` | TLS 证书路径(如果不存在则自动生成) |
| `catch_all.excluded_ports` | 从 TCP catch-all 中排除的端口(例如 `[22]` 用于 SSH) |
## 架构
```
notthenet.py ← Entry point + GUI (tkinter)
config.py ← JSON config loader / saver / validator
service_manager.py ← Orchestrates all services + iptables lifecycle
services/
dns_server.py ← dnslib-based DNS (UDP + TCP, all → redirect_ip)
http_server.py ← HTTP + HTTPS (hardened TLS, dynamic certs, DoH/WS sinkhole)
mail_server.py ← SMTP + POP3 + IMAP
ftp_server.py ← FTP (PASV only, PORT disabled)
catch_all.py ← TCP/UDP catch-all
doh_websocket.py ← DNS-over-HTTPS + WebSocket sinkhole handlers
dynamic_response.py ← Extension→MIME map + valid file stub generator
network/
iptables_manager.py ← NAT redirect rules, save/restore
tcp_fingerprint.py ← TCP/IP OS fingerprint spoofing (TTL, window, DF, MSS)
utils/
cert_utils.py ← RSA-4096 self-signed certs + Root CA + dynamic cert forging
logging_utils.py ← Log sanitization (CWE-117 prevention)
json_logger.py ← Structured JSON Lines event logger (thread-safe, size-capped)
privilege.py ← Root check + drop_privileges() helper (for future bind-then-drop)
validators.py ← Input validation for all external data
tests/
test_config.py ← Config load / get / set / save / reset
test_logging_utils.py ← Log sanitization & injection prevention
test_validators.py ← Input validation for all public functions
```
## 测试
```
# 从项目根目录(venv 已激活)
pytest tests/ -v
```
70 个测试覆盖 `utils/validators`、`utils/logging_utils` 和 `config.py`。所有测试均为纯 Python,不需要网络访问、root 权限或外部服务。
通过以下方式运行完整的预部署门控(lint → 类型检查 → 安全扫描 → 测试 → 构建):
```
# Linux
bash predeploy.sh
# Windows 开发机
.\predeploy.ps1
```
## 安全
有关完整的安全策略和漏洞报告流程,请参阅 [SECURITY.md](SECURITY.md)。
关键加固亮点:
- 子进程调用:始终 `shell=False` — 无法进行 Shell 注入
- 日志输出:所有不可信字符串均已清理(去除 ANSI/CRLF)
- 文件保存:仅使用 UUID 文件名 — 攻击者永远无法控制路径
- TLS:最低 1.2,ECDHE+AEAD 密码套件,`OP_NO_SSLv2/3/TLSv1/1.1`
- 动态证书:主机名已清理以防止路径遍历;Root CA + 每域密钥权限为 `0o600`
- 私钥:以 `0o600` 模式写入
- JSON 日志:500 MB 文件大小限制;线程安全单例;不对记录的数据进行 eval
- 权限:以 root 身份运行,范围限定于隔离接口;`bind_ip` 将暴露限制在分析适配器上
## 许可证
MIT — 详见 `LICENSE`。
标签:BOF, C2 服务器模拟, DAST, DNS 服务器, FakeNet-NG 替代, FTP 模拟, HTTP/HTTPS 服务, INetSim 替代, IP 地址批量处理, Python, SMTP 邮件捕获, 互联网模拟器, 代码生成, 图形化界面 (GUI), 威胁情报, 安全沙箱, 开发者工具, 恶意软件分析, 恶意软件沙箱, 无后门, 时序数据库, 欺骗防御, 流量捕获, 流量接收器, 混合加密, 渗透测试工具, 网络协议模拟, 网络拓扑, 网络隔离, 蓝队防御, 蜜罐, 证书利用, 逆向工具, 钓鱼邮件分析