Я завантажив додаток з Інтернету за допомогою Safari. Після його виконання macOS повідомляє, що додаток від невстановленого розробника.
Як macOS може визначити цю інформацію? Де зберігаються метадані підписання програми?
Я завантажив додаток з Інтернету за допомогою Safari. Після його виконання macOS повідомляє, що додаток від невстановленого розробника.
Як macOS може визначити цю інформацію? Де зберігаються метадані підписання програми?
Відповіді:
Інформація зберігається в межах розширених атрибутів, а додаткова інформація може бути вбудована в додаток.
Ця інформація про карантин зберігається як розширений атрибут . Використовуйте xattr
інструмент для перегляду атрибутів, пов’язаних із файлом чи програмою.
Атрибут, що викликає це повідомлення, є com.apple.quarantine
.
Див. Як я можу видалити "розширені атрибути" з файлу в Mac OS X? і додаток неможливо відкрити, оскільки він отримав інформацію від невідомого розробника для отримання більш детальної інформації.
Розширений атрибут використовується Gatekeeper в macOS і обговорюється в розділі Як встановити (відновити) атрибут com.apple.quarantine?
Для визначення розробника програми використовується необов'язковий цифровий підпис, вбудований у програму. Якщо підпис не знайдено, macOS представляє програму від невстановленого розробника.
Насправді повідомлення "Невідомий розробник ..." є результатом поєднання обох завдань: перевірка атрибута 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
Тут видно три різні органи влади:
Це означає, що додаток підписаний сертифікатом для розробників, опублікованим та підписаним проміжним органом розробника Apple, який сам публікується та підписується кореневою компанією Apple.
Цей ланцюг кваліфікує Google (а точніше: команду / підрозділ Google, Inc. (EQHXZ8M8AV)) як розробник, визначений Apple.
Ви також можете кодувати прикладні програми або самостійно, або за допомогою сертифіката кодування з іншого проміжного / кореневого органу, але це не переможе Gatekeeper.
Тепер можливі чотири перестановки за умови, що функція Gatekeeper увімкнена (але не враховує самопідписання / інопланетянин):
У перших двох випадках додаток просто запуститься. У третьому випадку ви отримаєте повідомлення непізнаного розробника . Вирішити це можна, видаливши розширений атрибут xattr -d com.apple.quarantine *
(= випадок 1). У четвертому випадку ви отримаєте "* було завантажено з Інтернету, ви впевнені, що хочете його відкрити?"
Як 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