
Una herramienta en C# con mayor flexibilidad para personalizar tareas programadas tanto para persistencia como para movimiento lateral en operaciones de equipo rojo.
La tarea programada es una de las técnicas de ataque más populares en la última década y aún hoy es utilizada comúnmente por hackers/red teamers para persistencia y movimiento lateral.
Ya se han desarrollado varias herramientas en C# para simular el ataque mediante tareas programadas. He estado probando algunas de ellas, pero cada una tiene sus propias limitaciones a la hora de personalizar la tarea programada. Por lo tanto, este proyecto pretende ofrecer una herramienta en C# (compatible con execute-assembly de CobaltStrike) que incluya las funcionalidades que necesito y proporcione suficiente flexibilidad para personalizar la tarea programada.

| Método | Función |
|---|---|
| create | Crear una nueva tarea programada |
| delete | Eliminar una tarea programada existente |
| run | Ejecutar una tarea programada existente |
| query | Consultar detalles de una tarea programada o de todas las tareas programadas bajo una carpeta |
| queryfolders | Consultar todas las subcarpetas en la tarea programada |
| move | Realizar movimiento lateral usando tarea programada (crear, ejecutar y eliminar automáticamente) |
| Método | Función |
|---|---|
| [*] /taskname | Especificar el nombre de la tarea programada |
| [*] /program | Especificar el programa que ejecuta la tarea |
| [*] /trigger | Especificar el tipo de programación. Los valores válidos incluyen: "minute", "hourly", "daily", "weekly", "onstart", "onlogon" y "onidle" |
| /modifier | Especificar la frecuencia con la que se ejecuta la tarea dentro de su tipo de programación. Aplicable solo para tipos de programación como "minute" (ej., 1-1439 minutos), "hourly" (ej., 1-23 horas) y "weekly" (ej., lun,sáb,dom) |
| /starttime | Especificar la hora de inicio para el tipo de programación diaria (ej., 23:30) |
| /argument | Especificar el argumento de línea de comandos para el programa |
| /folder | Especificar la carpeta donde se almacena la tarea programada (predeterminado: \) |
| /workingdir | Especificar el directorio de trabajo en el que se ejecutará la tarea programada |
| /author | Especificar el autor de la tarea programada |
| /description | Especificar la descripción de la tarea programada |
| /remoteserver | Especificar el nombre de host o dirección IP de un equipo remoto |
| /user | Ejecutar la tarea con una cuenta de usuario especificada |
| /technique | Especificar técnica de evasión: - "hide": Una técnica utilizada por el malware HAFNIUM que oculta la tarea programada de la consulta de tareas [!] https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/ [!] Esta técnica no soporta ejecución remota debido a privilegios del registro remoto. Requiere "NT AUTHORITY\SYSTEM" y la tarea continuará ejecutándose hasta el reinicio del sistema incluso después de eliminar la tarea |
[*] son campos obligatorios.
| Método | Función |
|---|---|
| [*] /taskname | Especificar el nombre de la tarea programada |
| /folder | Especificar la carpeta donde se almacena la tarea programada (predeterminado: \) |
| /remoteserver | Especificar el nombre de host o dirección IP de un equipo remoto |
| /technique | Especificar si la tarea programada fue creada usando técnica de evasión: - "hide": Eliminar tarea programada que usó la técnica de "ocultar tarea programada" [!] La eliminación requiere "NT AUTHORITY\SYSTEM" y la tarea continuará ejecutándose hasta el reinicio del sistema incluso después de eliminar la tarea |
[*] son campos obligatorios.
| Método | Función |
|---|---|
| [*] /taskname | Especificar el nombre de la tarea programada |
| /folder | Especificar la carpeta donde se almacena la tarea programada (predeterminado: \) |
| /remoteserver | Especificar el nombre de host o dirección IP de un equipo remoto |
[*] son campos obligatorios.
| Método | Función |
|---|---|
| /taskname | Especificar el nombre de la tarea programada |
| /folder | Especificar la carpeta donde se almacena la tarea programada (predeterminado: \) |
| /remoteserver | Especificar el nombre de host o dirección IP de un equipo remoto |
[*] son campos obligatorios.
| Método | Función |
|---|---|
| [*] /taskname | Especificar el nombre de la tarea programada |
| [*] /program | Especificar el programa que ejecuta la tarea |
| [*] /remoteserver | Especificar el nombre de host o dirección IP de un equipo remoto |
| /trigger | Especificar el tipo de programación. Los valores válidos incluyen: "minute", "hourly", "daily", "weekly", "onstart", "onlogon" y "onidle" |
| /modifier | Especificar la frecuencia con la que se ejecuta la tarea dentro de su tipo de programación. Aplicable solo para tipos de programación como "minute" (ej., 1-1439 minutos), "hourly" (ej., 1-23 horas) y "weekly" (ej., lun,sáb,dom) |
| /starttime | Especificar la hora de inicio para el tipo de programación diaria (ej., 23:30) |
| /argument | Especificar el argumento de línea de comandos para el programa |
| /folder | Especificar la carpeta donde se almacena la tarea programada (predeterminado: \) |
| /workingdir | Especificar el directorio de trabajo en el que se ejecutará la tarea programada |
| /author | Especificar el autor de la tarea programada |
| /description | Especificar la descripción de la tarea programada |
| /user | Ejecutar la tarea con una cuenta de usuario especificada |
[*] son campos obligatorios.
Crear una tarea programada llamada "Cleanup" que se ejecutará todos los días a las 23:30.
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010
Crear una tarea programada llamada "Cleanup" que se ejecutará cada 4 horas en un servidor remoto
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:hourly /modifier:4 /program:rundll32.exe /argument:c:\temp\payload.dll /remoteserver:TARGET-PC01
Eliminar una tarea programada llamada "Cleanup"
ScheduleRunner.exe /method:delete /taskname:Cleanup
Ejecutar una tarea programada llamada "Cleanup"
ScheduleRunner.exe /method:run /taskname:Cleanup
Consultar detalles de una tarea programada llamada "Cleanup" bajo la carpeta "\Microsoft\Windows\CertificateServicesClient" en un servidor remoto
ScheduleRunner.exe /method:query /taskname:Cleanup /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
Consultar todas las tareas programadas bajo una carpeta específica "\Microsoft\Windows\CertificateServicesClient" en un servidor remoto
ScheduleRunner.exe /method:query /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
Consultar todas las subcarpetas en la tarea programada
ScheduleRunner.exe /method:queryfolders
Realizar movimiento lateral mediante tarea programada a un servidor remoto usando una cuenta de usuario específica
ScheduleRunner.exe /method:move /taskname:Demo /remoteserver:TARGET-PC01 /program:rundll32.exe /argument:c:\temp\payload.dll /user:netero1010
Crear una tarea programada llamada "Cleanup" usando la técnica de ocultar tarea programada: