Коли програми підписані кодом, які частини пакету .app покриває підпис?


13

У Mountain Lion я знаю, що деякі програми, в тому числі всі додатки в магазині додатків Mac цифровим чином підписуються розробником, так що, якщо вони будуть змінені, підпис не збігатиметься, і це призведе до різного роду помилок (і ситуація посилиться з наступним випуском операційної системи ...).

Моє запитання - які частини пакету .app покриває підпис? Якщо що- небудь у Appname.app/Contentsзмінах (включаючи метадані, як-от змінена дата для Contentsпапки), це порушує підпис? Це просто бінарне Contents/MacOS? Чи включаються .plists до підпису? Resources? Як кінцевий користувач, що я можу зламати (якщо щось таке), не порушуючи підпис?


Здається, що вам потрібно почати тестування, і скажіть нам!
Адам Девіс

Я можу, і якщо ніхто не знає відповіді, я зроблю, але якщо хтось уже перевірив, мені не потрібно винаходити колесо.
Даниїл

1
Це колесо могло повністю використати деякі вдосконалення. Я думаю, що хромовані прядильники є обов’язковими для одного.
Адам Девіс

Відповіді:


14

TL; DR Розробник повинен вибрати, які фрагменти програми підписані і чи підробка цих фрагментів призводить до будь-яких дій при запуску програми. Вам потрібно використовувати пробні та помилкові дані, щоб розібратися в програмі за допомогою програми.

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

У посібнику для розробників Apple зазначено, що слід підписати:

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

Якщо ваша програма складається з великої частини користувальницького інтерфейсу з одним або декількома маленькими допоміжними інструментами, які намагаються представити користувачеві єдине обличчя, ви можете зробити їх невідрізними для підпису коду, надавши їм абсолютно той самий ідентифікатор підпису коду. (Ви можете зробити це, переконавшись, що всі вони мають однакове значення CFBundleIdentifier у своєму Info.plist або за допомогою параметра -i в команді codeign призначити той самий ідентифікатор.) У цьому випадку всі компоненти вашої програми мають доступ до тих же елементів брелока та перевірити, як та сама програма. Робіть це лише в тому випадку, якщо задіяні програми справді мають на меті створити єдине ціле, без різниці.

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

У випадку з пакетами інсталятора (пакети .pkg та .mpkg) все неявно підписано: Архів CPIO, що містить корисну навантаження, архів CPIO, що містить сценарії встановлення, та вексель матеріалів (BOM), мають хеш, записаний у XAR заголовка, і цей заголовок у свою чергу підписується. Тому, якщо ви зміните сценарій встановлення (наприклад) після підписання пакета, підпис буде недійсним.

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

Залежно від ситуації, кодизайн може додавати у свій виконуваний файл Mach-O, додавати до нього розширені атрибути або створювати нові файли в каталозі Зміст вашого пакета. Жоден з ваших інших файлів не змінюється.

Також звідси не обов'язково вірно, що наявність недійсного підпису програми означає, що він не зможе запуститися. На сторінці написано:

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

Програма може дозволити зміни.

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

Якщо додаток було підписано, ви можете шукати Contents/CodeResourcesфайл або Contents/_CodeSignature/CodeResourcesфайл у пакеті. Цей файл перераховує всі підписані компоненти та їх очікувані значення хешу в комплекті. Це гарне місце, щоб почати розуміти, які частини програми розробник вважає достатньо критичною, щоб слідкувати за змінами.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.