
macnoise v0.5.0
확장 가능한 MacOS 시스템 텔레메트리 생성기.
MacNoise
MacNoise는 실제 macOS 텔레메트리를 생성합니다: 네트워크 연결, 파일 쓰기, 프로세스 생성, plist 변경, TCC 프로브 등. EDR, SIEM 또는 방화벽 스택이 실행 중인 머신에 지정하여 실제로 트리거되는 항목을 확인하세요 - 벤더 데이터시트가 트리거된다고 주장하는 항목이 아니라.
동기와 설계에 대한 배경은 릴리스 블로그 게시물을 참조하세요.
빠른 시작
# 빌드 (Darwin용 크로스 컴파일은 build-amd64 / build-arm64 추가, 둘 다는 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, 비콘, 리스너, 리버스 셸, TLS, 데이터 유출 | net_connect, net_listen, net_beacon, net_revshell, net_dns, net_dns_exfil, net_tls, net_exfil |
process | 프로세스 생성, 시그널 전달, dylib 주입, 탐지, Gatekeeper 우회, osascript | proc_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 |
tcc | TCC 권한 프로브 (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, 셸 프로필, 로그인 항목 | svc_launch_agent, svc_launch_daemon, svc_cron, svc_shell_profile, svc_login_item |
plist | Plist 생성 및 수정 | plist_create, plist_modify |
xpc | XPC 서비스 열거 | 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 버전 출력
전역 플래그
| 플래그 | 기본값 | 설명 |
|---|---|---|
--format | human | 출력 형식: human 또는 jsonl |
--output | (없음) | 출력을 파일에 기록 (stdout 외에 추가) |
--verbose | false | 정리 오류를 포함한 상세 출력 |
--dry-run | false | 실행 없이 작업 미리보기 |
--no-cleanup | false | 모듈 아티팩트를 그대로 유지 (아래 참조) |
--timeout | 30 | 모듈별 타임아웃 (초) |
--audit-log | (없음) | OCSF 1.7.0 감사 레코드를 JSONL 파일에 기록 |
--config | (없음) | YAML 구성 파일에서 기본값 로드 |
아티팩트 유지
기본적으로 모든 모듈은 완료 시 스스로 되돌립니다. 일반적으로 원하는 동작이지만, 탐지가 설치 이벤트만 볼 수 있음을 의미합니다. 스택이 지속성 자체를 탐지하는지 검증하려면 - ~/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
모든 텔레메트리 이벤트는 success (스키마 1.1)와 함께 outcome을 전달합니다. success는 MacNoise가 작동했는지 여부를 나타내고, outcome은 시도한 작업에 무슨 일이 발생했는지를 나타냅니다:
outcome | 의미 | 사람용 표시 |
|---|---|---|
executed | 작업이 실행되었고 모듈이 주장하는 대로 수행됨 | [+] |
denied | 작업이 실행되었지만 환경이 거부함 | [-] |
indeterminate | 작업이 실행되었지만 결론을 내릴 수 없음 | [?] |
error | MacNoise 자체가 작업을 수행하지 못함 | [!] |
거부된 TCC 프로브 또는 죽은 C2로의 비콘은 이 도구가 생성하기 위해 존재하는 텔레메트리이므로, 이러한 항목은 success: true로 유지되고 outcome으로 구분됩니다. error만 success: false로 설정합니다. 감사 로그에서 동일한 값은 unmapped.outcome에 나타납니다. OCSF status는 거부된 작업과 손상된 도구를 동일하게 기록하기 때문입니다.
감사 로그는 추가 모드로 열리므로 여러 실행의 레코드가 일괄 분석을 위해 하나의 파일에 누적됩니다. 새 이벤트 유형이 OCSF로 어떻게 분류되는지 알고 싶다면 CONTRIBUTING.md를 참조하세요.
모듈 참조
모듈 문서는 각 카테고리와 함께 제공됩니다:
| 카테고리 | README |
|---|---|
network | modules/network/README.md |
process | modules/process/README.md |
file | modules/file/README.md |
tcc | modules/tcc/README.md |
endpoint_security | modules/endpoint_security/README.md |
service | modules/service/README.md |
plist | modules/plist/README.md |
xpc | modules/xpc/README.md |
evasion | modules/evasion/README.md |
시나리오
시나리오는 모듈을 순서 있는 시퀀스로 연결합니다 - 탐지에 대해 다단계 침입 패턴을 재생하는 단일 YAML 파일.
| 파일 | 설명 |
|---|---|
network_only.yaml | 모든 네트워크 모듈 |
edr_validation.yaml | 포괄적인 EDR 탐지 커버리지 |
full_sweep.yaml | 모든 카테고리 |
lazarus_group.yaml | Lazarus Group: dylib 주입, 서비스 탐지, 리버스 셸, plist 지속성 |
amos_atomic_stealer.yaml | AMOS / Atomic Stealer: MaaS 인포스틸러, Gatekeeper 우회, 키체인 덤프, ZIP 유출, 백도어 지속성 |
clickfix.yaml | ClickFix: Terminal에 붙여넣은 난독화된 원라이너, base64 디코드, 2단계 페치, 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 module 또는 fix: correct beacon jitter는 PR 제목이자 변경 로그 항목입니다.
면책 조항
MacNoise는 승인된 보안 테스트, EDR 검증 및 소유하거나 명시적 서면 허가를 받은 시스템에 대한 탐지 엔지니어링을 위한 것입니다. 작성자는 오용에 대해 어떠한 책임도 지지 않습니다.
AI 코드 정책
AI 코드 기여는 괜찮지만, 코드 리뷰는 현재 인간 주도 프로세스이므로 검토할 수 있는 코드의 양이 제한적임을 유의하세요. PR은 특정 수정 또는 새 텔레메트리 모듈로 제한해 주세요. 광범위한 변경이 포함된 PR은 닫힐 가능성이 높습니다.