Google Play и OpenSSL предупреждение

Я только что получил электронное письмо от Google play с заявлением:

Привет,

В одном или нескольких ваших приложениях установлена ​​устаревшая версия OpenSSL, в которой есть несколько уязвимостей. Вы должны обновить OpenSSL как можно скорее. Для получения дополнительной информации о самой последней уязвимости безопасности в OpenSSL, пожалуйста, смотрите http://www.openssl.org/news/secadv_20140605.txt.

Обратите внимание: хотя неясно, влияют ли эти конкретные проблемы на ваше приложение, приложения с уязвимостями, которые подвергают пользователей риску компрометации, могут считаться "опасными продуктами" и могут быть удалены из Google Play.

С Уважением,

Команда Google Play

©2014 Google Inc. 1600 Амфитеатр Паркуэй Маунтин-Вью, Калифорния 94043

Настройки электронной почты. Вы получили это обязательное уведомление об услуге электронной почты, чтобы информировать вас о важных изменениях в вашем аккаунте Google Play.

Я не включил OpenSSL ни в одно из своих приложений. Приложения, использующие Android NDK, используют NDK 9d (последний). Единственные внешние нативные библиотеки, которые я использую, - это ffmpeg и OpenCV, а также некоторые рекламные библиотеки, в которые не включен нативный код.

Где еще можно включить OpenSSL, вызывая это предупреждение?

С Уважением,

5 ответов

Я написал сценарий bash, который будет отображать версии OpenSSL всего, что статически связано в вашем приложении, и указывать, включены ли методы пульса TLS.

Это сработало на нескольких APK, которые я скинул. Строка версии OpenSSL специально извлекается с номером версии и датой. Если Google помечает APK и это не может найти его, ослабьте регулярное выражение OpenSSL в команде egrep до значения "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/*))
#Stackru 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/*))
    #Stackru 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

По словам Эрика Дэвиса из списка рассылки " Обсуждение безопасности Android" в ответ на предупреждение системы безопасности: вы используете очень уязвимую версию 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 (я не использую IDE на Android, поэтому я не сталкивался с ней).

Если вы не используете OpenSSL напрямую, то SDK предоставляют уязвимую версию OpenSSL. В этом случае вам следует обновить SDK. Если вам нужно найти OpenSSL нижнего уровня среди SDK, см. Как проверить, какая зависимость вызывает уязвимость OpenSSL.

Google также предоставляет Обновление вашего провайдера безопасности для защиты от эксплойтов SSL, но я подозреваю, что оно все равно вызовет сообщение, потому что оно выглядит как обычный поиск строки.

Часто проще обновить все, чем пытаться выяснить, кто предоставляет версию OpenSSL для нижнего уровня. После того, как вы потратите время на определение того, кто его предоставляет, ваш элемент действия остается прежним: обновите SDK. Так зачем тратить на это время; просто обновите их и наслаждайтесь другими исправлениями ошибок.


Тем не менее, остаются открытые вопросы: если кто-то использует криптографию из libcrypto (например (RAND_bytes или же EVP_encrypt), а не функции SSL/TLS из libssl (например, SSL_connect), это все еще вызовет предупреждение? То есть, Google сканирует на предмет использования уязвимых функций или Google сканирует версию OpenSSL через strings,

У меня также есть эта проблема, потому что версия SDK Facebook, которую я использую, не обновляется. Так что, если вы используете его тоже, просто попробуйте использовать обновленную версию SDK Facebook v3.21.1, и это предупреждение устранено.

Если вы используете cocos2dx, вам нужно обновить библиотеку curl. Пожалуйста, загрузите обновленную библиотеку curl отсюда http://cocostudio.download.appget.cn/Cocos2D-X/curl.zip

и замените его текущей библиотекой curl, присутствующей в cocos2dx.

В целях безопасности обновите также версию Mac OpenSSL, перейдите по этой ссылке http://javigon.com/2014/04/09/update-openssl-in-osx/

У меня была эта проблема, я использую файлы ffmpeg lib и.so, я решил проблему с помощью следующих шагов: во-первых, я использую Android Studio. Итак, если вы используете Eclipse, попробуйте найти свой собственный путь.

Причиной проблемы является файл libavformat.so, использующий OpenSSL 1.0.2d. Нам нужно обновить его. Но простое обновление libavformat.so вызовет сбой, поэтому нам нужно обновить все связанные lib (javacv и javacpp).

  • Загрузите javacv-1.2-bin.zip и javacpp-1.2.3-bin.zip с веб-сайтов https://github.com/bytedeco/javacv и https://github.com/bytedeco/javacpp

  • Распакуйте их и скопируйте ffmpeg.jar, javacpp.jar, javacv.jar а также opencv.jar в [yourproject]\libs,

  • экстракт ffmpeg-android-arm.jar а также opencv-android-arm.jar (найти их после извлечения javacv-1.2-bin.zip), вы будете собирать новую версию.so файлов.
  • Заменить старые файлы в [yourproject]\src\main\jniLibs\armeabi-v7a с новой версией (просто почти.so файлы будут заменены, а не все)
  • Иногда вам нужно скопировать javacpp-presets-1.2.pom подать в [yourproject]\libs, тоже. Вы можете найти его в Google.
  • Модифицировать модуль build.gradle вашего проекта

    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
    }
    
  • Очистить проект и восстановить.

Ссылка - комментарий kieukhuongthinh

Другие вопросы по тегам