Назад к обновлениям
New releaseSep 3, 2026

macnoise v0.5.0

Расширяемый генератор системной телеметрии MacOS.

Поделиться
Description of image

CI Release

MacNoise

MacNoise генерирует реальную телеметрию macOS: сетевые подключения, запись файлов, запуск процессов, изменения plist, проверки TCC и многое другое. Направьте его на машину, работающую под вашим EDR, SIEM или межсетевым экраном, и посмотрите, что на самом деле срабатывает — а не то, что, по заявлениям вендора, должно срабатывать.

О мотивации и дизайне см. пост в блоге о релизе.

Быстрый старт

# Сборка (добавьте build-amd64 / build-arm64 для кросс-компиляции под Darwin, или release для обоих)
make build

# Список доступных модулей
./macnoise list

# Запуск одного модуля
./macnoise run net_connect --param target=127.0.0.1 --param port=8080

# Предпросмотр без выполнения
./macnoise run svc_launch_agent --dry-run

# Запуск всех сетевых модулей
./macnoise run --category network

# Запуск сценария
./macnoise scenario configs/scenarios/edr_validation.yaml

# Вывод структурированного JSONL
./macnoise run --category file --format jsonl --output /tmp/events.jsonl

Категории телеметрии

КатегорияОписаниеМодули
networkИсходящие подключения, DNS, биконинг, прослушивание, обратные шеллы, TLS, эксфильтрацияnet_connect, net_listen, net_beacon, net_revshell, net_dns, net_dns_exfil, net_tls, net_exfil
processЗапуск процессов, доставка сигналов, внедрение dylib, обнаружение, обход Gatekeeper, osascriptproc_spawn, proc_signal, proc_inject, proc_discovery, proc_gatekeeper, proc_osascript
fileСоздание файлов, изменение, чтение файлов учётных данных и связки ключей, архивирование, скрытиеfile_create, file_modify, file_browser_creds, file_cred_files, file_keychain_copy, file_archive, file_hide
tccПроверки разрешений TCC (FDA, Контакты, Связка ключей, Специальные возможности, Запись экрана)tcc_fda, tcc_contacts, tcc_keychain, tcc_accessibility, tcc_screen_recording
endpoint_securityСобытия фреймворка ES, включая монтирование .dmg и выполнение полезной нагрузкиes_file, es_process, es_mount
serviceПостоянство LaunchAgent/Daemon, cron, профиль оболочки, элементы входаsvc_launch_agent, svc_launch_daemon, svc_cron, svc_shell_profile, svc_login_item
plistСоздание и изменение plistplist_create, plist_modify
xpcПеречисление служб XPCxpc_enumerate
evasionОбход защиты: очистка журналов, изменение временных меток, удаление историиevade_log_clear

Команды

macnoise run <module> [--param key=val ...]   Запуск конкретного модуля
macnoise run --category <cat>                 Запуск всех модулей в категории
macnoise run --all                            Запуск всех модулей
macnoise list [--category <cat>]              Список модулей
macnoise info <module>                        Показать детали модуля, параметры, MITRE
macnoise scenario <file.yaml>                 Запуск YAML-сценария
macnoise categories                           Список категорий с количеством
macnoise version                              Вывод версии

Глобальные флаги

ФлагПо умолчаниюОписание
--formathumanФормат вывода: human или jsonl
--output(нет)Запись вывода в файл (в дополнение к stdout)
--verbosefalseПодробный вывод, включая ошибки очистки
--dry-runfalseПредпросмотр действий без выполнения
--no-cleanupfalseОставить артефакты модуля на месте (см. ниже)
--timeout30Таймаут модуля в секундах
--audit-log(нет)Запись аудиторских записей OCSF 1.7.0 в файл JSONL
--config(нет)Загрузка значений по умолчанию из YAML-файла конфигурации

Оставление артефактов на месте

По умолчанию каждый модуль отменяет свои действия по завершении. Обычно это то, что нужно, но это означает, что детектирование видит только событие установки. Чтобы проверить, что ваш стек обнаруживает само постоянство — LaunchAgent в ~/Library/LaunchAgents, запись в cron, изменённый профиль оболочки — артефакт должен оставаться на месте, когда выполняется сканирование:

./macnoise run svc_launch_agent --no-cleanup

Каждый модуль, пропускающий очистку, выводит строку со своим именем, а журнал аудита записывает cleanup_result: skipped вместо ok, чтобы запуск, оставивший постоянство, никогда не был принят за тот, что всё убрал. Используйте macnoise info <module>, чтобы узнать, что создаёт конкретный модуль.

Вы сами отвечаете за их удаление. Повторный запуск того же модуля без флага очистит только то, что создал этот запуск, а не то, что осталось от предыдущего запуска с --no-cleanup.

Журнал аудита

MacNoise записывает два отдельных потока. События телеметрии — то, что реально видит ваш EDR/SIEM — выводятся в stdout или --output. Второй, опциональный поток записывает, что сделал сам MacNoise: какие модули запускались, результаты предусловий/очистки и сопоставления MITRE, в формате OCSF 1.7.0 JSONL.

./macnoise scenario configs/scenarios/amos_atomic_stealer.yaml --audit-log /tmp/audit.jsonl

Каждое событие телеметрии несёт outcome наряду с success (схема 1.1). success указывает, сработал ли MacNoise; outcome указывает, что произошло с действием, которое он пытался выполнить:

outcomeЗначениеМаркер в человекочитаемом виде
executedДействие выполнено и сделало то, что заявляет модуль[+]
deniedДействие выполнено, но среда отказала ему[-]
indeterminateДействие выполнено, но выводов сделать нельзя[?]
errorСам MacNoise не смог выполнить действие[!]

Отклонённая проверка TCC или биконинг на мёртвый C2 — это та телеметрия, ради которой существует этот инструмент, поэтому они остаются success: true и различаются по outcome. Только error устанавливает success: false. В журнале аудита то же значение появляется в unmapped.outcome, поскольку статус OCSF одинаково записывает и отклонённое действие, и сломанный инструмент.

Журнал аудита открывается в режиме добавления, поэтому записи из нескольких запусков накапливаются в одном файле для пакетного анализа. Если вы добавляете модуль и хотите узнать, как новый тип события классифицируется в OCSF, см. CONTRIBUTING.md.

Справочник модулей

Документация модулей находится рядом с каждой категорией:

Сценарии

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

ФайлОписание
network_only.yamlВсе сетевые модули
edr_validation.yamlКомплексное покрытие детектирования EDR
full_sweep.yamlВсе категории
lazarus_group.yamlLazarus Group: внедрение dylib, обнаружение служб, обратный шелл, постоянство через plist
amos_atomic_stealer.yamlAMOS / Atomic Stealer: MaaS-инфостилер, обход Gatekeeper, дамп связки ключей, эксфильтрация ZIP, постоянство бэкдора
clickfix.yamlClickFix: обфусцированный однострочник, вставленный в Terminal, декодирование base64, загрузка второй стадии, постоянство LaunchAgent

Два APT-сценария следуют реальным задокументированным последовательностям вторжений, техника за техникой — каждый YAML-файл ссылается на реальную threat intel, на которой он построен, и аннотирует каждый шаг техникой MITRE, которую он задействует, так что начните с них для полного разбора, а не с пересказа здесь.

Сначала dry-run:

./macnoise scenario configs/scenarios/<scenario>.yaml --dry-run

Сверка с вашим SIEM/EDR: комментарий к каждому шагу называет технику, которую он должен запускать. Отсутствие совпадающего алерта после реального запуска — это пробел в вашем покрытии.

Создание собственного:

name: My Custom Scenario
steps:
  - module: net_connect
    params:
      target: "192.168.1.1"
      port: "443"
  - category: file
    params:
      base_dir: "/tmp/test"

Участие в разработке

См. CONTRIBUTING.md о добавлении новых модулей, стиле кода и полном процессе PR.

Релизы автоматизированы — release-please выпускает новую версию прямо из заголовка вашего Conventional Commit PR, так что feat: add net_tls module или fix: correct beacon jitter — это одновременно и заголовок вашего PR, и запись в журнале изменений.

Отказ от ответственности

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

Политика в отношении ИИ-кода

Вклад кода от ИИ приветствуется, но имейте в виду, что ревью кода в настоящее время будет процессом под руководством человека, а значит, мы можем просмотреть лишь ограниченный объём кода. Пожалуйста, ограничивайте PR конкретным исправлением или новым модулем телеметрии. PR с обширными изменениями, скорее всего, будут закрыты.

Категории