web-dev-qa-db-ja.com

Wireshark SSLストリッピング

よくこの質問はWiresharkフォーラムまたはStackoverflowフォーラムで尋ねられる可能性がありますが、この質問は開発とセキュリティの要因にも関わっていると思うので、情報セキュリティフォーラムはこの質問をするのに適した場所だと思います。要点はまあまあです。問題が発生するまでの手順は次のとおりです。

  1. Androidアプリケーションを提供するHTTPSプロトコルで実行するWebサイトがあります
  2. 私は通常、Windowsオペレーティングシステムで実行されているWiresharkを介して要求/応答をデバッグします。
  3. Wiresharkに添付できるように、サーバープログラマーに秘密キーを要求しました。
  4. サーバープログラマーは、キーはDockerイメージ内にあるため、キーがどこにあるのかはわかりませんが、すぐに探します。
  5. Androidアプリ全体にLog.d()をコピーして貼り付けるのではなく、アプリをデバッグする必要がありました。
  6. google Playstoreに「SSL」というアプリがあることがわかり、ダウンロードして試してみました。
  7. 「Androidサードパーティの証明書であるため、かなり疑わしいです)」という「パケットキャプチャ証明書」をインストールします
  8. とにかくそれをインストールすると、私のテスト用電話はダミー電話になります
  9. 復号化されたHTTPSパケットのキャプチャを開始しました

これは実際にどのように機能しますか?このアプリケーションは明らかに、他のアプリに向かうパケットを取得する方法を知っています。しかし、どのようにしてSSLを復号化できますか?それとも逆ですか?アプリは、復号されたHTTPパケットをこのアプリに報告していますか?最後に、Wiresharkはサーバーとキーを交換することで、メインアプリと同じようにパケットを復号化できますか?

1
ksp0422

まず、この回答についてはあまり詳しく説明しません。興味があれば、HTTPSと証明書システムの詳細を読んでください;-)


HTTPSが機能するには証明書が必要です。これらの証明書は、適切なサーバー(侵入者のサーバーではない)と通信していることを保証するためのものです。暗号化のみ(この認証なし)は、トラフィックを傍受して復号化することは簡単であるため、ほとんど役に立ちません。

このすべての証明書を管理するために、 公開鍵インフラストラクチャ を使用します。電話機は、認証局によって署名された証明書のみを信頼します。

アプリをインストールすることにより、ステップ7で「パケットキャプチャ証明書」をインポートしたことを説明しました。これで、携帯電話は以前に信頼していたすべてのものを信頼し、さらに「パケットキャプチャ証明書」によって署名されたすべての証明書を信頼しています。

これで、アプリはデバイスとWebアプリケーション間のプロキシとして機能できます。パケットの内容を表示できるようにトラフィックを復号化し、Webアプリケーションへの独自の安全な接続を使用してトラフィックを再暗号化します。これは 中間者攻撃 に似ています。これは、証明書を信頼したためにのみ機能します。 (証明書を信頼しない場合、携帯電話は接続エラーをスローする可能性が高いです。)

しかし、アプリはどのようにパケットを取得しますか?それはおそらく Android VPN API を使用し、AndroidシステムにVPNトンネルとしてそれ自身を提示します。したがって、Androidはすべてのパケットを転送しますアプリに。


Wiresharkはプロキシとして使用できません。Wiresharkはlistensでトラフィックを監視し、新しいリクエストを変更または挿入しないためです。 HTTPSをインターセプトできる別のツールが必要な場合は、 OWASP ZAPBurp Suite または mitmproxy を試してください。

1
Lukas