>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Sicurezza
C

Singularity - Come Funzionano i Rootkit Linux Moderni e Perché Sono Così Difficili da Rilevare

1699 stelle

Immagina questo scenario: accedi a un server, esegui ps aux, e tutto sembra perfettamente normale. Controlli le connessioni di rete con ss — tutto pulito. Rivedi i log dmesg — nessuna voce sospetta. Ma in quel preciso momento, un processo nascosto a livello root è in esecuzione nel sistema, intercettando le tue azioni e filtrando i dati direttamente nella memoria del kernel.

Sembra qualcosa tratto da film di hacker? In realtà, questa è la realtà dei moderni rootkit LKM (Linux Kernel Module). Oggi esamineremo il progetto Singularity dello sviluppatore MatheuZSecurity — uno strumento avanzato per ricercare le capacità di occultamento nei kernel Linux 6.x.

Cos'è Singularity e Perché un Ricercatore Ne Ha Bisogno?

Singularity non è solo un altro giocattolo per cambiare l'UID dell'utente. È un progetto di ricerca a tutti gli effetti creato per testare i limiti dei sistemi di sicurezza moderni. L'autore si è posto la domanda: "Quanto può spingersi un rootkit se è già riuscito a iniettarsi nel kernel?"

Il progetto è orientato ai kernel moderni (ramo 6.x) e utilizza l'infrastruttura ftrace per l'intercettazione delle system call. Questo lo rende estremamente interessante per i programmatori di sistema e gli specialisti di sicurezza informatica (DFIR), poiché dimostra come bypassare giganti della sicurezza come eBPF (Falco, Tracee) e LKRG (Linux Kernel Runtime Guard).

Funzionalità Principali: L'Arte di Restare Invisibili

Singularity è un vero e proprio coltellino svizzero per le operazioni clandestine. Esaminiamo le capacità più impressionanti.

1. Camuffamento a Livello Fantasma

Il rootkit non si limita a nascondere file o processi — lo fa sistematicamente:

  • Processi: Qualsiasi PID può essere reso invisibile a ps, top e persino a /proc. Inoltre, Singularity traccia e nasconde automaticamente tutti i processi figli.
  • File: Il nascondimento funziona tramite pattern. Se hai creato una directory con un nome "segreto", scomparirà dall'output di ls e find, anche se puoi ancora accedere ai file al suo interno se conosci il percorso.
  • Rete: Le connessioni su porte specifiche (ad esempio, la tua reverse shell) non saranno visibili né a netstat né a tcpdump.

2. Bypassare eBPF e gli EDR Moderni

Questa è probabilmente la parte più tecnicamente complessa. La maggior parte dei sistemi di monitoraggio moderni (come Falco) si affidano a eBPF per il tracciamento degli eventi in tempo reale. Singularity non blocca eBPF (sarebbe troppo evidente), ma filtra attentamente i dati che i programmi eBPF trasmettono allo spazio utente. Sostituisce i risultati nei buffer, rendendo le risorse nascoste invisibili agli "occhi" del monitoraggio.

3. Manipolazione dei Privilegi tramite Segnali

Dimentica gli exploit complessi. Singularity implementa un meccanismo elegante:

kill -59 $$

L'invio di un segnale specifico (in questo caso, il 59) al processo corrente eleva istantaneamente i suoi privilegi a root. Semplice, efficace e molto pericoloso nelle mani sbagliate.

4. Combattere la Forense (Evasion Forensics)

Il progetto può persino ingannare gli strumenti di analisi del disco di basso livello, come debugfs. Intercetta le system call di lettura/scrittura e "al volo" elimina le menzioni di sé stesso dai buffer di output, sostituendole con spazi. Questo permette di mantenere l'integrità del filesystem (i checksum non vengono alterati), mentre nasconde la presenza del codice malevolo.

Come Funziona Internamente?

L'architettura di Singularity è costruita su un sistema modulare. Nel repository troverai file separati per ogni compito: hiding_tcp.c per il networking, bpf_hook.c per le contromisure eBPF, lkrg_bypass.c per il bypass della protezione del kernel.

L'implementazione del logging è interessante. Il rootkit aggancia la funzione do_syslog, permettendogli di filtrare il ring buffer del kernel. Se il sistema tenta di emettere un messaggio riguardo al "taint" del kernel dal caricamento di un modulo di terze parti, Singularity semplicemente taglia fuori quella stringa.

Process Hiding Demo

Valore Pratico per gli Sviluppatori

Perché uno sviluppatore dovrebbe studiare il codice dei rootkit?

  1. Comprensione degli Internals di Linux: Il codice del progetto è un eccellente manuale sul lavoro con le system call, le strutture task_struct, lo stack di rete e il sottosistema ftrace.
  2. Progettazione di Sistemi di Sicurezza: Per costruire una fortezza solida, devi sapere come funzionano le armi d'assedio. Studiando i metodi di bypass eBPF in Singularity, puoi configurare meglio le tue regole in Falco o Tracee.
  3. Sviluppo Kernel: Questo è un esempio pratico di come scrivere LKM (Linux Kernel Module) per le versioni moderne del kernel, tenendo conto delle modifiche alle API.

Precauzioni di Sicurezza

Importante: Singularity è uno strumento potente che si nasconde dopo il caricamento (lsmod non lo mostrerà). Non ha funzione di scaricamento, poiché ciò creerebbe un ulteriore vettore di rilevamento. Per liberarsene, sarà necessario un riavvio.

L'autore raccomanda fortemente di testare il progetto solo in macchine virtuali. E, naturalmente, di utilizzarlo esclusivamente per scopi educativi e di ricerca.

Singularity è un esempio impressionante di quanto sofisticati siano diventati i metodi di occultamento in Linux. Il progetto dimostra che anche gli strumenti di sicurezza più moderni non sono una soluzione universale se l'attaccante ha ottenuto un punto d'appoggio a livello del kernel.

Per chi vuole approfondire, consiglio di consultare include/core.h e vedere come sono implementati gli hook. Questa lettura potrebbe essere più avvincente di qualsiasi romanzo giallo.

Provalo (in una VM!): GitHub MatheuZSecurity/Singularity

A proposito, cosa ne pensi — l'uso di eBPF per la sicurezza è un vicolo cieco se i rootkit hanno imparato a bypassarlo? Condividi le tue opinioni nei commenti!

Progetti correlati