Google Play和OpenSSL警告消息

时间:2014-06-13 04:32:37

标签: android android-ndk openssl google-play

我刚刚收到来自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的其他地方是否会导致此警告?

此致

5 个答案:

答案 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

  1. 您可以通过("$ unzip -p YourApp.apk | strings | grep "OpenSSL"")
  2. 确定哪些应用正在使用OpenSSL
  3. 请将所有静态链接的OpenSSL版本更新为1.0.1h,1.0.0m或0.9.8za。 ( 请注意jww :随着新版本的OpenSSL发布,此版本会随着时间而改变。)
  4. 如果您使用捆绑OpenSSL的第三方库,请通知第三方并与他们合作解决此问题。
  5. 收到此消息后,您应该更新 两者 您正在使用的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_bytesEVP_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/javacvhttps://github.com/bytedeco/javacpp下载javacv-1.2-bin.zip和javacpp-1.2.3-bin.zip

  • 摘录它们并将ffmpeg.jarjavacpp.jarjavacv.jaropencv.jar复制到[yourproject]\libs

  • 提取ffmpeg-android-arm.jaropencv-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评论