我刚刚发现一条安全警报,上面写着“您的应用正在使用包含安全漏洞的OpenSSL版本。”以及本文的链接:
我做了一个grep命令来查找apk中使用的OpenSSL版本
unzip -p YourApp.apk | strings | grep "OpenSSL"
我发现该应用正在使用OpenSSL 1.0.1k 8 Jan 2015
问题是,我没有明确使用任何OpenSSL类,我没有依赖它。所以可能其他一些依赖项是使用旧的OpenSSL版本,但我不知道,我怎么能找到使用OpenSSL依赖的库。
我尝试使用此命令./../gradlew -q dependencies
找到正在使用OpenSSL的库
但是根本没有任何OpenSSL ..
答案 0 :(得分:0)
对于使用完整依赖项列表的应用程序,我遇到了此问题。经过多次寻找答案后,这对我有用:
我创建了一个名为findopenssl.sh的脚本(我在另一个SO的答案中发现了这个,但没有引用给作者的信用 - 同样,将myhomedirectory更改为你想要工作的目录,我用我的家文件夹,因为它只是使终端生活更轻松)。此脚本将识别apk中引用OpenSSL的文件以及实现被视为安全风险的Heartbeat函数的文件:
#!/bin/bash
sslworkdir=“myhomedirectory”
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
我将apk复制到我的主目录,并在终端窗口中运行脚本:
sh findopenssl.sh myappname.apk
在我的例子中,这确定了一个名为libportsip_core.so的库文件,它引用了旧版本的openssl。
我找到了两个版本的libportsip_core.so(armv7和x86)并删除了它们。然后我再次清理,重建和构建我的apk并再次运行脚本。那时很好,我成功提交到Play商店。