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

macnoise v1.0.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 scenario configs/scenarios/file_flow.yaml --format jsonl --output /tmp/events.jsonl

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

КатегорияОписание
networkTCP-соединения, HTTP, прослушиватели, reverse shell, DNS и TLS
processТочное выполнение, доставка сигналов, инъекция dylib, обход Gatekeeper и osascript
fileОграниченное обнаружение, буквальное чтение/копирование, создание, изменение, архивирование, сокрытие и шифрование-приманка
tccПроверки разрешений TCC с точными требованиями Full Disk Access, Contacts, Accessibility или Screen Recording
credentialДоступ к нативному хранилищу учётных данных
volumeСоздание образов дисков и жизненный цикл смонтированных томов
serviceПеречисление Launchd, персистентность LaunchAgent/Daemon, cron, профиль оболочки и элементы входа
plistСоздание и изменение plist
evasionОчистка журналов, timestomping, удаление истории и маскировка

См. сгенерированный каталог модулей со всеми модулями, параметрами, выводом, типами событий, привилегиями и сопоставлением с ATT&CK.

Команды

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> [--input key=val] [--report report.json]
                                                Run a YAML scenario
macnoise categories                           List categories with counts
macnoise version                              Print version

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

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

Поток данных сценария

Файлы сценариев используют version: 1. Входные данные и выходные данные модулей типизированы, и последующий шаг ссылается на них с помощью явных сопоставлений, а не строковой интерполяции:

version: 1
name: Archive one generated artifact
on_error: stop
inputs:
  content:
    type: string
    required: true
steps:
  # Custom modules declare these outputs through OutputSpecs.
  - id: create
    module: custom_create
    params:
      content:
        input: content
  - id: archive
    module: custom_archive
    params:
      source:
        output: create.path
outputs:
  archive:
    output: archive.path

Ссылаться можно только на выходы, объявленные модулем. Локальные сценарии можно переиспользовать с помощью шага include; включения относительны, не могут выходить за пределы корневого каталога сценариев, проверяются на циклы и ограничены восемью уровнями. MacNoise проверяет весь граф перед выполнением, выделяет запуску одно приватное рабочее пространство и очищает вызванные модули в обратном порядке. Используйте --input content=value для передачи входных данных и --report report.json для версионированного отчёта о выполнении.

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

По умолчанию каждый модуль откатывает свои изменения по завершении. Обычно это то, что нужно, но это означает, что обнаружение видит только событие установки. Чтобы проверить, что ваш стек обнаруживает саму персистентность — 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 и один типизированный subject (схема 2.0). Outcome сообщает, что произошло с действием, которое попытался выполнить MacNoise, а subject идентифицирует задействованный файл, процесс, сетевую конечную точку, службу или ресурс:

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

Отклонённая проверка TCC или beacon к мёртвому C2 — это именно та телеметрия, для генерации которой существует этот инструмент, поэтому она отличается от error, который означает, что сам MacNoise потерпел неудачу. Журнал аудита записывает то же значение в unmapped.outcome. Параметры, объявленные как чувствительные, заменяются на [REDACTED] в управляемых записях аудита и идентичности командной строки.

Категории