sfewer-r7/sip-proxy
GitHub: sfewer-r7/sip-proxy
一个用于安全审计的 SIP/RTP 代理工具,能够提取并验证 SRTP 密钥暴露情况,帮助发现 VoIP 基础设施中的加密缺陷。
Stars: 0 | Forks: 0
# SIP 代理
一个用于测试和审计 SIP 基础设施的 SIP/RTP 代理。它代理 SIP 信令和媒体流量,从 SDP 中提取 SRTP 密钥材料,通过尝试解密 SRTP 负载来验证 SRTP 密钥的暴露情况,并将所有内容写入 PCAP 文件以便在 Wireshark 中进行离线分析。
本工具仅供授权的安全测试使用,且须已获得所有参与方的同意。
## 功能特性
- 通过 UDP 代理 SIP 信令(INVITE、REGISTER、BYE 等)
- 在端点之间代理 RTP/SRTP 媒体流
- 从 SDP `a=crypto` 行提取 SRTP 密钥并将 SRTP 解密为 RTP。这证明了需要使用更安全的密钥交换机制,例如 DTLS-SRTP 或 ZRTP。
- 生成包含 SIP 流量和 RTP 流量的单次通话 PCAP 文件
- 写入一个 `debug.pcap` 文件,记录所有被代理的 SIP 流量
- 将所有 SIP 消息记录到可配置的日志文件中
## 用法
需求:Ruby(无需外部 gems)。
```
ruby run.rb --local-ip [--local-port ] [--external-ip ] [--stun-server ] [--log-file ]
```
| 选项 | 必需 | 默认值 | 描述 |
|---|---|---|---|
| `--local-ip` | 是 | -- | 代理绑定的 IP 地址 |
| `--local-port` | 否 | `5060` | 监听的 UDP 端口 |
| `--external-ip` | 否 | 自动检测 | 用于 NAT 穿透的公网 IP(如果本地 IP 是私有的,则通过 STUN 自动发现) |
| `--stun-server` | 否 | `stun.l.google.com` | 用于外部 IP 发现的 STUN 服务器(主机或主机:端口) |
| `--log-file` | 否 | -- | SIP 消息日志文件的路径 |
当代理位于 NAT 之后(即 `--local-ip` 是私有 RFC 1918 地址)时,它需要知道其公网 IP,以便远程 SIP 对等端可以将信令路由回它。代理会自动处理此过程:
- 如果 `--local-ip` 是私有的且未提供 `--external-ip`,代理会在启动时发送 STUN Binding Request (RFC 5389) 以发现其公网 IP。
- 如果提供了 `--external-ip`,则直接使用该值并跳过 STUN。
- 如果 `--local-ip` 已经是公网地址,则不需要 NAT 穿透。
- 如果 STUN 发现失败,代理会发出警告并继续运行,不进行 NAT 穿透。
您可以使用 `--stun-server` 指定自定义 STUN 服务器,例如 `--stun-server stun.sipgate.net:3478`。
将 SIP 设备指向此代理的 IP 和端口作为其出站代理。SIP 消息将显示在日志和 `debug.pcap` 中。协商媒体的通话将生成名为 `call_.pcap` 的单独 PCAP 文件,其中包含 SIP 流量和 RTP 流量。在 Wireshark 中打开这些文件以分析流并验证明文恢复。
## 限制
- 仅支持 UDP —— 不支持 TCP 和 TLS 传输。
- SIP 信令按顺序处理 —— 不适用于大流量场景。
- SRTP 解密仅支持 `AES_CM_128_HMAC_SHA1_80` 和 `AES_CM_128_HMAC_SHA1_32`。
## 许可证
BSD 3-Clause。参见 [LICENSE.md](LICENSE.md)。
标签:NAT穿透, PCAP, RTP, Ruby, SDP, SIP, SIP信令, SRTP, STUN, VoIP安全, Wireshark, 中间人攻击, 代码生成, 协议分析, 句柄查看, 媒体流, 服务器监控, 权限提升, 流量代理, 渗透测试工具, 知识库, 红队技术, 解密, 通信安全, 防御绕过