SSL通信の実装不備

学習内容

ここでは、SSL通信の実装不備よって生じる脆弱性を理解する上で必要な知識について学習します。
具体的には、Android OSにおけるSSL通信の概要や、事例を交えた脆弱性の概要について説明します。

学習の流れは以下のとおりです。
  • Android OSのSSL通信について
    Android OSにおけるSSL通信の概要について学習します。
  • SSL通信の実装不備によって生じる脆弱性
    SSL通信の実装に不備がある場合、どのような脆弱性が生じるのか学習します。
  • 脆弱性の事例
    SSL通信の実装に不備による脆弱性の事例を紹介します。
  • 学習シナリオ
    サンプルアプリのソースコードを確認し、注意すべきポイントと対策方法について学習します。
    ここでは以下のシナリオを用いて学習します。
    • セキュリティ例外の無視

    本シナリオでは、攻撃アプリを使用した学習は行いません。

Android OSのSSL通信について

ネットワークを通じて情報をやり取りする場合には、正しい相手と通信しているか、通信内容が盗まれる事がないかなど、 セキュリティ面での配慮が必要となります。 通信のセキュリティ確保するための手段として、SSL/TLSを使用した通信があります。 SSL/TLS通信を用いる主な理由として、大きく以下の3点を挙げることができます。
  • 通信内容の暗号化
    HTTPSは、SSLを用いて、メッセージなど通信内容の暗号化を行います。
  • 通信内容の改ざん検知
    SSLを用いているので、通信内容の改ざんを検知することができます。
  • 接続先サーバの認証
    SSLサーバ証明書を使用することで接続先サーバの認証が行えます。

SSL通信の実装不備によって生じる脆弱性

SSLを正しく使用すれば通信の安全性は確保されます。しかし、SSL通信の実装に不備がある場合、以下のような脆弱性が発生します。
  • 通信先が正しいかどうか確認できない
    偽の証明書を信用してしまうことにより、偽装されたサーバへ接続してしまう可能性があります。
  • 通信内容の改ざんを検知できない
    偽の証明書を信用してしまうことにより、第三者に通信内容を傍受、改ざんされたことを検知できない可能性があります。

脆弱性の事例

SSL通信を実装する場合の注意点を理解しないままアプリを開発すると、アプリに脆弱性を作り込んでしまいます。
ここでは、SSLサーバ証明書の検証不備による脆弱性の事例を挙げます。
事例:ヤフオク! におけるSSLサーバ証明書の検証不備の脆弱性
2013年8月 JVNに、ヤフオク!にSSLサーバ証明書の検証不備に関する脆弱性があると報告されました。
ヤフオク! ver.4.3.0 およびそれ以前 (iOS版、Android版)には、SSLサーバ証明書の検証不備の脆弱性が存在していました。 中間者攻撃 による暗号通信の盗聴などが行なわれる可能性がありました。

脆弱性の事例
参考URL:
JVNDB-2013-000078: ヤフオク! におけるSSL サーバ証明書の検証不備の脆弱性
http://jvndb.jvn.jp/ja/contents/2013/JVNDB-2013-000078.html

学習シナリオ

SSL通信の実装不備によって生じる脆弱性の概要について理解できたでしょうか。 それでは以下のシナリオを通して脆弱性のあるサンプルアプリを見ながら、脆弱性を作り込んでしまう原因や、対策方法について学習していきましょう。
*本シナリオでは実行環境と対策結果の検証環境の配布が困難なため、攻撃アプリを使用した脆弱性の体験を行いません。