Juwon1405/yushin-mac-artifact-collector

GitHub: Juwon1405/yushin-mac-artifact-collector

一款面向macOS的零依赖模块化DFIR取证数据收集脚本,可快速提取系统、网络、浏览器、持久化等十类关键artifact并生成符合取证标准的SHA-256清单。

Stars: 1 | Forks: 0

# yushin-mac-artifact-collector [![Shell](https://img.shields.io/badge/shell-bash-4EAA25?logo=gnu-bash&logoColor=white)](https://www.gnu.org/software/bash/) [![macOS](https://img.shields.io/badge/macOS-10.15%2B-000000?logo=apple&logoColor=white)](https://support.apple.com/macos) [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![Status](https://img.shields.io/badge/status-active-brightgreen)]() 一个模块化、符合取证标准的 artifact 收集工具,专为需要从 macOS 终端快速获取取证数据的 DFIR 分析师构建 —— 无需安装 Agent,无需 Homebrew,无需 Python。只需 `bash` + macOS 内置工具。 ## ✨ 亮点 - **单文件,零依赖。** 将 `collector.sh` 拷贝到任何 macOS 机器(10.15+)上并运行即可。 - **10 个独立模块。** 可运行全部、单个或逗号分隔的部分模块。 - **符合取证标准。** 为每个收集的 artifact 提供 SHA-256 清单,确保证据保管链的完整性。 - **超时保护。** 每个命令都被包装执行 —— 无响应的命令会被终止并标记为 `[timeout]`,绝不会阻塞整个运行过程。 - **供应链攻击模块。** 内置 IOC 扫描,针对 [litellm PyPI 供应链攻击 (2026-03)](https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/) 以及通用的 `.pth` / 缓存投毒模式。 - **带有 WAL/SHM 的浏览器数据库。** 连同附属文件一起复制 Chrome / Edge / Firefox / Safari 的历史记录,以保留未提交的事务。 ## 🚀 快速开始 ``` # 完整收集(所有 modules)— 建议使用 sudo 以确保完整覆盖 sudo ./collector.sh # 快速模式(缩减的 log 窗口,更快的收集) sudo ./collector.sh --quick # 仅运行特定 modules ./collector.sh --modules supply_chain,network,persistence # 列出可用 modules ./collector.sh --list-modules ``` **输出:** 当前工作目录下的 `{hostname}_{YYYYMMDD_HHMM}.zip`。 ## 📋 要求 | 项目 | 详情 | |------|--------| | 操作系统 | macOS 10.15 (Catalina) 或更高版本 | | Shell | `/bin/bash`(所有 macOS 均预装) | | 权限 | 无需 `sudo` 即可运行,但**建议使用 `sudo`** 以完整访问 `/Library/`、`/var/log/` 和 Unified Log | | 依赖 | 无 —— 仅使用 macOS 内置工具(`system_profiler`、`log`、`sqlite3`、`lsof`、`ditto` 等) | | 磁盘 | 收集期间在 `/tmp/` 中需要约 50–300 MB 临时空间(自动清理) | ## 🧩 模块 收集工具被组织为 **10 个独立模块**。可以通过 `--modules` 单独调用或以任意组合调用每个模块。 ### 核心取证模块 #### `system` 操作系统级别的配置和安全态势。 - macOS 版本、硬件配置文件、内核信息、运行时间、启动时间 - Gatekeeper、SIP (System Integrity Protection)、FileVault 状态 - 已加载的内核扩展(`kextstat`、`kmutil`) - XProtect / 隔离事件历史(SQLite 导出) - MDM 注册状态 - Python 解释器代码签名验证 #### `persistence` 在重启或登录后仍能存留的机制。 - 正在运行的进程(`ps aux`) - LaunchAgents(用户 + 系统)、LaunchDaemons - `launchctl list` 输出 - Crontab 条目、登录项 - `~/.config/` 脚本枚举(可捕获 `sysmon.py` 等供应链后门模式) #### `accounts` 用户身份和活动历史。 - 本地用户列表(`dscl`) - 登录历史(`last -100`) - 完整的 `zsh_history` 和 `bash_history` #### `network` 网络配置和活动连接。 - 接口配置、路由表、ARP 缓存 - 活动连接(`netstat -anv`、`lsof -nP -i`) - DNS 配置(`scutil --dns`、`/etc/hosts`、`/etc/resolv.conf`) - Unified Log 中的 SSH / VNC / ARD / 屏幕共享日志条目 #### `remote_kvm` 用于 IP-KVM 检测的 USB/Thunderbolt 设备枚举(例如,PiKVM、IPMI、iDRAC)。 - 针对 USB、Thunderbolt、以太网、网络、显示器的 `system_profiler` - 跨设备清单针对 KVM/BMC/IPMI 指示器的关键字 grep - 电源管理设置(`pmset`) #### `security_agents` 端点安全工具健康检查。 - CrowdStrike Falcon:进程、daemon plist、二进制文件、日志 - Tanium:客户端二进制文件、plist、日志 - JAMF:二进制文件、JSS 连接、版本、plist - 系统扩展状态、MDM 注册详情 #### `browser` 带有 WAL/SHM 完整性的浏览器历史数据库收集。 - Google Chrome(所有配置文件) - Microsoft Edge(所有配置文件) - Mozilla Firefox(所有配置文件) - Safari - 复制 `-wal` 和 `-shm` 附属文件以保留未提交的事务 #### `logs` macOS Unified Log 和传统日志收集。 - Unified Log:过去 6 小时(完整模式)或 1 小时(快速模式) - 过滤后的 Unified Log:身份验证、远程访问、TCC、隐私、安全代理事件 - `/var/log/system.log`、`/var/log/jamf.log` #### `timeline` 软件安装时间线。 - 已安装的应用程序(`system_profiler SPApplicationsDataType`) - 已注册的软件包(`pkgutil --pkgs`) - `/Library/Receipts/InstallHistory.plist` - `/var/log/install.log` ### 供应链攻击模块 #### `supply_chain` Python 和 Node.js 供应链攻击 IOC 检测。为应对 [litellm PyPI 供应链攻击 (2026-03-24)](https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/) 而构建,但专为**通用供应链攻击分诊**设计。 | 检查项 | 检测内容 | |-------|-----------------| | **恶意 `.pth` 文件** | 全盘扫描 `litellm_init.pth` 并导出 `site-packages` 中所有 `.pth` 文件的内容 | | **包审计** | 在所有 Python 解释器中执行 `pip list` / `pip show litellm` | | **缓存投毒** | 扫描 `uv`、`pip` 和 `pipx` 缓存以查找恶意 artifact | | **虚拟环境扫描** | 查找 `~/` 下的所有 `site-packages` 目录,检查 litellm 和 `.pth` 文件 | | **后门持久化** | `~/.config/sysmon/sysmon.py`(litellm 后门模式) | | **C2 通信** | 针对 `litellm.cloud` 的 DNS 解析日志,针对活动 C2 连接的 `lsof` | | **凭据窃取** | SSH 密钥、AWS/GCP/Azure 凭据、kubeconfig、`.env` 文件的访问时间戳 | | **Kubernetes 横向移动** | Service account token,`kube-system` 中的 `node-setup-*` pod | | **Node.js 钩子** | `package.json` 中的 `preinstall` / `postinstall` 脚本检测 | | **Fork 炸弹指标** | Python 进程计数(指数级 `.pth` 重复触发检测) | **快速 litellm 扫描(单条命令):** ``` ./collector.sh --quick --modules supply_chain ``` ## 🚩 标志 | 标志 | 描述 | |------|-------------| | `--quick` | 减少 Unified Log 收集时间窗口(6小时→1小时短期,24小时→6小时长期)和行数限制。也可通过 `COLLECTOR_QUICK=1` 环境变量使用。 | | `--modules mod1,mod2` | 要运行的模块的逗号分隔列表。仅执行指定的模块。 | | `--list-modules` | 打印可用的模块名称并退出。 | ## 📦 输出结构 ``` {hostname}_{timestamp}.zip ├── metadata/ │ ├── collection_meta.txt # Collector version, host, mode, modules │ └── hashes_sha256.txt # SHA-256 manifest of all collected files ├── system/ ├── persistence/ ├── accounts/ ├── network/ ├── remote_kvm/ ├── security_agents/ ├── browser/ │ ├── chrome_Default_History.db │ ├── chrome_Default_History.db-wal │ ├── chrome_Default_History.db-shm │ ├── safari_History.db │ └── ... ├── logs/ ├── timeline/ └── supply_chain/ ├── pth_litellm_init.txt ├── pth_all_site_packages.txt ├── pip_list_all.txt ├── pip_show_litellm.txt ├── sysmon_backdoor_ls.txt ├── sysmon_backdoor_content.txt ├── dns_litellm_cloud.txt ├── credential_file_timestamps.txt ├── k8s_check.txt └── ... ``` 仅会为已启用的模块创建目录。`metadata/` 目录将始终存在。 ## ✅ 完整性验证 每次收集都会包含 `metadata/hashes_sha256.txt` —— 这是归档中每个文件的 SHA-256 哈希值,在打包**之前**生成。解压后要进行验证: ``` cd {extracted_directory} shasum -a 256 -c metadata/hashes_sha256.txt ``` ## 🎯 设计原则 - **零依赖。** 不需要 Python,不需要 Ruby,不需要 Homebrew 包。纯粹的 bash + macOS 内置工具。 - **超时保护。** 每个命令都带有独立的超时设置(默认 120 秒,可按命令配置)运行。无响应的命令将被终止并在输出中标记为 `[timeout]`。 - **非破坏性。** 只读收集 —— 不修改任何文件,不更改目标系统上的任何设置。 - **便携。** 单个文件,通过 `scp` / AirDrop / USB 复制后即可立即运行。 - **符合取证标准。** 提供 SHA-256 清单,用于证据保管链文档记录。 ## 🔧 扩展收集工具 要添加新模块: 1. 按照现有模式定义一个名为 `module_{name}()` 的函数 2. 将模块名称添加到 `ALL_MODULES` 变量中 3. 在 `--list-modules` 输出中添加一行描述 4. 在函数顶部使用 `add_steps N` 以实现准确的进度跟踪 5. 使用 `capture`、`copy_if_exists` 或 `copy_with_wal` 辅助函数进行收集 ``` module_my_custom() { add_steps 3 capture "some_command" "$WORK/my_custom/output.txt" capture "another_command" "$WORK/my_custom/other.txt" copy_if_exists "/path/to/artifact" "$WORK/my_custom/artifact.bin" } ``` ## ⚠️ 已知限制 - **完全磁盘访问权限 (FDA):** 部分 artifact(例如 Safari 历史记录、Mail 数据库)需要在 **系统设置 → 隐私与安全性 → 完全磁盘访问权限** 中为 Terminal 或 iTerm 授予 FDA。如果没有 FDA,这些文件将显示 `[skip] not found` 或 `Operation not permitted`。 - **Unified Log 深度:** macOS Unified Log 的保留期因系统而异。在日志量庞大的系统上,较旧的条目即使在 24 小时窗口内也可能已被轮换覆盖。 - **SIP 保护路径:** System Integrity Protection 会阻止访问某些系统目录。使用 `sudo` 运行会有所帮助,但某些路径在设计上仍不可访问。 - **浏览器数据库锁定:** 如果浏览器正在运行,复制的数据库文件可能处于部分写入状态。WAL/SHM 的复制可以缓解此问题,但若要进行取证级别的浏览器分析,建议关闭浏览器或使用 `sqlite3` 的 `.clone` 命令。 ## 🤝 配套平台 如需一个基于 Web 的**取证平台**来接收此收集工具的 ZIP 输出、将 artifact 解析为可搜索的证据表并生成 DFIR PDF 报告(可选本地 Ollama / OpenAI 辅助),请参见: ➡️ **[yushin-mac-forensics-platform](https://github.com/Juwon1405/yushin-mac-forensics-platform)** ## 📜 版本历史 | 版本 | 日期 | 变更 | |---------|------|---------| | 2.0 | 2026-03-25 | 模块化架构,`--modules` 选择性执行,`supply_chain` 模块(litellm PyPI IOC),`--quick` CLI 标志,WAL/SHM 浏览器数据库支持,进度跟踪大修 | | 1.0 | 2026-01 | 初始的单体收集工具,涵盖系统、持久化、网络、浏览器、安全代理和远程 KVM | ## 📄 许可证 MIT —— 详见 [LICENSE](LICENSE)。 ## ✍️ 作者 **YuShin (優心 / Bang Juwon)** —— DFIR 从业者,东京。 如果此工具对您有帮助,欢迎给仓库点个 ⭐。欢迎提交 Issue / PR。
标签:Artifact Collector, DAST, HTTP工具, IOC扫描, Linux/macOS运维, PB级数据处理, SHA-256校验, 供应链攻击, 单文件, 取证收集, 子域名变形, 安全运维, 库, 应急响应, 应急响应工具, 应用安全, 恶意软件分析, 搜索语句(dork), 数字取证, 数字取证, 文档安全, 模块化设计, 浏览器取证, 终端安全, 网络安全审计, 自动化修复, 自动化脚本, 自动化脚本, 证据保全, 零依赖