Je viens de recevoir un e-mail de Google Play indiquant:
Bonjour,
Une ou plusieurs de vos applications exécutent une version obsolète d'OpenSSL, qui a de multiples vulnérabilités de sécurité. Vous devez mettre à jour OpenSSL Dès que possible. Pour plus d'informations sur le plus récent vulnérabilité de sécurité dans OpenSSL, veuillez consulter http://www.openssl.org/news/secadv_20140605.txt .
Veuillez noter qu’il n’est pas clair si ces problèmes spécifiques affectent votre application, les applications avec des vulnérabilités qui exposent les utilisateurs risque de compromission peut être considéré comme un «produit dangereux» et sous réserve de suppression de Google Play.
Cordialement,
Google Play Team
© 2014 Google Inc. 1600 Amphitheatre Parkway, Mountain View, CA 94043
Préférences de courrier électronique: Vous avez reçu ce service de courrier électronique obligatoire annonce pour vous informer des modifications importantes apportées à Google Play Compte.
Je n'ai pas explicitement inclus OpenSSL dans aucune de mes applications. Les applications qui utilisent le NDK Android utilisent NDK 9d (le plus récent). Les seules bibliothèques natives externes que j'utilise sont ffmpeg et OpenCV ainsi que certaines bibliothèques de publicités sans code natif.
Où d'autre OpenSSL pourrait-il être inclus à l'origine de cet avertissement?
Cordialement,
J'ai écrit un script bash qui affiche les versions OpenSSL de tout élément lié de manière statique dans votre application et indique si les méthodes de pulsation TLS sont incluses.
Cela a fonctionné sur une poignée de fichiers APK que j'ai lancés. La chaîne de version OpenSSL est spécifiquement extraite avec un numéro de version et une date. Si Google marque le fichier APK et que celui-ci ne le trouve pas, relâchez l'expression régulière OpenSSL dans la commande egrep pour simplement "OpenSSL" et voyez où cela vous mène.
Mettez ce qui suit dans un fichier, par exemple. testopenssl.sh
utilisation: ./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
Selon Eric Davis sur la liste de diffusion Android Security Discussions en réponse à Alerte de sécurité: vous utilisez une version très vulnérable d'OpenSSL } _:
("$ unzip -p YourApp.apk | strings | grep "OpenSSL"")
Lorsque vous recevez ce message, vous devez mettre à jour à la fois le NDK et IDE que vous utilisez. J'ai vu des rapports de certaines versions du NDK, notamment un en-tête de niveau inférieur. Je soupçonne également le IDE que vous utilisez pourrait fournir une version OpenSSL de bas niveau (je n'utilise pas les IDE sous Android, je ne les ai donc pas rencontrés).
Si vous n'utilisez pas directement OpenSSL, le SDK fournit la version vulnérable d'OpenSSL. Dans ce cas, vous devez mettre à jour votre SDK. Si vous devez localiser OpenSSL de niveau inférieur parmi les kits SDK, reportez-vous à la section Comment vérifier la dépendance à l'origine de la vulnérabilité OpenSSL .
Google fournit également Mise à jour de votre fournisseur de sécurité pour se protéger contre les attaques SSL , mais je suppose que cela déclenchera toujours le message car il semble s'agir d'une recherche de chaîne de base.
Il est souvent plus facile de tout mettre à jour que d'essayer de déterminer qui fournit la version de bas niveau d'OpenSSL. Une fois que vous avez passé du temps à déterminer qui le fournit, votre action est la même: mettre à jour le SDK. Alors pourquoi perdre du temps là-dessus? il suffit de les mettre à jour et de profiter des autres corrections de bugs.
Il reste cependant des questions en suspens: si on utilise la cryptographie de libcrypto
(par exemple (Rand_bytes
ou EVP_encrypt
) et non les fonctions SSL/TLS de libssl
(par exemple, SSL_connect
), déclenchera-t-il toujours l'avertissement? C'est-à-dire Google analyse les fonctions vulnérables ou utilise Google pour la version OpenSSL via strings
.
J'ai aussi ce problème parce que la version du SDK de Facebook que j'utilise n'est pas mise à jour. Donc, si vous l'utilisez aussi, essayez simplement d'utiliser la version mise à jour du SDK v3.21.1 de Facebook, et cet avertissement est résolu.
Si vous utilisez cocos2dx, vous devez mettre à jour la bibliothèque curl. Veuillez télécharger la bibliothèque curl mise à jour ici http://cocostudio.download.appget.cn/Cocos2D-X/curl.Zip
et remplacez-le par la bibliothèque curl actuelle présente dans cocos2dx.
Pour des raisons de sécurité, veuillez également mettre à jour votre version Mac openssl. Pour cela, suivez ce lien http://javigon.com/2014/04/09/update-openssl-in-osx/
J'avais ce problème, j'utilise les fichiers ffmpeg lib et .so, j'ai résolu le problème en procédant comme suit: Tout d'abord, j'utilise Android Studio. Donc, si vous utilisez Eclipse, essayez de trouver votre propre chemin.
La cause du problème est le fichier libavformat.so qui utilise OpenSSL 1.0.2d. Nous devons le mettre à jour. Cependant, la mise à jour de libavformat.so entraînera un crash, il est donc nécessaire de mettre à jour toutes les lib associées (javacv et javacpp).
Téléchargez javacv-1.2-bin.Zip et javacpp-1.2.3-bin.Zip à partir de https://github.com/bytedeco/javacv et https://github.com/bytedeco/javacpp
Extrayez-les et copiez ffmpeg.jar
, javacpp.jar
, javacv.jar
et opencv.jar
dans [yourproject]\libs
.
ffmpeg-Android-arm.jar
et opencv-Android-arm.jar
(retrouvez-les après avoir extrait javacv-1.2-bin.Zip
), vous collecterez une nouvelle version des fichiers .so.[yourproject]\src\main\jniLibs\armeabi-v7a
par la nouvelle version (presque tous les fichiers .so seront remplacés, mais pas tous)javacpp-presets-1.2.pom
dans [yourproject]\libs
. Vous pouvez le rechercher sur Google.Modifier le module build.gradle
de votre projet
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
}
Nettoyer le projet et reconstruire.
Référence- kieukhuongthinh's comment