Добро пожаловать обратно, начинающие кибервоины!
Устойчивость в системах Windows всегда была своего рода игрой в кошки-мышки между злоумышленниками, ищущими надежные точки опоры, и защитниками, пытающимися перекрыть пути для злоупотреблений. Сама Windows предоставляет широкий спектр механизмов, которые являются легитимными элементами системной функциональности, однако каждый из них можно превратить в способ обеспечения повторного запуска вредоносного кода после перезагрузки или входа в систему. Параметры реестра, системные процессы и процедуры инициализации — все это потенциальные цели для устойчивости, и хотя большинство из них никогда не разрабатывались с учетом безопасности, они остаются доступными и сегодня. Их привлекательность заключается в надежности: после настройки они выдерживают перезагрузку и предоставляют возможность повторного выполнения, не требуя от злоумышленника ручного повторного входа в среду.
Описанные здесь методы представляют собой примеры персистентности на основе реестра, каждая из которых имеет свои преимущества, недостатки и особенности обнаружения. Понимание этих методов крайне важно как для злоумышленников, которые рассчитывают на стабильность, так и для защитников, которым необходимо обнаружить попытки взлома до того, как они нанесут ущерб.
cmd#> reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t reg_dword /d 0x1 /f
cmd#> reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t reg_sz /d "C:\meter64.dll" /f
cmd#> reg add "HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t reg_dword /d 0x1 /f
cmd#> reg add "HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t reg_sz /d "C:\meter32.dll" /f
Первая команда включает поведение AppInit для 64-битного представления реестра. Вторая команда записывает путь к DLL-библиотекам, которые Windows должна попытаться загрузить в процессы графического интерфейса (это значение представляет собой строку из одного или нескольких путей к DLL). Следующие две команды делают то же самое для 32-битного представления реестра в 64-битной системе. Сначала она включает механизм для 32-битных процессов, а затем задаёт путь к 32-битной DLL.
Проще говоря: включите AppInit, сообщите Windows, какие DLL-библиотеки загружать, и сделайте это как для 64-битных, так и для 32-битных процессов, чтобы приложения с графическим интерфейсом обеих архитектур загружали указанные библиотеки.
Плюсы: выдерживает перезагрузки и обеспечивает автоматическую загрузку DLL во многие процессы графического интерфейса, обеспечивая широкий охват без необходимости создания записей запуска для каждого пользователя.
Минусы: требуются права администратора для изменения HKLM, шумный, так как DLL будет отображаться загруженной во многих процессах (создавая сильную телеметрию), и полагается на старый, известный механизм, который часто проверяют защитники.
Если вы защитник, сосредоточьтесь на аудите ключей HKLM Windows (включая путь Wow6432Node) и мониторинге необычных загрузок DLL в систему или общие процессы графического интерфейса.
cmd#> reg add "HKLM\system\currentcontrolset\control\lsa" /v "Notification Packages" /t reg_multi_sz /d "rassfm\0scecli\0meter" /f
Эта команда реестра обновляет многострочный раздел « Пакеты уведомлений»rassfm в разделе LSA. Проще говоря, эта строка сообщает Windows: «При запуске LSASS также загрузить пакеты с именами , scecli, meterи принудительно записать их, если значение уже существует».
Плюсы: выдерживает перезагрузки и помещает код внутрь длительного, высокопривилегированного процесса, что делает сохранение как долговечным, так и мощным.
Минусы: требуются права администратора для изменения реестра LSA, оказывается чрезвычайно рискованное влияние на телеметрию и стабильность (неправильная конфигурация или неисправный модуль могут привести к сбою LSASS и дестабилизации или сделать систему непригодной к использованию), вызывает большие подозрения у защитников.
Размещение кода в LSASS обеспечивает надежность и доступ к конфиденциальным материалам, но это один из самых громких и рискованных методов сохранения безопасности: он требует прав администратора, создает сильные сигналы для обнаружения и может привести к сбою системы, если все сделано неправильно.
cmd#> reg add "HKLM\software\microsoft\windows nt\currentversion\winlogon" /v UserInit /t reg_sz /d "c:\windows\system32\userinit.exe, c:\meter.exe"
При этом сначала будет указан обычный userinit.exeпуть, а затем добавлено c:\meter.exe, поэтому при запуске Winlogon он будет запущен userinit.exeкак meter.exeчасть последовательности входа в систему. Обратите внимание, что сначала UserInitдолжен быть указан допустимый userinit.exeпуть. Удаление или неправильный порядок может привести к сбоям в интерактивном входе в систему и блокировке пользователей.
Плюсы: выдерживает перезагрузки и надежно выполняется при каждом интерактивном входе пользователя в систему, обеспечивая постоянную сохранность данных между сеансами.
Минусы: требуются права администратора для изменения HKLM, нет возможности управления расписанием (работает только при входе в систему) и рискованно, поскольку неправильная настройка значения UserInit может помешать пользователям войти в систему и приводит к появлению очевидных криминалистических сигналов.
cmd$> reg add "HKCU\Software\Microsoft\Office test\Special\Perf" /t REG_SZ /d C:\meter.dll
Плюсы: выдерживает перезагрузки и работает из-под обычной учетной записи пользователя, поскольку находится в HKCU, поэтому права администратора не требуются.
Минусы: нет управления расписанием, запуск происходит только тогда, когда пользователь запускает соответствующий компонент Office, поэтому невозможно контролировать интервал выполнения.
Устойчивость в системах Windows всегда была своего рода игрой в кошки-мышки между злоумышленниками, ищущими надежные точки опоры, и защитниками, пытающимися перекрыть пути для злоупотреблений. Сама Windows предоставляет широкий спектр механизмов, которые являются легитимными элементами системной функциональности, однако каждый из них можно превратить в способ обеспечения повторного запуска вредоносного кода после перезагрузки или входа в систему. Параметры реестра, системные процессы и процедуры инициализации — все это потенциальные цели для устойчивости, и хотя большинство из них никогда не разрабатывались с учетом безопасности, они остаются доступными и сегодня. Их привлекательность заключается в надежности: после настройки они выдерживают перезагрузку и предоставляют возможность повторного выполнения, не требуя от злоумышленника ручного повторного входа в среду.
Описанные здесь методы представляют собой примеры персистентности на основе реестра, каждая из которых имеет свои преимущества, недостатки и особенности обнаружения. Понимание этих методов крайне важно как для злоумышленников, которые рассчитывают на стабильность, так и для защитников, которым необходимо обнаружить попытки взлома до того, как они нанесут ущерб.
AppInit
AppInit — это устаревшая функция Windows, которая сообщает загрузчику ОС о необходимости сопоставить одну или несколько DLL-библиотек с любым процессом, связывающим user32.dll. Это означает, что при запуске множества графических приложений Windows автоматически загружает DLL-библиотеки, перечисленные в этом значении реестра, предоставляя любому коду внутри этих DLL возможность запускаться внутри этих процессов. Это основанный на реестре механизм, действующий на уровне системы, который сохраняется после перезагрузки и при соответствующей настройке влияет как на 32-разрядные, так и на 64-разрядные графические приложения.cmd#> reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t reg_dword /d 0x1 /f
cmd#> reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t reg_sz /d "C:\meter64.dll" /f
cmd#> reg add "HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t reg_dword /d 0x1 /f
cmd#> reg add "HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t reg_sz /d "C:\meter32.dll" /f
Первая команда включает поведение AppInit для 64-битного представления реестра. Вторая команда записывает путь к DLL-библиотекам, которые Windows должна попытаться загрузить в процессы графического интерфейса (это значение представляет собой строку из одного или нескольких путей к DLL). Следующие две команды делают то же самое для 32-битного представления реестра в 64-битной системе. Сначала она включает механизм для 32-битных процессов, а затем задаёт путь к 32-битной DLL.
Проще говоря: включите AppInit, сообщите Windows, какие DLL-библиотеки загружать, и сделайте это как для 64-битных, так и для 32-битных процессов, чтобы приложения с графическим интерфейсом обеих архитектур загружали указанные библиотеки.
Плюсы: выдерживает перезагрузки и обеспечивает автоматическую загрузку DLL во многие процессы графического интерфейса, обеспечивая широкий охват без необходимости создания записей запуска для каждого пользователя.
Минусы: требуются права администратора для изменения HKLM, шумный, так как DLL будет отображаться загруженной во многих процессах (создавая сильную телеметрию), и полагается на старый, известный механизм, который часто проверяют защитники.
Если вы защитник, сосредоточьтесь на аудите ключей HKLM Windows (включая путь Wow6432Node) и мониторинге необычных загрузок DLL в систему или общие процессы графического интерфейса.
ЛСАСС
Изменение конфигурации LSASS для загрузки дополнительной DLL-библиотеки — способ запустить код внутри высокопривилегированного, долгоживущего системного процесса. LSASS отвечает за применение политики безопасности и обработку учётных данных. Поскольку LSASS загружает настроенные пакеты аутентификации/уведомлений при запуске, добавление записи сюда приводит к загрузке выбранного модуля в этот процесс, который остаётся активным после перезагрузки. Это делает его мощным, но опасным.cmd#> reg add "HKLM\system\currentcontrolset\control\lsa" /v "Notification Packages" /t reg_multi_sz /d "rassfm\0scecli\0meter" /f
Эта команда реестра обновляет многострочный раздел « Пакеты уведомлений»rassfm в разделе LSA. Проще говоря, эта строка сообщает Windows: «При запуске LSASS также загрузить пакеты с именами , scecli, meterи принудительно записать их, если значение уже существует».
Плюсы: выдерживает перезагрузки и помещает код внутрь длительного, высокопривилегированного процесса, что делает сохранение как долговечным, так и мощным.
Минусы: требуются права администратора для изменения реестра LSA, оказывается чрезвычайно рискованное влияние на телеметрию и стабильность (неправильная конфигурация или неисправный модуль могут привести к сбою LSASS и дестабилизации или сделать систему непригодной к использованию), вызывает большие подозрения у защитников.
Размещение кода в LSASS обеспечивает надежность и доступ к конфиденциальным материалам, но это один из самых громких и рискованных методов сохранения безопасности: он требует прав администратора, создает сильные сигналы для обнаружения и может привести к сбою системы, если все сделано неправильно.
W
Winlogon — это компонент, который обрабатывает интерактивные входы пользователей в систему и вызывает программы, указанные в UserInitпараметре реестра, после завершения аутентификации. Добавляя к этой UserInitстроке дополнительный исполняемый файл, вы обеспечиваете автоматический запуск программы при каждом интерактивном входе.cmd#> reg add "HKLM\software\microsoft\windows nt\currentversion\winlogon" /v UserInit /t reg_sz /d "c:\windows\system32\userinit.exe, c:\meter.exe"
При этом сначала будет указан обычный userinit.exeпуть, а затем добавлено c:\meter.exe, поэтому при запуске Winlogon он будет запущен userinit.exeкак meter.exeчасть последовательности входа в систему. Обратите внимание, что сначала UserInitдолжен быть указан допустимый userinit.exeпуть. Удаление или неправильный порядок может привести к сбоям в интерактивном входе в систему и блокировке пользователей.
Плюсы: выдерживает перезагрузки и надежно выполняется при каждом интерактивном входе пользователя в систему, обеспечивая постоянную сохранность данных между сеансами.
Минусы: требуются права администратора для изменения HKLM, нет возможности управления расписанием (работает только при входе в систему) и рискованно, поскольку неправильная настройка значения UserInit может помешать пользователям войти в систему и приводит к появлению очевидных криминалистических сигналов.
Майкрософт
Многие компоненты Office считывают конфигурацию из куста реестра текущего пользователя, и злоумышленники могут этим злоупотребить, вставив путь или имя DLL, которые Office будет загружать или использовать при запуске пакета. Этот подход применяется к каждому пользователю и сохраняется после перезагрузки, поскольку конфигурация хранится в HKCU, но срабатывает только тогда, когда жертва фактически запускает компонент Office, считывающий этот ключ. Это полезно, когда жертва регулярно использует Office, и вам нужен простой механизм сохранения с низким уровнем привилегий, не требующий установки службы или изменения автозапуска на уровне всего компьютера.cmd$> reg add "HKCU\Software\Microsoft\Office test\Special\Perf" /t REG_SZ /d C:\meter.dll
Плюсы: выдерживает перезагрузки и работает из-под обычной учетной записи пользователя, поскольку находится в HKCU, поэтому права администратора не требуются.
Минусы: нет управления расписанием, запуск происходит только тогда, когда пользователь запускает соответствующий компонент Office, поэтому невозможно контролировать интервал выполнения.