Прозрачность APK системных служб Google

В рамках постоянных инвестиций Google в прозрачность своих продуктов мы добавляем прозрачность в два новых APK-файла системных служб Google: Android System SafetyCore (com.google.android.safetycore) и Android System Key Verifier (com.google.android.contactkeys). Эти APK-файлы поддерживают функцию предупреждений о конфиденциальном контенте и функцию проверки криптографического ключа в Сообщениях Google соответственно. Журнал прозрачности, который мы опубликовали для проверки заявлений, которые мы делаем в отношении этих APK.

Покрытые пакеты

В этом разделе описаны пакеты, которые включены в журнал прозрачности, а также соответствующие им ключи подписи прозрачности кода.

Система Android SafetyCore

Android System SafetyCore (com.google.android.safetycore) — это системный компонент Android, который обеспечивает инфраструктуру защиты пользователей на устройстве для приложений, обеспечивающую сохранение конфиденциальности.

Код из этого APK в настоящее время подписан следующим ключом, описанным в этом сертификате:

-----BEGIN CERTIFICATE-----
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
4ZM=
-----END CERTIFICATE-----

Средство проверки системного ключа Android

APK-файл Android System Key Verifier (com.google.android.contactkeys) — это сервис для проверки контактов на Android. Это позволяет пользователю проверить открытые ключи контакта, чтобы подтвердить, что он общается с человеком, которому собирается отправить сообщение. Служба представляет собой единую систему проверки открытого ключа в различных приложениях, которая использует проверку посредством сканирования QR-кода или сравнения чисел.

Код из этого APK в настоящее время подписан следующим ключом, описанным в этом сертификате:

-----BEGIN CERTIFICATE-----
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
PLM=
-----END CERTIFICATE-----

Модель угроз

Системы прозрачности могут использоваться для обнаружения и, таким образом, предотвращения атак в цепочке поставок. Проиллюстрируем это несколькими примерами.

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

Поскольку публикация в журнале — это отдельный процесс от процесса выпуска с подписанием (как показано на диаграмме экосистемы ), это поднимает планку для злоумышленника, выходящую за рамки простой компрометации ключа.

Хотя мы планируем также интегрировать этот журнал в общедоступную сеть свидетелей с использованием стандартного протокола свидетелей , мы призываем внешние независимые стороны контролировать целостность этого общедоступного журнала. Эти стороны могут подтвердить свойство журнала «только добавление» и сообщить о любых несанкционированных изменениях.

Существование такой системы прозрачности и дополнительная возможность обнаружения атак препятствуют злонамеренной активности. Если APK скомпрометирован, но пользователи доверяют только тем, которые указаны в журнале, скомпрометированный APK необходимо будет опубликовать. Это увеличивает вероятность обнаружения существования скомпрометированного APK и принятия мер по удалению его распространения.

Модель заявителя

Модель претендента — это структура, используемая для определения ролей и артефактов в проверяемой системе. В случае прозрачности APK системных служб Google мы заявляем, что хэш подписанных двоичных файлов, записанный в этом журнале, представляет собой официальный код для соответствующих APK системных служб Google.

  • Заявить GoogleSystemServicesApk : (я, Google, утверждаю, что $codeSignature предназначен для $googleSystemServicesApk ), где:
    • $codeSignature — это подписанный веб-токен JSON ( JWT ), который содержит список файлов DEX и собственных библиотек, а также соответствующие им хэши, включенные в определенную версию $googleSystemServicesApk .
    • $googleSystemServicesApk — это пакет Android ( APK ) из следующего набора пакетов: {Android System SafetyCore (com.google.android.safetycore), Android System Key Verifier (com.google.android.contactkeys)}

Любой, у кого есть копия $googleSystemServicesApk может проверить приведенное выше утверждение, и мы подробно описываем этот процесс на странице проверки .

Содержимое журнала

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

Каждая запись в этом журнале содержит четыре части метаданных APK:

  1. Хэш подписи кода APK, разработанного Google. Это шестнадцатеричная строка дайджеста SHA256 токена прозрачности кода (также известного как JWT прозрачности кода).
  2. Описание типа хеша выше. Это строка.
  3. Имя пакета APK. Это строка.
  4. Номер версии ( versionCode ) APK. Это целое число.

Формат записи журнала представляет собой объединение четырех фрагментов информации с символом новой строки ( \n ), как показано ниже:

hash\nSHA256(Signed Code Transparency JWT)\npackage_name\npackage_version\n

Обратите внимание, что в этом выпуске мы экспериментируем с использованием прозрачности кода . Это означает, что вместо хеша APK мы записываем дайджест токена прозрачности кода. Таким образом, хэш-описание в настоящее время зафиксировано как SHA256(Signed Code Transparency JWT) .

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

Диаграмма экосистемы

Verifiable Log Ecosystem Diagram