Статьи

Phantom Persistence: как превратить штатный механизм Windows в инструмент закрепления

Феклисов Андрей, инженер киберугроз CtrlHack
Вступление
Что, если вредоносная программа может пережить перезагрузку Windows, не создавая привычного артефакта автозапуска?

На протяжении долгого времени самыми распространенными способами закрепления были есть и будут запланированные задачи, ключи реестра Run, папка автозагрузки и службы. Популярность этих методов объясняется их надежностью, простотой, а также схожестью с активностью легитимного программного обеспечения. Сегодня большинство зрелых SOC и современных EDR отслеживают подобное поведение и такие события не остаются без внимания.

Возникает закономерный вопрос: можно ли добиться закрепления в системе без создания постоянных объектов автозапуска во время обычной работы Windows?

Спойлер — да.

В этой статье разберем технику Phantom Persistence, узнаем почему csrss.exe внезапно записывает полезную нагрузку в RunOnce и что делать защитникам в такой ситуации.
Откуда появилась Phantom Persistence

Механизм восстановления приложений (Application Restart) существует в Windows начиная с Windows Vista и Windows Server 2008. Он позволяет приложениям восстановить свою работу после определенных сценариев завершения работы.
В 2017 году исследователь Hexacorn искал способ обойти песочницу, используя функционал восстановления приложений. Однако обойти песочницу так и не удалось.

В 2025 году Grant Smith (S1n1st3r) использовал этот механизм для закрепления и опубликовал РоС Phantom Persistence.

В начале 2026 техника вышла за пределы исследований. По данным Kaspersky механизм восстановления приложений использовала группировка Silver Fox (также известная как Larcenous Werewolf и Void Arachne) в атаках на пользователей из России и Индии.
Почему Phantom?

Название (phantom в переводе с английского — «призрачный») отражает главную особенность техники. При классическом закреплении злоумышленник создает объект, который сохраняется в системе (ключ реестра, запланированная задача, служба, файл в папке автозагрузки и тп).

В Phantom Persistence постоянного объекта автозапуска в течение большей части жизненного цикла техники нет. Временная запись для повторного запуска появляется только на этапе завершения работы Windows, используется при следующем входе пользователя и затем удаляется.
Анатомия Phantom Persistence

В основе техники лежит злоупотребление штатным механизмом восстановления приложений Windows. Он позволяет автоматически повторно запускать зарегистрированные приложения после определенных сценариев завершения работы системы.

Для регистрации приложения используется функция RegisterApplicationRestart(), которая является частью инфраструктуры регистрации сбоев и восстановления приложений (Windows Error Reporting). При ее вызове приложение сообщает операционной системе, что может быть автоматически повторно запущено при выполнении условий, необходимых для работы механизма восстановления приложений.

Жизненный цикл техники выглядит следующим образом:
Рассмотрим каждый этап отдельно.
Этап 1. Регистрация процесса

Первым шагом вредоносный процесс вызывает функцию API Windows:

RegisterApplicationRestart(...)

Функция регистрирует приложение в механизме Application Restart и сообщает Windows, что оно может быть автоматически повторно запущено при выполнении соответствующих условий.

При регистрации приложение передает:

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

Путь к исполняемому файлу отдельно передавать не требуется: функция вызывается текущим процессом, а Windows располагает информацией о запущенном образе и контексте процесса.

На этом этапе привычного объекта автозапуска не создается. Происходит регистрация приложения внутри инфраструктуры восстановления приложений Windows.

Для вызова функции RegisterApplicationRestart() не требуются повышенные привилегии. Любое пользовательское приложение может зарегистрировать себя в механизме восстановления.
Этап 2. Ожидание

После регистрации процесс продолжает жить обычной жизнью. Однако существует одно ограничение. Windows перезапускает только те приложения, которые непрерывно работали не менее 60 секунд. Это ограничение реализовано намеренно и защищает систему от бесконечных циклов перезапуска.
Этап 3. Завершение работы Windows

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

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

Одновременно инфраструктура восстановления приложений проверяет зарегистрированные процессы. Для каждого процесса выполняется проверка ряда условий (например, проработал ли процесс более 60 секунд).

На этом этапе Windows подготавливает команду повторного запуска приложения, которая будет использована после следующего входа пользователя в систему.

Именно на этом этапе появляется единственный временный артефакт техники.

Легитимный процесс csrss.exe подсистемы пользовательских сеансов создает создает значение Application Restart #X в ключе:

HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce

В значение Application Restart #X записывается команда для запуска восстанавливаемого приложения.

То есть сама вредоносная программа никак не взаимодействует с реестром. Запись выполняется системным компонентом Windows как часть штатной реализации восстановления приложений.

Для средств защиты это событие может выглядеть как обычная активность доверенного системного процесса, реализующего встроенную функциональность Windows.
Этап 4. Вход пользователя

После завершения работы временное значение остается в RunOnce. При следующем входе пользователя в систему Windows запускает процедуру обработки автозапуска.
Во время инициализации пользовательской среды процесс Проводника explorer.exe считывает содержимое параметра Application Restart #X в ветке RunOnce и удаляет эту запись из реестра. Только после очистки реестра операционная система осуществляет физический запуск приложения. Таким образом, в момент старта полезной нагрузки все постоянные артефакты закрепления в системе исчезают, а вредоносная программа продолжает свою работу.
А минусы будут?

Несмотря на использование компонентов Windows для перезапуска полезной нагрузки, Phantom Persistence нельзя назвать надежным методом закрепления. Механизм имеет ряд ограничений и не восстановит приложение в следующих случаях:

  • процесс был завершен пользователем или администратором;
  • завершение работы системы инициировал другой пользователь;
  • система завершилась из-за внезапной потери питания.

Также стоит отметить сценарий завершения пользовательской сессии. Сам по себе механизм RegisterApplicationRestart не обеспечивает восстановление процесса после завершения пользовательской сессии. Однако можно использовать перехват текущей процедуры завершения работы и повторно инициировать ее с использованием флага EWX_RESTARTAPPS. В результате процесс успешно восстанавливается после выхода из системы.
Обнаружение

Несмотря на отсутствие постоянных артефактов в течение большей части жизненного цикла, Phantom Persistence оставляет несколько характерных признаков, которые могут использоваться защитниками.
Способ 1. Анализ RunOnce

Один из наиболее интересных артефактов появляется в ключе:

HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce

В ходе эксперимента фиксация самого момента создания значения оказалась затруднена. csrss.exe выполняет запись на позднем этапе завершения Windows, когда большая часть пользовательских процессов и служб уже прекратила работу. В эксперименте ни обычный Procmon, ни журнал событий Windows не позволили увидеть момент появления значения.

Однако Procmon в режиме Boot Logging позволяет отследить последующее чтение и удаление этого значения при запуске пользовательской сессии. Значение содержит команду запуска приложения, включая путь к исполняемому файлу. Поэтому данный артефакт можно использовать для обнаружения: правила детектирования могут отслеживать чтение и удаление значений Application Restart в ключе RunOnce и проверять указанный в них путь к исполняемому файлу. Наличие пути к нетипичному для легитимных приложений каталогу может служить дополнительным признаком подозрительной активности.
Способ 2. Мониторинг RegisterApplicationRestart

Второй потенциальный источник индикатора — вызов функции RegisterApplicationRestart(). Сам по себе вызов функции не является признаком вредоносной активности, поскольку используется легитимными приложениями. Однако в контексте с другими событиями, характерными для вредоносной деятельности, можно сделать вывод об использовании Phantom Persistence.
Способ 3. Аномальная цепочка запуска процессов

Следующий индикатор появляется уже после входа пользователя в систему. Процесс Проводника explorer.exeпосле чтения и удаления значения Application Restart в RunOnce инициирует создание процесса вредоносной полезной нагрузки. Это порождает аномалию в дереве процессов:

1 winlogon.exe
2 └── userinit.exe
3 └── explorer.exe (родительский процесс)
4 └── [имя_вредоноса].exe (полезная нагрузка)

Сам факт запуска дочернего процесса из explorer.exe не является чем-то необычным. Следует обращать внимание на случаи, когда explorer.exe запускает неподписаный исполняемый файл, расположенный в пользовательских каталогах или других нетипичных директориях.
Что в итоге искать SOC?

Главная проблема Phantom Persistence заключается в том, что единственного идеального IOC здесь нет. Каждое событие по отдельности может быть легитимным. Поэтому качественный детект должен искать не одно событие, а их сочетание
Подведем итог

Чем Phantom Persistence отличается от классического закрепления
Характеристика
Ключ реестра Run
Запланированные задачи
Службы
Папка автозагрузки
Phantom Persistence
Постоянная точка автозапуска
Да
Да
Да
Да
Большую часть времени отсутствует
Кто создает объект
Сам процесс
Сам процесс
Сам процесс
Сам процесс
Компонент Windows
Привилегии
Не нужны для HKCU
Зависит от сценария
Нужны права Адмиистратора
Не нужны для пользовательской директории
Не нужны
Видно при аудите
Да
Да
Да
Да
Сложнее обнаружить
Надежность
Высокая
Высокая
Высокая
Высокая
Низкая в сравнении с аналогами
Основной подход к детекту
Изменение реестра
Создание задачи
Создание службы
Создание объекта
Корреляция поведения
Именно последнее свойство, пожалуй, наиболее важно. При классическом закреплении защита ищет объект. В случае Phantom Persistence приходится искать последовательность действий.
Вывод

Техника Phantom Persistence интересна не потому, что она полностью невидима. Она интересна тем, что меняет привычную модель поиска закрепления. Обычно защита ищет объект, который создал злоумышленник: задачу, службу, значение Run или файл в папке автозагрузки. Здесь все устроено иначе.

Вредоносный процесс использует легитимный Windows API, а временную точку повторного запуска позднее создает сама операционная система. После запуска приложения этот объект снова исчезает.

Это не делает технику невидимой. Для обнаружения приходится смотреть шире: кто вызвал механизм восстановления, откуда был запущен исполняемый файл и какой процесс появился после следующего входа пользователя.
2026-09-17 18:36