web-dev-qa-db-ja.com

Google PlayおよびOpenSSL警告メッセージ

Google Playから次のようなメールを受け取りました。

こんにちは、

1つ以上のアプリで、古いバージョンのOpenSSLが実行されていますが、これには複数のセキュリティ脆弱性があります。できるだけ早くOpenSSLを更新する必要があります。 OpenSSLの最新のセキュリティ脆弱性の詳細については、 http://www.openssl.org/news/secadv_20140605.txt をご覧ください。

これらの特定の問題がアプリケーションに影響するかどうかは不明ですが、ユーザーが侵害の危険にさらされる脆弱性を持つアプリケーションは「危険な製品」と見なされ、Google Playから削除される場合があります。

よろしく、

Google Playチーム

©2014 Google Inc. 1600 Amphitheatre Parkway Mountain View、CA 94043

メール設定:Google Playアカウントの重要な変更について更新するために、この必須のメールサービスのお知らせを受け取りました。

アプリにOpenSSLを明示的に含めていません。 Android NDKを使用するアプリはNDK 9d(最新)を使用しています。使用する外部ネイティブライブラリは、ffmpegとOpenCV、およびネイティブコードを含まない広告ライブラリのみです。

この警告の原因となるOpenSSLを他にどこに含めることができますか?

よろしく、

27
Hyndrix

アプリに静的にリンクされているもののOpenSSLバージョンと、TLSハートビートメソッドが含まれているかどうかを表示するbashスクリプトを作成しました。

これは、私が投げたいくつかのAPKで機能しました。 OpenSSLバージョン文字列は、バージョン番号と日付とともに具体的に抽出されています。 GoogleがAPKにフラグを立ててこれが見つからない場合は、egrepコマンドのOpenSSL正規表現を「OpenSSL」に緩和して、どこに到達するかを確認します。

以下をファイルに入れます。 testopenssl.sh

使用法:./testopenssl.sh APK_File

#!/bin/bash
sslworkdir="ssl_work_dir"
if [ ! -d $sslworkdir ]; then
  mkdir $sslworkdir
fi
unzip -q "$1" -d $sslworkdir
#Set delimiter to ignore spaces
IFS=$'\r\n'
#Create an array of OpenSSL version strings
opensslarr=($(egrep --binary-files=text -o -R -e "OpenSSL\s\d+\.\d+\.\d+\w+\s\d+\s\w+\s\d+" $sslworkdir/*))
#Stackoverflow syntax highlight fix closing 'block comment' */
if [ ${#opensslarr[@]} -gt 0 ]; then
    echo "Found OpenSSL versions"
    printf "%s\n" "${opensslarr[@]}"
    heartbeatarr=($(grep -R -E "(tls1_process_heartbeat|dtls1_process_heartbeat|dtls1_heartbeat|tls1_hearbeat)" $sslworkdir/*))
    #Stackoverflow syntax highlight fix closing 'block comment' */
    if [ ${#heartbeatarr[@]} -gt 0 ]; then
        echo "Files that contains heartbeat methods:"
    printf "%s\n" "${heartbeatarr[@]}"
    else
        echo "No libraries contain heartbeat methods"
    fi
else
    echo "Did not find OpenSSL"
fi
rm -rf $sslworkdir
21
caller9

Android Security Discussions に対するメーリングリストのEric Davisによると セキュリティの警告:OpenSSLの非常に脆弱なバージョンを使用しています

  1. ("$ unzip -p YourApp.apk | strings | grep "OpenSSL"")を介してOpenSSLを使用しているアプリを特定できます
  2. OpenSSLのすべての静的リンクバージョンを1.0.1h、1.0.0m、または0.9.8zaに更新してください。 (jwwによる注意:OpenSSLの新しいバージョンがリリースされると、このバージョンは時間とともに変化します)。
  3. OpenSSLをバンドルするサードパーティライブラリを使用している場合は、サードパーティに通知し、サードパーティと協力してこの問題に対処してください。

このメッセージが表示されたら、bothNDKとIDE使用しています。ダウンレベルヘッダーを含むNDKのいくつかのバージョンのレポートを見てきました。また、使用しているIDE AndroidでIDEを使用しないので、私はそれを経験していません。

OpenSSLを直接使用していない場合、SDKはOpenSSLの脆弱なバージョンを提供しています。この場合、SDKを更新する必要があります。 SDK間でダウンレベルのOpenSSLを見つける必要がある場合は、 OpenSSLの脆弱性の原因となる依存関係を確認する方法 を参照してください。

Googleは SSLエクスプロイトから保護するためのセキュリティプロバイダーの更新 も提供していますが、基本的な文字列検索のように見えるため、メッセージがトリガーされると思われます。

多くの場合、誰がOpenSSLのダウンレベルバージョンを提供しているかを把握しようとするよりも、すべてを更新する方が簡単です。誰がそれを提供しているかを判断するために時間を費やした後、アクション可能な項目は同じです:SDKを更新します。それではなぜ時間を無駄にしますか。それらをすべて更新し、他のバグ修正もお楽しみください。


ただし、未解決の質問があります。libcryptoの暗号化(たとえば(Rand_bytesまたはEVP_encrypt)を使用し、libsslのSSL/TLS関数を使用しない場合(たとえば、SSL_connect)、それでも警告がトリガーされますか?つまり、Googleは脆弱な機能の使用をスキャンしていますか、またはstringsを介してOpenSSLバージョンをスキャンしています。

8
jww

私が使用しているFacebookのSDKのバージョンが更新されていないため、この問題もあります。あなたもそれを使用している場合は、FacebookのSDK v3.21.1の更新バージョンを使用してみてください、そしてその警告は解決されます。

2
kads

Cocos2dxを使用している場合は、curlライブラリを更新する必要があります。更新されたcurlライブラリをここからダウンロードしてください http://cocostudio.download.appget.cn/Cocos2D-X/curl.Zip

cocos2dxにある現在のcurlライブラリに置き換えます。

安全のために、mac opensslのバージョンも更新してください。これについては、このリンクに従ってください http://javigon.com/2014/04/09/update-openssl-in-osx/

1
Ali Raza

私はこの問題がありました、ffmpeg libと.soファイルを使用しています、次の手順で問題を解決しました:まず、Android Studioを使用します。Eclipseを使用している場合は、あなた自身の方法。

この問題の原因は、OpenSSL 1.0.2dを使用しているlibavformat.soファイルです。更新する必要があります。ただし、libavformat.soを更新するだけでクラッシュが発生するため、関連するすべてのlib(javacvおよびjavacpp)を更新する必要があります。

  • https://github.com/bytedeco/javacv および https://github.com/からjavacv-1.2-bin.Zipおよびjavacpp-1.2.3-bin.Zipをダウンロードしますbytedeco/javacpp

  • それらを抽出し、ffmpeg.jarjavacpp.jarjavacv.jar、およびopencv.jar[yourproject]\libsにコピーします。

  • ffmpeg-Android-arm.jarおよびopencv-Android-arm.jarを抽出します(javacv-1.2-bin.Zipを抽出した後にそれらを見つけます)。新しいバージョンの.soファイルを収集します。
  • [yourproject]\src\main\jniLibs\armeabi-v7aの古いファイルを新しいバージョンに置き換えます(すべてではなく、ほとんど.soファイルが置き換えられます)
  • 場合によっては、javacpp-presets-1.2.pomファイルも[yourproject]\libsにコピーする必要があります。 Googleで検索できます。
  • プロジェクトのモジュールbuild.gradleを変更します

    apply plugin: 'com.Android.library'
    Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
    }
    
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
    
        }
    }
    
    
        packagingOptions {
        exclude 'META-INF/services/javax.annotation.processing.Processor'
        pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties'
        pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml'
        pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties'
        pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'
        pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'
        pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/1.2/javacpp-presets-1.2.pom.xml'
        pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/org.bytedeco.javacpp-presets-1.2.pom.xml'
    }
      }
    
      configurations {
    all*.exclude group: 'org.bytedeco', module: 'javacpp-presets'
    }
      repositories {
    mavenCentral()
    }
    
    dependencies {
    compile 'com.Android.support:support-v4:23.2.1'
    compile files('libs/opencv.jar') //1.2
    compile files('libs/javacv.jar') //1.2
    compile files('libs/javacpp.jar') //1.2.3
    compile files('libs/ffmpeg.jar') //1.2
    }
    
  • プロジェクトをクリーンアップして再構築します。

リファレンス- kieukhuongthinh's コメント

0
Kalu Khan Luhar