Help us understand the problem. What is going on with this article?

AndroidアプリではでCCS Injection Vulnerabilityが割と影響を受けるのではないかという考察

More than 5 years have passed since last update.

AndroidアプリではでCCS Injection Vulnerabilityが割と影響を受けるのではないかという考察です。

CCS Injection Vulnerabilityについての詳細は下記を参照
* http://ccsinjection.lepidum.co.jp/ja.html
* http://jvn.jp/jp/JVN61247051/

この考察のもとになったソースはAndroidソースコード検索サービス( https://sites.google.com/site/devcollaboration/codesearch )のコードを参照しています。

URL各ファイルのリンクはこちらのサイトに飛びます。

この考察はGoogleが公開してるソースでの考察になりますので各メーカが実装しているAndroidでは状況が異なる可能性があります。

根拠1 AndroidのほとんどがOpenSSL 0.9.8以降を使っている

Android 2.2のソースをのぞいてみるとOpenSSLを使っている。そのバージョンは2.2で0.9.8m、最新の4.4.2では1.0.1eを使っている。

Android 2.2

http://tools.oesf.biz/android-2.2_r1.1/xref/external/openssl/openssl.version

openssl.version
OPENSSL_VERSION=0.9.8m

Android 4.4.2

http://tools.oesf.biz/android-4.4.2_r1.0/xref/external/openssl/openssl.version

openssl.version
OPENSSL_VERSION=1.0.1e

 

今回の脆弱性は0.9.8y以前の全てと1.0.0から1.0.0l, 1.0.1から1.0.1gに存在するのでこれらすべてに脆弱性が存在する可能性が高い

根拠2 Androidの通信系処理(WebView以外)はOpenSSLを通信に使っている

Androidの通信系の処理を追っていくとAndroidアプリからの通信はOpenSSLを使ってSSLを処理していることが分かる。
最新の4.4.2のソースを追ってみると、通常通信に使うHttpsURLConnectionの実装を見てみると

http://tools.oesf.biz/android-4.4.2_r1.0/xref/libcore/luni/src/main/java/javax/net/ssl/HttpsURLConnection.java 

HttpsURLConnection.java
public static SSLSocketFactory defaultSSLSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();

このSSLSocketFactory.getDefault();の中身は

http://tools.oesf.biz/android-4.4.2_r1.0/xref/libcore/luni/src/main/java/javax/net/ssl/SSLServerSocketFactory.java

SSLServerSocketFactory.java
public static synchronized ServerSocketFactory getDefault() {
    if (defaultServerSocketFactory != null) {
        return defaultServerSocketFactory;
    }
    if (defaultName == null) {
        defaultName = Security.getProperty("ssl.ServerSocketFactory.provider");
        if (defaultName != null) {
            ClassLoader cl = Thread.currentThread().getContextClassLoader();
            if (cl == null) {
                cl = ClassLoader.getSystemClassLoader();
            }
            try {
                final Class<?> ssfc = Class.forName(defaultName, true, cl);
                defaultServerSocketFactory = (ServerSocketFactory) ssfc.newInstance();
            } catch (Exception e) {
            }
        }
    }
    if (defaultServerSocketFactory == null) {
        SSLContext context;
        try {
            context = SSLContext.getDefault();
        } catch (NoSuchAlgorithmException e) {
            context = null;
        }
        if (context != null) {
            defaultServerSocketFactory = context.getServerSocketFactory();
        }
    }
    if (defaultServerSocketFactory == null) {
        // Use internal dummy implementation
        defaultServerSocketFactory = new DefaultSSLServerSocketFactory(
                "No ServerSocketFactory installed");
    }
    return defaultServerSocketFactory;
}

基本的にssl.SocketFactory.providerで指定されているプロバイダを使うことが分かる。

ssl.SocketFactory.providerの中身はというと

http://tools.oesf.biz/android-4.4.2_r1.0/xref/libcore/luni/src/main/java/java/security/security.properties

security.properties
ssl.SocketFactory.provider=com.android.org.conscrypt.OpenSSLSocketFactoryImpl 

となっているのでOpenSSLを使っていることが分かる。

これらの通信に使われているOpenSSLは根拠1のバージョンのものなのでCCS Injection Vulnerabilityを影響を受ける

これらのことによりAndroidアプリの通信はCCS Injection Vulnerability受けると考察できる。

対策

根本的な対策はAndroidで使われるOpenSSLアップデートですが、Androidの場合、アップデートは各メーカーにゆだねられているので割と時間がかかりそうです。
ですので、Androidアプリを公開してSSL通信をしている場合はサーバ側を至急アップデートしたほうがよさそうです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away