Один из способов, которым может воспользоваться злоумышленник, чтобы получить доступ к данным на вашем Маке или иным образом попортить вам нервы — изменить дистрибутив какой-либо распространенной программы, которая редко вызывает подозрения у пользователей, и добавить в него вредоносное ПО. И хотя этот трюк вряд ли удастся провернуть с официальными источниками, такими как Mac App Store, подобный софт часто можно встретить на различных файлообменниках, торрент-трекерах и прочих сайтах, предлагающих альтернативные варианты загрузки программ.
Злоумышленники с удовольствием используют для этих целей старые версии iWork и Xcode, предлагая загрузить их в обход официальных серверов Apple, а также могут попытаться внедрить вредоносный код и во встроенные приложения, такие как Safari. Такие изменения зачастую приводят к нестабильной работе программ, чем в конечном итоге себя и выдают, однако, так происходит не всегда.
К счастью, на данный момент для большинства популярных приложений в Mac OS X, которые продолжают развиваться и поддерживаться разработчиками, используется цифровая подпись. Она представляет собой код, который генерируется индивидуально для каждой программы с использованием информации о количестве файлов в пакете приложения, их размере, контрольной сумме и прочих подобных деталей.
Цифровая подпись может быть проверена как автоматически, так и вручную, чтобы убедиться, что установленная программа не была изменена или иным образом скомпрометирована.
Автоматическая проверка цифровой подписи.
Встроенный в Mac OS X сервис GateKeeper создан как раз для того, чтобы проверять цифровую подпись приложений и в случае обнаружения проблем препятствовать их запуску. Таким образом, если вы настроите GateKeeper на максимальный уровень безопасности, вы сможете предотвратить возникновение проблем связанных с установкой подозрительного ПО.
Чтобы сделать это, откройте меню Системные настройки → Защита и безопасность → Основные и в разделе «Разрешить использование программ, загруженных из» выберите значение «App Store для Mac» (или, если вы уверены в безопасности устанавливаемых вами программ, можно выбрать «App Store для Mac и от установленных разработчиков»).
Стоит учитывать, что автоматическая проверка производится только при первом запуске приложения, и, если вы решите все-таки его запустить, несмотря на предупреждение, в дальнейшем она проводиться не будет.
Проверка подписей вручную
Проверить состояние цифровой подписи приложений вручную можно при помощи Терминала.
- Запустите Терминал из папки «Утилиты».
- Введите следующую команду:
codesign --verify --verbose
Поставьте после неё пробел, но пока не нажимайте клавишу ⏎Enter. - Найдите приложение, которое вы хотите проверить в Finder и перетащите его в окно Терминала, чтобы добавить полный путь до него. В результате команда должна принять следующий вид:
codesign --verify --verbose /Applications/AppName.app
- Нажмите клавишу ⏎Enter, чтобы применить введенную вами команду.
После этого в окне Терминала отобразится информация о корректности указанного вами приложения и его соответствии тем данным, что указаны в цифровой подписи. В случае с Safari, например, команда и её вывод будут выглядеть следующим образом:
1 2 3 4 5 |
$ codesign --verify --verbose /Applications/Safari.app /Applications/Safari.app: valid on disk /Applications/Safari.app: satisfies its Designated Requirement |
Если же содержимое приложения было изменено (это касается как изменения уже существующих файлов приложения, так и добавления в пакет новых), вывод команды будет другим, как в примере ниже, где в пакет приложения Safari был добавлен файл «nefariousfile.sh»:
1 2 3 4 5 |
$ codesign --verify --verbose /Applications/Safari.app /Applications/Safari.app: a sealed resource is missing or invalid file added: /Applications/Safari.app/Contents/ASDF/nefariousfile.sh |
Если для какого-либо установленного у вас приложения вывод команды будет схож с примером выше (то есть будет указано, что изменены или добавлены файлы), то значит у вас есть повод для беспокойства, и стоит заменить приложение на загруженное из официальных источников (из App Store или напрямую с сайта разработчика) во избежание неприятных сюрпризов.
Для проверки цифровых подписей программ вы также можете прибегнуть к помощи системных политик OS X. Этот способ очень похож на команду «codesign», но дает больше информации, например, критерий, по которому производилась оценка приложения:
1 2 3 |
$ spctl --assess --verbose /Applications/Safari.app /Applications/Safari.app: accepted source=Apple System |
Если проверка пройдена успешно (как в примере выше), в строке «source» могут быть указаны разные значения:
- Apple/Apple System — программа входит в состав OS X.
- Developer ID — программа подписана корректно с действительной учётной записи разработчика.
- Mac App Store — программа подписана корректно и разрешена для распространения через Mac App Store.
Если же в ходе проверки будут обнаружены ошибки, вариантов формулировок может быть намного больше, включая отсутствие подписи (no usable signature), устаревшие программы (obsolete resources), отсутствующие или некорректные файлы (missing or invalid resources) и многое другое.
Хотелось бы повторить, что предупреждение от GateKeeper возникает только при первом запуске программы, а значит, она может запускаться в дальнейшем даже без подписи, что, если оставить этот факт без внимания, может представлять собой серьезную угрозу безопасности данных на вашем Маке. Поэтому, если при ручной проверке подписи возникают ошибки, проблему стоит исследовать подробнее. Конечно, случается и так, что причина ошибок кроется в том, что приложение просто устарело, или его разработчик по какой-то причине его не подписал. Однако, если проблемное приложение обновлено до последней версии и вы знаете, что оно должно быть подписано разработчиком, необходимо удалить его и установить заново, загрузив дистрибутив из надежных источников.
Для удобства и экономии времени можно воспользоваться командой «find», при помощи которой можно найти пакеты приложений, которые хранятся в папке «Программы» и проверить их все разом.
Для проверки цифровой подписи введите команду find /Applications -d 1 -name "*.app" -exec codesign --verify --verbose {} \
Если же вы хотите проверить системные политики, можно использовать команду find /Applications -d 1 -name "*.app" -exec spctl --assess --verbose {} \
Результат проверки каждого приложения будет выведен списком в окне Терминала и вам останется только изучить его на предмет предупреждений об ошибках.
Благодарим Кристофера Кесслера за оригинальный материал, послуживший основой при написании этой статьи.