android - targetsdkversion - target sdk 26



Google Play和OpenSSL警告消息 (4)

如果您使用的是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/

我刚刚收到来自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导致此警告?

问候,


Answer #1

我也有这个问题,因为我使用的Facebook SDK的版本没有更新。 因此,如果您也在使用它,只需尝试使用Facebook的SDK v3.21.1的更新版本,并且该警告已解决。


Answer #2

我编写了一个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/*))
# 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/*))
    # 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

Answer #3

根据安全警报Android安全讨论邮件列表中的Eric Davis表示:您正在使用OpenSSL的高度易受攻击的版本

  1. 您可以确定哪些应用正在使用OpenSSL ("$ unzip -p YourApp.apk | strings | grep "OpenSSL"")
  2. 请将所有静态链接的OpenSSL版本更新为1.0.1h,1.0.0m或0.9.8za。 ( 请注意jww :随着新版OpenSSL的发布,这个版本会随着时间的推移而改变)。
  3. 如果您使用捆绑OpenSSL的第三方库,请通知第三方并与他们合作解决此问题。

收到此消息时,您应该更新正在使用的NDK和IDE。 我见过NDK的某些版本的报告,包括一个下层标题。 我还怀疑你使用的IDE可能提供了一个低级的OpenSSL版本(我没有在Android上使用IDE,所以我没有遇到它)。

如果您不直接使用OpenSSL,则SDK会提供易受攻击的OpenSSL版本。 在这种情况下,您应该更新SDK。 如果您需要在SDK中找到下层OpenSSL,请参阅如何检查哪个依赖性导致OpenSSL漏洞 。

谷歌还提供更新您的安全提供程序以防止SSL攻击 ,但我怀疑它仍然会触发该消息,因为它似乎是一个基本的字符串搜索。

它通常更容易更新所有内容,而不是试图找出谁提供了低级版本的OpenSSL。 花费时间确定提供者后,您的可操作项目是相同的:更新SDK。 那么为什么要浪费时间呢? 只需更新所有这些,并享受其他错误修复。

但仍有一些悬而未决的问题:如果使用libcrypto的加密(例如( RAND_bytesEVP_encrypt )而不是EVP_encrypt的SSL / TLS函数(例如, SSL_connect ),它是否仍然会触发警告?也就是说,是谷歌扫描使用易受攻击的功能,或谷歌通过strings扫描OpenSSL版本。





google-play