CloudflareのSSL通信復号化でアプリエラー

Cloudflareロゴ画像

Cloudflare Zero TrustのSSL復号化(Decryption)を使っていると、一部のiPhoneアプリでエラーが発生した。その対策を記録する。

2024年5月6日

Cloudflareゼロトラスト情報セキュリティ

CloudflareのSSL復号化すると、iPhoneアプリでエラー発生

Cloudflare Zero Trustの機能でSSL復号化(SSL Decryption)が使えます。この機能を有効にするとブラウザとウェブサーバ間で暗号化されているSSL通信をCloudflareが解読して、HTTPヘッダーやコンテンツによるフィルタリング、ウィルスチェックが可能になります。 機能評価のためしばらく使っていたのですが、一部のiPhoneアプリでエラーが発生していることに気づきました。私が使っていないアプリやエラーに気づいていない可能性もありますから、もっと多くのアプリに影響があったかもしれません。また、各アプリですべての機能をチェックしていないので、他にエラーになっている機能があるかもしれません。

AppストアとiMessage

Appストアは画像のようにコンテンツが表示されないエラーになりました。また、iMessageは過去に受け取ったメッセージが何度か再送されてきました。

Appストアエラー

モバイルSuica

通常のタッチ決済はできましたが、チャージしようとするとエラーが表示されました。

モバイルSuicaエラー

PayPay

Paypayはアプリを開いた直後から、画面上部にインターネットに接続できませんのエラーが表示されて、アプリが使えない状態になってしまいました。

PayPayエラー

エラーの原因はSSL証明書ピンニング(SSL Certificate Pinning)

エラーの原因はSSL証明書ピンニング(SSL Certificate Pinning)でした。SSL/TLS通信はサーバ証明書が正規の認証局から発行されているものであれば信頼してしまいますが、何らかの理由で攻撃者が正規の証明書を発行できて、通信を途中で傍受している場合やユーザーが証明書のエラーを無視して通信してしまっている場合などのリスクがあります。 その対策として、アプリにサーバ証明書そのものやハッシュ値などを埋め込み、自身のアプリが意図した証明書が使われているか認証する行為をSSL証明書ピンニングと呼びます。 CloudflareのSSL復号化は正規のサーバの代わりに、CloudflareがSSL証明書を発行しているため、その証明書がアプリから否認されて、エラーとなってしまいます。

ピンニングしているアプリやサービスを除外する。

対策としては、Cloudflare Gatewayを使って対象サービスをSSL復号化から除外すればよいです。

iCloud系サービスの場合

Cloudflare Zero TrustFirewall Policyへ移動します。

Firewall Policy

Add Pilicyから新しいHTTP Policyを追加します。

Add Policy

ポリシー名や説明は任意に入力して、Add Conditionから条件を追加します。

Add Traffic Condition

以下画像のように、ApplicationDo Not Inspectグループに含まれているという条件を入力します。この場合ですと、iCloud以外のサービスもSSL復号化から除外されてしまいますので、iCloudなど特定のサービスのみで構わない場合は、Apple(Do Not Inspect)のように個別サービスのみチェックします。

Add Traffic Condition Detail

条件に一致した場合の動作をDo Not Inspectを選択して、ポリシーを保存すれば完了です。

Add Traffic Condition Detail

モバイルSuica、PayPayなど日本独自サービスの場合

グローバルなサービスはCloudflareがあらかじめ選択肢を用意してくれていますが、モバイルSuicaなど日本独自のサービスはそうはいきませんでした。自分で除外対象のドメインやIPアドレスを調べて、ポリシーを追加するしかありません。

Cloudflare Zero TrustのLogs > Gateway > DNSからDNSリクエストのログを確認できます。アプリでエラーが発生している時点のログを調べれば、アプリがどのようなホストへ通信をしようとしているのか、おおよそ把握できます。

Add Traffic Condition Detail

PayPayの場合はpaypay.ne.jpドメインのホストに通信を行っているようなので、iCloudの場合と同様にGatewayのFirewallからHTTPポリシーを追加して、条件にドメイン名を選択します。

paypay.ne.jpのルール追加

まとめ

Cloudflareがデフォルトで対応していないSSLピンニングをしているサービスですと、自分でドメイン名などを調べないといけないため、ひと手間かかりますし指定漏れがあるとエラーが解消しないかもしれません。SSL復号化はそういったリスクを含めて実施するものと思います。