Hyperfox 是一款安全审计工具,用于代理并记录两个端点之间的 HTTP 和 HTTPS 流量。
您可以通过以下命令将 Hyperfox 的最新版本安装到 /usr/local/bin(需要管理员权限):
curl -sL 'https://raw.githubusercontent.com/malfunkt/hyperfox/master/install.sh' | sh
如果您不放心直接运行此脚本,也可以从我们的发布页面获取预编译版本并手动安装。
hyperfox要从源码构建 hyperfox,您需要安装 Go 和 C 编译器:
使用 go install 构建并安装 hyperfox:
go install github.com/malfunkt/hyperfox
Hyperfox 创建一个透明的 HTTP 代理服务器,并将其绑定到本地主机的 1080/TCP 端口(-addr 127.0.0.1 -http 1080)。代理服务器读取明文 HTTP 请求,并将其重定向到目标地址(通过 Host 头识别目标);当目标回复时,Hyperfox 拦截响应并将其转发给原始客户端。
所有源和目标之间的 HTTP 通信都会被 Hyperfox 拦截,并记录在自动创建的 SQLite 数据库中。每次 Hyperfox 启动时,都会创建一个新数据库(例如:hyperfox-00123.db)。您可以通过显式指定数据库名称来更改此行为(例如:-db traffic-log.db)。
使用默认配置启动 Hyperfox:
hyperfox
使用 cURL 请求任意 HTTP 页面,-x 参数指定 Hyperfox 作为代理:
curl -x http://127.0.0.1:1080 example.com
您应该能在 Hyperfox 的输出中看到所请求页面的日志:
...
127.0.0.1:44254 - - [11/Apr/2020:19:19:48 -0500] "GET http://example.com/ HTTP/1.1" 200 -1
-ui)
使用 -ui 参数启用 Hyperfox UI,它将在新的浏览器窗口中打开:
hyperfox -db records.db -ui
上述命令会创建一个绑定到 127.0.0.1:1984 的 Web 服务器。如果您想修改绑定地址或端口,请使用 -ui-addr 开关:
hyperfox -db records.db -ui -ui-addr 127.0.0.1:3000
当 Hyperfox 运行在远程或无头主机上时,修改 UI 服务器地址对于从另一台主机查看 UI 尤其有用。
启用 UI 的同时还会启动一个最小的 REST API(位于 127.0.0.1:4891),供前端应用程序使用。
请注意,Hyperfox 的 REST API 仅由一个随机生成的密钥保护,该密钥在每次 Hyperfox 启动时都会更改,根据您的使用场景,这可能不够安全。
当 -ui-addr 参数不同于 127.0.0.1 时,Hyperfox 会输出一个二维码,方便从移动设备连接:
hyperfox -db records.db -ui -ui-addr 192.168.1.23:1984
-ca-cert 和 -ca-key)SSL/TLS 连接是端到端安全的,并受到窃听保护。只要信任链未被破坏,Hyperfox 就无法看到客户端与安全目标之间的任何通信。
假设客户端信任某个 Hyperfox 已知的根 CA 证书,那么 Hyperfox 将能够签发被客户端信任的证书。
此类伪造根 CA 文件的示例可以在这里找到:
您也可以自行生成根 CA 证书和密钥。
根据操作系统的不同,有多种安装根 CA 证书的方法。
在移动设备上安装 Hyperfox 的根 CA 时,以下二维码可能派上用场:
Hyperfox root CA certificate
使用 -ca-cert 和 -ca-key 标志为 Hyperfox 提供您想要使用的根 CA 证书和密钥:
hyperfox -ca-cert rootCA.crt -ca-key rootCA.key
上述命令会创建一个特殊服务器,并将其绑定到 127.0.0.1:10443,该服务器等待 SSL/TLS 连接到达。当新的 SSL/TLS 连接到来时,Hyperfox 使用 SNI 扩展来识别目标名称服务器,并为其创建 SSL/TLS 证书,该证书使用提供的根 CA 密钥进行签名。
使用适当的 TLS 参数和 -http 443(443 端口需要管理员权限)启动 Hyperfox:
sudo hyperfox -ca-cert ./ca/rootCA.crt -ca-key ./ca/rootCA.key -https 443
使用 cURL 向 example.com 发起 HTTPS 请求:-resolve 选项告诉 cURL 跳过 DNS 解析,将 127.0.0.1 视为 example.com 的合法地址;-k 参数告诉 cURL 接受任何 TLS 证书:
curl -k -resolve example.com:443:127.0.0.1 https://example.com
您应该能在 Hyperfox 的输出中看到所请求页面的日志:
127.0.0.1:36398 - - [11/Apr/2020:19:36:56 -0500] "GET https://example.com/ HTTP/2.0" 200 -1
/etc/hosts 文件将您要监视的主机添加到 /etc/hosts 文件中:
example.com 127.0.0.1
使用您所需的选项运行 Hyperfox,但要记住 HTTP 使用 80 端口、HTTPS 使用 443 端口,这需要管理员权限。除了 -http 和 -https,请使用 -dns 参数指定有效的 DNS 解析器:
sudo hyperfox -ui -http 80 -dns 8.8.8.8
这将使 Hyperfox 跳过操作系统的 DNS 解析器,而使用备用的 DNS 服务器(记住 example.com 指向 127.0.0.1)。
现在使用 cURL 尝试访问目标:
curl http://example.com
Hyperfox 会捕获请求并打印到输出中:
127.0.0.1:41766 - - [11/Apr/2020:19:43:30 -0500] "GET http://example.com/ HTTP/1.1" 200 -1
参见 MITM attack with Hyperfox and arpfox。
选择一个 issue 进行修复,然后发送 pull request。
版权所有 (c) 2012-至今 José Nieto, https://xiam.io
特此免费授予任何获得本软件及相关文档文件(“软件”)副本的个人,不受限制地处理本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售本软件副本,以及允许获得本软件的人这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在所有副本或实质性部分中。
本软件按“原样”提供,不做任何形式的明示或默示担保,包括但不限于适销性、特定用途适用性和非侵权性的担保。在任何情况下,无论基于何种法律理论,作者或版权所有者均不对因本软件或本软件的使用或其他交易而引起的任何索赔、损害或其他责任负责。