Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Arile! Scopri di più
Systemctl è il comando principale per interagire con systemd, il gestore di init e servizi presente nella stragrande maggioranza delle distribuzioni Linux moderne. In condizioni normali gli amministratori lo impiegano per avviare, arrestare, abilitare o ispezionare servizi di sistema. Il problema emerge quando un avversario, ottenuto un accesso con privilegi sufficienti, sfrutta esattamente la stessa interfaccia per eseguire codice arbitrario mascherandolo da servizio legittimo.
La tecnica si colloca nella tattica Execution (TA0002): l'obiettivo dell'attaccante è far girare il proprio payload sulla macchina vittima. Nella pratica l'attore crea — o modifica — un file unit di systemd, quindi invoca systemctl start o systemctl enable per attivare il servizio malevolo, ottenendo esecuzione immediata e, se abilitato, anche persistenza al riavvio.
L'impatto è significativo perché i servizi systemd girano a livello di sistema, spesso come root, e vengono gestiti dal kernel tramite cgroups, rendendo il payload meno visibile di un processo utente tradizionale. Il framework documenta 1 gruppo APT noto per questa tecnica, 1 mitigazione raccomandata e una strategia di detection specifica basata su log auditd.
Per simulare la tecnica in laboratorio serve una macchina Linux con systemd (qualsiasi distribuzione recente funziona) e accesso root o un account nel gruppo systemd-journal con permessi di scrittura su /etc/systemd/system.
Il primo passo è creare un file unit malevolo. In un engagement reale l'attaccante spesso scrive il file direttamente da una reverse shell; in lab puoi simularlo così:
cat <<'EOF' > /etc/systemd/system/updater.service
[Unit]
Description=System Update Helper
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'id > /tmp/pwned.txt'
[Install]
WantedBy=multi-user.target
EOF
La sezione ExecStart contiene il payload — qui un semplice proof-of-concept che scrive l'output di id in un file. In uno scenario offensivo reale, TeamTNT ha utilizzato servizi systemd per lanciare software di cryptomining, sostituendo quel comando innocuo con un miner persistente.
A questo punto si ricarica la configurazione di systemd e si avvia il servizio:
systemctl daemon-reload systemctl start updater.service
Per verificare l'esecuzione: systemctl status updater.service mostrerà lo stato del servizio, e cat /tmp/pwned.txt confermerà l'output. Per aggiungere persistenza al riavvio basta un ulteriore passaggio:
systemctl enable updater.service
Un aspetto spesso trascurato nei test è la collocazione del file unit. Gli avversari più sofisticati posizionano file in directory non standard — ad esempio /tmp o /dev/shm — per evadere i controlli. Puoi simulare anche questa variante creando un link simbolico oppure specificando un percorso custom tramite systemctl link:
systemctl link /tmp/sneaky.service systemctl start sneaky.service
Per la fase di cleanup, elemento fondamentale in qualsiasi esercizio red team:
Tool utili: pspy (open source) permette di monitorare in tempo reale i processi generati senza privilegi root, utile per validare che il servizio abbia effettivamente eseguito il payload. Atomic Red Team (open source) del progetto Red Canary include test atomici per la creazione di servizi systemd che automatizzano questa simulazione.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo