Як macOS визначає статус підпису програми, завантаженої з Інтернету?


8

Я завантажив додаток з Інтернету за допомогою Safari. Після його виконання macOS повідомляє, що додаток від невстановленого розробника.

Як macOS може визначити цю інформацію? Де зберігаються метадані підписання програми?


Якщо я розумію ваше запитання, ви отримуєте це сповіщення, оскільки додаток, який ви завантажили в Safari, не був підписаний відомим розробником Apple. Ви запитуєте, де на вашому комп’ютері розміщена програма xyz?
Jake3231

Відповіді:


13

Інформація зберігається в межах розширених атрибутів, а додаткова інформація може бути вбудована в додаток.

Розширені атрибути

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

Атрибут, що викликає це повідомлення, є com.apple.quarantine.

Див. Як я можу видалити "розширені атрибути" з файлу в Mac OS X? і додаток неможливо відкрити, оскільки він отримав інформацію від невідомого розробника для отримання більш детальної інформації.

Підписник і підписи коду

Розширений атрибут використовується Gatekeeper в macOS і обговорюється в розділі Як встановити (відновити) атрибут com.apple.quarantine?

Для визначення розробника програми використовується необов'язковий цифровий підпис, вбудований у програму. Якщо підпис не знайдено, macOS представляє програму від невстановленого розробника.


5
Це не зовсім правильно. Дані карантину використовуються для відстеження джерела завантаженого файлу, але підпис знаходиться в іншому місці.
duskwuff -inactive-

1
@duskwuff правильний. Карантин викликає спливаюче вікно "XXX було завантажено з Інтернету. Ви впевнені, що хочете його відкрити?"
Бармар

1
Не всі файли та програми підписані кодом. Багато додатків не є, тому в цих випадках не існує вбудованої підпису. Це стосується повідомлень "невстановленого розробника".
Грем Мілн

7

Насправді повідомлення "Невідомий розробник ..." є результатом поєднання обох завдань: перевірка атрибута com.apple.quarantine та ресурсів підпису коду (в * / Contents / _CodeSignature / CodeResources), а фактичний статус підписання - визначається виключно * / CodeResources .

Ви можете отримати розширений атрибут, ввівши:

$ xattr -p com.apple.quarantine /Applications/*.app

До інформації про підпис коду можна отримати, ввівши:

$ codesign -dvvv /Applications/*.app

Приклад:

$ codesign -dvvvv /Applications/Google\ Chrome.app/
Executable=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
Identifier=com.google.Chrome
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=273 flags=0x800(restrict) hashes=3+3 location=embedded
OSPlatform=36
OSSDKVersion=658432
OSVersionMin=657664
Hash type=sha256 size=32
CandidateCDHash sha1=bc8e3dffe7d9d5242e09ea80a220ed365d46fdf2
CandidateCDHash sha256=d7ae6211906bb17d593ce9c215d190a81f37e658
Hash choices=sha1,sha256
Page size=4096
CDHash=d7ae6211906bb17d593ce9c215d190a81f37e658
Signature size=8949
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=20. Mar 2018 at 07:23:20
Info.plist entries=36
TeamIdentifier=EQHXZ8M8AV
Sealed Resources version=2 rules=7 files=203
Internal requirements count=1 size=240

Найважливіша частина - це ланцюжок сертифікатів (і ланцюжок довіри):

Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA

Тут видно три різні органи влади:

  1. Кореневий сертифікат: Apple Root CA
  2. Проміжний сертифікат розробника Apple: Орган сертифікації ідентифікатора розробника
  3. Сертифікат розробника: Google, Inc. (EQHXZ8M8AV)

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

Цей ланцюг кваліфікує Google (а точніше: команду / підрозділ Google, Inc. (EQHXZ8M8AV)) як розробник, визначений Apple.

Ви також можете кодувати прикладні програми або самостійно, або за допомогою сертифіката кодування з іншого проміжного / кореневого органу, але це не переможе Gatekeeper.

Тепер можливі чотири перестановки за умови, що функція Gatekeeper увімкнена (але не враховує самопідписання / інопланетянин):

  • Немає атрибута com.apple.quarantine / відсутній сертифікат розробника Apple (Приклад: встановлено квасоля Awche CouchDB )
  • Немає атрибута com.apple.quarantine / сертифікат для розробника Apple (Приклад: встановлена ​​баварка для пивоварення Google Chrome )
  • Атрибут com.apple.quarantine / немає сертифікат для розробника Apple (Приклад: Apache CouchDB встановлюється завантаженням zip з веб-сайту та копіюванням нерозпакованого додатка в / Applications / )
  • Атрибут com.apple.quarantine / сертифікат для розробника Apple (Приклад: Google Chrome встановлюється, завантажуючи dmg з веб-сайту та копіюючи додаток всередині до / Applications / )

У перших двох випадках додаток просто запуститься. У третьому випадку ви отримаєте повідомлення непізнаного розробника . Вирішити це можна, видаливши розширений атрибут xattr -d com.apple.quarantine *(= випадок 1). У четвертому випадку ви отримаєте "* було завантажено з Інтернету, ви впевнені, що хочете його відкрити?"


5

Як macOS може визначити цю інформацію? Де зберігаються метадані підписання програми?

Підпис зберігається у самій бінарній програмі додатка з деякими додатковими даними у пакеті програми (у файлі Contents/_CodeSignature/CodeResources).

Ви можете отримати деяку інформацію про підпис за допомогою утиліти командного рядка codesign- наприклад:

# codesign -dv /Applications/Preview.app
Executable=/Applications/Preview.app/Contents/MacOS/Preview
Identifier=com.apple.Preview
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20100 size=21314 flags=0x0(none) hashes=659+5 location=embedded
Platform identifier=4
Signature size=4485
Info.plist entries=35
TeamIdentifier=not set
Sealed Resources version=2 rules=13 files=2077
Internal requirements count=1 size=68
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.