Проверка подписи кода установщика пакета

В macOS, когда вы открываете приложение, загруженное из Интернета, Gatekeeper автоматически проверяет подпись кода и в случае возникновения проблем предупреждает вас и блокирует приложение. Насколько я понимаю, это происходит только для приложений (расширение .app), а Gatekeeper не будет делать то же самое для установщиков пакетов (расширение .pkg).

Я решил провести эксперимент, чтобы проверить это. Я использовал установщик пакетов ( 1Password-7.8.pkg) с действительной подписью и полностью удалил подпись, по сути, я сделал следующее:

  1. pkgutil --expand 1Password-7.8.pkg Unsigned.unpkg
  2. pkgutil --flatten Unsigned.unpkg Unsigned.pkg
  3. pkgutil --check-signature Unsigned.pkg

Результат 3 шага:

Package "Unsigned.pkg":
   Status: no signature

Затем я дважды щелкнул Unsigned.pkgи смог выполнить установку без каких-либо предупреждений или блокировок со стороны гейткипера. Этот эксперимент доказывает, что Gatekeeper не проверяет подпись кода установщика пакета (расширение .pkg) автоматически, я прав?

Если приведенное выше предположение актуально, оно приводит ко второму вопросу. Как проверить подпись установщика пакета вручную перед его запуском?

У Apple есть отличная статья о том, как проверить подпись установщика пакета: https://support.apple.com/en-us/HT202369 : вам просто нужно открыть установщик и нажать на замок в правом верхнем углу. . Это работает гладко в большинстве случаев. Но если установщик содержит сценарий предварительной установки , при открытии установщика вы увидите всплывающее окно с текстом «Этот пакет запустит программу, чтобы определить, можно ли установить программное обеспечение». всплывающее окно выглядит следующим образом: введите описание изображения здесьв этом случае замок становится серым, и вы не можете нажать на него, пока не нажмете «Разрешить». Проблема в том, что когда вы нажимаете «Разрешить», запускается предустановочный скрипт, а это значит, что вы запускаете какой-то скрипт перед проверкой его подлинности. Обычно,script только проверяет требования и совместимость, как указано в заголовке всплывающего окна. Но потенциально он может делать произвольные вещи, например, случай с установщиком масштабирования: https://twitter.com/c1truz_/status/1244737672930824193

Итак, есть ли возможность проверить обозначение кода установщика пакета из графического интерфейса перед его запуском, или Apple просто пропустила этот случай, и мне нужно отправить им запрос на функцию?

Конечно, вы всегда можете проверить подпись из терминала следующим образом: `pkgutil --check-signature, но выполнение этой команды для любого установщика пакета, загруженного из Интернета, кажется неправильным, и должен быть родной и более удобный способ сделай это.

Спасибо!

Ответы (1)

В настоящее время нет способа проверить подпись с помощью Installer.app, прежде чем принять сценарий предварительной проверки. Это давняя оплошность инженеров Apple.

Оставьте отзыв или, если вы разработчик, официально сообщите об этой проблеме в Apple.