Volver a actualizaciones
Nuevo releaseJul 31, 2026

macnoise v0.2.0

Generador extensible de telemetría del sistema macOS.

Compartir
Descripción de la imagen

CI Release

MacNoise

MacNoise genera telemetría real de macOS: conexiones de red, escrituras de archivos, creación de procesos, mutaciones de plist, sondeos de TCC y más. Apúntalo a una máquina que ejecute tu stack de EDR, SIEM o firewall y observa qué se dispara realmente, no lo que la hoja de datos del proveedor afirma que se disparará.

Para conocer los antecedentes sobre la motivación y el diseño, consulta la publicación del blog de lanzamiento.

Inicio rápido

# 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

Categorías de telemetría

CategoríaDescripción
networkConexiones TCP, HTTP, listeners, reverse shells, DNS y TLS
processEjecución exacta, entrega de señales, inyección de dylib, bypass de Gatekeeper y osascript
fileDescubrimiento acotado, lecturas/copias literales, creación, modificación, archivado, ocultación y cifrado de señuelos
tccSondeos de permisos TCC con requisitos exactos de Full Disk Access, Contacts, Accessibility o Screen Recording
credentialAcceso nativo al almacén de credenciales
volumeCreación de imágenes de disco y ciclo de vida de volúmenes montados
serviceEnumeración de Launchd, persistencia de LaunchAgent/Daemon, cron, perfil de shell y Login Items
plistCreación y modificación de plist
evasionLimpieza de logs, timestomping, eliminación de historial y enmascaramiento

Consulta el catálogo de módulos generado para ver cada módulo, parámetro, salida, tipo de evento, privilegio y mapeo ATT&CK.

Comandos

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

Flags globales

FlagPredeterminadoDescripción
--formathumanFormato de salida: human o jsonl
--output(ninguno)Escribir la salida en un archivo (además de stdout)
--verbosefalseSalida detallada, incluidos errores de limpieza
--dry-runfalsePrevisualizar acciones sin ejecutarlas
--no-cleanupfalseDejar los artefactos del módulo en su lugar (ver más abajo)
--timeout30Tiempo de espera por módulo en segundos
--audit-log(ninguno)Escribir registros de auditoría OCSF 1.7.0 en un archivo JSONL
--config(ninguno)Cargar valores predeterminados desde un archivo de configuración YAML
--run-idgeneradoEstablecer el identificador de correlación para esta ejecución

Flujo de datos de escenarios

Los archivos de escenario usan version: 1. Las entradas y salidas de los módulos están tipadas, y un paso posterior las referencia con mapeos explícitos en lugar de interpolación de cadenas:

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

Solo se pueden referenciar las salidas declaradas por un módulo. Los escenarios locales se pueden reutilizar con un paso include; las inclusiones son relativas, no pueden atravesar por encima del directorio raíz del escenario, se comprueban ciclos y están limitadas a ocho niveles. MacNoise valida el grafo completo antes de la ejecución, asigna a la ejecución un espacio de trabajo privado y limpia los módulos invocados en orden inverso. Usa --input content=value para proporcionar entradas y --report report.json para el informe de ejecución versionado.

Dejar artefactos en su lugar

De forma predeterminada, cada módulo se revierte a sí mismo cuando termina. Normalmente eso es lo que quieres, pero significa que una detección solo ve el evento de instalación. Para validar que tu stack detecta la persistencia en sí misma —un LaunchAgent que reside en ~/Library/LaunchAgents, una entrada de cron, un perfil de shell modificado— el artefacto tiene que seguir ahí cuando se ejecute el escaneo:

./macnoise run svc_launch_agent --no-cleanup

Cada módulo que omite la limpieza imprime una línea nombrándose a sí mismo, y el registro de auditoría registra cleanup_result: skipped en lugar de ok, de modo que una ejecución que dejó persistencia atrás nunca se confunde con una que limpió. Usa macnoise info <module> para ver qué crea un módulo determinado.

Eres responsable de eliminarlos tú mismo. Volver a ejecutar el mismo módulo sin el flag limpiará solo lo que esa ejecución creó, no lo que dejó atrás una ejecución anterior con --no-cleanup.

Registro de auditoría

MacNoise escribe dos flujos separados. Los eventos de telemetría —lo que tu EDR/SIEM ve realmente— van a stdout o a --output. Un segundo flujo opcional registra lo que hizo MacNoise en sí: qué módulos se ejecutaron, los resultados de prerequisitos/limpieza y los mapeos MITRE, en JSONL de OCSF 1.7.0.

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

Cada evento de telemetría lleva un outcome autoritativo y un subject tipado (esquema 2.0). El outcome indica qué le ocurrió a la acción que MacNoise intentó, mientras que el subject identifica el archivo, proceso, endpoint de red, servicio o recurso implicado:

outcomeSignificadoMarcador humano
executedLa acción se ejecutó e hizo lo que el módulo afirma[+]
deniedLa acción se ejecutó y el entorno la rechazó[-]
indeterminateLa acción se ejecutó, pero no se puede concluir nada[?]
errorMacNoise en sí falló al llevar a cabo la acción[!]

Un sondeo TCC denegado o un beacon hacia un C2 muerto es la telemetría que esta herramienta existe para generar, por lo que es distinto de error, que significa que MacNoise en sí falló. El registro de auditoría registra el mismo valor en unmapped.outcome. Los parámetros declarados como sensibles se reemplazan con [REDACTED] en los registros de auditoría gestionados y en la identidad de la línea de comandos.

Categorías