我刚刚收到来自Google Play的电子邮件说明:
您好,
您的一个或多个应用正在运行过时版本的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的其他地方是否会导致此警告?
此致
答案 0 :(得分:21)
我编写了一个bash脚本,它将显示应用程序中静态链接的任何内容的OpenSSL版本以及是否包含TLS心跳方法。
这对我投入的一些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
答案 1 :(得分:8)
Eric Davis在Android Security Discussions邮件列表上回复Security Alert: You are using a highly vulnerable version of OpenSSL:
("$ unzip -p YourApp.apk | strings | grep "OpenSSL"")
收到此消息后,您应该更新 两者 您正在使用的NDK和IDE。我已经看到NDK的某些版本的报告,包括一个下层标题。我还怀疑你使用的IDE可能会提供一个低级的OpenSSL版本(我不会在Android上使用IDE,所以我没有遇到过它。)
如果 您没有直接使用OpenSSL,那么SDK会提供易受攻击的OpenSSL版本。在这种情况下,您应该更新SDK。如果您需要在SDK中找到下层OpenSSL,请参阅How to check which dependancy causes OpenSSL vulnerability。
Google还提供Updating Your Security Provider to Protect Against SSL Exploits,但我怀疑它仍然会触发该消息,因为它似乎是一个基本的字符串搜索。
通常更容易更新所有内容,而不是试图弄清楚谁在提供OpenSSL的低级版本。花费时间确定提供者后,您的可操作项目是相同的:更新SDK。那么为什么要浪费时间呢?只需更新所有这些,并享受其他错误修复。
但仍有一些悬而未决的问题:如果使用libcrypto
中的加密(例如(RAND_bytes
或EVP_encrypt
)而不使用{{1}中的SSL / TLS函数(例如,libssl
),它是否仍然会触发警告?也就是说,Google会扫描使用易受攻击的功能,还是Google通过SSL_connect
扫描OpenSSL版本。
答案 2 :(得分:2)
我也有这个问题,因为我使用的Facebook版本的SDK没有更新。因此,如果您也在使用它,请尝试使用Facebook的SDK v3.21.1的更新版本,并且该警告已解决。
答案 3 :(得分:1)
如果您使用的是cocos2dx,则需要更新curl库。请从这里下载更新的卷曲库http://cocostudio.download.appget.cn/Cocos2D-X/curl.zip
并将其替换为cocos2dx中存在的当前curl库。
为了安全起见,请更新您的mac openssl版本,为此请点击此链接 http://javigon.com/2014/04/09/update-openssl-in-osx/
答案 4 :(得分:0)
我有这个问题,我使用的是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/bytedeco/javacpp下载javacv-1.2-bin.zip和javacpp-1.2.3-bin.zip
摘录它们并将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评论