Миф про "вирусов на mac не бывает" умер примерно тогда же, когда Mac стал массовым. Сегодня под macOS пишут вполне рабочие зловреды: рекламные инжекторы вроде Adload, стилеры паролей и cookie (Atomic, Poseidon), бэкдоры под видом "кряка" фотошопа. Беда не в том, что Apple слабая - беда в том, что человек сам тащит в систему то, что не надо, кликая "открыть" на скачанном из мутного места dmg.
Поэтому защита в macOS - это не одна программа, а слоёный пирог, который срабатывает на разных этапах: при скачивании файла, при первом запуске, в фоне раз в сутки и при каждом старте приложения. В этом уроке разберём механику всех слоёв: подпись кода (codesign, Developer ID), нотаризацию (notarization, она же нотаризация mac), карантин (com.apple.quarantine), Gatekeeper (spctl), встроенный антивирус XProtect и XProtect Remediator, а также legacy-инструмент MRT. И честно ответим, нужен ли тебе сторонний антивирус для mac в 2026 году.
Важно понимать главное: эти механизмы не "сканируют диск как Касперский". Они построены вокруг идеи доверия к источнику. Если ты понимаешь, откуда берётся доверие и где оно рвётся, ты перестаёшь бояться окна "не удаётся открыть, неустановленный разработчик" и начинаешь принимать осознанные решения.

Слой 1. Подпись кода и Developer ID - откуда берётся доверие
Любой исполняемый код в macOS может быть подписан криптографически. Подпись codesign решает две задачи: подтверждает, кто выпустил программу (identity), и гарантирует, что бинарь не изменён после подписи (целостность). Внутри .app-бандла подпись лежит в _CodeSignature/CodeResources плюс встроена в сам Mach-O.
Подпись бывает разная. Apple подписывает системные бинари своим корневым сертификатом. Сторонний разработчик получает Developer ID - сертификат от Apple, которым подписывает приложения для распространения вне App Store. Есть ещё ad-hoc подпись (без identity, "подписано само собой" - именно так подписаны собранные локально бинари на Apple Silicon, там подпись обязательна для запуска).
Посмотрим на реальное приложение:
Код: Выделить всё
codesign -dv --verbose=4 /Applications/Firefox.app
Код: Выделить всё
Executable=/Applications/Firefox.app/Contents/MacOS/firefox
Identifier=org.mozilla.firefox
Authority=Developer ID Application: Mozilla Corporation (43AQ936H96)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
TeamIdentifier=43AQ936H96
Sealed Resources version=2 rules=13 files=215
Проверить, что подпись валидна и бандл не побит, можно так:
Код: Выделить всё
codesign --verify --deep --strict --verbose=2 /Applications/Firefox.app
Грабли: подпись сама по себе не говорит, что софт безопасен. Я могу получить Developer ID и подписать им троян. Подпись говорит только "это точно выпустил вот этот разработчик и файл не трогали". Чтобы добавить проверку на вредоносность, нужен следующий слой.
Слой 2. Нотаризация mac и staple - Apple смотрит на код
Нотаризация (notarization) - это процедура, при которой разработчик отправляет готовый подписанный билд на серверы Apple, а там автоматический сервис прогоняет его через проверку на известные вредоносные паттерны и явные проблемы. Это не ручное ревью как в App Store - это быстрый автоматический скан, обычно минуты. Если чисто, Apple выдаёт ticket (нотариальный билет), который привязан к хэшу твоего билда.
Зачем билет нужен и где он живёт. Билет можно получить двумя путями: Gatekeeper при первом запуске сходит на серверы Apple и спросит "для этого хэша есть билет?", либо разработчик "пристёгивает" билет прямо к файлу заранее командой stapler - тогда проверка работает офлайн. Это и называется staple:
Код: Выделить всё
xcrun stapler staple MyApp.app
xcrun stapler validate MyApp.app
Код: Выделить всё
spctl -a -vvv -t exec /Applications/Firefox.app
Код: Выделить всё
/Applications/Firefox.app: accepted
source=Notarized Developer ID
origin=Developer ID Application: Mozilla Corporation (43AQ936H96)
Ещё одна важная деталь про staple: Apple может отозвать билет уже после раздачи, если выяснит, что в массово разошедшемся приложении сидит зловред. Тогда даже ранее "чистый" билд перестанет запускаться - система при следующем походе на сервер получит отказ. Это глобальный рубильник Apple против вспышек малвари.
Слой 3. Карантин и Gatekeeper - момент первого запуска
Теперь самое практичное. Откуда система вообще знает, что файл "скачан из интернета"? Через расширенный атрибут (xattr) com.apple.quarantine. Когда Safari, Mail, мессенджер или браузер сохраняет файл, он вешает на него этот флаг. Посмотрим:
Код: Выделить всё
xattr -l ~/Downloads/SomeApp.dmg
Код: Выделить всё
com.apple.quarantine: 0083;6634a1c2;Safari;C7A3...-...-...
Gatekeeper - это и есть тот сторож, который показывает окно. Его текущую политику смотрим так:
Код: Выделить всё
spctl --status
Код: Выделить всё
assessment enabled
Знаменитое окно "не удаётся открыть, потому что разработчик не может быть проверен" (или "приложение от неустановленного разработчика") - это Gatekeeper заблокировал неподписанный или ненотаризованный софт. Как обойти осознанно, если ты на 100% доверяешь источнику (например, опенсорсная утилита с GitHub, которую автор не нотаризовал):
- Правильный путь 2026: после неудачной попытки запуска идёшь в Системные настройки -> Конфиденциальность и безопасность, листаешь вниз - там появится строка про заблокированное приложение и кнопка "Подтвердить" / "Открыть всё равно" (Open Anyway). Нажал, ввёл пароль - приложение добавлено в исключения.
- Старый трюк через правый клик -> "Открыть" в Tahoe для ненотаризованного софта уже не всегда срабатывает - Apple ужесточила, и для совсем неподписанных бинарей единственная дверь это System Settings.
- Хирургический способ для конкретного файла - снять карантин руками:
Код: Выделить всё
xattr -d com.apple.quarantine ~/Downloads/some-cli-tool
Грабли с самим Gatekeeper: команда spctl --master-disable, которой раньше включали "Любой источник", в современных macOS (начиная с Sequoia и далее в Tahoe) отключена - даже под sudo она ничего не меняет глобально. Apple сознательно убрала простой способ полностью вырубить Gatekeeper. Управление - только через "Open Anyway" по одному приложению. Это не баг, это политика безопасности.
Слой 4. XProtect и XProtect Remediator - встроенный антивирус mac
Подпись и нотаризация - про доверие к источнику. Но что, если зловред уже пролез или раздаётся под видом честного приложения? Тут включается XProtect - именно его честно можно назвать встроенным антивирусом для mac, хотя Apple это слово не любит.
XProtect работает на сигнатурах YARA - это движок правил, описывающих характерные куски кода известной малвари. Сигнатуры лежат в бандле и обновляются Apple в фоне, без обновления самой macOS, примерно еженедельно. XProtect молча проверяет приложение в трёх случаях: при первом запуске, при изменении файла, и когда прилетели свежие сигнатуры. Нашёл совпадение - блокирует запуск и предлагает отправить в Корзину.
Посмотреть версию базы (это важно при разборе инцидентов - база старая значит защита дырявая):
Код: Выделить всё
defaults read /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Info.plist CFBundleShortVersionString
Код: Выделить всё
xprotect version
sudo xprotect update
Второй компонент - XProtect Remediator (XPR). Если обычный XProtect это "не пускать на входе", то Remediator это "найти и вычистить то, что уже завелось". Он состоит из набора отдельных сканеров-модулей (по одному на семейство угроз: Adload, DubRobber, Pirrit, Genieo и т.д.) и запускается сам, в фоне, примерно раз в сутки через launchd, без участия пользователя. Обновляется ежемесячно. Это и есть тот "тихий антивирус", который у тебя уже работает, даже если ты про него не слышал.
Увидеть, что Remediator реально отрабатывает, можно через унифицированный лог:
Код: Выделить всё
log show --last 24h --predicate 'subsystem == "com.apple.XProtectFramework.PluginAPI"' --info
Код: Выделить всё
XProtectRemediatorAdload finished scan ... no threats detected
XProtectRemediatorPirrit finished scan ... no threats detected
Про MRT (Malware Removal Tool) - это legacy. Раньше MRT отвечал за удаление известной малвари, но Apple свернула его: его функции переехали в модуль XProtectRemediatorMRTv3 внутри Remediator. Сам отдельный MRT.app давно не обновлялся и в новых системах фактически музейный экспонат. Если видишь упоминания MRT в старых статьях - просто знай, что его роль уже у XProtect Remediator.
Нужен ли сторонний антивирус mac и откуда вообще ставить софт
Прямой ответ для типового пользователя и разработчика: связки Gatekeeper + нотаризация + XProtect + Remediator в 2026 достаточно, отдельный антивирус для mac не обязателен. Платный сканер чаще даёт ложное чувство защиты, грузит систему и сам лезет в чувствительные места, чем реально что-то ловит сверх XProtect. Когда сторонний продукт оправдан: парк машин под централизованным контролем (EDR с телеметрией для SOC), требования комплаенса, или ты работаешь с заведомо грязными образцами. Для остального антивирус mac - это в основном маркетинг на старом страхе "вирусы на mac".
Настоящая защита - гигиена источников, потому что 99% заражений это добровольно запущенный "крякнутый" софт:
- Ставь из App Store, либо с официального сайта разработчика, либо через Homebrew (brew install / brew install --cask). Homebrew тянет cask с проверкой контрольной суммы по официальному рецепту - это резко надёжнее, чем dmg с левого зеркала.
- Любой "activator", "crack", "keygen", "patched" под macOS считай зловредом по умолчанию. Их специально подписывают валидным Developer ID и иногда даже нотаризуют, чтобы пройти Gatekeeper - доверие к источнику тут не спасает.
- Не снимай карантин и не жми "Open Anyway", не понимая, что именно запускаешь. Это единственная дверь, которую ты открываешь сам.
- Держи систему обновлённой: даже без полного апдейта macOS подтягивай фоновые обновления XProtect (sudo xprotect update) - сигнатуры это твоя свежесть защиты.
Повтори на своей машине, по шагам:
- 1. Проверь, включён ли страж: spctl --status (ждём "assessment enabled").
- 2. Возьми известное приложение и прочитай его подпись: codesign -dv --verbose=4 /Applications/Safari.app - найди строку Authority и TeamIdentifier.
- 3. Спроси у Gatekeeper вердикт: spctl -a -vvv /Applications/Safari.app - убедись, что accepted и видно source.
- 4. Скачай через браузер любой маленький dmg и до открытия глянь карантин: xattr -l ~/Downloads/имя.dmg - найди com.apple.quarantine и имя агента-скачивателя.
- 5. Посмотри версию антивирусной базы: defaults read /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Info.plist CFBundleShortVersionString.
- 6. Загляни в логи фоновых сканов: log show --last 24h --predicate 'subsystem == "com.apple.XProtectFramework.PluginAPI"' --info - найди строки finished scan.
- 1. Чем отличается просто "Developer ID" от "Notarized Developer ID" в выводе spctl, и почему первого в Tahoe по умолчанию недостаточно для запуска?
- 2. Какой именно механизм (xattr) заставляет Gatekeeper устраивать полную проверку при первом запуске, и почему софт из Homebrew стартует молча?
- 3. В чём разница ролей между XProtect и XProtect Remediator, и как часто работает каждый из них?
- 4. Почему spctl --master-disable в современной macOS не отключает Gatekeeper, и каким единственным штатным способом теперь запускают заблокированное доверенное приложение?
Защита macOS от вредоносов - это конвейер доверия: codesign подтверждает автора и целостность, нотаризация добавляет проверку Apple на вредоносность с возможностью отзыва билета, карантин помечает скачанное, Gatekeeper решает пускать или нет, а XProtect и XProtect Remediator ловят и вычищают известную малварь сигнатурами в фоне. Сторонний антивирус mac рядовому пользователю не нужен - нужна дисциплина источника. Запомни главную точку отказа: все слои бессильны, когда ты сам снимаешь карантин и жмёшь "Open Anyway" на "кряке". Доверяй источнику, проверяй подпись, не открывай мутное - и вирусы на mac останутся мифом именно для тебя.