
Uma ferramenta emprega manipulação direta do registro para criar tarefas agendadas sem acionar os logs de eventos habituais.
Inspirado pela pesquisa da WithSecure sobre Adulteração de Tarefas Agendadas, eles explicaram a viabilidade de criar uma tarefa agendada apenas por meio da manipulação de chaves do registro. Tal abordagem pode contornar a geração de logs de eventos de criação de tarefas agendadas, como 4698 e 106, oferecendo um método mais furtivo para estabelecer persistência. Diante dessas informações, desenvolvi esta POC para demonstrar a criação de tarefas agendadas através da manipulação direta do registro.
Criar uma nova tarefa agendada exige adicionar várias chaves de registro e seus valores associados. Como a estrutura dos valores de registro relacionados a tarefas agendadas não é documentada, minha metodologia para construir essas estruturas baseou-se principalmente em tentativa e erro, guiada por comparações com os valores de registro de tarefas agendadas legítimas. Além disso, também consultei as interfaces no arquivo de cabeçalho Taskschd.h e me baseei extensivamente no artigo Cyber.WTF Windows Registry Analysis – Today's Episode: Tasks. Esta pesquisa foi inestimável para me orientar na formulação da estrutura de cada valor do registro, como Triggers, Actions e DynamicInfo, que foram essenciais para construir uma tarefa agendada funcional.
A ferramenta oferece os seguintes recursos:
BruteRatel's memexec)*Observação:
ScheduledTaskCreated) será gerado no MDE (Microsoft Defender For Endpoint).Usage: GhostTask.exe <hostname/localhost> <operation> <taskname> <program> <argument> <username> <scheduletype> <time/second> <day>
- hostname/localhost: Nome do computador remoto ou "localhost".
- operation: add/delete
- add: Criar ou modificar uma tarefa agendada usando apenas chaves do registro. Requer reiniciar o serviço "Schedule" para carregar a definição da tarefa.
- delete: Excluir uma tarefa agendada. Requer reiniciar o serviço "Schedule" para descarregar a tarefa.
- taskname: Nome da tarefa agendada.
- program: Programa a ser executado.
- argument: Argumentos para o programa.
- username: Conta de usuário sob a qual a tarefa agendada será executada.
- scheduletype: Gatilhos suportados: second, daily, weekly e logon.
- time/second (aplicável para gatilhos 'second', 'daily' e 'weekly'):
- Para o gatilho 'second': Especifique a frequência em segundos para a execução da tarefa.
- Para os gatilhos 'daily' e 'weekly': Especifique a hora exata (ex.: 22:30) para a execução da tarefa.
- day (aplicável para o gatilho 'weekly'): Dias para executar a tarefa agendada (ex.: 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

Conforme descrito no blog da WithSecure (seção Extra: Movimento Lateral), esta técnica pode ser usada para criar remotamente uma nova tarefa agendada com um Silver Ticket especialmente criado.
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
Criar uma nova tarefa agendada remotamente no servidor DC01 que executa notepad.exe todos os dias às 15:19:
GhostTask.exe DC01.lab.corp add demo "cmd.exe" "/c notepad.exe" LAB\Administrator daily 15:19
