Малварь как искусство Атаки с использованием планировщика заданий в среде Windows


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 125
Репутация
8 243
1715870339219.png


Перевод:

Планировщик задач является одной из самых популярных техник атак, используемых злоумышленниками для установления постоянного присутствия на компьютере жертвы. Исследовательская команда Qualys изучила различные способы, которые могут использоваться злоумышленниками для сокрытия запланированных задач.

В этой статье мы описываем три новых метода скрытия и удаления запланированных задач в среде Microsoft Windows.

Злоумышленники часто используют функциональность планировщика задач в среде Microsoft Windows, чтобы облегчить начальное или регулярное выполнение вредоносного кода при запуске системы или по расписанию для сохранения присутствия.

Недавно исследователи безопасности Microsoft опубликовали статью, в которой задокументировали, как китайская государственная группа Hafnium скрывала запланированные задачи, удаляя значение Security Descriptor (SD) в пути реестра Windows:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\TASK_NAME.

После раскрытия информации Microsoft, исследовательская команда Qualys задалась вопросом, существуют ли другие способы сокрытия запланированных задач и решила провести дальнейшее расследование. Цель этой статьи - сообщить результаты нашего исследования.

Наше самое важное открытие заключается в том, что значение Index в пути реестра Windows

(HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\TASK_NAME)

также может быть использовано для скрытия и удаления любой запланированной задачи.

Сначала кратко опишем метод, используемый Hafnium и другими для скрытия запланированной задачи. Затем мы подробно опишем новые методы, используемые для скрытия запланированной задачи в среде Microsoft.

Как злоумышленники скрывают запланированные задачи

Согласно блогу Microsoft, при создании каждой запланированной задачи создаются следующие два подпункта реестра: один в пути Tree и другой в пути Tasks.

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\TASK_NAME

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks{GUID}

Первый подпункт TASK_NAME, созданный в пути Tree, соответствует имени запланированной задачи. Значения, созданные в нем (Id, Index и SD), содержат метаданные для регистрации задачи в системе.

Второй подпункт {GUID}, созданный в пути Tasks, соответствует значению Id в подпункте Tree. Значения, созданные в нем (Actions, Path, Triggers и т.д.), содержат основные параметры, необходимые для выполнения задачи.

В случае Hafnium злоумышленник создал запланированную задачу под названием “WinUpdate” для восстановления любых разорванных соединений с их командной инфраструктурой. Это привело к созданию подпунктов в пути Tree и Tasks. Впоследствии злоумышленник получил системные привилегии (через кражу токена) и удалил значение SD в подпункте Tree. Удаление значения SD привело к "исчезновению" задачи из приложения Task Scheduler и вывода команды schtasks /query, что позволило скрыть запланированную задачу от любых традиционных методов идентификации.

Наше расследование показало, что изменение или удаление значения Index в подпункте Tree также скрывает запланированные задачи.
Теперь мы подробно рассмотрим наши выводы, но сначала кратко опишем условия нашего лабораторного эксперимента.

Наши эксперименты проводились на Windows 10 Pro (v10.0.19043), Windows 10 Enterprise (v10.0.19044) и Windows Server 2016. На каждой машине мы сначала выполнили следующие два шага:
  • Настроили аудит объектов в расширенных параметрах аудита локальной политики безопасности, чтобы получать события, соответствующие созданию (4698), удалению (4699) и обновлению (4702) запланированных задач в журнале безопасности Windows.
  • Создали запланированную задачу под названием ImpTask, которая выполняется после входа пользователя в систему:
Код:
schtasks /create /tn ImpTask /tr cmd.exe /sc onlogon /rl highest

После выполнения команды schtasks /create создаются следующие три подпункта, соответствующие вновь созданной задаче ImpTask (см. Рисунок 1):
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\ImpTask
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks{GUID}
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Logon{GUID}
Значение Index в подпункте ImpTask установлено на 0x2 (см. рисунок ниже), так как подпункт {GUID} для этой задачи создан в пути Logon (так как задача запланирована для выполнения после входа пользователя в систему).

1715867779466.png

Рисунок1

Новые методы сокрытия запланированной задачи​

Мы обнаружили, что при создании запланированной задачи, кроме подпунктов Tree и Tasks, создается еще один подпункт. Этот третий подпункт создается в зависимости от того, когда задача запланирована для выполнения:
  • При запуске системы, как указано параметром /sc onstart в команде schtasks /create
  • При входе пользователя в систему, как указано параметром /sc onlogon в команде schtasks /create
  • В другое время, кроме запуска или входа в систему (например, /sc daily /st 09:00)
Третий подпункт создается в одном из следующих путей:
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Boot{GUID}
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Logon{GUID}
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Plain{GUID}
Имя третьего подпункта {GUID} совпадает со значением Id, найденным в подпункте Tree. Мы также обнаружили, что значение Index в подпункте Tree связано с этим третьим подпунктом, ассоциированным с запланированной задачей. Мы установили, что значение Index может быть 0x1, 0x2 или 0x3. В частности,
  • Все задачи, зарегистрированные в пути HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Boot имеют значение Index 0x1
  • Все задачи, зарегистрированные в пути HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Logon имеют значение Index 0x2
  • Все задачи, зарегистрированные в пути HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Plain или Maintenance имеют значение Index 0x3
Исследовательская команда Qualys написала сценарий на Python и запустила его на различных машинах с Windows, чтобы подтвердить это поведение. Так как каждая запланированная задача является частью Boot, Logon, Plain или Maintenance, кажется, существует только три возможных значения для Index: 0x1, 0x2 или 0x3. Наше исследование не нашло никакой онлайн-документации, описывающей назначение значения Index, ассоциированного с запланированной задачей. Однако мы смогли манипулировать значением Index для получения следующих результатов:
  • Скрыть конкретную запланированную задачу: Мы обнаружили, что установка значения Index на 0x0 в подпункте Tree скрывает задачу из приложения Task Scheduler и вывода команды schtasks /query. Однако задача продолжает выполняться в соответствии с запланированным временем, даже после перезапуска системы. Поведение точно такое же, как достигнутое злоумышленниками Hafnium после удаления значения SD. Более того, если попытаться изменить задачу после установки значения Index на 0x0 с помощью команды schtasks /change, задача будет удалена. Однако событие с id 4699, соответствующее удалению запланированной задачи, не будет зафиксировано в журнале событий безопасности Windows.
  • Скрыть все запланированные задачи: Мы также обнаружили, что удаление значения Index вызывает ошибку в приложении Task Scheduler и выводе команды schtasks /query с сообщением "Произошла внутренняя ошибка", что фактически скрывает все запланированные задачи. Существующие задачи продолжают выполняться, и новые задачи все еще могут быть созданы.
Установка значения Index на любое другое значение (0x4, 0xffff и т.д.) не скрывает запланированную задачу, и она продолжает выполняться по расписанию.

Теперь рассмотрим два результата манипуляции значением Index.

Скрытие запланированной задачи

В первом сценарии мы создаем еще одну запланированную задачу под названием ModifyIndexTask, которая выполняется один раз с системными привилегиями – после создания ImpTask – и устанавливает значение Index на 0x0. Команда выглядит следующим образом:

Код:
schtasks /create /tn ModifyIndexTask /tr "reg.exe add  \"HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\ImpTask\" /v Index /d 0x0 /t REG_DWORD /f" /ru "NT AUTHORITY\SYSTEM" /rl highest /sc once /st <время, позднее времени создания ImpTask>

1715868142257.png

Рисунок 2

После выполнения ModifyIndexTask значение Index задачи ImpTask устанавливается на 0 (Рисунок 2). В результате ImpTask исчезает как из приложения Task Scheduler (Рисунок 3), так и из вывода команды schtasks /query (Рисунок 4). Однако ImpTask продолжает выполняться даже после перезагрузки системы (Рисунок 5). Хотя ImpTask не отображается в выводе команды schtasks /query, на Рисунке 5 показано, что возможно получить статус задачи, используя команду schtasks /query с указанием имени задачи с помощью параметра /tn.

1715868284529.png

Рисунок 3

1715868338407.png

Рисунок 4


1715868412132.png

Рисунок 5

Исследовательская команда Qualys смогла воспроизвести эту проблему на каждой машине с Windows 10, с которыми мы проводили эксперименты, всего на пяти устройствах.

Еще одно интересное наблюдение заключалось в том, что если попытаться изменить имя программы в задаче ImpTask (со значением Index 0x0) с помощью команды schtasks /change /tr, задача удаляется, как показано на Рисунке 6. Это выполняется без регистрации события с id 4699: удаление запланированной задачи, или события с id 4702: обновление запланированной задачи в журнале безопасности Windows. Однако событие с id 4699 регистрируется, если мы используем команду schtasks /delete для удаления задачи ImpTask.

1715868573183.png

Рисунок 6

Скрытие всех запланированных задач​

Во втором сценарии мы создаем еще одну запланированную задачу, которая выполняется с системными привилегиями и удаляет значение Index в подпункте ImpTask. Команда выглядит следующим образом:

Код:
schtasks /create /tn ModifyIndexTask /tr "reg.exe delete \"HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\ImpTask\" /v Index /f" /ru "NT AUTHORITY\SYSTEM" /rl highest /sc once /st <время, позднее времени создания ImpTask>

После удаления значения Index в подпункте ImpTask (Рисунок 7) все запланированные задачи исчезают из приложения Task Scheduler (Рисунок 8) и вывода команды schtasks /query (Рисунок 9), вместо этого выводится сообщение об ошибке: «Произошла внутренняя ошибка». Даже указание имени задачи ImpTask в параметре /tn также не работает.

1715868706223.png

Рисунок 7

1715868757029.png

Рисунок 8

1715868790699.png

Рисунок 9

Хотя запланированные задачи не отображаются, они выполняются в соответствии с запланированным временем. Невозможность просмотра запланированных задач сохраняется даже после перезагрузки системы. Изменение задачи ImpTask с помощью команды schtasks /change вызывает повторное создание значения Index, после чего команда schtasks /query выполняется успешно (Рисунок 10).

1715868848144.png

Рисунок 10

После удаления значения Index мы попытались удалить задачу ImpTask с помощью команды schtasks /delete. Интересно, что команда завершилась с сообщением об ошибке. Когда мы затем попытались изменить ImpTask с помощью команды schtasks /change, значение Index в подпункте ImpTask было восстановлено. Все задачи снова появились в приложении Task Scheduler, и выполнение команды schtasks /query также прошло успешно. Обратите внимание, что значение Index восстанавливается только в случае, если команда schtasks /delete предшествует команде schtasks /change. Когда мы выполняли команду schtasks /change без предварительного выполнения команды schtasks /delete, значение Index не восстанавливалось, и мы продолжали получать сообщение об ошибке при выполнении команды schtasks /query.

Заключение​

Исследование, проведенное командой Qualys Research, показало, что значение Index наряду со значением SD в подпункте Tree запланированной задачи играет важную роль и может быть использовано злоумышленниками. В этой статье мы описали три новых техники скрытия и удаления запланированных задач:
  1. Скрыть запланированную задачу из приложения Task Scheduler и вывода команды schtasks /query, установив ее значение Index на 0x0.
  2. Удалить запланированную задачу, сначала установив ее значение Index на 0x0, а затем используя команду schtasks /change /tr, что эффективно удаляет задачу без оставления следов в журнале безопасности Windows.
  3. Скрыть все запланированные задачи из приложения Task Scheduler и вывода команды schtasks /query, удалив значение Index любой запланированной задачи.
Любая из этих новых техник может быть использована для скрытия запланированной задачи в среде Microsoft. Поэтому важно отслеживать изменения значений Index и SD запланированных задач. Эти изменения могут служить сигналом о выполнении вредоносного кода либо при запуске системы, либо по расписанию для сохранения присутствия.

Как можно поиграться с этим всем.)

SD, ARC Labs разработала сценарий PowerShell под названием "hunt_hidden_tasks", который доступен на странице ARC Labs GitHub по следующей ссылке:

Hidden Task Hunter​

Proof of Concept PowerShell скрипт для перечисления запланированных задач в реестре и выявления любых задач, которые имеют признаки удаления или изменения значения SD для обхода обнаружения с помощью распространенных инструментов аудита, таких как AutoRuns, schtasks или графический интерфейс Task Scheduler.


1715869424722.png


Есть ещё инструмент:

Уже разработано несколько инструментов на C# для имитации атаки с использованием запланированных задач. Я пробовал некоторые из них, но у каждого из них есть свои ограничения по настройке запланированных задач. Поэтому этот проект направлен на создание инструмента на C# (совместимого с CobaltStrike execute-assembly), который включает необходимые мне функции и обеспечивает достаточную гибкость в настройке запланированных задач.

Техника скрытия запланированной задачи​


Для использования этой техники вам потребуется учетная запись "NT AUTHORITY/SYSTEM", и в ScheduleRunner выполнить следующие действия:
  • Удалить значение "SD" из "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree[task name]"
  • Удалить XML файл запланированной задачи "C:\Windows\System32\Tasks[task name]"
Для удаления запланированной задачи, созданной с использованием этой техники, необходимо добавить "/technique:hide" в метод удаления, чтобы правильно ее удалить.

Пример команды создания скрытой задачи в ScheduleRunner:

Код:
ScheduleRunner.exe /method:create /taskname:demo /trigger:minute /modifer:10 /program:"C:\Temp\beason.exe" /technique:hide

Демо:

1715869868926.png
 

HMCoba

Активный пользователь
Активный
Регистрация
22.04.2023
Сообщения
185
Репутация
139
Посмотреть вложение 61271

Перевод:

Планировщик задач является одной из самых популярных техник атак, используемых злоумышленниками для установления постоянного присутствия на компьютере жертвы. Исследовательская команда Qualys изучила различные способы, которые могут использоваться злоумышленниками для сокрытия запланированных задач.

В этой статье мы описываем три новых метода скрытия и удаления запланированных задач в среде Microsoft Windows.

Злоумышленники часто используют функциональность планировщика задач в среде Microsoft Windows, чтобы облегчить начальное или регулярное выполнение вредоносного кода при запуске системы или по расписанию для сохранения присутствия.

Недавно исследователи безопасности Microsoft опубликовали статью, в которой задокументировали, как китайская государственная группа Hafnium скрывала запланированные задачи, удаляя значение Security Descriptor (SD) в пути реестра Windows:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\TASK_NAME.

После раскрытия информации Microsoft, исследовательская команда Qualys задалась вопросом, существуют ли другие способы сокрытия запланированных задач и решила провести дальнейшее расследование. Цель этой статьи - сообщить результаты нашего исследования.

Наше самое важное открытие заключается в том, что значение Index в пути реестра Windows

(HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\TASK_NAME)

также может быть использовано для скрытия и удаления любой запланированной задачи.

Сначала кратко опишем метод, используемый Hafnium и другими для скрытия запланированной задачи. Затем мы подробно опишем новые методы, используемые для скрытия запланированной задачи в среде Microsoft.

Как злоумышленники скрывают запланированные задачи

Согласно блогу Microsoft, при создании каждой запланированной задачи создаются следующие два подпункта реестра: один в пути Tree и другой в пути Tasks.

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\TASK_NAME

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks{GUID}

Первый подпункт TASK_NAME, созданный в пути Tree, соответствует имени запланированной задачи. Значения, созданные в нем (Id, Index и SD), содержат метаданные для регистрации задачи в системе.

Второй подпункт {GUID}, созданный в пути Tasks, соответствует значению Id в подпункте Tree. Значения, созданные в нем (Actions, Path, Triggers и т.д.), содержат основные параметры, необходимые для выполнения задачи.

В случае Hafnium злоумышленник создал запланированную задачу под названием “WinUpdate” для восстановления любых разорванных соединений с их командной инфраструктурой. Это привело к созданию подпунктов в пути Tree и Tasks. Впоследствии злоумышленник получил системные привилегии (через кражу токена) и удалил значение SD в подпункте Tree. Удаление значения SD привело к "исчезновению" задачи из приложения Task Scheduler и вывода команды schtasks /query, что позволило скрыть запланированную задачу от любых традиционных методов идентификации.

Наше расследование показало, что изменение или удаление значения Index в подпункте Tree также скрывает запланированные задачи.
Теперь мы подробно рассмотрим наши выводы, но сначала кратко опишем условия нашего лабораторного эксперимента.

Наши эксперименты проводились на Windows 10 Pro (v10.0.19043), Windows 10 Enterprise (v10.0.19044) и Windows Server 2016. На каждой машине мы сначала выполнили следующие два шага:
  • Настроили аудит объектов в расширенных параметрах аудита локальной политики безопасности, чтобы получать события, соответствующие созданию (4698), удалению (4699) и обновлению (4702) запланированных задач в журнале безопасности Windows.
  • Создали запланированную задачу под названием ImpTask, которая выполняется после входа пользователя в систему:
Код:
schtasks /create /tn ImpTask /tr cmd.exe /sc onlogon /rl highest

После выполнения команды schtasks /create создаются следующие три подпункта, соответствующие вновь созданной задаче ImpTask (см. Рисунок 1):
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\ImpTask
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks{GUID}
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Logon{GUID}
Значение Index в подпункте ImpTask установлено на 0x2 (см. рисунок ниже), так как подпункт {GUID} для этой задачи создан в пути Logon (так как задача запланирована для выполнения после входа пользователя в систему).

Посмотреть вложение 61259
Рисунок1

Новые методы сокрытия запланированной задачи​

Мы обнаружили, что при создании запланированной задачи, кроме подпунктов Tree и Tasks, создается еще один подпункт. Этот третий подпункт создается в зависимости от того, когда задача запланирована для выполнения:
  • При запуске системы, как указано параметром /sc onstart в команде schtasks /create
  • При входе пользователя в систему, как указано параметром /sc onlogon в команде schtasks /create
  • В другое время, кроме запуска или входа в систему (например, /sc daily /st 09:00)
Третий подпункт создается в одном из следующих путей:
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Boot{GUID}
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Logon{GUID}
  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Plain{GUID}
Имя третьего подпункта {GUID} совпадает со значением Id, найденным в подпункте Tree. Мы также обнаружили, что значение Index в подпункте Tree связано с этим третьим подпунктом, ассоциированным с запланированной задачей. Мы установили, что значение Index может быть 0x1, 0x2 или 0x3. В частности,
  • Все задачи, зарегистрированные в пути HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Boot имеют значение Index 0x1
  • Все задачи, зарегистрированные в пути HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Logon имеют значение Index 0x2
  • Все задачи, зарегистрированные в пути HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Plain или Maintenance имеют значение Index 0x3
Исследовательская команда Qualys написала сценарий на Python и запустила его на различных машинах с Windows, чтобы подтвердить это поведение. Так как каждая запланированная задача является частью Boot, Logon, Plain или Maintenance, кажется, существует только три возможных значения для Index: 0x1, 0x2 или 0x3. Наше исследование не нашло никакой онлайн-документации, описывающей назначение значения Index, ассоциированного с запланированной задачей. Однако мы смогли манипулировать значением Index для получения следующих результатов:
  • Скрыть конкретную запланированную задачу: Мы обнаружили, что установка значения Index на 0x0 в подпункте Tree скрывает задачу из приложения Task Scheduler и вывода команды schtasks /query. Однако задача продолжает выполняться в соответствии с запланированным временем, даже после перезапуска системы. Поведение точно такое же, как достигнутое злоумышленниками Hafnium после удаления значения SD. Более того, если попытаться изменить задачу после установки значения Index на 0x0 с помощью команды schtasks /change, задача будет удалена. Однако событие с id 4699, соответствующее удалению запланированной задачи, не будет зафиксировано в журнале событий безопасности Windows.
  • Скрыть все запланированные задачи: Мы также обнаружили, что удаление значения Index вызывает ошибку в приложении Task Scheduler и выводе команды schtasks /query с сообщением "Произошла внутренняя ошибка", что фактически скрывает все запланированные задачи. Существующие задачи продолжают выполняться, и новые задачи все еще могут быть созданы.
Установка значения Index на любое другое значение (0x4, 0xffff и т.д.) не скрывает запланированную задачу, и она продолжает выполняться по расписанию.

Теперь рассмотрим два результата манипуляции значением Index.

Скрытие запланированной задачи

В первом сценарии мы создаем еще одну запланированную задачу под названием ModifyIndexTask, которая выполняется один раз с системными привилегиями – после создания ImpTask – и устанавливает значение Index на 0x0. Команда выглядит следующим образом:

Код:
schtasks /create /tn ModifyIndexTask /tr "reg.exe add  \"HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\ImpTask\" /v Index /d 0x0 /t REG_DWORD /f" /ru "NT AUTHORITY\SYSTEM" /rl highest /sc once /st <время, позднее времени создания ImpTask>

Посмотреть вложение 61260
Рисунок 2

После выполнения ModifyIndexTask значение Index задачи ImpTask устанавливается на 0 (Рисунок 2). В результате ImpTask исчезает как из приложения Task Scheduler (Рисунок 3), так и из вывода команды schtasks /query (Рисунок 4). Однако ImpTask продолжает выполняться даже после перезагрузки системы (Рисунок 5). Хотя ImpTask не отображается в выводе команды schtasks /query, на Рисунке 5 показано, что возможно получить статус задачи, используя команду schtasks /query с указанием имени задачи с помощью параметра /tn.

Посмотреть вложение 61261
Рисунок 3

Посмотреть вложение 61262
Рисунок 4


Посмотреть вложение 61263
Рисунок 5

Исследовательская команда Qualys смогла воспроизвести эту проблему на каждой машине с Windows 10, с которыми мы проводили эксперименты, всего на пяти устройствах.

Еще одно интересное наблюдение заключалось в том, что если попытаться изменить имя программы в задаче ImpTask (со значением Index 0x0) с помощью команды schtasks /change /tr, задача удаляется, как показано на Рисунке 6. Это выполняется без регистрации события с id 4699: удаление запланированной задачи, или события с id 4702: обновление запланированной задачи в журнале безопасности Windows. Однако событие с id 4699 регистрируется, если мы используем команду schtasks /delete для удаления задачи ImpTask.

Посмотреть вложение 61264
Рисунок 6

Скрытие всех запланированных задач​

Во втором сценарии мы создаем еще одну запланированную задачу, которая выполняется с системными привилегиями и удаляет значение Index в подпункте ImpTask. Команда выглядит следующим образом:

Код:
schtasks /create /tn ModifyIndexTask /tr "reg.exe delete \"HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\ImpTask\" /v Index /f" /ru "NT AUTHORITY\SYSTEM" /rl highest /sc once /st <время, позднее времени создания ImpTask>

После удаления значения Index в подпункте ImpTask (Рисунок 7) все запланированные задачи исчезают из приложения Task Scheduler (Рисунок 8) и вывода команды schtasks /query (Рисунок 9), вместо этого выводится сообщение об ошибке: «Произошла внутренняя ошибка». Даже указание имени задачи ImpTask в параметре /tn также не работает.

Посмотреть вложение 61265
Рисунок 7

Посмотреть вложение 61266
Рисунок 8

Посмотреть вложение 61267
Рисунок 9

Хотя запланированные задачи не отображаются, они выполняются в соответствии с запланированным временем. Невозможность просмотра запланированных задач сохраняется даже после перезагрузки системы. Изменение задачи ImpTask с помощью команды schtasks /change вызывает повторное создание значения Index, после чего команда schtasks /query выполняется успешно (Рисунок 10).

Посмотреть вложение 61268
Рисунок 10

После удаления значения Index мы попытались удалить задачу ImpTask с помощью команды schtasks /delete. Интересно, что команда завершилась с сообщением об ошибке. Когда мы затем попытались изменить ImpTask с помощью команды schtasks /change, значение Index в подпункте ImpTask было восстановлено. Все задачи снова появились в приложении Task Scheduler, и выполнение команды schtasks /query также прошло успешно. Обратите внимание, что значение Index восстанавливается только в случае, если команда schtasks /delete предшествует команде schtasks /change. Когда мы выполняли команду schtasks /change без предварительного выполнения команды schtasks /delete, значение Index не восстанавливалось, и мы продолжали получать сообщение об ошибке при выполнении команды schtasks /query.

Заключение​

Исследование, проведенное командой Qualys Research, показало, что значение Index наряду со значением SD в подпункте Tree запланированной задачи играет важную роль и может быть использовано злоумышленниками. В этой статье мы описали три новых техники скрытия и удаления запланированных задач:
  1. Скрыть запланированную задачу из приложения Task Scheduler и вывода команды schtasks /query, установив ее значение Index на 0x0.
  2. Удалить запланированную задачу, сначала установив ее значение Index на 0x0, а затем используя команду schtasks /change /tr, что эффективно удаляет задачу без оставления следов в журнале безопасности Windows.
  3. Скрыть все запланированные задачи из приложения Task Scheduler и вывода команды schtasks /query, удалив значение Index любой запланированной задачи.
Любая из этих новых техник может быть использована для скрытия запланированной задачи в среде Microsoft. Поэтому важно отслеживать изменения значений Index и SD запланированных задач. Эти изменения могут служить сигналом о выполнении вредоносного кода либо при запуске системы, либо по расписанию для сохранения присутствия.

Как можно поиграться с этим всем.)

SD, ARC Labs разработала сценарий PowerShell под названием "hunt_hidden_tasks", который доступен на странице ARC Labs GitHub по следующей ссылке:

Hidden Task Hunter​

Proof of Concept PowerShell скрипт для перечисления запланированных задач в реестре и выявления любых задач, которые имеют признаки удаления или изменения значения SD для обхода обнаружения с помощью распространенных инструментов аудита, таких как AutoRuns, schtasks или графический интерфейс Task Scheduler.


Посмотреть вложение 61269

Есть ещё инструмент:

Уже разработано несколько инструментов на C# для имитации атаки с использованием запланированных задач. Я пробовал некоторые из них, но у каждого из них есть свои ограничения по настройке запланированных задач. Поэтому этот проект направлен на создание инструмента на C# (совместимого с CobaltStrike execute-assembly), который включает необходимые мне функции и обеспечивает достаточную гибкость в настройке запланированных задач.

Техника скрытия запланированной задачи​


Для использования этой техники вам потребуется учетная запись "NT AUTHORITY/SYSTEM", и в ScheduleRunner выполнить следующие действия:
  • Удалить значение "SD" из "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree[task name]"
  • Удалить XML файл запланированной задачи "C:\Windows\System32\Tasks[task name]"
Для удаления запланированной задачи, созданной с использованием этой техники, необходимо добавить "/technique:hide" в метод удаления, чтобы правильно ее удалить.

Пример команды создания скрытой задачи в ScheduleRunner:

Код:
ScheduleRunner.exe /method:create /taskname:demo /trigger:minute /modifer:10 /program:"C:\Temp\beason.exe" /technique:hide

Демо:

Посмотреть вложение 61270
Очень полезная тема, порой очень часто сталкиваемся с проблемой создания и запуска задач в планировщике. Спасибо за инфо!
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 125
Репутация
8 243
Очень полезная тема, порой очень часто сталкиваемся с проблемой создания и запуска задач в планировщике. Спасибо за инфо!
Основной смысл этих статей, как создать скрытую задачу в планировщике.)
Т.е. задача есть, она будет запускаться, но при этом в планировщике и в командах она будет не видна.)
 

HMCoba

Активный пользователь
Активный
Регистрация
22.04.2023
Сообщения
185
Репутация
139
Основной смысл этих статей, как создать скрытую задачу в планировщике.)
Т.е. задача есть, она будет запускаться, но при этом в планировщике и в командах она будет не видна.)
Отлично, как раз то что нужно, я вот сколько юзал эту тему, не где такой подробной инфы так и не нашол.
Спасибо!
 
Верх Низ