SHARE THE PERSPECTIVE
Контрольна сума зіставляє байти з еталоном. Підпис пов’язує цілісність із ключем. Жоден із цих засобів сам по собі не доводить безпечності програми.

Перш ніж установлювати Android APK, розрізняйте три перевірки: Чи відповідає цей файл очікуваному випуску? Чи підписано його очікуваним ключем? Чи можуть незалежні учасники відтворити його із заявленого вихідного коду? Контрольна сума SHA-256, підпис APK і відтворювана збірка відповідають на ці запитання по-різному.

Жодна з цих перевірок сама по собі не визначає, чи є програма шкідливою. Навіть правильно підписана й відтворювана програма може містити вразливість або навмисно шкідливу поведінку.

Що встановлює кожен метод перевірки

Перевірка Корисний результат Важливе обмеження
Хеш файлу SHA-256 Ваші байти відповідають певному довіреному хешу Зловмисник, який замінить і файл, і хеш, може звести нанівець цю перевірку
Перевірка підпису APK Підпис пакета проходить перевірку з використанням його сертифіката підпису Потрібно встановити, який ключ підпису очікується; сама лише коректність підпису не підтверджує особу видавця
Порівняння відтворюваної збірки Зазначений артефакт можна відтворити із задокументованих вхідних даних Відповідність вихідного коду та двійкового файлу не доводить безпечності вихідного коду
Аналіз безпеки Було оцінено конкретні проблеми проєктування або реалізації Важливі його обсяг, версія, висновки та невирішені проблеми

Android вимагає підпису APK для встановлення й оновлень. Завдяки Play App Signing Google може керувати ключем підпису застосунку та створювати APK для розповсюдження з пакета app bundle. Це задокументовані схеми довіри, а не доказ того, що будь-які посередники можуть непомітно змінювати пакет, зберігаючи коректність його підпису. Посібник Android із підписування застосунків.

Крок 1: визначте точний артефакт

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

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

Практичне запитання таке: Звідки взялося очікуване значення і чому я довіряю цьому джерелу? Обчислення хешу без підключення до мережі не розв'язує проблему довіри до еталонного хешу, отриманого через інтернет.

Крок 2: обчисліть SHA-256 локально

Замініть messenger.apk назвою завантаженого файлу. Ці приклади читають файл, але не встановлюють його.

Linux:

sha256sum messenger.apk

macOS:

shasum -a 256 messenger.apk

Командний рядок Windows:

certutil -hashfile messenger.apk SHA256

Порівнюйте хеш повністю, ігноруючи лише пробіли, що використовуються для відображення, та регістр літер. Не порівнюйте тільки перші або останні кілька символів. Зберігайте очікуваний хеш разом із відомостями про випуск і версію, щоб порівняння можна було повторити.

Якщо значення відрізняються, зупиніться до встановлення. Перевірте артефакт і версію, за потреби завантажте файл знову з довіреного джерела та запитайте видавця про нез'ясовану невідповідність. Не «виправляйте» очікувану контрольну суму, підганяючи її під файл, який ви отримали.

Крок 3: перевірте підпис APK

Для користувачів Android SDK Build Tools Google описує перевірку підпису й виведення відомостей про сертифікат у документації apksigner:

apksigner verify --verbose --print-certs messenger.apk

Перевірка має завершитися успішно для платформ, які підтримує цей APK. Порівняйте відомості про сертифікат підписувача з довіреним записом про випуск або задокументованою видавцем історією зміни ключів підпису. Слово «перевірено» не робить підпис невідомим ключем гідним довіри. Законна зміна ключа підпису також потребує підтверджень, а не вказівки ігнорувати невідповідність.

Хеш SHA-256 файлу APK і відбиток SHA-256 його сертифіката підпису — різні значення. Не порівнюйте одне з іншим.

Крок 4: знайдіть докази відтворюваності збірки

Твердження про відтворювану збірку потребує визначеної ревізії вихідного коду, середовища збирання, інструкцій і цільового артефакту. Незалежні учасники повинні мати змогу відтворити цей артефакт і порівняти результат. Визначення проєкту Reproducible Builds включає ці вхідні дані до самого твердження про відтворюваність.

Для месенджера корисні докази щодо випуску охоплюють тег вихідного коду, зафіксовані версії залежностей та інструментарію збирання, інструкції зі збирання і результати незалежних порівнянь. Запитайте, що саме порівнювали: непідписаний артефакт, підписаний APK чи окремі частини вмісту пакета. Не робіть висновку про відтворюваність лише тому, що опубліковано вихідний код і хеш файлу для завантаження.

Відтворюваність зміцнює зв'язок між перевіреним вихідним кодом і кодом, що розповсюджується. Вона не перетворює неперевірену реалізацію на безпечний протокол і не доводить, що телефон, який працює, не скомпрометований.

Яку роль відіграє Proof Lab від Livara

Proof Lab від Livara дає змогу локально обчислити хеш APK і порівняти його з опублікованим хешем. Його криптографічні демонстрації мають вужчий обсяг, ніж аудит усього протоколу обміну повідомленнями. Використовуйте перевірку хешу за її заявленим призначенням, разом з очікуваними відомостями про випуск і підпис; не вважайте її незалежним доказом відтворюваності збірок або відсутності бекдорів.

У моделі загроз прямо зазначено обмеження для випадку, коли можна замінити і APK, і відображуваний хеш. Саме тому походження еталонного значення не менш важливе, ніж правильність самого обчислення.

Поширені запитання

Чи доводить збіг контрольної суми, що APK безпечний?

Ні. Він установлює відповідність еталонному хешу за умови, що еталон заслуговує на довіру та виконуються властивості безпеки хеш-функції. Він не оцінює поведінку програми.

Чи зайва перевірка підпису, якщо контрольна сума збігається?

Ні. Ці перевірки надають різні докази. Підпис пов'язує цілісність пакета з ключем, а хеш файлу визначає конкретну послідовність байтів.

Чи має файл із магазину збігатися за хешем з APK на сайті?

Лише якщо передбачається, що це той самий артефакт. Спочатку перевірте канал випуску, версію та пакування. Нез'ясована невідповідність потребує дослідження, а не автоматичного звинувачення чи автоматичного схвалення.

Чи можуть ці перевірки виявити шпигунське ПЗ, яке вже є на моєму телефоні?

Ні. Вони оцінюють інсталяційний артефакт, а не всі компоненти поточного стану роботи пристрою.

Перевірте свою збірку в Proof Lab
CONTINUE THE THREADAndroid & device security ↗
YOU’VE REACHED THE ENDBack to the reading room ↗