偽の信頼できるCA証明書をインストールするモバイルアプリを使用しているため、他のアプリのHTTPSトラフィックをキャプチャできます。ほとんどの場合、このMITM攻撃は成功しています。
ただし、一部のアプリは他のアプリよりも安全であり、偽の信頼されたCA証明書によるMITM攻撃が行われている場合は、サーバーへの接続を拒否することに気付きました。
これらのアプリはどのようにMITM攻撃を検出しますか?これはクライアント側で発生していますか、それともサーバー側で発生していますか?
ユーザーが攻撃者の信頼できるCA証明書をインストールしている場合、HSTSおよび公開キーのピン留めを使用してMITMを防止できないようです。もしそうなら、どの技術ができますか?
これは、一部のアプリケーションがSDKの一般的なHTTPS APIを使用しないためです。それらのいくつかは独自のライブラリを実装し、独自のキーストアを持っています。
これらのアプリでは、接続に使用される証明書は通常ハードコーディングされているか、ルート証明書がハードコーディングされています。この場合、証明書を信頼するようにアプリケーションを変更しない限り、ユーザーまたはシステム証明書のインストールは機能しません。
公開キーのピン留め は、信頼できるCA証明書があってもMITMを完全に防ぐことができます。ピン留めの重要なポイントは、アプリケーションが期待する証明書(ハッシュ、発行者など)を正確に知っているということです。信頼できるCAはドメインの「有効な」証明書を生成できますが、それはアプリケーションが探している正確な証明書ではないため、拒否されます。
HSTSとHPKPはどちらもブラウザ用であり、一般的なモバイルアプリ用ではありません。 [〜#〜] rfc [〜#〜] に準拠しているブラウザは、HPKPに関係なく、手動で信頼された証明書との接続を許可できます。モバイルアプリはこれを行う必要はありませんが、HTTPを使用する必要さえありません。モバイルアプリでの証明書のピン留めはHPKPと似ていますが、実装は異なります。
Androidデバイスについて話しているのは、Android 7以上では、アプリがユーザーがインストールしたルート証明書を信頼するかどうかを選択できるためです。インストールした証明書を単に信用しないだけです。
デバイスをルート化できる場合は、システムトラストストアにルートをインストールでき、アプリはそれを信頼します。