web-dev-qa-db-ja.com

プロキシ非対応iOSアプリケーションでHTTP(S)トラフィックをキャプチャする最適な方法

プロキシ非対応のXamarin iOSアプリケーションからHTTP(S)トラフィックをキャプチャしようとしています。現在入手可能なツールは、Linux Mint VMを搭載したMac、XcodeおよびiOS開発者ツール、Burp Suite Community Edition、Charles ProxyおよびWiresharkです。

戦略

以下の戦略をさまざまな程度の成功でテストしました(ただし、完全に成功することはありません)。

Burp SuiteとCharles Proxy

セットアップ:Macで実行されているBurp Suite/Charles Proxy。プロキシのCA証明書がiOSデバイスにインストールされています。 iOSデバイスは、HTTPプロキシを使用するように構成されています。

問題:Google Analyticsなど、XamarinのネイティブHttpClient AP​​Iによって作成されていない特定のリクエストのみをインターセプトします。これは、対象のAPIの分析には役立ちません。

Wireshark

セットアップ:MacにUSBケーブル経由で接続されたiOSデバイス、Macでネットワークインターフェイスを作成 このガイド により、Wiresharkがそのネットワークインターフェイスから読み取れるようにして、iOSデバイスから直接パケットをキャプチャします。

問題:すべてのリクエストがHTTPSであり、復号化できません。

VPNとBurp Suite

セットアップ:iOSデバイスが接続するVPNを作成すると、すべてのトラフィックがそのVPNを経由してBurp Suiteにルーティングされます。 VPNはLinux Mint VM=にセットアップされており、ネットワークアダプターは私のMacのWi-Fiカードにブリッジされています。

問題:私は部分的に チュートリアル を説明しましたPPTP Burp Suiteを使用したVPNですが、iOS 10以降ではPPTPのサポートが終了しました。OpenVPNで複製しようとすると、満足のいく結果が得られませんでした。結果(ServerFaultに関する別の投稿 here )。

今日の質問

システムプロキシ設定を考慮しないiOSモバイルアプリからのHTTP(S)トラフィックを効果的かつ(できれば比較的簡単に)傍受するにはどうすればよいですか?

3
Pan Ziyue

これはかなり興味深い出来事でした。VPN/ Burp Suiteメソッドの問題は、Burp Suiteの非表示のプロキシ(数回のトラブルシューティング後に無視したもの)の設定に関係しているようです 以前に投稿したServerFaultの質問 。コミュニティに貢献するために、プロキシ非対応のiOS> 10アプリをMITMする方法に関するチュートリアルを示します。

IOS 10以降のプロキシ非対応iOSアプリのMITM化に関するガイド

VMのセットアップ

Linux VM=を設定します(私はLinux Mintを使用しましたが、UbuntuおよびDebianベースのディストリビューションは、チュートリアルの残りの部分でも同様に機能します)、そして Burp Suiteをダウンロード 、より移植性の高いJARバージョン。

DigitalOceanのガイド に従ってOpenVPNをインストールします。 iOSデバイスがVPNに接続できることを再確認してくださいandインターネットにアクセスできること。

iptables構成

上記のガイドに従って、クライアント接続をマスカレードするためにiptablesをすでに設定している必要があります。 OpenVPNのtun0インターフェイスからポート8080(またはBurp Suiteのコピーが使用しているポート)にすべてのHTTPおよびHTTPSリクエストを転送するようにiptablesを構成する必要があります

# iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 80 -j REDIRECT --to-port 8080
# iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 443 -j REDIRECT --to-port 8080

楽しいビット

Burp Suiteを起動し、次のことを確認します。

  1. Discept Intercept:その機能が必要でない限り、すべての接続を停止して検査/編集する必要はありません
  2. Proxy> Options> Proxy Listeners> Editand enable listen on all interfaces
  3. プロキシ>オプション>プロキシリスナー>編集>リクエスト処理と非表示のプロキシを有効にするか、上記のどれも機能しません!

楽しんで ;)

3
Pan Ziyue