Подтвердить что ты не робот

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

Я только что получил письмо от Google, в котором говорится:

Здравствуйте,

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

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

Привет,

Команда Google Play

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

Настройки электронной почты: вы получили эту обязательную почтовую службу объявление о необходимости внесения изменений в Google Play счет.

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

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

Привет,

4b9b3361

Ответ 1

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

Это работало на нескольких APK, которые я бросил на него. Строка версии OpenSSL специально выделяется с номером версии и датой. Если Google помещает флажок APK, и это не может найти его, расслабьте регулярное выражение OpenSSL в команде egrep, чтобы просто "OpenSSL", и посмотрите, откуда это вы.

Поместите следующее в файл, например. testopenssl.sh

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

Ответ 2

По словам Эрика Дэвиса в разделе анонса Android Security в ответ на Предупреждение безопасности. Вы используете уязвимую версию OpenSSL:

  • Вы можете определить, какие приложения используют OpenSSL через ("$ unzip -p YourApp.apk | strings | grep "OpenSSL"")
  • Обновите все статически связанные версии OpenSSL до 1.0.1h, 1.0.0m или 0.9.8za. ( Примечание от jww: эта версия со временем изменится по мере выпуска новых версий OpenSSL).
  • Если вы используете стороннюю библиотеку, которая связывает 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.

Ответ 3

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

Ответ 4

Если вы используете 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/

Ответ 5

У меня была эта проблема, я использую файлы 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