Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Aprile! Scopri di più
Systemd è il sistema di init predefinito sulla stragrande maggioranza delle distribuzioni Linux moderne, avendo progressivamente sostituito SysVinit e Upstart. Gestisce servizi, mount point, timer e target attraverso file di configurazione chiamati unit file, identificati dall'estensione .service. Proprio questa centralità lo rende un bersaglio naturale per chi cerca persistenza e, in molti casi, escalation dei privilegi su un sistema compromesso.
La tecnica T1543.002 si colloca in due tattiche distinte della kill chain: Persistence (TA0003), poiché un servizio systemd sopravvive ai riavvii e si riattiva automaticamente, e Privilege Escalation (TA0004), perché la direttiva User all'interno di un unit file può forzare l'esecuzione del payload come root o come un utente con permessi elevati.
L'attaccante può creare un nuovo file .service, modificarne uno esistente, oppure piazzare symlink nelle directory di sistema per far caricare un payload da una posizione arbitraria del filesystem. Le direttive critiche — ExecStart, ExecStartPre, ExecStartPost, ExecReload, ExecStop e le relative varianti — offrono molteplici punti di iniezione, ciascuno attivato in una fase diversa del ciclo di vita del servizio. Un ulteriore vettore è rappresentato dai systemd generators, piccoli eseguibili che generano dinamicamente unit file durante il boot o il reload della configurazione.
I dati documentano 3 gruppi APT, 8 software e 1 campagna che hanno sfruttato questa tecnica, con 4 mitigazioni raccomandate.
Per simulare questa tecnica in un laboratorio red team è necessario un sistema Linux con systemd attivo — qualsiasi distribuzione recente va bene. L'obiettivo è dimostrare come un attaccante possa ottenere persistenza creando un servizio malevolo e, facoltativamente, scalare i privilegi attraverso la direttiva User.
Il primo scenario, il più diretto, replica il pattern usato da malware come Gomir, che crea un servizio denominato syslogd. Si crea un unit file nella directory di sistema e lo si abilita:
sudo tee /etc/systemd/system/syslogd.service <<EOF [Unit] Description=System Logger Daemon [Service] Type=simple ExecStart=/tmp/payload.sh Restart=on-failure [Install] WantedBy=multi-user.target EOF
sudo systemctl daemon-reload sudo systemctl enable --now syslogd.service
La clausola WantedBy=multi-user.target garantisce l'avvio automatico quando il sistema entra nel runlevel multiutente — lo stesso pattern usato durante la campagna 2022 Ukraine Electric Power Attack (C0034) per mantenere la persistenza di GOGETTER.
Il secondo scenario simula la privilege escalation attraverso la direttiva User. Se l'attaccante ha accesso in scrittura alla directory /etc/systemd/system/ ma opera come utente non privilegiato, può specificare User=root nel unit file, facendo eseguire il payload con permessi di root al prossimo avvio del servizio.
Il terzo scenario sfrutta i symlink, come documentato per SysUpdate: si posiziona il payload in una directory utente e si crea un link simbolico nella directory di sistema.
ln -s /home/user/.local/bin/implant /etc/systemd/system/update-helper.service
Per simulare la persistenza a livello utente — utile quando non si dispone di root — si opera nella directory $HOME/.config/systemd/user/ e si usa:
systemctl --user enable --now nome-servizio.service
Il tool Pupy (open source) include un modulo dedicato che automatizza la creazione del servizio systemd per la persistenza. In un esercizio red team, usare Pupy permette di verificare se le detection del blue team intercettano la catena completa: creazione file, daemon-reload, enable, start.
Per la fase di cleanup, rimuovere il servizio con:
sudo systemctl disable --now syslogd.service sudo rm /etc/systemd/system/syslogd.service sudo systemctl daemon-reload
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo