BurpおよびAndroidアプリがトラフィックがhttpsの場合にアプリが行うことを理解しようとしています。私はnot Burp CAを電話にインストールしました。
一部のアプリは完全に機能しません。彼らはエラーメッセージを表示するか、電話がオンラインではないと考えています。これはSSLのピン留めが原因ですか?
一部のアプリは正常に動作しますが、Burpはパケットをキャプチャしません。これはどうですか? Burps CAなしでは、電話とサーバーはどのように通信できますか? Burpはトラフィックを中継しているだけですか?
一部のアプリは正常に動作しますが、Burpはいくつかの操作でのみパケットを傍受します。インターセプトされた操作はおそらく空のトラストマネージャーなどを使用していますが、残りのコードはサーバーと通信していますか?
最初に覚えておかなければならないのは、BurpはHTTP(S)プロキシであることです。 HTTP(S)以外のデータについては何もしません(Webソケットを除く)。一方、Androidアプリは、任意のプロトコルを使用できます。多くの場合、HTTP(S)を使用します。これは、送信するデータのタイプに適しているからですが、実際には必須ではありません。
アプリがHTTP(S)を使用していない場合、そのトラフィックはBurpに表示されません。これの最も明白な例はDNSトラフィックです-Burp経由でブラウザーを使用している場合でも、DNSルックアップ要求が表示されることはありません。
そう:
できればWiresharkでトラフィックを確認し、どのプロトコルが使用されているかを確認してから、適切なソフトウェアを使用して興味深いプロトコルを調査します。一部は意図的に検査するのが難しいことを念頭に置いてください。Whatsappからの暗号化されたパケットは読み取れないはずです、そうでなければ、彼らはひどく悪いことをしています!
IPhoneアプリケーションをテストするときに同様の問題が発生しました。アプリケーションはネイティブライブラリを使用せず、httpプロキシをサポートしていませんでした。これを「修正」するために、すべてのトラフィックをBurpプロキシに透過的に転送しました。この設定の説明については、 Androidアプリ? からすべてのトラフィックをどのようにキャプチャするのですか?).
一部のアプリケーションは、証明書のピン留めを使用します。一部のアプリケーションは、最初に表示された証明書を固定しますが、他のアプリケーションでは、アプリケーションにハードコーディングされています。最初のケースでは、最初に実行するときにトラフィックがプロキシを通過することを確認する必要があります。
クライアントが途中で切断する(証明書を拒否する)と、Burpsアラートタブに警告が表示されると思います。
後者では、バイナリ自体を変更する必要があるため、少し難しくなります。
私はAndroidアプリケーション自体から証明書のピン留めを破壊しようとしませんでしたが、 this リンクは良いアプローチのように見えます。