
HTTP/HTTPS MITM プロキシおよびレコーダー
Hyperfox は、2点間の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プロキシサーバーを作成し、localhostのポート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 パラメータはcURLに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
UIサーバーのアドレスを変更することは、Hyperfoxがリモートまたはヘッドレスホストで実行されており、別のホストからUIを表示したい場合に特に便利です。
UIを有効にすると、フロントエンドアプリケーションで使用される最小限のREST API(127.0.0.1:4891)も有効になります。
HyperfoxのREST APIは、Hyperfoxが起動するたびに変更されるランダムに生成されたキーでのみ保護されていることに注意してください。ユースケースによってはこれでは不十分な場合があります。
-ui-addr パラメータが 127.0.0.1 と異なる場合、HyperfoxはQRコードを出力してモバイルデバイスからの接続を容易にします:
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証明書をインストールするには、オペレーティングシステムに応じたいくつかの方法があります。
このQRコードは、モバイルデバイスにHyperfoxのルートCAをインストールする際に便利かもしれません:
Hyperfox root CA certificate
-ca-cert および -ca-key フラグを使用して、使用するルートCA証明書と鍵をHyperfoxに提供します:
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 を指定してHyperfoxを起動します(ポート443は管理者権限が必要です)。
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はOSの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
イシューを選んで修正し、プルリクエストを送信してください。
Copyright (c) 2012-現在 José Nieto, https://xiam.io
以下に定める条件に従い、本ソフトウェアおよび関連文書ファイル(以下「ソフトウェア」)の複製物を取得するすべての人に対し、ソフトウェアを無制限に扱うことを許可します。これには、ソフトウェアの複製、変更、結合、出版、頒布、サブライセンス、および/または販売の権利、およびソフトウェアを提供された相手にこれを行うことを許可する権利が、無制限に含まれます。
上記の著作権表示および本許可表示は、ソフトウェアのすべての複製物または重要な部分に記載されるものとします。
ソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何らの保証もなく提供されます。ここでいう保証には、商品性、特定の目的への適合性、および権利非侵害についての保証が含まれますが、それに限りません。作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連して生じたあらゆる請求、損害、またはその他の責任について、一切の責任を負わないものとします。