web-dev-qa-db-ja.com

アプリにパッチを適用せずに証明書のピン留めを回避する方法はありませんか?

証明書のピン留めを使用するアプリのTLSトラフィックを傍受するために、アプリのコンパイル済みコード/証明書ファイルにパッチを適用する(アプリ固有であり、手動での分析とパッチ適用+スーパーユーザー/ルートが必要)以外のことはできますか?

mitmproxydocs から、答えは「いいえ」のようです。

証明書のピン留め

一部のアプリケーションは、中間者攻撃を防ぐために証明書ピン留めを採用しています。つまり、mitmproxyとmitmdumpの証明書は、変更しないとこれらのアプリケーションで受け入れられません。 mitmproxyとmitmdumpがこれらの特定のドメインへのトラフィックを傍受しないようにするために、パススルー機能を使用することをお勧めします。ピン留めされた接続をインターセプトする場合は、アプリケーションに手動でパッチを適用する必要があります。 Androidおよび(脱獄した)iOSデバイスの場合、これを実現するためのさまざまなツールが存在します。

証明書のピン留めはこれらのアプリの信頼モデルの一部です 、ユーザーと同時に、分析のためにデバイスのローカルでデバイスのトラフィックを傍受/遮断したいため、送信された電子メール(ProtonMailを使用して)、送信されたメッセージ(Signal/WhatsAppを使用して)などのイベント、またはトラフィックの分析から推測できるイベント(類似のものを使用して/など)から、私の習慣や行動に関する統計/洞察強力な mitmproxyのPythonスクリプトAPI またはScapyのフィルター)。

3
Wis

いいえ、アプリケーションのパッチまたはデバッガー(トレーサー)を使用せずに証明書のピン留めを回避する方法はありません。その理由は、簡単に言うと、証明書のピン留めは、CA証明書がアプリケーションにハードコードします。このアプリケーションは、ネットワーク接続を確立するための唯一の信頼のルートとして証明書を設定します。 AndroidはTrustManager実装を介して実行されます。

次のオプションがあります。

  1. アプリケーションをリバースエンジニアリング、変更、再パックします。
  2. 証明書の固定を解除するためにフリーダを添付します(例: Androidのコードスニペット があります)。
  3. 暗号化の直前にトラフィックを読み取るためにFridaをアタッチします。

インストール前にアプリケーションに挿入する必要があるFridaガジェットを使用して、ルート(スーパーユーザー、脱獄)は必要ありません。例えば。 AndroidでrootなしでFridaを使用する方法 を参照してください。

アプリケーションによっては、実際の証明書のピン留めがない場合があることに注意してください。たとえば、 既知の問題 がありますAndroidアプリケーションはデフォルトでシステム証明書のストレージのみに信頼を置いているため、ユーザーのカスタムMITM証明書はそこでのみ機能しません。デフォルト。

6

デバイスをルート化したり、実行可能ファイルにパッチを適用したりせずにTLSデータを復号化する方法があるかどうかを尋ねている場合、答えはおそらくノーです。

ただし、他にいくつかの方法があるかどうかを尋ねている場合は、TLS証明書のピン留めをバイパスすることなくTLSデータを復号化できます。

たとえば、これはiOSデバイスでTLSデータを復号化するために私が作成した小さなツールです。Fridaフレームワークを利用して自身を挿入し、TLS暗号化を処理する関数をフックして、プレーンバッファーが暗号化される前に出力できるようにします。

https://github.com/gkpln3/ios_ssl_sniffer

0
gkpln3