Как определить, какая зависимость вызывает в Google Play предупреждение OpenSSL?
В настоящее время я работаю над большим унаследованным проектом и пытаюсь исправить проблему уязвимости OpenSSL, как описано в разделе Как устранить уязвимости OpenSSL в ваших приложениях.
Проблема в том, что существует множество зависимостей, некоторые из них с открытым исходным кодом (я обновил все, что не нарушало совместимость), добавленные как импорт Gradle, некоторые из них являются пользовательскими / закрытыми исходными кодами, предоставленными партнерами и подрядчиками компании, в которой я работаю, и прикрепленной к проекту в качестве JAR.
Есть ли способ точно определить конкретную библиотеку, которая имеет эту уязвимость? Я использовал скрипт bash, представленный в предупреждающем сообщении Google Play и OpenSSL, и он указывает на одну нативную зависимость (фактически файл.so). Есть ли возможность точно определить фактическую зависимость оттуда?
1 ответ
Есть ли возможность точно определить фактическую зависимость оттуда?
Да, но вам нужно знать версию OpenSSL, которая вас обидела, и вам нужно grep
, Windows find
не буду делать
Во-первых, обратите внимание на оскорбительную версию OpenSSL. Ради аргумента, скажем, что из-за OpenSSL 1.0.1h
,
Затем соберите список ваших зависимостей и их папок верхнего уровня. Ради аргумента, скажи $HOME/Desktop/aosp-app
, $HOME/sdk-a
, /usr/local/sdk-b
а также /opt/local/sdk-c
,
Наконец, для каталогов верхнего уровня:
grep -R '1.0.1h' "$HOME/Desktop/aosp-app"
grep -R '1.0.1h' "$HOME/sdk-a"
grep -R '1.0.1h' /usr/local/sdk-b
grep -R '1.0.1h' /opt/local/sdk-c
Вам не нужно grep -iR
, который является регистронезависимым (-i
) рекурсивный (-R
) поиск. Вам также не нужно grep -IR
, который является рекурсивным (-R
) поиск, который пропускает двоичные файлы (-I
).
Все это работает, потому что библиотека OpenSSL встраивает свою версию в раздел данных в виде строки. В конце концов вы столкнетесь с преступником, который, вероятно, является SDK, который поставляется предварительно собранным как общий объект, но включает в себя OpenSSL в качестве статической библиотеки. Один SDK, кажется, часто идентифицируется, и он использует cURL, который построен на основе статической библиотеки OpenSSL.
Если у вас есть файлы JAR и вы подозреваете их, в качестве быстрого теста вы можете выполнить следующее:
find <dir> -name '*.jar' -exec grep -R '1.0.1h' {} \;
Команда будет смотреть в каталоге <dir>
и его подкаталоги. Он будет искать файлы с *.jar
расширение. Когда он найдет один, он будет работать grep
на нём ищем нить. find
сделаю это для каждого *.jar
это находит.