Предупреждение Android Studio при использовании PackageManager.GET_SIGNATURES

Мне нужно получить подпись пакета, и в настоящее время я получаю ее, используя этот код:

Signature[] sigs = c.getPackageManager()
                        .getPackageInfo(c.getPackageName(),
                                        PackageManager.GET_SIGNATURES).signatures;

Однако Android Studio выдает мне это предупреждение:


Чтение подписей приложений из getPackageInfo: подписи приложений могут быть использованы, если они не проверены должным образом; подробности см. в объяснении проблемы.

Неправильная проверка подписей приложений может привести к проблемам, когда вредоносное приложение отправляет себя в Play Store как со своим настоящим сертификатом, так и с поддельным сертификатом и получает доступ к функциям или информации, которых у него не должно быть из-за того, что другое приложение проверяет только поддельный сертификат. и игнорирование остальных. Обязательно проверьте все подписи, возвращаемые этим методом.


Что значит проверять подписи в этом случае? Я собираюсь проверить подписи на сервере, чтобы убедиться, что они совпадают — это то, что они означают?

В локальном тесте все, что он выводит, — это одно отрицательное целое число, а не массив, как это было бы в коде.


person Zoe    schedule 28.08.2016    source источник
comment
Я подал проблему с просьбой предоставить настоящие документы для этого типа вещи. Я бы предположил, что пока ваш алгоритм проверки подписей приличный, все должно быть в порядке. Но, поскольку мне не ясно, о чем они предупреждают, я не могу быть уверен.   -  person CommonsWare    schedule 28.08.2016


Ответы (1)


Отслеживание всплывающего текста приводит к фрагмент исходного кода Android Studio.
В том же файле есть строка, содержащая ссылку на внешний ресурс.
Дальнейшее отслеживание приводит к эта презентация об уязвимости Fake ID.

Описание проблемы:

Проблема в том, что когда Android строит цепочку доверия, процесс проверки сравнивает только «субъект», а не фактический ключ с ключом, указанным в деталях подписавшего сертификат. В результате злоумышленник может возиться с цепочкой доверия и утверждать, что он подписан какой-либо стороной, но на самом деле сторона не подписывает.

Из-за этой ошибки генерируется неправильная цепочка сертификатов, которая может включать законные сертификаты, которые встроены в APK, но не использовались для фактической подписи приложения.

Вот фиксация исходного кода Android. код, предотвращающий использование этой уязвимости. Это означает, что если на устройстве установлен Android 4.4, проблема не возникает. При работе с более низкими устройствами Android API это может причинить вред.

person R. Zagórski    schedule 06.09.2016
comment
Так что это известная ошибка, которая может привести к компрометации сертификата. Исправлено ли это автоматически или необходимо добавить дополнительный код для решения/защиты от него? - person Zoe; 06.09.2016
comment
Начиная с KitKat проблем с заменой или модификацией цепочки сертификатов возникнуть не должно. Но если вы действительно хотите проверить отпечаток сертификата пакета, посмотрите это (может быть полезно для более низкого API устройства). - person R. Zagórski; 06.09.2016