Creare uno snapshot prima di iniziare e mantenere aperta una console root.
Servono Clang con target BPF, bpftool, libbpf, libelf, zlib, pkg-config, g++ e make. Il kernel della VM deve esporre /sys/kernel/btf/vmlinux e avere BPF LSM abilitato.
Nell'elenco /sys/kernel/security/lsm deve comparire bpf. Lo script mostra anche lockdown, BPF non privilegiato, firma moduli, IMA/EVM e fs-verity: i primi requisiti sono bloccanti, gli altri sono avvisi di hardening.
Eseguire normali operazioni sudo, su o pkexec e verificare che siano classificate come TRUSTED.
In audit deve comparire un evento AUDIT per eseguibile sconosciuto.
Aggiungere alla policy e ricaricare:
In audit, questi comandi devono riuscire ma produrre eventi:
Il controllo periodico deve inoltre produrre integrity-drift dopo una modifica e integrity-restored quando mode e owner tornano alla baseline. Creare un nuovo file dentro una directory ricorsiva richiede un reload per inserirne il nuovo inode nella baseline; prima del reload resta coperto soltanto il monitoraggio globale dei metadati privilegiati.
Dopo avere ripristinato baseline e policy:
Ricaricare con SIGHUP. Il probe setuid sconosciuto deve fallire con EPERM. Sul file protetto, chmod, chown, setfacl, setcap, rm, mv e la creazione di hardlink devono essere rifiutati quando attraversano gli hook coperti. sudo e gli altri eseguibili trusted devono continuare a funzionare.
Prima di aggiornare pacchetti che sostituiscono file protetti:
In caso di policy errata:
La chiusura del daemon distrugge i link BPF e rimuove l'enforcement.
Usare soltanto una VM isolata e sacrificabile, senza rete o dati reali. Con un PoC già noto e mantenuto privatamente dal ricercatore, verificare separatamente:
Non esiste un test generico sicuro che dimostri resistenza a ogni exploit kernel. Un exploit con scrittura arbitraria può manomettere RootGuard, le mappe BPF o i risultati restituiti al daemon; i risultati devono quindi indicare il PoC, il kernel, la configurazione e gli hook effettivamente attraversati.
Per simulare la parte rilevabile dal controllo periodico, fermare temporaneamente RootGuard, modificare mode/owner o sostituire un file di prova, quindi riavviare con la stessa baseline solo in audit. Il daemon deve produrre integrity-drift. Questo test verifica il rilevamento userspace, non dimostra che una scrittura arbitraria nel kernel non possa falsificare stat(2).