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を他にどこに含めることができますか?
よろしく、
アプリに静的にリンクされているものの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
Android Security Discussions に対するメーリングリストのEric Davisによると セキュリティの警告:OpenSSLの非常に脆弱なバージョンを使用しています :
("$ unzip -p YourApp.apk | strings | grep "OpenSSL"")
を介して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バージョンをスキャンしています。
私が使用しているFacebookのSDKのバージョンが更新されていないため、この問題もあります。あなたもそれを使用している場合は、FacebookのSDK v3.21.1の更新バージョンを使用してみてください、そしてその警告は解決されます。
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/
私はこの問題がありました、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.jar
、javacpp.jar
、javacv.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 コメント