업데이트로 돌아가기
New releaseAug 2, 2026

macnoise v0.2.1

확장 가능한 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, 리스너, 리버스 셸, DNS, TLS
process정확한 실행, 시그널 전달, dylib 주입, Gatekeeper 우회, osascript
file범위가 제한된 탐색, 리터럴 읽기/복사, 생성, 수정, 아카이빙, 은닉, 디코이 암호화
tcc정확한 전체 디스크 접근, 연락처, 손쉬운 사용, 화면 기록 요구사항을 포함한 TCC 권한 프로브
credential네이티브 자격 증명 저장소 접근
volume디스크 이미지 생성 및 마운트된 볼륨 수명 주기
serviceLaunchd 열거, LaunchAgent/Daemon 지속성, cron, 셸 프로필, 로그인 항목
plistPlist 생성 및 수정
evasion로그 삭제, 타임스톰핑, 기록 제거, 위장

모든 모듈, 매개변수, 출력, 이벤트 유형, 권한, 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 단계로 재사용할 수 있으며, include는 상대 경로이고 루트 시나리오 디렉터리 위로 이동할 수 없으며, 순환 검사를 거치고, 최대 8단계로 제한됩니다. MacNoise는 실행 전에 전체 그래프를 검증하고, 실행에 하나의 전용 작업 공간을 부여하며, 호출된 모듈을 역순으로 정리합니다. 입력을 제공하려면 --input content=value를, 버전이 지정된 실행 보고서에는 --report report.json을 사용하십시오.

아티팩트를 그대로 남겨두기

기본적으로 모든 모듈은 완료 시 스스로를 되돌립니다. 이는 보통 원하는 동작이지만, 그 결과 탐지는 설치 이벤트만 보게 됩니다. 여러분의 스택이 지속성 자체를 탐지하는지 검증하려면 - ~/Library/LaunchAgents에 있는 LaunchAgent, cron 항목, 수정된 셸 프로필 등 - 스캔이 실행될 때 해당 아티팩트가 여전히 존재해야 합니다:

./macnoise run svc_launch_agent --no-cleanup

정리를 건너뛰는 각 모듈은 자신의 이름을 출력하는 한 줄을 인쇄하며, 감사 로그에는 ok 대신 cleanup_result: skipped가 기록되므로, 지속성을 남긴 실행이 정리된 실행으로 오인되는 일은 결코 없습니다. 특정 모듈이 무엇을 생성하는지 확인하려면 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과 하나의 타입이 지정된 subject를 가집니다(스키마 2.0). outcome은 MacNoise가 시도한 동작에 무슨 일이 일어났는지를 나타내고, subject는 관련된 파일, 프로세스, 네트워크 엔드포인트, 서비스 또는 리소스를 식별합니다:

outcome의미사람용 표식
executed동작이 실행되었고 모듈이 주장하는 대로 수행됨[+]
denied동작이 실행되었으나 환경이 이를 거부함[-]
indeterminate동작이 실행되었으나 아무것도 결론지을 수 없음[?]
errorMacNoise 자체가 동작을 수행하지 못함[!]

거부된 TCC 프로브나 죽은 C2로 향하는 비컨은 바로 이 도구가 생성하기 위해 존재하는 텔레메트리이므로, MacNoise 자체가 실패했음을 뜻하는 error와는 구별됩니다. 감사 로그는 동일한 값을 unmapped.outcome에 기록합니다. 민감하다고 선언된 매개변수는 관리형 감사 레코드와 명령줄 아이덴티티에서 [REDACTED]로 대체됩니다.

감사 로그는 추가 모드로 열리므로, 여러 실행의 레코드가 일괄 분석을 위해 하나의 파일에 쌓입니다. 모듈을 추가하면서 새 이벤트 유형이 OCSF로 어떻게 분류되는지 알고 싶다면 CONTRIBUTING.md를 참고하세요.

모듈 레퍼런스

생성된 모듈 카탈로그는 이름, 매개변수, 출력, 이벤트 유형, 권한 및 ATT&CK 매핑에 대한 권위 있는 레퍼런스입니다. 카테고리 노트는 플랫폼 동작과 운영 경계를 설명합니다:

카테고리README
networkmodules/network/README.md
processmodules/process/README.md
filemodules/file/README.md
tccmodules/tcc/README.md
credentialmodules/credential/README.md
volumemodules/volume/README.md
servicemodules/service/README.md
plistmodules/plist/README.md
evasionmodules/evasion/README.md

시나리오

시나리오는 모듈을 순서가 있는 시퀀스로 연결합니다 - 탐지 체계에 대해 다단계 침해 패턴을 재현하는 단일 YAML 파일입니다.

파일설명
network_only.yamlTCP, 리스너, DNS, HTTP 비컨, HTTP 유출 작업을 조합
edr_validation.yaml포괄적인 EDR 탐지 커버리지
full_sweep.yaml모든 카테고리
lazarus_group.yamlLazarus Group: dylib 인젝션, 서비스 탐색, 리버스 셸, LaunchAgent 지속성
amos_atomic_stealer.yamlAMOS / Atomic Stealer: MaaS 인포스틸러, Gatekeeper 우회, 키체인 덤프, ZIP 유출, 백도어 지속성
clickfix.yamlClickFix: Terminal에 붙여넣는 난독화된 원라이너, base64 디코드, 2단계 페치, LaunchAgent 지속성
ransomware.yaml랜섬웨어 영향: 평문 미끼 파일 배치, 암호화, 그다음 랜섬 노트 드롭
discovery.yamlargv 기반 시스템, 계정, 네트워크, 보안 소프트웨어 탐색 레시피를 조합
process_chain.yaml명시적 인자 벡터로 구성된 3개 프로세스 셸 체인
file_flow.yaml생성, 수정, 범위 제한 탐색, 읽기, 복사, 아카이브로 이어지는 연결된 흐름
mounted_execution.yaml관찰된 디스크 이미지 마운트 지점에서 페이로드를 생성하고 실행

카테고리