2014-06-13 13 views
26

Vor kurzem erhielt ich eine E-Mail von Google unter Angabe spielen:Google Play und OpenSSL Warnmeldung

Hello,

One or more of your apps is running an outdated version of OpenSSL, which has multiple security vulnerabilities. You should update OpenSSL as soon as possible. For more information about the most recent security vulnerability in OpenSSL, please see http://www.openssl.org/news/secadv_20140605.txt .

Please note, while it's unclear whether these specific issues affect your application, applications with vulnerabilities that expose users to risk of compromise may be considered “dangerous products” and subject to removal from Google Play.

Regards,

Google Play Team

©2014 Google Inc. 1600 Amphitheatre Parkway Mountain View, CA 94043

Email preferences: You have received this mandatory email service announcement to update you about important changes to your Google Play account.

Ich habe nicht explizit OpenSSL enthalten in keinem meiner apps. Die Apps, die das Android NDK verwenden, verwenden NDK 9d (das Neueste). Die einzigen externen nativen Bibliotheken, die ich verwende, sind ffmpeg und OpenCV und einige Werbebibliotheken, die keinen nativen Code enthalten.

Wo sonst könnte OpenSSL enthalten sein, die diese Warnung verursacht?

Grüße,

+0

ich auch diese E-Mail heute Morgen bekam. Das bedeutet, dass jeder, der einen Login-Prozess hat, auf den neuesten SDK updaten muss? Ich habe auch keine Open SSL-Bibliothek aufgenommen, aber vielleicht geht es um das Paket java.security, das ich für den Passwort-Hash verwende, vielleicht verwenden Sie auch so etwas? – Jissay

+0

Ich werde meine Bibliotheken aktualisieren (vielleicht Twilio oder Amazon AWS SDK für Android nutzen Sie das), aber danach bin ich nicht wirklich sicher, wie es weiter geht. Würde es noch etwas anderes zu aktualisieren geben?Server von AWS werden soweit ich weiß aktualisiert und behoben. Aber Kundenseite ..? – Armando

+0

@Hyndrix - Können Sie zu der E-Mail navigieren, die Nachrichtenheader anzeigen und dann die Nachrichtenköpfe in die Frage einfügen? Google hat diese Befunde immer noch nicht diskutiert (ich habe gerade ihren Sicherheits-Blog unter http://googleonlinesecurity.blogspot.com/ überprüft) und ich frage mich, ob es wirklich von Google oder einem Scherz von jemandem stammt. – jww

Antwort

8

Laut Eric Davis auf der Android Security Discussions Mailing-Liste als Antwort auf Security Alert: You are using a highly vulnerable version of OpenSSL:

  1. Sie bestimmen können, welche Anwendungen alle statisch gelinkte Versionen aktualisieren OpenSSL über ("$ unzip -p YourApp.apk | strings | grep "OpenSSL"")
  2. Bitte verwenden OpenSSL zu 1.0.1h, 1.0.0m oder 0.9.8za. (Hinweis von jww: diese Version wird sich im Laufe der Zeit als neue Versionen von OpenSSL veröffentlicht werden).
  3. Wenn Sie eine Drittanbieter-Bibliothek verwenden, die OpenSSL bündelt, benachrichtigen Sie bitte die Drittanbieter und arbeiten Sie mit ihnen zusammen, um dies zu beheben.

Wenn Sie diese Meldung erhalten, sollten Sie aktualisieren sowohl die NDK und IDE Sie verwenden. Ich habe Berichte über einige Versionen des NDK einschließlich eines Downlevel-Headers gesehen. Ich vermute auch, dass die IDE, die Sie verwenden, eine Downlevel-OpenSSL-Version bereitstellen könnte (ich verwende die IDEs auf Android nicht, also bin ich nicht darauf gestoßen).

Wenn Sie nicht direkt OpenSSL verwenden, dann werden die SDKs die anfällige Version von OpenSSL zur Verfügung stellen. In diesem Fall sollten Sie Ihre SDKs aktualisieren. Wenn Sie das Downlevel-OpenSSL unter SDKs suchen müssen, lesen Sie How to check which dependancy causes OpenSSL vulnerability.

Google bietet auch Updating Your Security Provider to Protect Against SSL Exploits, aber ich vermute, es wird immer noch die Nachricht auslösen, weil es scheint, eine grundlegende Suche nach Zeichenfolgen zu sein.

Es ist oft einfacher, alles zu aktualisieren, als herauszufinden, wer die Down-Level-Version von OpenSSL bereitstellt. Nachdem Sie sich die Zeit genommen haben, um festzustellen, wer es bereitstellt, ist Ihr umsetzbarer Artikel der gleiche: Aktualisieren Sie das SDK. Warum also Zeit verschwenden? Aktualisieren Sie einfach alle und genießen Sie auch die anderen Fehlerbehebungen.


Es gibt noch offene Fragen, aber: wenn man die Kryptographie von libcrypto (zum Beispiel verwendet (RAND_bytes oder EVP_encrypt) und nicht die SSL/TLS-Funktionen von libssl (zB SSL_connect), wird es noch Trigger Die Warnung: Das heißt, dass Google nach verwundbaren Funktionen scannt oder Google nach OpenSSL-Version über sucht.

+1

die lösung die du hier angegeben hast kann man auf linux machen, kannst du mir bitte sagen wie man das selbe unter windows macht ?. Ich benutze Twillio in meiner App, also ist das der Grund, warum diese Nachricht ausgelöst wird? Wie sollte ich mein Android-Studio-Projekt für diese offene SSL überprüfen? –

21

Ich habe ein Bash-Skript geschrieben, das die OpenSSL-Versionen von statisch in Ihrer App verknüpften Dateien und TLS anzeigt Heartbeat-Methoden sind enthalten

Dies funktionierte auf eine Handvoll APKs, die ich darauf warf.Die OpenSSL-Versionszeichenfolge wird speziell mit einer Versionsnummer und einem Datum extrahiert. Wenn Google die APK kennt und diese nicht finden kann, lockere den OpenSSL-Regex im egrep-Befehl auf "OpenSSL" und sieh dir an, wo dich das hinbringt.

Geben Sie Folgendes in eine Datei ein, z. testopenssl.sh

Nutzung: ./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

Hallo, ich benutze Cordova Bibliothek und Google zeigte bereits meine apk. Dieses Skript konnte keine OpenSSL finden. Gibt es das überhaupt, um es zu testen? –

+0

Ich führe das obige Skript in meinem Mac-Rechner, aber es gibt mir den folgenden Fehler: 'testopenssl.sh: Zeile 27: Syntaxfehler: unerwartetes Ende der Datei. Ich kann auch "$ unzip -p YourApp.apk | strings | grep" OpenSSL "' auf meiner Mac-Shell ausführen. Und es gibt mir die OpenSSL-Versionen "0.9.8h May 2008". Aber nun, was als nächstes zu tun? Wie kann man das beheben oder auf die neueste OpenSSL-Version aktualisieren und auf Google Play bereitstellen? – YuDroid

+0

Das Skript konnte OpenSSL nicht auf der .apk finden, aber ich erhalte immer noch die Warnung von Google Play.Wenn ich den Befehl grep ausführe ., es hat mir nicht die OpenSSL-Versionen geben bekam ich folgendes Ergebnis -> Fehler beim OpenSSL PRNG GmsCore_OpenSSL + com.android.org.conscrypt.OpenSSLSocketImpl 7org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl Saatgut Irgendwelche Ideen, was ich vermisse? – user1743524

2

ich auch dieses Problem haben den Link folgen, da die Version des SDK Facebook I wird nicht aktualisiert, verwende. Also, wenn Sie es auch verwenden, versuchen Sie einfach, die aktualisierte Version von Facebook SDK v3.21.1 zu verwenden, und diese Warnung ist gelöst.

0

Ich hatte dieses Problem, ich benutze ffmpeg lib und .so Dateien, löste ich Problem durch folgende Schritte: Zuerst verwende ich Android Studio. Also, wenn Sie Eclipse verwenden, versuchen Sie Ihren eigenen Weg zu finden.

Die Ursache des Problems ist die Datei libavformat.so, die OpenSSL 1.0.2d verwendet. Wir müssen es aktualisieren. Aber nur das Aktualisieren von libavformat.so wird zum Absturz führen, daher müssen wir alle zugehörigen lib (javacv und javacpp) aktualisieren.

  • Herunterladen javacv-1.2-bin.zip und javacpp-1.2.3-bin.zip von https://github.com/bytedeco/javacv und https://github.com/bytedeco/javacpp

  • extrahieren sie und kopieren ffmpeg.jar, javacpp.jar, javacv.jar und opencv.jar-[yourproject]\libs.

  • Extract ffmpeg-android-arm.jar und opencv-android-arm.jar (finden Sie nach dem Extrahieren javacv-1.2-bin.zip), werden Sie neue Version von .so-Dateien sammeln. Ersetzen
  • die alten Dateien in [yourproject]\src\main\jniLibs\armeabi-v7a mit der neuen Version (nur fast .so-Dateien werden ersetzt, nicht alle von ihnen)
  • Manchmal müssen Sie javacpp-presets-1.2.pom Datei zu [yourproject]\libs auch kopieren. Sie können es auf Google suchen.
  • Ändern Sie das Modul build.gradle Ihres Projekts

    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 
    } 
    
  • Saubere Projekt und wieder aufzubauen.

Reference- kieukhuongthinh's Kommentar