Проверка DMG и приложения macOS: подпись, нотарификация и содержимое образа.

Проверка DMG и приложения macOS: подпись, нотарификация и содержимое образа.

DMG - упаковка, а не гарантия безопасности

Образ диска удобен для доставки приложений: он сохраняет структуру файлов, может содержать лицензию и показывает привычное окно переноса в Applications. Однако формат DMG ничего не говорит о добросовестности содержимого. Внутри может находиться подписанное приложение, неподписанный исполняемый файл, установщик PKG, ссылка или комбинация нескольких объектов.

Проверка должна идти снаружи внутрь. Сначала устанавливают происхождение и целостность самого загруженного образа. Затем монтируют его в режиме, минимизирующем изменения, и инвентаризируют содержимое. После этого отдельно проверяют каждое приложение или пакет. Успешная проверка контейнера не переносит доверие на файлы внутри.

Такой порядок помогает избежать распространенной ошибки: пользователь видит, что DMG открывается без предупреждения, и считает приложение проверенным. На самом деле монтирование образа и запуск кода - разные операции с разными механизмами контроля.

Фиксируем исходную копию

Поместите файл в отдельную папку и убедитесь, что загрузка завершена. Finder может оставить рядом несколько копий с одинаковым значком, поэтому используйте полный путь и сравнивайте размер. Запишите SHA-256: он понадобится, если придется повторно скачать образ или обсудить конкретную копию.

file "$HOME/Downloads/Программа.dmg"

stat -f '%z bytes %N' "$HOME/Downloads/Программа.dmg"

shasum -a 256 "$HOME/Downloads/Программа.dmg"

xattr -l "$HOME/Downloads/Программа.dmg"

Команда file должна определить образ диска или соответствующий контейнер, а не HTML-документ и не произвольные данные. Последнее бывает, если вместо файла сохранилась страница ошибки. Атрибут com.apple.quarantine ожидаем для интернет-загрузки; его не следует удалять до проверки.

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

Проверяем целостность и монтируем только для чтения

Системная утилита hdiutil умеет проверять внутреннюю целостность образа. Ошибка на этом этапе означает, что продолжать анализ содержимого рано: файл мог загрузиться не полностью или быть поврежден.

hdiutil verify "$HOME/Downloads/Программа.dmg"

hdiutil attach -readonly -nobrowse "$HOME/Downloads/Программа.dmg"

Режим readonly не делает содержимое безопасным, но исключает запись обратно в смонтированный том. Параметр nobrowse не открывает окно автоматически, что удобно для спокойной инвентаризации. В выводе команда покажет устройство и точку монтирования. Скопируйте точный путь, особенно если имя тома содержит пробелы.

После осмотра размонтируйте том штатно. Не используйте принудительное отключение без необходимости: сначала закройте Finder и инструменты, которые держат файлы открытыми.

ls -la "/Volumes/Имя тома"

find "/Volumes/Имя тома" -maxdepth 2 -print

hdiutil detach "/Volumes/Имя тома"

Инвентаризация содержимого образа

Ожидаемый простой образ обычно содержит приложение, ярлык Applications и, возможно, текст лицензии. Дополнительные установщики, shell-сценарии, конфигурационные профили и документы с просьбой выполнить команды требуют отдельного объяснения.

Не запускайте «patch», «helper» или «installer», если карточка продукта обещает обычное перетаскивание приложения. Особенно опасна инструкция, требующая открыть Терминал и вставить длинную команду с административными правами. Визуальное оформление DMG легко скопировать, поэтому красивый фон и стрелка не являются признаком подлинности.

Если внутри находится PKG, остановитесь на отдельном процессе проверки. Откройте пакет в Suspicious Package, изучите файлы, сценарии и подпись. Если образ содержит несколько вариантов для архитектур, убедитесь, что выбрали подходящий и что названия соответствуют документированной схеме проекта.

Проверяем приложение через Gatekeeper и codesign

Скопируйте приложение в отдельную папку или Applications, но не запускайте. Затем оцените его политикой Gatekeeper и проверьте целостность подписи.

spctl -a -vv -t open "/Applications/Программа.app"

codesign --verify --deep --strict --verbose=2 "/Applications/Программа.app"

codesign -dv --verbose=4 "/Applications/Программа.app"

В выводе важны идентификатор приложения, цепочка Authority и TeamIdentifier. Они должны согласовываться с ожидаемым издателем. Команда глубокой проверки обнаруживает проблемы во вложенном коде, но ее успешное завершение не оценивает бизнес-логику, сбор данных и необходимость разрешений.

Не исправляйте ошибку запуском codesign с локальным сертификатом. Переподписывание изменяет объект и мешает определить исходного автора. Если подпись нарушена, сохраните хеш, получите новую копию и сравните результаты.

Визуальный аудит через Apparency

Apparency полезна, когда одной строки spctl недостаточно. Откройте в ней bundle и последовательно изучите общие сведения, подпись, нотарификацию, entitlements и вложенные компоненты. Для универсальной сборки проверьте, какие архитектуры заявлены основным исполняемым файлом и помощниками.

Entitlements описывают возможности, которые разработчик запросил при подписании. Сетевой клиент закономерно может иметь сетевые права, приложение для автоматизации - соответствующие возможности управления, а расширение Finder - собственный компонент. Несоответствие не доказывает вредоносность, но требует объяснения. Особенно внимательно относитесь к отладочным возможностям, широкому доступу к данным и множеству постоянных помощников.

Сравнивайте подписи вложенных фреймворков и XPC-служб. Сторонний компонент может иметь другого автора, однако происхождение должно быть понятным. Неподписанный исполняемый файл внутри подписанного продукта либо будет покрыт внешней подписью как ресурс, либо вызовет вопросы при проверке структуры; в обоих случаях важно понять, будет ли он запускаться.

Быстрая проверка Finder через What's Your Sign?

What's Your Sign? добавляет удобный способ посмотреть подпись выбранного файла без ручного набора пути. Это полезно, когда в образе несколько приложений, плагинов или командных утилит. Проверяйте не только основной bundle, но и отдельные объекты, назначение которых неочевидно.

Запишите имя сертификата, идентификатор команды, статус подписи и хеш. Если два похожих файла показывают разных издателей, не выбирайте тот, который просто «открывается». Вернитесь к источнику и установите, почему существуют разные сборки.

Инструмент ускоряет рутинную проверку, но не анализирует сценарии PKG и не наблюдает поведение после запуска. Он отвечает на вопрос об идентичности и состоянии подписи конкретного объекта.

Ни одна строка не является самостоятельным вердиктом. Например, старое легитимное приложение может не иметь современной нотарификации, но тогда источник, подпись и изолированная проверка должны компенсировать неопределенность. Для неизвестного издателя с широкими полномочиями совокупность риска, наоборот, растет.

Безопасный первый запуск после анализа

Запускайте приложение из постоянного пути, а не со смонтированного образа. Это исключает путаницу с обновлением и помогает macOS корректно привязать разрешения к bundle. Закройте конфиденциальные документы, не вводите учетные данные без необходимости и отклоняйте необъяснимые запросы доступа.

Проверьте, совпадает ли фактический интерфейс с назначением. Поддельная сборка может показывать окно ошибки и просить установить «дополнительный компонент». Не соглашайтесь автоматически на новый PKG: он является отдельным объектом проверки.

После завершения первого сеанса закройте приложение и убедитесь, что процесс действительно завершился либо фоновый компонент был заранее объяснен. Сохраните исходный DMG и хеш до окончания теста, чтобы при проблеме было с чем сравнивать установленную копию.

Сравниваем образ с уже установленной копией

Если DMG содержит обновление знакомого приложения, сравнение со старым bundle дает дополнительный контекст. Запишите bundle identifier, TeamIdentifier, основной путь, набор вложенных помощников и entitlements обеих копий. Не заменяйте рабочую программу до окончания проверки: держите кандидата в отдельной папке и не запускайте одновременно две версии с общей базой настроек.

Изменение сертификата может быть связано с передачей проекта или обновлением учетной записи разработчика, но оно должно подтверждаться через обычный канал продукта. Новый идентификатор bundle означает, что macOS может рассматривать программу как отдельное приложение: разрешения, контейнер и обновления не обязаны наследоваться.

Сравните структуру через Apparency. Появление XPC-службы, login helper или системного расширения не является автоматической проблемой, однако меняет область будущего аудита. Проверьте, описывает ли новая функция этот компонент и можно ли отключить его штатно.

После установки сохраните старую доверенную копию только до успешной проверки данных и запуска. Не держите несколько активных экземпляров в Applications и Downloads: встроенный обновлятор или Launch Services может выбрать не тот bundle, а результаты подписи будут относиться к другому пути.

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

Образ может содержать ярлык Applications, символические ссылки и скрытые служебные файлы. Команда ls с подробным выводом помогает отличить ссылку от исполняемого объекта. Не переходите по неожиданной ссылке, ведущей за пределы смонтированного тома или стандартной папки назначения, пока не установлено ее назначение.

Для воспроизводимости сохраните текстовый итог, а не снимок красивого окна образа. Укажите хеш DMG, результат проверки целостности, точку монтирования, издателя приложения и найденные дополнительные объекты. При повторном выпуске такой отчет позволяет быстро увидеть реальное изменение. Не храните распакованный исполняемый файл как доказательство без его исходного контейнера: связь между ними важна для расследования происхождения.

Чек-лист анализа DMG

  • Файл имеет ожидаемый тип, имя и размер не равен очевидной странице ошибки.
  • SHA-256 записан до монтирования.
  • Карантинный атрибут сохранен.
  • hdiutil verify завершается без ошибки.
  • Образ смонтирован только для чтения и без автоматического запуска содержимого.
  • Все объекты верхнего уровня перечислены и объяснены.
  • Приложение проверено отдельно через spctl и codesign.
  • Издатель и TeamIdentifier соответствуют ожидаемому разработчику.
  • Вложенный код и entitlements изучены через Apparency.
  • Каждый PKG прошел отдельный анализ через Suspicious Package.
  • Не выполнялись команды удаления карантина и отключения Gatekeeper.
  • Первый запуск выполнен из постоянной папки с минимальными разрешениями.

Troubleshooting: образ или приложение ведут себя неожиданно

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

Том не размонтируется. Закройте Finder, Терминал и программы анализа, текущий каталог которых находится на томе. Команда lsof по точке монтирования поможет найти процесс, удерживающий файл. Принудительное размонтирование оставьте последним вариантом.

spctl принимает приложение, а codesign находит ошибку. Сохраните полный вывод обеих команд. Возможны различия в области проверки или измененный вложенный ресурс. Не запускайте bundle до получения согласованного результата на новой копии.

Приложение запускается только из DMG. Это может быть особенностью плохо упакованного продукта или проверкой собственного пути. Не оставляйте образ постоянно смонтированным без объяснения; выясните поддерживаемый способ установки.

После копирования подпись изменилась. Обычное копирование не должно переписывать исполняемый код. Сравните хеши отдельных файлов и проверьте, не вмешивалась ли сторонняя утилита модификации. Получите чистую копию и повторите процесс.

Вывод

Проверка DMG состоит из двух независимых частей: целостность контейнера и доверие к коду внутри. hdiutil отвечает за первую, системные средства подписи и Apparency - за вторую, а What's Your Sign?ускоряет точечное изучение отдельных файлов. Для PKG внутри образа требуется еще один уровень анализа.

Такой последовательный подход сохраняет исходные доказательства и не требует ослаблять macOS. Если на любом уровне возникает необъяснимое несоответствие, правильное действие - остановить запуск, а не искать способ пропустить предупреждение.

Полная и оригинальная статья ТУТ.