目录
- 1. 整体定位
- 2. 架构
- 3. 两层拦截模型
- 4. 审计 AP
- 4.1 配置
- 4.2 设备管理
- 5. 4G/5G 蜂窝
- 6. 实时流量
- 7. TLS 审计
- 7.1 被动证书校验矩阵
- 7.2 主动 TLS 探测
- 8. 隐私发现
- 9. 改包(主动模式)
- 10. 安全设计
- 11. 当前状态
最近做移动 App 和车机 TCU 安全审计时,需要长时间对设备流量做 TLS 姿态分析和隐私数据扫描,手动起 mitmproxy + hostapd 太繁琐,于是包了一个浏览器驱动的审计平台 MITM_Toolkit,备份下设计思路。
1. 整体定位
面向授权实验室场景下对移动 App、车机/TCU、嵌入式 Linux、IoT 网关的黑盒/白盒审计。作用域是 IP 及其之上(HTTP/HTTPS、MQTT/CoAP 等),不做链路层——链路层是另一个工具(Wireless_Toolkit)的事。
两条接入链路:
- 审计 AP:外置 USB 网卡建热点(hostapd + dnsmasq + iptables),设备连上即透明拦截,不需在设备上设代理
- 4G/5G 蜂窝:对接 URSP_B210mini(srsRAN + Open5GS + B210)蜂窝实验网,手机附着后在
ogstun上拦截
两条链路同一套两层拦截模型,可以并存。
2. 架构
单 Python 进程、多线程:mitmproxy 引擎独占一个线程(asyncio 事件循环),Flask/waitress 控制台在主线程,进程内队列 + SSE 通讯,前端监听:50000。
┌────────────────────── 单个 Python 进程 ──────────────────────┐ │ [主线程] Flask + htmx + Bootstrap(:50000) │ │ │ HTTP /api/* ▲ SSE /api/stream │ │ ▼ │ │ │ Store(SQLite+内存) ←── SSE broker │ │ ▲ 起停 AP(sudo argv) ▲ upsert_flow/tls/finding │ │ apmanager ── audit-ap.sh(hostapd/dnsmasq/iptables/tcpdump) │ │ [mitmproxy 线程] asyncio loop:DumpMaster + AuditAddon │ │ transparent 监听:48081 ← iptables PREROUTING REDIRECT │ └──────────────────────────────────────────────────────────────┘启动:
./deploy.sh# 建 venv、装依赖、生成桌面快捷方式./start.sh# 启动,打印访问地址# 浏览器打开 http://<本机IP>:50000状态总览首页:
3. 两层拦截模型
| 层 | 说明 |
|---|---|
| 被动层 | AP/蜂窝网一起来即默认可见;显示连接元数据(对端、SNI、DNS、明文 HTTP host);不需装 CA |
| 拦截层 | 独立 4 个开关:MITM 解密 / 拦截所有 TCP / 拒绝 QUIC(UDP443) / 全流量 PCAP;任一勾选即可开始 |
拦截层与「打开 AP」解耦——可以先被动抓元数据,确认设备连上后再开解密。
4. 审计 AP
4.1 配置
选外置 USB 网卡建热点,设 SSID/密码/频段/信道/DHCP(默认网段192.168.66.0/24)。AP 运行后设备照常上网,流量元数据被动可见。
内置卡承载 SSH 和默认路由,不能用来建 AP。起停时自检,若目标接口是默认路由接口则拒绝操作,绝不掐断上行。
4.2 设备管理
AP 运行后可看已连设备(在线状态、JA3、流量、CA 已安装标记),管理 PCAP 抓包文件(列表/下载/删除),运行日志分 hostapd / dnsmasq 实时查看。
5. 4G/5G 蜂窝
对接 URSP_B210mini 蜂窝实验网,与审计 AP 同一套两层模型可并存。URSP 起网、手机附着后,用户面流量在ogstun上被动可见;要解密再对ogstun透明重定向进 mitmproxy(与 AP 对称的 4 个开关)。UE 列表按IMSI手动标「CA 已装」,蜂窝 UE 网段10.45.x与 AP 的192.168.66.x一眼区分。
6. 实时流量
两层视图:被动层看连接元数据,拦截层看解密的请求/响应。可按 host/URL/方法/设备过滤,一键隐藏广播/多播噪声(只隐藏显示,PCAP 照常录)。
点进单条流看请求/响应头和体(JSON 自动美化)、命中的隐私发现,可复制为 curl 或导出该报文。
7. TLS 审计
7.1 被动证书校验矩阵
对每条连接判定,按设备「CA 已安装」标记着色:
| 设备反应 | 判定 |
|---|---|
| 接受我方证书(CA 已安装) | 预期,未做证书固定 |
| 未装 CA 却接受 | 证书校验缺失(真漏洞) |
| 拒绝 | 严格校验 / 可能证书固定 |
| 明文 | 无加密传输 |
同时采集 JA3 指纹、TLS 版本/套件、上游证书。
7.2 主动 TLS 探测
- 客户端探测:设备浏览器打开
https://mitm.sec,收到自签证书——报错 = 校验正常,无警告 = 未校验证书链(真漏洞,与是否装 CA 无关) - 服务端探测:sslscan 直连目标,枚举协议版本、弱套件与证书
8. 隐私发现
解密内容实时按规则扫描,内置 11 条规则(PII:手机号/身份证/银行卡;凭据:JWT/API Key/私钥;设备标识:MAC/IMEI/VIN)。支持运行时自定义正则(含 ReDoS 防护)。
可按「发现」平铺查看:
也可按「报文」折叠查看,每个报文下列出命中的所有条目:
9. 改包(主动模式)
主动模式下按 host + 作用域改/删头、正文替换、改状态码。默认关闭,需在本页显式切到主动模式才生效;取证时保持只读。
10. 安全设计
# 所有子进程调用一律 argv 数组,不经 shellsubprocess.Popen(["hostapd",config_path],...)# 正确# subprocess.Popen(f"hostapd {config_path}", shell=True) # 绝不这样做- 参数写入
captures/ap.params(KEY=VALUE),脚本白名单解析,不 source/eval - 文件下载/删除路径经白名单校验;服务端探测目标经白名单 + SSRF 兜底
- 改动型请求带 Origin/Referer 跨域校验(CSRF 兜底)
- 控制台默认不设登录鉴权,信任局域网环境
11. 当前状态
持续迭代中。证据文件(PCAP、导出、报告、CA)在captures/与ca/,均附 SHA-256 存证。导出格式:JSON / HAR(可导入 Burp/Chrome)/ HTML 审计报告。