Nel vasto e intricato mondo del cybercrimine, gli hacker non sono solo maestri dell’attacco, ma anche veri e propri artisti dell’occultamento. Quando un attaccante ottiene un punto d’appoggio all’interno di una rete aziendale, una delle sue priorità principali è quella di proteggere e mantenere tale accesso. Per raggiungere questo obiettivo, applica delle tecniche di persistenza sulla macchina compromessa, garantendosi il controllo e l’accesso per il maggior tempo possibile. Più a lungo un attaccante rimane nella rete, maggiori saranno i danni che potrà arrecare. Per questo motivo, diventa fondamentale per un attaccante riuscire ad occultare la tecnica di persistenza attuata sulla macchina compromessa, rendendo il punto d’accesso difficile da individuare e riducendo così il rischio di essere rilevato dagli strumenti di sicurezza aziendali. Una delle tecniche di persistenza più comuni utilizzate dagli attaccanti è il task scheduling.

Come Creare un Task Pianificato:

Il Task Scheduler è uno strumento integrato nei sistemi operativi Windows che consente di pianificare l’esecuzione automatica di attività (task) in determinati momenti o in risposta a specifici eventi, come l’avvio del computer o il login di un utente. Le attività possono includere l’esecuzione automatica di programmi o l’avvio di script. Di seguito descriviamo alcune delle schede principali per la configurazione di un task:

General: In questa scheda si inseriscono un nome e una descrizione per il task.

Trigger: In questa sezione puoi specificare quando il task deve essere eseguito, come ad esempio a intervalli programmati (giornalieri, settimanali, mensili)

Questa immagine mostra il settaggio di un task che viene eseguito ogni minuto

Actions: Qui si definisce il percorso del file eseguibile o dello script che deve essere lanciato dal task.

L’ immagine mostra come settare il path del programma da eseguire

Di seguito riportiamo il comando CMD per creare un task:

Un attaccante potrebbe sfruttare un task per eseguire codice malevolo, come una reverse shell per comunicare con un server di comando e controllo (C2). Pertanto, nella scheda actions del task malevolo potrebbe essere presente il percorso di una reverse shell. Per questa ragione risulta fondamentale riuscire a monitorare attentamente le attività di creazione, modifica e cancellazione dei task.

Come Abilitare e Monitorare gli Eventi di Creazione, Modifica e Cancellazione di un task schedulato:

Per abilitare i log che tracciano tutte le attività di creazione, modifica ed eliminazione di un task schedulato, è sufficiente aprire il Local Group Policy Editor, seguire il percorso “Computer Configuration -> Windows Settings -> Security Settings -> Local Policy -> Audit Policy” ed abilitare “Audit Object Access” portando il “Security Setting” dallo stato “No Auditing” a “Success”, come mostrato nel’ immagine seguente:

Settaggio per abilitare la raccolta degli eventi 4698, 4699 e 4702

Per monitorare i log relativi alla creazione, modifica ed eliminazione di un task pianificato, è sufficiente cercare nei log di sicurezza gli event ID: 4698 (creazione di un task), 4699 (eliminazione di un task) e 4702 (modifica di un task). Per individuarli, è possibile aprire l’Event Viewer e creare un filtro che cerchi tali eventi nei log di sicurezza (vedi figura).

Filtro per monitorare gli eventi 4698, 4699 e 4702

Nuove Tecniche per Nascondere i Task Pianificati:

Cosa succede quando creiamo un task?

Quando viene creato un task vengono generati le seguenti 3 chiavi di registro dal processo svchost.exe:

  1. HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\ Nome Task

Tale chiave ha i seguenti valori:

ID: è un valore univoco per ogni task creato e serve per identificare il task.

Index: è un valore che specifica il tipo di task (Boot Task (1), Logon Task (2), Plain Task (3), Maintenance Task (4)).

SD: sta per SECURITY DESCRIPTOR è un valore che descrive i permessi del task folder (chi è autorizzato a vedere questa attività o la struttura della directory).

Contenuto della chiave di registro

2. HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{ID}

La chiave di registro Tasks tiene traccia di tutti i dati dei task presenti nel sistema organizzati per ID, come actions, description, triggers, ecc…

Contenuto della chiave di registro

3. HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tipo di Task\{ID}

La terza chiave di registro varia in base al tipo di task generato:

  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Boot\{ID}

Tiene traccia dei task che dovrebbero essere attivati all’avvio del PC.

  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Logon\{ID}

Tiene traccia dei task che dovrebbero essere attivati una volta che l’utente ha fatto l’accesso sul PC

  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Plain\{ID}

Tiene traccia dei task che non sono né di avvio, né di accesso, né di manutenzione.

  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\ Maintenance \{ID}

Tiene traccia dei task che devono essere eseguiti durante la manutenzione automatica del sistema

Dal monitoraggio tramite procmon.exe (tool di Sysinternals) vi mostriamo le 3 istanze delle chiavi di registro generate dalla creazione del task visto in precedenza:

Evidenze della creazione delle 3 tipologie di chiavi dal processo svchost.exe
Fonte Qualys: relazione tra le tre tipologie di chiavi

I Metodi utilizzati per Occultare un Task e non renderlo visibile all’interno del Task Scheduler:

Per poter occultare un task, un attaccante deve prima ottenere i privilegi di sistema sulla macchina compromessa. Esistono diversi scenari in cui ciò potrebbe avvenire, ad esempio sfruttando alcune vulnerabilità presenti nella macchina compromessa. Nei test eseguiti, per ottenere questi privilegi per praticità utilizziamo il tool PsExec. Con PsExec per acquisire i privilegi di sistema basta utilizzare il parametro “–s”.

Esecuzione di PsExec per elevare i privilegi

Nascondere un Task Specifico:

per nascondere un task specifico esistono 2 metodi

Nascondere un Task Specifico – 1° METODO:

Per occultare solo un task basta porre a zero il valore di “index” associato alla chiave di registro del task da occultare: HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\ Nome Task

il valore di index è stato settato su 0

Per far ciò basta eseguire il seguente comando sulla CMD:

Il quale sfrutta il programma PsExec.exe per lanciare con i privilegi di sistema i comandi di reg.exe che vanno a modificare il valore di index.

Dopo aver eseguito tale comando sulla CMD se tutto è andato a buon fine dovrebbe comparire il messaggio: “The operation completed successfully.”

Esecuzione del comando sulla CMD

Come si può evincere dall’immagine sottostante, il valore di “Index” è stato aggiornato a 0x0, il task “ciao” non è più visibile nel Task Scheduler e Windows non genera alcun log relativo all’eliminazione o modifica di un task schedulato. Tuttavia, il file ciao.bat continua a essere eseguito ogni minuto.

Esito dell’occultamento del task

Nascondere un Task Specifico – 2° METODO:

Un altro metodo per occultare un singolo task è stato utilizzato dal gruppo hacker Hafnium, specializzato nel cyber spionaggio. Tale metodo consiste nel rimuovere il valore “SD” associato alla chiave di registro del task da occultare:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\ Nome Task

Eliminazione dell’attributo SD

Per far ciò basta digitare il seguente comando sulla CMD:

Come si può evincere dall’immagine sottostante, il valore “SD” è stato rimosso, il task “ciao” non è più visibile nel Task Scheduler e Windows non genera alcun log relativo all’eliminazione o modifica di un task schedulato. Tuttavia, il file ciao.bat continua a essere eseguito ogni minuto.


Esito dell’occultamento del task

Nascondere TUTTI i task pianificati:

La rimozione del valore Index di un task specifico causa la scomparsa di tutti i task pianificati dall’interfaccia del Task Scheduler. Questo avviene perché si genera un errore che impedisce la visualizzazione dei task, pur permettendone comunque l’esecuzione in background.

Per far ciò basta digitare il seguente comando sulla CMD:

Analogo alle tecniche precedenti anche questa volta Windows non genera nessun log di cancellazione o di modifica di un task.

Esito dell’occultamento di tutti i task

Considerazioni Finali

I threat actor possono sfruttare queste tecniche per eseguire attacchi verso asset aziendali, rendendo estremamente difficile le detection. Le tecniche di abuso del valore Index e SD rappresentano una minaccia significativa per la sicurezza dei sistemi Windows. Monitorare attentamente qualsiasi modifica a questi valori nel registro può fornire importanti segnali d’allarme su possibili tentativi di esecuzione di codice malevolo. Raccomandiamo una vigilanza costante e l’implementazione di strumenti di monitoraggio avanzato per prevenire l’occultazione di task pianificati da parte di attori malevoli.

Ti è piaciuto l’articolo? Seguici su Linkedin per sostenerci!

consigliati