
Нейтрализация EDR на основе AppLocker
После моей статьи о Fairy-Law, где я использовал средства ядра для отключения решений Endpoint Detection & Response (EDR), diversenok указал, что исключения IFEO (Image File Execution Options) слишком инвазивны для сторонних приложений. Это привело к более удачному подходу: использованию той силы, которой администраторы уже легитимно обладают через AppLocker.
Концепция была вдохновлена diversenok, который подчеркнул, что администраторы могут легитимно контролировать любое программное обеспечение в своих системах. На основе этого наблюдения я разработал технику, использующую AppLocker как нативный механизм управления Windows. Данное исследование рассматривает техническую реализацию AppLocker для управления EDR, сравнивает её с WDAC и представляет практический proof-of-concept инструмент.
AppLocker был представлен в Windows 7 и расширен в Windows 8.1, 10 (Enterprise) и Windows Server 2012/R2/2016+. Это среда включения приложений в белый список, которая позволяет администраторам точно определять, какие исполняемые файлы, скрипты или установщики могут выполняться для конкретных пользователей или групп.
AppIDSvc (служба удостоверения приложений)
LocalServiceAppID.sys (драйвер ядра)
SeSrpAccessCheckУточнение:
ХотяAppID.sysвыполняет оценку правил в режиме ядра, принудительное применение правил для DLL не является автономным.
Драйвер ядра сам по себе не отслеживает загрузку DLL активно. Вместо этого компоненты пользовательского режима должны явно запрашивать драйвер через IOCTL, чтобы определить, разрешена ли загрузка DLL.
Таким образом, правила AppLocker для DLL фактически действуют как клиентский механизм защиты.
AppLocker поддерживает две основные категории правил:
Разрешающие правила: явно разрешают выполнение определённых приложений
Запрещающие правила: явно блокируют выполнение определённых приложений
C:\Program Files\Security\*.exeHKLM\Software\Policies\Microsoft\Windows\SrpV2 (хранилище XML-политик, постоянное)
HKLM\SYSTEM\CurrentControlSet\Control\Srp\Gp\Exe (двоичный формат SDDL, активное применение)
HKLM\SYSTEM\CurrentControlSet\Control\AppID\CertStore (кэш сертификатов)
По умолчанию AppLocker не применяет правила к службам или процессам SYSTEM.
В графическом интерфейсе нет опции для включения такого поведения.
Применение правил к службам можно включить только через XML-политику с помощью RuleCollectionExtensions.
Следующий раздел политики необходим для применения правил AppLocker к службам:
<RuleCollectionExtensions>
<ThresholdExtensions>
<Services EnforcementMode="Enabled"/>
</ThresholdExtensions>
<RedstoneExtensions>
<SystemApps Allow="Enabled"/>
</RedstoneExtensions>
</RuleCollectionExtensions>
Как указано в названиях расширений, эти опции поддерживаются только в Windows 10+ и недоступны в более ранних версиях. См. Microsoft — расширения коллекций правил AppLocker
AppID.sys оценивает атрибуты приложенияSTATUS_ACCESS_DISABLED_BY_POLICY_OTHER⚠️ AppLocker НЕ завершает работающие процессы.
Применение правил AppLocker распространяется только на события создания новых процессов. Уже запущенные процессы EDR продолжают выполняться до перезагрузки системы. Это фундаментальное архитектурное ограничение.
Примечание о телеметрии драйверов ядра:
Даже после блокировки исполняемых файлов EDR в пользовательском режиме драйверы ядра (*.sys) остаются активными и работоспособными. Эти драйверы продолжают:
Однако обширное тестирование показывает, что такая телеметрия становится функционально неэффективной. Без аналитических движков пользовательского режима, систем корреляции и механизмов отчётности, необработанные данные телеметрии не могут быть обработаны в действующие обнаружения. Решения EDR в значительной степени полагаются на компоненты пользовательского режима для:
GhostLocker — это реализация на C++, которая автоматизирует развёртывание политик AppLocker для блокировки исполняемых файлов EDR.
GhostLocker предоставляет два варианта реализации:
main.cpp — версия с динамическим перечислениемЭта версия перечисляет запущенные процессы и определяет их полные пути к образам с помощью нативных API (NtQuerySystemInformation).
Полученные абсолютные пути затем используются для генерации точных запрещающих правил AppLocker.
Инструмент использует CreateToolhelp32Snapshot с TH32CS_SNAPPROCESS для перечисления всех запущенных процессов. Он сравнивает имена процессов с предопределённым списком целей, используя сравнение без учёта регистра (_wcsicmp).
Почему такой подход?
FindTargetsAndQueryPaths)const wchar_t* targetNames[] = {
L"MpDefenderCoreService.exe",
L"MsMpEng.exe",
L"WinDefend.exe",
L"EDR_Component_Name.exe",
};
SYSTEM_PROCESS_ID_INFORMATION spi = { 0 };
spi.ProcessId = PID;
spi.ImageName.MaximumLength = 1024;
spi.ImageName.Buffer = (PWSTR)allocBuffer;
status = NtQuerySystemInformation(
SystemProcessIdInformation,
&spi,
sizeof(spi),
0
);
Технические детали:
SystemProcessIdInformation (0x58)\Device\HarddiskVolume3\Windows\System32\...