只取不改,只呈不断。
LinuxinfoSC 是一套面向应急响应(DFIR)的 Linux 主机取证采集工具集, 采用双轨制设计:
- Strata(Go,deep tier)——零信任单二进制,「索引优先 / 按需深采」主力采集器
- LinuxSC.sh(bash,baseline tier)——纯 POSIX bash 零依赖兜底采集器
同一次应急响应中,能跑二进制的环境用 Strata 拿深度,只允许脚本的环境用 LinuxSC.sh 保底——两条轨产出统一的监管链契约,可被取证分析端直接摄取。
- 只读取向,证据优先 —— 按易失序采集(先内存态后磁盘态), 不改变目标机状态;Strata 采集全程不污染 atime(statx/O_NOATIME)。
- 零信任执行 —— Strata 内置 preflight 环境自检
(LD_PRELOAD/ld.so.preload 劫持检测、自身哈希留痕),critical 即拒采;
全库零
exec.Command/ 零os.Remove(可 grep 验证)。 - 监管链不可断 —— 逐产物 SHA256 固证清单(Ed25519 签名可选)、 采集时刻 + IANA 时区锚点、采集足迹、失败命令零静默日志。
- 诚实边界 —— 覆盖不到的如实标注「未覆盖」,不硬解析、不猜格式; 凭据材料(shadow 哈希、私钥)只取元数据,不取内容。
三段式架构:采集(失陷机,短时跑完即关)、分析(干净机,离线可反复 重跑)、输出(报告渲染)严格分离——证据包是不可变输入,新规则可以对 老证据反复重评。索引优先 / 按需深采:全盘只做元数据索引(不读内容), triage 分诊判定「值不值得深采」,仅命中项读内容算哈希(实测省约 89% IO)。 零信任内核:不依赖目标机任何组件(直读 /proc + statx/O_NOATIME 不污染 atime),preflight 先自检环境可信度。
覆盖面:易失态(进程/网络/持久化/可触发项)→ 已删二进制恢复 (orphan-exe)→ 内核模块三视角对账 → 账户认证面(passwd/sudoers/ authorized_keys)→ 登录历史 → 包基线校验(dpkg/rpm 全系)→ 全盘 EFU 索引 → triage 驱动深采(SHA256+YARA)→ eBPF exec/net 事件流追踪。
亮点:①EFU 兼容索引(分析端检索零适配);②监管链 = 逐产物 SHA256 + Ed25519 签名 + 加载验真拒篡改;③离线研判 verdict 每条结论带证据锚点 (源文件+定位),暴破分层聚合不告警洪水;④atime 零污染经实测验证; ⑤单静态二进制 4.6MB 起,CGO 零依赖。
| Strata(Go) | LinuxSC.sh(bash) | |
|---|---|---|
| 定位 | 主力采集(可跑二进制的环境) | 零依赖兜底(老内核/busybox/禁二进制环境) |
| 形态 | 单静态二进制(CGO 零依赖),三段式 collect/analyze/report | 纯 POSIX bash 单文件 |
| 深度 | eBPF exec/net 追踪、全盘 EFU 索引(只元数据不读内容)、triage 驱动深采(只命中项读内容,省 ~89% IO)、内存优先(已删二进制恢复)、包基线校验(dpkg/rpm 全系) | 快照采集(/proc、网络、日志、持久化、Rootkit 检测、cBPF 嗅探后门专项、包完整性校验、云代理日志) |
| 输出 | manifest.json(逐产物 SHA256 + Ed25519 签名 + 时区锚点 + 采集足迹) | 四件套:_HASH_MANIFEST.txt + _COLLECTION_TIME.txt + _COLLECT_FOOTPRINT.txt + _COLLECT_ERRORS.log + _SYMLINKS.txt |
| 研判 | 离线 verdict(可重跑):暴破聚合/伪装/隐藏进程/持久化/账户异常/完整性对账,每条带证据锚点 | 无(纯采集) |
| 依赖 | Go 1.22+ 编译(部署零依赖);完整功能需 root | 无(sh + 系统自带命令);非 root 自动降级 |
- 易失态:/proc 关键数据(exe/fd 软链、maps 可疑执行段、environ 注入、 cmdline/comm/exe 三方比对、deleted/memfd 检测与样本恢复 ≤20MB)
- 网络:ss/netstat 双份 + /proc/net 原始留存(隐藏 socket 对比)、 conntrack、iptables/nft 规则
- 持久化:cron/at/systemd/udev/init.d/profile.d/pam_exec/rc.local/ ld.so.preload/modules-load.d/xdg autostart 全清单
- 日志:/var/log 关键日志 + journalctl 导出 + last/lastb
- 账户与 SSH:passwd/group(shadow 只取元数据)、authorized_keys、 sshd_config、ldd 库依赖(Ebury IOC 检测)
- Rootkit 专项:lsmod//proc/modules//sys/module 三源 diff、
packet_recvmsg栈检测(cBPF 嗅探后门)、bpftool 四项、eBPF 附着、rpm -Va/debsums包完整性、debugfs 直读 ld.so.preload - 云代理(云 EDR):阿里云安全中心/腾讯云镜/华为 HSS/深信服/青藤/安全狗/ 亚信/MDE/osquery/Wazuh/AWS SSM 等的本地日志与告警数据(P0/P1/P2 分级, 单目录 >200MB 防爆包)
- 采集器本身必须先被信任:请从源码现编(
make build), 不要使用任何来历不明的二进制;克隆后先git log+git diff审计提交历史 - 隔离运行:建议 U 盘/只读挂载输出目录;真实失陷机优先在维护窗口或 隔离环境操作
- preflight 报 critical 不要
--force——那说明目标机环境本身已被劫持, 环境比采集更重要 - 凭据材料原则:
/etc/shadow不复制(只取行数与最近修改时间), 私钥/证书只计数不抽取 - 数据不出机:采集产物只写你指定的输出目录,无任何对外传输
cd strata && make build # 需 Go 1.22+,产 bin/strata
sudo ./bin/strata preflight # 环境可信度自检(强烈建议先跑)
sudo ./bin/strata collect -o /mnt/usb/evidence # 完整采集(L2+L0+L1)
./bin/strata analyze /mnt/usb/evidence # 离线研判(干净机,可重跑)
# 可选: Ed25519 签名监管链
./bin/strata keygen --out mykey
sudo ./bin/strata collect -o /mnt/usb/evidence --sign-key mykey.priv.pemchmod +x linuxsc/LinuxSC.sh
sudo ./linuxsc/LinuxSC.sh [输出目录]
# 产物: LinuxSC_<IP>_<主机名>/ (四件套契约 + 分类目录)- LinuxSC.sh:
_HASH_MANIFEST.txt(逐文件 SHA256 + 绝对路径)·_COLLECTION_TIME.txt(采集时刻 + IANA 时区)·_COLLECT_FOOTPRINT.txt(逐命令足迹,时间+命令行)·_COLLECT_ERRORS.log(失败/缺口零静默)·_SYMLINKS.txt(link→target) - Strata:
manifest.json(逐产物 SHA256 + tool/host/起止时间 + 时区锚点 + 采集足迹 + 模块启停),可选manifest.sig(Ed25519 整包签名, 分析端加载自动验签拒篡改)
strata/ Strata(Go)源码
cmd/strata/ 子命令分派(collect/analyze/hunt/report/export/trace/keygen)
internal/
collector/ volatile/index/deepscan/accounts/loginhist/baseline/
kmod/orphan/ebpf/triage/trust(chainlog)
analyzer/ evidence loader(验真)/verdict 规则集/correlate/hunt
reporter/ JSON/HTML/PDF 报告渲染
exporter/ 可读视图导出
bpf/ eBPF C 源码(trace_exec/trace_net)
linuxsc/ LinuxSC.sh(bash 采集端) + README
strata/README.md—— Strata 使用文档(编译/子命令/输出契约/安全声明)linuxsc/README.md—— LinuxSC.sh 版本记录与使用说明