web-dev-qa-db-ja.com

インターセプトAndroid Burpによるアプリトラフィック

BurpおよびAndroidアプリがトラフィックがhttpsの場合にアプリが行うことを理解しようとしています。私はnot Burp CAを電話にインストールしました。

  1. 一部のアプリは完全に機能しません。彼らはエラーメッセージを表示するか、電話がオンラインではないと考えています。これはSSLのピン留めが原因ですか?

  2. 一部のアプリは正常に動作しますが、Burpはパケットをキャプチャしません。これはどうですか? Burps CAなしでは、電話とサーバーはどのように通信できますか? Burpはトラフィックを中継しているだけですか?

  3. 一部のアプリは正常に動作しますが、Burpはいくつかの操作でのみパケットを傍受します。インターセプトされた操作はおそらく空のトラストマネージャーなどを使用していますが、残りのコードはサーバーと通信していますか?

7
mk_

最初に覚えておかなければならないのは、BurpはHTTP(S)プロキシであることです。 HTTP(S)以外のデータについては何もしません(Webソケットを除く)。一方、Androidアプリは、任意のプロトコルを使用できます。多くの場合、HTTP(S)を使用します。これは、送信するデータのタイプに適しているからですが、実際には必須ではありません。

アプリがHTTP(S)を使用していない場合、そのトラフィックはBurpに表示されません。これの最も明白な例はDNSトラフィックです-Burp経由でブラウザーを使用している場合でも、DNSルックアップ要求が表示されることはありません。

そう:

  1. 完全に機能しないアプリ。彼らは証明書のピン留めを使用している可能性があります-ただし、ここでは2つのオプションがあります。最初のタイプは、デバイスにインストールするターゲットサイトの有効な証明書を探します。この場合、Burp CA証明書をインストールすると、再び機能します。 2番目のタイプは、サーバーが特定の証明書を提供するか、信頼チェーンの特定のエントリによって署名された証明書を必要とするカスタムピン留めを使用しています。これらはBurp CA証明書に騙されません。
  2. パケットをキャプチャすることなく機能するアプリ。彼らはおそらくHTTP(S)を使用していません。これは、SSHクライアント、Whatsappなどのメッセージングサービス、ゲームなどの場合があります。パケットの損失は、高速に到着するほとんどのパケットよりも重要ではなく、TCPベースよりもUDPベースのネットワーク接続に適しています。 HTTPのようなもの。また、特にHTTPプロキシアプリを使用して傍受している場合は、配置されているプロキシ設定を無視している可能性もあります。このデータを表示するには、他のタイプのデータを処理できるWiresharkなどのツールと、モニターモードをサポートするWi-Fiカードが必要です。
  3. 一部のトラフィックのみを表示するアプリ。表示されているトラフィックが統計パッケージまたは広告である場合、それらはおそらく上記のクラス2に該当します。ほとんどの統計システムはHTTP(S)を使用しているように見えます。とにかく広告をダウンロードするために開いている接続。
  4. 実際に接続しないアプリ。一部のアプリケーションはインターネットに接続しているように見えますが、実際には接続していないか、不規則にしか接続していません。これらには、タイムテーブルアプリ、一部のゲーム(たとえば、ハイスコアが毎日更新される)、またはほとんどのデータをローカルに保存できるすべてのものを含めることができます(マッピングアプリは「通常の」領域をローカルに保存し、アトラクションまたはより遠い場所のレビュー)。この場合、あなたが見ている間に彼らが接続しようとするのを見たことがないかもしれません。

できればWiresharkでトラフィックを確認し、どのプロトコルが使用されているかを確認してから、適切なソフトウェアを使用して興味深いプロトコルを調査します。一部は意図的に検査するのが難しいことを念頭に置いてください。Whatsappからの暗号化されたパケットは読み取れないはずです、そうでなければ、彼らはひどく悪いことをしています!

5
Matthew

IPhoneアプリケーションをテストするときに同様の問題が発生しました。アプリケーションはネイティブライブラリを使用せず、httpプロキシをサポートしていませんでした。これを「修正」するために、すべてのトラフィックをBurpプロキシに透過的に転送しました。この設定の説明については、 Androidアプリ? からすべてのトラフィックをどのようにキャプチャするのですか?).

一部のアプリケーションは、証明書のピン留めを使用します。一部のアプリケーションは、最初に表示された証明書を固定しますが、他のアプリケーションでは、アプリケーションにハードコーディングされています。最初のケースでは、最初に実行するときにトラフィックがプロキシを通過することを確認する必要があります。

クライアントが途中で切断する(証明書を拒否する)と、Burpsアラートタブに警告が表示されると思います。

後者では、バイナリ自体を変更する必要があるため、少し難しくなります。

私はAndroidアプリケーション自体から証明書のピン留めを破壊しようとしませんでしたが、 this リンクは良いアプローチのように見えます。

3