Выводы и условия принятия решения
- Успешная установка, успешная проверка подписи и идентичность официального издателя - это три независимых суждения; первые два не могут заменять третье.
- Переподписанные пакеты обычно не могут обновить официальную версию, установленную под другой идентичностью подписи; цепочка обновлений является критическим контрольным пунктом для выявления аномальных артефактов.
- Итоговый APK должен фиксировать имя пакета, версию, дайджест сертификата, дайджест файла, источник сборки и порядок обработки канала.
- Сервер должен поддерживать белый список разрешённых версий и идентичностей приложений, рассматривая сигналы целостности платформы как входные данные для оценки рисков, а не полагаясь на данные, сообщаемые самим клиентом.
Различайте проверку установки, идентичность подписи и бизнес-авторизацию
Android требует подписи APK. Система проверяет, подтверждают ли структура пакета установщика и данные подписи, что текущее содержимое было подписано соответствующим закрытым ключом. Если злоумышленник модифицирует DEX-файлы, ресурсы или Manifest, а затем полностью переподписывает результат своим ключом, новый пакет становится криптографически самосогласованным и может удовлетворять условиям для чистой установки.
Этот результат отвечает лишь на вопрос, имеет ли текущий пакет проверяемую подпись; он не отвечает на вопрос, является ли подписант официальным издателем. Авторизация бренда, легитимные каналы распространения, права входа в учётную запись и доступ к интерфейсам повышенного риска - это бизнес-задачи, которые приложение и сервер должны оценивать отдельно.
Следовательно, отчёты о тестировании не должны приравнивать «возможность установки после переподписи» к «сбою защиты подписи», а «неудачу установки» - к «полному устранению рисков переупаковки». Правильные вопросы таковы: Может ли модифицированный пакет попасть на устройства пользователей? Может ли он выдать себя за официальную версию при обновлении? Может ли он подключиться к реальным сервисам? И как сервер идентифицирует и обрабатывает такие случаи?
| Суждение | На какой вопрос отвечает | Требуемые доказательства | Вывод, который нельзя экстраполировать |
|---|---|---|---|
| Пакет поддаётся разбору | Может ли установщик прочитать структуру файла? | Результат работы установщика, Manifest и структура ресурсов | Не доказывает легитимность подписи или безопасность кода |
| Текущая подпись самосогласована | Подписано ли текущее содержимое закрытым ключом, соответствующим текущему сертификату? | Проверка схемы подписи и дайджест сертификата | Не доказывает, что сертификат принадлежит официальному субъекту |
| Непрерывность идентичности при обновлении | Можно ли обновить уже установленное официальное приложение поверх существующего? | Выполнение обновления с реальной рабочей версии | Не доказывает, что все бизнес-интерфейсы отвергнут аномальные клиенты |
| Бизнес-авторизация пройдена | Разрешает ли сервер учётной записи и версии доступ к ресурсам? | Политики версии, учётной записи, целостности и поведения на стороне сервера | Не гарантирует, что код клиента защищён от анализа или модификации |
Почему переподписанные пакеты часто допускают только чистую установку
Android использует идентичность подписи приложения для обеспечения непрерывности обновлений. При установке обновления поверх существующей версии платформа должна подтвердить, что новая версия соответствует правилам идентичности подписи относительно текущей. Модифицированный пакет, подписанный посторонним сертификатом, обычно не может быть установлен поверх официальной версии напрямую; это требует предварительного удаления официального приложения, изменения имени пакета или установки пользователем в отдельной среде.
Именно поэтому тестирование переупаковки должно включать как чистую установку, так и обновление поверх существующей версии. Тестирование только чистой установки пропускает проверки непрерывности подписи, а тестирование только обновлений упускает сценарии проникновения поддельных пакетов через другие имена пакетов или циклы удаления и повторной установки. Результаты для обоих сценариев необходимо фиксировать отдельно.
Ротация подписей и Play App Signing усложняют цепочку выпуска. Команды должны сохранять текущие и исторически допустимые идентификаторы сертификатов, правила ротации, а также разграничивать ответственность ключей загрузки и ключей подписи приложений. Серверные политики должны использовать данные, соответствующие методу дистрибуции. Сертификаты разработки, загрузки и финальной дистрибуции никогда не должны смешиваться в одном поле.
- Выполнить обновление поверх текущей рабочей версии
- Выполнить чистую установку после удаления
- Проверить изменения имени пакета и влияние на каталог данных
- Верифицировать ротацию сертификатов согласно правилам платформы дистрибуции
Управление переупаковкой должно начинаться с идентификации финального артефакта
Команды часто сохраняют только номер сборки, игнорируя запись дайджеста файла финального APK и дайджеста подписывающего сертификата. Инъекция ресурсов канала, выравнивание, переподпись или оптимизация пакета могут изменить финальный файл. Если сканирование безопасности анализирует артефакты до канальной обработки, файлы, получаемые конечными пользователями, не покрываются теми же доказательствами.
Рекомендуем генерировать однозначные записи артефактов для каждого кандидата на выпуск: имя пакета, versionCode, versionName, SHA-256 файла, SHA-256 сертификата, результат верификации схемы подписи, источник сборки, канал, порядок обработки и временную метку генерации. Статические проверки, установка обновлений, функциональное регрессионное тестирование и серверные правила допуска должны ссылаться на эту запись.
Дайджесты файлов сами по себе не являются мерами защиты; их ценность заключается в предотвращении незаметного изменения тестируемого объекта в ходе рабочего процесса. Любое изменение дайджеста, подписи или последовательности каналов указывает на новый кандидат на выпуск, требующий повторного выполнения затронутых контрольных точек.
artifact:
package: com.example.redacted
version_code: 240
version_name: 2.4.0
sha256: REDACTED
signing:
certificate_sha256: REDACTED
schemes: [v2, v3]
distribution: managed-channel
pipeline:
- build-release
- harden-candidate
- channel-resources
- final-sign
acceptance:
install_fresh: required
upgrade_from_production: required
server_policy_check: requiredСерверы должны рассматривать аномальных клиентов как проблему политик безопасности
Клиенты могут передавать имена пакетов, версии, сертификаты или материалы целостности, однако модифицированные клиенты способны подделывать эти стандартные поля отчётности. Серверы должны отдавать приоритет верифицируемым сигналам, объединяя статус учётной записи, версию, поведение запросов, риски устройства и среду дистрибуции в единую политику, вместо того чтобы доверять одиночному булевому значению от клиента.
Play Integrity может возвращать вердикты относительно распознавания приложения, целостности устройства, лицензирования учётной записи и рисков среды. Официальная документация отмечает, что некоторые сигналы могут быть недоступны из-за версии ОС, форм-фактора устройства, источника дистрибуции, состояния сервисов Play или конфигурации. Правильный подход - моделировать состояния «недоступно», «ошибка» и «высокий риск» отдельно, предусматривая стратегии деградации, дополнительной верификации, ограничения привилегий или отказа в доступе.
Сценарии дистрибуции вне Google Play не могут просто копировать сигналы, эксклюзивные для Play. Корпоративная дистрибуция, внутренние каналы и частная доставка требуют создания собственных списков разрешённых версий, сопоставлений сертификатов, механизмов обновлений и процедур обработки аномалий. Сигналы платформы являются частью доказательной базы, а не универсальным решением для всех каналов.
| Входные данные | Метод верификации | Возможные состояния | Рекомендуемые действия |
|---|---|---|---|
| Версия и имя пакета | Сверка с реестром релизов и правилами каналов | Разрешено, истекло, неизвестно | Разрешить, запросить обновление, ограничить высоко рискованные возможности |
| Сигнал распознавания приложения | Проверка подписи, возвращенной платформой, и результатов идентификации приложения | Идентифицировано, не идентифицировано, недоступно | Нормальный режим, запрос подтверждения или ограничение, деградация функционала по каналу |
| Учетная запись и лицензирование | Серверные права доступа учетных записей и лицензии распространения | Действительно, истекло, аномально | Авторизация или отказ на основе области ресурсов |
| Поведение запросов | Частота, повторное воспроизведение, изменения устройства и бизнес-контекст | Нормальный, подозрительный, высокий риск | Логирование, дополнительная проверка, ограничение частоты или блокировка |
| Устройство и окружение | Вердикты платформы и проприетарные правила оценки рисков | Условия выполнены, слабый сигнал, неизвестно | Градуированная оценка риска вместо абсолютного суждения по одной точке |
Некорректная последовательность релиза аннулирует предыдущие проверки
Изменение DEX, ресурсов или манифеста после финальной подписи нарушает целостность данных, покрытых подписью; пересборка или повторная подпись после сканирования разрывает связь между выводами сканера и итоговым файлом. Если инструменты обработки каналов требуют модификации тела пакета, это должно быть выполнено до финальной подписи, а последовательность зафиксирована в реестре артефактов.
Распространение через AAB дополнительно разделяет загруженные артефакты и сплит-APK, получаемые устройствами пользователей. Командам следует загружать или получать фактически доставленные артефакты с платформы распространения для выборочных проверок, подтверждая соответствие имен пакетов, версий, идентичности подписей и ключевых ресурсов записям релиза. Локально сгенерированные универсальные APK не могут автоматически представлять все конфигурации устройств.
Пакеты отката также должны проходить ту же проверку подписи и валидацию обновления. В случае инцидента временная повторная подпись старого файла может привести к сбою установки поверх существующей версии из-за несоответствия номеров версий, подписей или требований миграции данных.
| Этап | Входные данные | Выходные доказательства | Основные условия сбоя |
|---|---|---|---|
| Сборка релиза | Замороженный исходный код и зависимости | Запись сборки и базовые артефакты | Невоспроизводимые зависимости или конфигурация |
| Обработка упрочнения (hardening) | Явная конфигурация защиты | Версия конфигурации и кандидаты артефактов | Несоответствие объекта обработки целевой версии |
| Обработка каналов | Ресурсы канала и информация о соответствии | Кандидаты артефактов канала | Изменение содержимого после подписания |
| Финальное подписание | Контролируемые ключи и финальное тело пакета | Дайджест сертификата и результат проверки подписи | Использование неверного ключа или окружения |
| Приемочный релиз | Уникальный итоговый файл | Шлюзы установки, обновления, бизнес-логики и серверной стороны | Подмена принятых объектов другими файлами |
Как определить, что риск переупаковки находится под контролируемым управлением публикации
Публикуемый вывод не означает, что модифицированные пакеты никогда не смогут установиться. Это означает, что идентичность официального артефакта поддаётся аудиту, аномальные артефакты не могут silently перезаписать официальные версии, сервер способен идентифицировать или ограничивать недоверенных клиентов, у пользователей есть пути получения подлинных версий и восстановления, а команды могут проводить аудит файлов финальной доставки.
Тесты должны сохранять доказательства как для успешных сценариев, так и для путей сбоя. Успешные сценарии включают нормальную установку и обновление официальных версий, вход в систему и ключевые бизнес-процессы. Сценарии аномалий включают обновление поверх версий с нерелевантными сертификатами, доступ неизвестных версий к высоко рискованным интерфейсам, работу с истекшими версиями, отсутствие сигналов целостности и восстановление после ложных срабатываний. Проверка только отказа без процесса восстановления загоняет реальных пользователей в неразрешимое состояние.
Данная статья не утверждает, что какая-либо технология упрочнения сама по себе способна предотвратить все установки с повторной подписью. Управление переупаковкой - это задача системной инженерии, совместно решаемая за счет управления подписями, контроля обновлений, управления артефактами, устойчивости клиента, сигналов платформы и политик серверной стороны.
- Идентичность официального артефакта может быть независимо проверена
- Аномальные сертификаты не могут silently перезаписать официальные установки
- Сервер имеет градуированные политики для неизвестных клиентов
- Пользователи могут вернуться к доверенным каналам релиза
- Пакеты отката прошли предварительную проверку обновления
Доказательства и границы применимости
В этом разделе разделены документированные факты о платформе, инженерные решения и ограничения, которые нельзя обобщить как непроверенные заявления о продукте.
| Решение по статье | Факт или инженерная основа | Предел применимости |
|---|---|---|
| Возможность установки переподписанного пакета не подтверждает личность официального издателя. | Android требует, чтобы APK имели верифицируемые подписи; злоумышленники могут генерировать самосогласованные подписи своими ключами для модифицированного содержимого. | На возможность установки также влияют имя пакета, политики устройства, версия ОС и источник установки; конкретные результаты тестирования нельзя выводить исключительно из принципов проектирования. |
| При обновлении через наложение (overlay) необходимо проверять непрерывность идентичности подписи. | Официальная документация Android указывает, что платформа использует ключ подписи приложения для подтверждения того, что обновления поступают от того же владельца ключа. | Ротацию сертификатов и правила подписи платформы дистрибуции необходимо проверять в соответствии с конфигурацией проекта. |
| Сигналы целостности платформы должны валидироваться и обрабатываться на бэкенде. | Вердикты Play Integrity включают данные о распознавании приложения, устройстве, учетной записи и окружении; разработчики рекомендуют формировать ответы бэкенда на основе оценки рисков. | Сигналы Play не охватывают все страны, каналы, устройства или сценарии работы без подключения к сети. |
| Финальные файлы доставки должны строго соответствовать тестовым доказательствам по принципу «один к одному». | Пересборка, изменение ресурсов или переподпись изменяют идентичность артефакта и потенциальное поведение во время выполнения. | Дайджесты файлов устанавливают связь идентичности, но сами по себе не обеспечивают защиту от несанкционированных изменений. |
| Только факт неудачной установки не доказывает устранение рисков переупаковки. | Аномальные пакеты могут оставаться опасными за счет смены имени пакета, циклов удаления и повторной установки, использования других каналов или эксплуатации отсутствия политик версионирования на стороне сервера. | Конкретные векторы атак необходимо проверять в рамках авторизованного тестирования на реальных архитектурах дистрибуции и бизнес-логике. |
Инженерные вопросы
Почему система не отвергает напрямую все APK, подписанные неофициальными сертификатами?
Установщик Android может проверить самосогласованность подписи текущего пакета, но система не знает, какой сертификат признает каждый бренд. Официальную идентичность должны совместно определять цепочка обновления, платформа дистрибуции и бизнес-сервисы.
Если переподписанный пакет невозможно установить поверх существующего, означает ли это отсутствие рисков?
Нет. Злоумышленники все еще могут инициировать циклы удаления и повторной установки, изменять имена пакетов или использовать отсутствие политик версионирования на стороне сервера для доступа к бизнес-логике. Предотвращение обновления через наложение - лишь один элемент матрицы управления.
Достаточно ли клиенту считывать дайджест собственного сертификата?
Нет. Модифицированный клиент может одновременно изменить локальные проверки или логику отчетности. Данные сертификата могут участвовать в эшелонированной защите, но решения об авторизации высоких рисков должен принимать сервер на основе комбинации верифицируемых сигналов.
Какой дайджест файла следует сохранять после релиза AAB?
Сохраните идентичность загруженного AAB, а также получите и выборочно проверьте фактически доставленные артефакты с платформы дистрибуции. Разные устройства могут получать разделенные APK; сохранения только локально сгенерированного универсального APK недостаточно.
Когда можно сформировать заключение о релизе?
Заключение можно сформировать только для покрытой области после фиксации идентичности финального подписанного артефакта и завершения проверок установки, обновления с рабочих версий, ключевых бизнес-процессов, политик на стороне сервера, целевых диапазонов ОС и валидации отката.
Хотите протестировать это в своем собственном приложении?
Отправьте кандидата на выпуск, целевые системы и критические бизнес-пути для проверки подлинности Yudun и оценки совместимости.
Продолжить с: Как принять APK, DEX и совместно подписать целостность