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

macnoise v0.2.0

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

Поделиться
Описание изображения

CI Release

MacNoise

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

Об истории создания и архитектуре читайте в анонсе релиза.

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

# Build (add build-amd64 / build-arm64 to cross-compile for Darwin, or release for both)
make build

# List available modules
./macnoise list

# Run a single module
./macnoise run net_connect --param target=127.0.0.1 --param port=8080

# Preview without executing
./macnoise run svc_launch_agent --dry-run

# Run all network modules
./macnoise run --category network

# Run a scenario
./macnoise scenario configs/scenarios/edr_validation.yaml

# Emit structured JSONL output
./macnoise run --category file --format jsonl --output /tmp/events.jsonl

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

КатегорияОписаниеМодули
networkИсходящие подключения, DNS, биконинг, прослушивающие порты, reverse shell, эксфильтрацияnet_connect, net_listen, net_beacon, net_revshell, net_dns, net_exfil
processПорождение процессов, доставка сигналов, внедрение dylib, обнаружение (discovery), обход Gatekeeper, osascriptproc_spawn, proc_signal, proc_inject, proc_discovery, proc_gatekeeper, proc_osascript
fileСоздание и изменение файлов, чтение файлов с учётными данными и keychain, архивирование, сокрытиеfile_create, file_modify, file_browser_creds, file_cred_files, file_keychain_copy, file_archive, file_hide
tccTCC-зонды разрешений (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, профиль оболочки, элементы входа (Login Items)svc_launch_agent, svc_launch_daemon, svc_cron, svc_shell_profile, svc_login_item
plistСоздание и изменение plistplist_create, plist_modify
xpcПеречисление XPC-сервисовxpc_enumerate

Команды

macnoise run <module> [--param key=val ...]   Run a specific module
macnoise run --category <cat>                 Run all modules in a category
macnoise run --all                            Run all modules
macnoise list [--category <cat>]              List modules
macnoise info <module>                        Show module details, params, MITRE
macnoise scenario <file.yaml>                 Run a YAML scenario
macnoise categories                           List categories with counts
macnoise version                              Print version

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

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

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

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

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

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

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

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

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

Сценарии

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

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

Два 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"

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

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

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

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

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

Политика в отношении кода, созданного ИИ

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

Категории