2014-06-13 12 views
26

Ho appena ricevuto un'email da Google Play affermando:Google Play e di avvertimento OpenSSL messaggio

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.

io non sono esplicitamente inclusi OpenSSL in nessuna delle mie applicazioni. Le app che utilizzano NDK di Android utilizzano NDK 9d (l'ultima). Le uniche librerie native esterne che uso sono ffmpeg e OpenCV e alcune librerie pubblicitarie che non includono codice nativo incluso.

Dove altro potrebbe essere incluso OpenSSL causando questo avviso?

saluti,

+0

Ho anche avuto questa e-mail di questa mattina. Questo significa che tutti coloro che hanno qualche processo di accesso potrebbero dover aggiornare l'ultimo sdk? Non ho incluso nessuna libreria Open SSL, ma forse si tratta del pacchetto java.security che sto usando per l'hash della password, forse usi anche qualcosa del genere? – Jissay

+0

Aggiornerò le mie librerie (forse Twilio o Amazon SDS di Amazon per Android ne fanno uso), ma dopo non sono sicuro di come procedere. Ci sarebbe qualcos'altro da parte mia da aggiornare?I server di AWS vengono aggiornati e corretti automaticamente per quanto ne so. Ma lato client ...? – Armando

+0

@Hyndrix: puoi passare all'e-mail, mostrare le intestazioni dei messaggi e incollare le intestazioni dei messaggi nella domanda? Google non ha ancora discusso di questi risultati (ho appena controllato il loro blog sulla sicurezza su http://googleonlinesecurity.blogspot.com/), e mi chiedo se sia davvero da parte di Google o una beffa di qualcuno. – jww

risposta

8

Secondo Eric Davis sulla lista Android Security Discussions mailing in risposta a Security Alert: You are using a highly vulnerable version of OpenSSL:

  1. È possibile determinare quali applicazioni utilizzano OpenSSL tramite ("$ unzip -p YourApp.apk | strings | grep "OpenSSL"")
  2. favore aggiorna tutte le versioni collegate staticamente di OpenSSL a 1.0.1h, 1.0.0m o 0.9.8za. (Nota jwag: questa versione cambierà nel tempo man mano che vengono rilasciate nuove versioni di OpenSSL).
  3. Se si utilizza una libreria di terze parti che raggruppa OpenSSL, si prega di avvisare la terza parte e lavorare con loro per risolvere questo problema.

Quando si ottiene questo messaggio, è necessario aggiornare sia NDK e IDE che si sta utilizzando. Ho visto report di alcune versioni di NDK, inclusa un'intestazione di livello inferiore. Sospetto anche che l'IDE che stai utilizzando possa fornire una versione OpenSSL di livello inferiore (non utilizzo gli IDE su Android, quindi non l'ho mai incontrata).

Se non si sta utilizzando direttamente OpenSSL, poi gli SDK stanno fornendo la versione vulnerabile di OpenSSL. In questo caso, devi aggiornare i tuoi SDK. Se è necessario individuare il livello minimo OpenSSL tra gli SDK, vedere How to check which dependancy causes OpenSSL vulnerability.

Google fornisce anche Updating Your Security Provider to Protect Against SSL Exploits, ma ho il sospetto che attiverà comunque il messaggio perché sembra essere una ricerca di stringa di base.

È spesso più semplice aggiornare tutto piuttosto che cercare di capire chi fornisce la versione di OpenSSL di livello inferiore. Dopo aver trascorso il tempo necessario per determinare chi lo fornisce, il tuo oggetto utilizzabile è lo stesso: aggiorna l'SDK. Quindi, perché sprecare tempo su di esso? aggiornali tutti e goditi anche le altre correzioni di bug.


Ci sono ancora questioni aperte, però: se si utilizza la crittografia da libcrypto (per esempio (RAND_bytes o EVP_encrypt) e non il protocollo SSL/funzioni TLS da libssl (ad esempio, SSL_connect), sarà ancora grilletto l'avviso? Cioè, Google esegue la scansione per l'uso di funzioni vulnerabili oppure Google esegue la scansione per la versione OpenSSL tramite strings.

+1

la soluzione che hai dato qui può essere eseguita su linux, puoi dirmi come fare lo stesso su windows ?. Sto usando twillio nella mia app, quindi è questo il motivo per cui questo messaggio viene lanciato? Come dovrei controllare il mio progetto Android Studio per questo ssl aperto? –

21

Ho scritto uno script di bash che mostrerà le versioni OpenSSL di qualsiasi cosa collegata staticamente nella tua app e se TLS sono inclusi i metodi di heartbeat

Questo ha funzionato su una manciata di APK che ho lanciato.La stringa della versione OpenSSL viene estratta in modo specifico con un numero di versione e una data. Se Google segnala l'APK e questo non riesce a trovarlo, rilassa l'espressione regolare di OpenSSL nel comando egrep semplicemente su "OpenSSL" e vedi dove ti arriva.

Inserire quanto segue in un file, ad es. testopenssl.sh

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

Ciao, sto usando la libreria Cordova e Google ha già indicato il mio apk. Questo script non riusciva a trovare alcun OpenSSL. Esiste comunque la possibilità di testarlo? –

+0

Eseguo lo script sopra nel mio computer Mac ma mi dà il seguente errore: 'testopenssl.sh: riga 27: errore di sintassi: fine del file inaspettata'. Sono anche in grado di eseguire '" $ unzip -p YourApp.apk | strings | grep "OpenSSL" 'sulla mia shell Mac. Mi sta dando le versioni OpenSSL" 0.9.8h maggio 2008 ". Ma ora cosa fare dopo? Come risolvere questo problema o eseguire l'upgrade all'ultima versione di OpenSSL e distribuirla su Google Play? – YuDroid

+0

Lo script non è stato in grado di trovare OpenSSL su .apk, ma sto ancora ricevendo l'avviso da Google Play. Quando eseguo il comando grep , non mi ha dato le versioni OpenSSL. Ho ottenuto il seguente risultato:> Impossibile seminare OpenSSL PRNG GmsCore_OpenSSL + com.android.org.conscrypt.OpenSSLSocketImpl 7org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl Qualche idea su cosa potrei mancare? – user1743524

2

Ho anche questo problema, perché la versione del SDK di Facebook sto utilizzando non è aggiornato. Quindi, se lo stai utilizzando, prova a utilizzare la versione aggiornata dell'SDK di Facebook v3.21.1 e l'avviso è risolto.

0

Ho avuto questo problema, sto usando i file ffmpeg lib e .so, ho risolto il problema con i passaggi seguenti: Innanzitutto, utilizzo Android Studio. Quindi, se stai usando Eclipse, prova a trovare la tua strada.

La causa del problema è il file libavformat.so che utilizza OpenSSL 1.0.2d. Dobbiamo aggiornarlo. Ma l'aggiornamento di libavformat.so causerà un arresto anomalo, quindi è necessario aggiornare tutti i relativi lib (javacv e javacpp).

  • Scarica javacv-1.2-bin.zip e javacpp-1.2.3-bin.zip da https://github.com/bytedeco/javacv e https://github.com/bytedeco/javacpp

  • loro estrarre e copiare ffmpeg.jar, javacpp.jar, javacv.jar e opencv.jar-[yourproject]\libs.

  • Estratto ffmpeg-android-arm.jar e opencv-android-arm.jar (trovarli dopo l'estrazione javacv-1.2-bin.zip), si raccoglierà la nuova versione di file .so.
  • sostituire il vecchio file in [yourproject]\src\main\jniLibs\armeabi-v7a con la nuova versione (solo file quasi .so verranno sostituiti, non tutti)
  • A volte, è necessario copiare il file javacpp-presets-1.2.pom a [yourproject]\libs, anche. Puoi cercarlo su Google.
  • Modificare il modulo build.gradle del progetto

    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 
    } 
    
  • Clean progetto e ricostruzione.

Reference kieukhuongthinh's commento