«Повышение привилегий — это не просто взлом администратора. Это многослойная система эксплойтов, использующая ошибки проектирования операционных систем, доверие между компонентами и слепые пятна в политиках безопасности для подмены самой логики контроля доступа.»
Механизмы обхода контроля доступа
Злоупотребление UAC и API для повышения прав
Контроль учётных записей пользователей (UAC) в Windows должен запрашивать подтверждение на запуск процессов с повышенными правами. Однако существуют методы, позволяющие обойти этот механизм. Например, некоторые системные процессы, порождаемые с высоким уровнем целостности, можно заставить запустить произвольный код, подменив родительский процесс или используя уязвимые точки расширения.
На macOS аналогичную роль играет API AuthorizationExecuteWithPrivileges, предназначенный для легитимных задач вроде установки обновлений. Проблема в том, что он не проводит проверку целостности или источника вызывающей программы, что позволяет вредоносному ПО запрашивать у пользователя пароль root для выполнения произвольных команд.
Манипуляция токенами доступа
Токен доступа в Windows — это цифровой пропуск процесса, содержащий информацию о правах пользователя. Если злоумышленник получил выполнение кода в контексте процесса, он может скопировать токен более привилегированного пользователя с помощью функций DuplicateToken или DuplicateTokenEx. Затем, используя ImpersonateLoggedOnUser или SetThreadToken, поток злоумышленника может начать действовать от имени этого пользователя.
Ещё один метод — создание нового процесса с чужим токеном через CreateProcessWithTokenW или утилиту runas. Если же известны учётные данные, но пользователь не в системе, можно создать для него сеанс входа через LogonUser, получить токен этого сеанса и присвоить его своему потоку.
Подделка родительского процесса (PPID Spoofing)
Многие системы мониторинга анализируют цепочки родственных процессов. Чтобы скрыться, злоумышленник может явно указать, что его процесс был запущен легитимным родителем (например, explorer.exe или svchost.exe). Это делается через параметр в API CreateProcess. Интересно, что эту же технику использует сам UAC для корректного отображения запросов повышения прав.
Внедрение через SID-History и клонирование групп
При миграции учётных записей между доменами Active Directory старые идентификаторы безопасности (SID) пользователя сохраняются в атрибуте SID-History для сохранения доступа к ресурсам. Если злоумышленник получает права на запись этого атрибута (например, через уязвимость или компрометацию контроллера домена), он может добавить туда SID группы «Администраторы домена». После этого при следующем входе пользователя его токен будет содержать эти расширенные права.
Техники персистентности и автоматического запуска
Получение прав — это только половина дела. Для закрепления в системе злоумышленник использует множество техник автозапуска, часто маскируя их под легитимные системные механизмы.
| Категория | Техника (пример) | Принцип работы | Уровень привилегий |
|---|---|---|---|
| Автозагрузка пользователя | Папка автозагрузки, ключи Run в реестре | Запуск при входе конкретного пользователя. | Права пользователя |
| Системные службы | Создание/изменение службы Windows | Запуск при загрузке системы, часто от SYSTEM. | SYSTEM / Высокие |
| Расширения ядра и подсистем безопасности | Драйверы LSASS, пакеты аутентификации (SSP) | Загрузка DLL в критичные процессы (lsass.exe) при старте ОС. | SYSTEM (с доступом к учетным данным) |
| Планировщики заданий | Планировщик задач Windows (schtasks), cron, systemd timer | Выполнение по расписанию или событию. | Зависит от контекста запуска |
| Хитрая интеграция | Image File Execution Options (отладчики), AppInit DLLs, Netsh Helpers | Принудительная загрузка кода в легитимные процессы. | Права целевого процесса |
| Контейнеры и облако | Изменение ролей Kubernetes, автозапуск в облачных функциях (Lambda) | Злоупотребление механизмами оркестровки и бессерверными вычислениями. | Привилегии сервисной учётной записи |
Особые случаи: печать, доступность и переменные среды
Служба диспетчера печати spoolsv.exe работает с правами SYSTEM и загружает сторонние DLL — мониторы портов и процессоры печати. Регистрация своей DLL через API AddMonitor гарантирует её запуск при загрузке системы.
Функции специальных возможностей Windows (экранная лупа, клавиатура) можно вызвать с экрана входа, до аутентификации. Подмена исполняемого файла, на который они ссылаются, даёт возможность получить системную командную строку без входа в учётную запись.
Переменные среды, такие как PATH или COR_PROFILER (для .NET), определяют, откуда система ищет библиотеки и компоненты. Подмена пути или указание своей DLL в переменной COR_PROFILER приводит к её загрузке в каждый процесс .NET с правами этого процесса.
Перехват выполнения и внедрение в процессы
Когда прямое создание процесса невозможно, злоумышленники внедряют код в уже работающие процессы. Это обходит защиту, основанную на запуске новых исполняемых файлов, и наследует привилегии жертвы.
DLL Hijacking и Side-Loading
Если приложение ищет DLL не по полному пути, а по имени, его можно заставить загрузить вредоносную библиотеку. Для этого её нужно поместить в директорию с более высоким приоритетом в порядке поиска (например, в текущую папку приложения). Более изощрённый вариант — side-loading: разместить подписанную легитимную программу вместе со своей DLL, которую эта программа по умолчанию загружает.
Внедрение кода
Существует множество техник внедрения машинного кода или DLL в адресное пространство чужого процесса:
- QueueUserAPC: постановка асинхронного вызова процедуры (APC) в очередь потока целевого процесса.
- Reflective DLL Injection: загрузка DLL напрямую из памяти, без записи на диск и вызова стандартного API
LoadLibrary. - Process Hollowing: создание легитимного процесса в приостановленном состоянии, затем «выгрузка» его кода из памяти и замена своим.
- Манипуляция через ptrace или /proc: на Linux отладчик
ptraceили запись в память процесса через/proc/[pid]/memпозволяют модифицировать выполняемый код.
Учётные записи и управление доступом в домене
Злоупотребление встроенными и легитимными учётными записями
Атаки часто начинаются не со взлома, а с использования «забытых» учётных данных: встроенных учётных записей (локальный администратор, root в AWS), учётных записей служб с избыточными правами или стандартных паролей на оборудовании. В Active Directory компрометация даже обычной учётной записи пользователя может стать трамплином благодаря техникам вроде Kerberoasting или атак на групповые политики (GPO).
Манипуляция доверительными отношениями
Доверие между доменами или облачными тенантами создаёт сложные цепочки авторизации. Изменение свойств этого доверия (например, добавление SidFiltering) или создание фиктивного межлесного доверия может позволить злоумышленникам из одного домена получить доступ к ресурсам другого, обходя изоляцию.
Escape из контейнеров
В контейнеризованных средах повышение привилегий часто означает «побег» из контейнера на хост. Это становится возможным при монтировании сокета Docker (/var/run/docker.sock) внутрь контейнера, использовании привилегированных контейнеров или эксплуатации уязвимостей в ядре (например, CVE-2021-4034 в polkit). Получив доступ на уровне хоста, атакующий контролирует все остальные контейнеры.
Практические выводы для защиты
Защита от повышения привилегий требует комплексного подхода, выходящего за рамки простого «не работать из-под админа». Ключевые меры:
- Минимальные привилегии: строгий принцип наименьших прав для пользователей, служб и сервисных учётных записей, особенно в облаке.
- Контроль целостности процессов: использование Protected Processes (Windows), профилей AppArmor/SELinux (Linux), политик запрета выполнения (Execution Policies).
- Активный мониторинг: отслеживание нестандартных цепочек родительских процессов, загрузки DLL в критические системные процессы (lsass.exe, svchost.exe), создания подозрительных задач в планировщике.
- Харденинг ОС: отключение или строгий контроль устаревших механизмов вроде AppInit DLLs, WSH, ненужных служб печати; проверка разрешений на ключи реестра, связанные с автозапуском.
- Сегментация: изоляция критичных доменных контроллеров, сегментация облачных проектов и сетей, отделение окружений разработки и производства.
- Управление учётными данными: регулярный аудит и очистка членства в группах, отключение встроенных учётных записей, использование LAPS для управления паролями локальных администраторов.
Понимание разнообразия техник повышения привилегий меняет взгляд на безопасность: угроза часто заключается не в одном эксплойте, а в цепочке мелких упущений в конфигурации, которые вместе образуют путь от обычного пользователя до полного контроля над инфраструктурой.