返回更新列表
新发布Sep 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、信标、监听器、反向 Shell、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
tccTCC 权限探测(完全磁盘访问、通讯录、钥匙串、辅助功能、屏幕录制)tcc_fda, tcc_contacts, tcc_keychain, tcc_accessibility, tcc_screen_recording
endpoint_securityES 框架事件触发,包括 .dmg 挂载和载荷执行es_file, es_process, es_mount
serviceLaunchAgent/Daemon 持久化、cron、Shell 配置文件、登录项svc_launch_agent, svc_launch_daemon, svc_cron, svc_shell_profile, svc_login_item
plistPlist 创建和修改plist_create, plist_modify
xpcXPC 服务枚举xpc_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输出格式:humanjsonl
--output(无)将输出写入文件(除 stdout 之外)
--verbosefalse详细输出,包括清理错误
--dry-runfalse预览操作而不执行
--no-cleanupfalse保留模块产物(见下文)
--timeout30每个模块的超时时间(秒)
--audit-log(无)将 OCSF 1.7.0 审计记录写入 JSONL 文件
--config(无)从 YAML 配置文件加载默认值

保留产物

默认情况下,每个模块在完成时会自行还原。这通常是你想要的,但这也意味着检测只能看到安装事件。要验证你的安全堆栈能否检测到持久化本身——位于 ~/Library/LaunchAgents 中的 LaunchAgent、cron 条目、被修改的 Shell 配置文件——产物必须在扫描运行时仍然存在:

./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(schema 1.1)。success 表示 MacNoise 是否正常工作;outcome 表示其尝试的操作发生了什么:

outcome含义人工标记
executed操作已执行并完成了模块声称要做的事[+]
denied操作已执行但环境拒绝了它[-]
indeterminate操作已执行,但无法得出任何结论[?]
errorMacNoise 自身未能执行该操作[!]

被拒绝的 TCC 探测或指向失效 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 组织:dylib 注入、服务发现、反向 Shell、plist 持久化
amos_atomic_stealer.yamlAMOS / Atomic Stealer:MaaS 信息窃取器、Gatekeeper 绕过、钥匙串转储、ZIP 外泄、后门持久化
clickfix.yamlClickFix:粘贴到终端中的混淆单行命令、base64 解码、第二阶段获取、LaunchAgent 持久化

两个 APT 场景逐技术地遵循真实记录的入侵序列——每个 YAML 文件都引用了其构建所依据的实际威胁情报,并标注了每一步所演练的 MITRE 技术,因此请从那里获取完整分解,而不是在此复述。

先进行干跑:

./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 直接从你的 Conventional Commit PR 标题生成新版本,因此 feat: add net_tls modulefix: correct beacon jitter 既是你的 PR 标题,也是你的变更日志条目。

免责声明

MacNoise 仅用于授权的安全测试、EDR 验证以及针对你拥有或已获得明确书面许可进行测试的系统的检测工程。作者对滥用不承担任何责任。

AI 代码政策

欢迎 AI 代码贡献,但请记住,代码审查目前将是一个以人工为主导的过程,这意味着我们能审查的代码量有限。请将 PR 限制为特定的修复或新的遥测模块。包含大量变更的 PR 很可能会被关闭。

分类