Scheduling Legacy: At Utility (T1053.002)
La tecnica T1053.002 descrive l'abuso dell'utility at, un pianificatore di attività storicamente presente in Windows, Linux e macOS. Sebbene in ambiente Windows sia stata deprecata in favore di schtasks, resta comunque invocabile e sfruttabile finché il servizio Task Scheduler è attivo e l'attaccante possiede privilegi amministrativi locali. Su sistemi Unix-like il controllo di accesso avviene tramite i file at.allow e at.deny, la cui configurazione permissiva o assente può aprire varchi non banali.
L'utility viene mappata su tre tattiche MITRE ATT&CK: TA0002 (Execution), per l'esecuzione ritardata o immediata di payload; TA0003 (Persistence), sfruttando task ricorrenti che sopravvivono a riavvii e cambi di credenziali; TA0004 (Privilege Escalation), quando il binario è configurato per eseguire come SYSTEM o root, oppure invocabile via sudo. In ambienti Linux può inoltre servire come vettore di fuga da shell ristrette, spawnando processi interattivi al di fuori del contesto originale.
I dati MITRE documentano 3 gruppi APT che ne fanno uso operativo, 3 software (l'utility stessa più due strumenti offensivi) e 4 mitigazioni consolidate. L'abuso è particolarmente insidioso nel movimento laterale: la possibilità di pianificare job remoti via WMI attraverso la classe Win32_ScheduledJob rende at un vettore silenzioso quando i controlli sono focalizzati esclusivamente sui task moderni creati con schtasks.
L'operatore offensivo tratta at come una superficie di persistenza e movimento laterale a basso rumore, proprio perché molte pipeline di detection sono tarate su schtasks e sui task XML moderni. In un lab Windows la catena tipica parte da una shell amministrativa: dopo aver ottenuto privilegi locali si avvia il servizio Schedule se non attivo, quindi si registra un job differito. La sintassi legacy è at HH:MM "comando", ma su Windows 10/11 e Server 2019+ il binario at.exe è stato rimosso: qui l'equivalente operativo passa attraverso WMI, invocando la classe Win32_ScheduledJob via PowerShell con Invoke-WmiMethod -Class Win32_ScheduledJob -Name Create. Questo dettaglio è cruciale in fase di planning: se il target è un Server 2008 R2 o 2012, at.exe è ancora presente; su versioni successive va usato il canale WMI.
Per il movimento laterale, CrackMapExec (open source) offre il modulo che sfrutta la stessa logica per pianificare comandi remoti su host raggiungibili con credenziali valide, tipicamente contro share amministrativi. Impacket (open source) fornisce script come atexec.py che replicano esattamente il comportamento di at su target remoti via DCERPC, restituendo l'output del comando eseguito — utile in scenari dove PsExec è già bloccato dall'EDR ma la superficie ATSVC resta aperta.
Su Linux l'exploitation si articola su due fronti. Il primo è la pianificazione classica: echo "/tmp/payload.sh" | at now + 1 minute crea un job nella spool directory var/spool/cron/atjobs, con esecuzione dal contesto dell'utente che ha invocato at. Il secondo è la breakout da shell ristrette: se at è presente nella whitelist di un ambiente jailed e l'utente compare in at.allow, pianificare un job che invochi /bin/bash -i consente di ottenere una shell interattiva fuori dal contesto restrittivo. Se poi at è configurato in sudoers con NOPASSWD, la privilege escalation a root è banale.
Su macOS il servizio atrun è disabilitato di default e va abilitato via launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist, un dettaglio che rende la tecnica meno immediata ma comunque valida in scenari post-exploitation con accesso root. Per la simulazione controllata, Atomic Red Team (open source) include test dedicati a T1053.002 con payload benigni, ideali per validare la copertura di detection prima di ingaggi reali.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo