SSL検証のトラブルシューティング


SSL検証のトラブルシューティング

このページでは、AndroidアプリがSSL証明書を適切に検証しないという問題を解消する方法について説明します。この問題の詳細については、http://www.kb.cert.org/vuls/id/582497を参照してください。

トラブルシューティングの手順

Androidアプリで、上記のリンク先に記載されているような、SSL証明書を適切に検証しないという問題が発生した場合は、次の手順でトラブルシューティングを行います。

  1. SSLトラフィックが次のライブラリを使用しているかどうかを確認します。

    • Flurry CVE-2014-6024
    • Chartboost CVE-2014-6025
    • AdColony CVE-2014-5524
    • MoMinis/Playscape CVE-2014-5525
    • TapJoy CVE-2014-5527
    • InMobi CVE-2014-5526
    • Appsflyer CVE-2014-5528
    • Zopim CVE-2014-5530
    • Fiksu CVE-2014-5814
  2. SSLトラフィックが上記のいずれかを使用していたら、問題のあるライブラリのバージョンをCVE(脆弱性情報データベース)で調べ、脆弱性に対処したバージョンがあれば、ライブラリをそのバージョンにアップグレードしてください。

    • 検証されていないSSLトラフィックがすべて上記のライブラリのいずれかにある場合は、ライブラリをアップグレードしてから、Amazonにアプリを再申請してください。
    • 一部の検証されていないSSLトラフィックが上記のライブラリのいずれにもない場合は、トラフィックの安全性を確保し、ユーザーのデータを守るための措置を取ってください。

      購入したSSL証明書を使用する場合は、SSLに依存するコードをtry/catchブロックでラッピングし、SSLExceptionイベントが発生したときに、アプリがネットワーク経由でデータを送受信しないようにします。

    • SSLトラフィックに自己署名する場合は、CA証明書をアプリのアセットディレクトリに保存し、その証明書を使って、try/catchブロック内でSSLトラフィックを検証します。証明書に信頼性がない場合は、トラフィックを許可しないでください。Androidアプリの安全な設計方法やコーディング方法(自己自署SSLトラフィックの検証方法の例など)については、http://www.jssec.org/dl/android_securecoding_en.pdfのセクション5.4を参照してください。
    • 知名度の高いCA証明書を自身のトラフィックに使用して、脆弱性のあるCAホストからの攻撃を防ぐ場合は、CAによるSSL証明書をピニングしてください。

この脆弱性については、http://www.kb.cert.org/vuls/id/582497およびhttps://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=134807561を参照してください。

SSLトラフィックの適切な検証方法については、http://developer.android.com/training/articles/security-ssl.htmlを参照してください。

アプリや他のプラットフォームのアプリにSSL証明書をピニングする方法については、https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinningを参照してください。