
AppLocker-basierte EDR-Neutralisierung
Nach meinem Artikel über Fairy-Law, in dem ich Kernel-Mitigationen einsetzte, um Endpoint Detection & Response (EDR)-Lösungen zu deaktivieren, wies diversenok darauf hin, dass IFEO-Ausschlüsse (Image File Execution Options) für Drittanbieteranwendungen zu invasiv seien. Dies führte zu einem besseren Ansatz: der Nutzung der inhärenten Rechte, die Administratoren bereits durch AppLocker besitzen.
Das Konzept wurde von diversenok inspiriert, der hervorhob, dass Administratoren legitimerweise jede Software auf ihren Systemen kontrollieren können. Aus dieser Erkenntnis entwickelte ich eine Technik, die AppLocker als nativen Windows-Kontrollmechanismus einsetzt. Diese Forschung untersucht die technische Implementierung von AppLocker zur EDR-Kontrolle, vergleicht sie mit WDAC und stellt ein praktisches Proof-of-Concept-Tool vor.
AppLocker wurde mit Windows 7 eingeführt und in Windows 8.1, 10 (Enterprise) sowie Windows Server 2012/R2/2016+ erweitert. Es handelt sich um ein Anwendungs-Whitelisting-Framework, das es Administratoren ermöglicht, präzise festzulegen, welche ausführbaren Dateien, Skripte oder Installationsprogramme für bestimmte Benutzer oder Gruppen ausgeführt werden dürfen.
AppIDSvc (Application Identity Service)
LocalServiceAppID.sys (Kernel-Treiber)
SeSrpAccessCheck durchKlarstellung:
WährendAppID.sysdie Regelauswertung im Kernel-Modus durchführt, ist die DLL-Durchsetzung nicht autonom.
Der Kernel-Treiber überwacht DLL-Ladevorgänge nicht aktiv selbst. Stattdessen müssen User-Mode-Komponenten den Treiber explizit per IOCTL abfragen, um festzustellen, ob ein DLL-Ladevorgang erlaubt ist.
Infolgedessen fungieren AppLocker-DLL-Regeln effektiv als clientseitiger Schutzmechanismus.
AppLocker unterstützt zwei primäre Regelkategorien:
Allow-Regeln (Zulassen): Erlauben explizit die Ausführung definierter Anwendungen
Deny-Regeln (Verweigern): Blockieren explizit die Ausführung definierter Anwendungen
C:\Program Files\Security\*.exeHKLM\Software\Policies\Microsoft\Windows\SrpV2 (XML-Richtlinienspeicher, persistent)
HKLM\SYSTEM\CurrentControlSet\Control\Srp\Gp\Exe (SDDL-Binärformat, aktive Durchsetzung)
HKLM\SYSTEM\CurrentControlSet\Control\AppID\CertStore (Zertifikatscache)
Standardmäßig setzt AppLocker Regeln nicht bei Diensten oder SYSTEM-Prozessen durch.
Es gibt keine grafische Benutzeroberflächenoption, um dieses Verhalten zu aktivieren.
Die Durchsetzung für Dienste kann nur über die XML-Richtlinie mit RuleCollectionExtensions aktiviert werden.
Der folgende Richtlinienabschnitt ist erforderlich, um AppLocker-Regeln für Dienste durchzusetzen:
<RuleCollectionExtensions>
<ThresholdExtensions>
<Services EnforcementMode="Enabled"/>
</ThresholdExtensions>
<RedstoneExtensions>
<SystemApps Allow="Enabled"/>
</RedstoneExtensions>
</RuleCollectionExtensions>
Wie die Namen der Erweiterungen andeuten, werden diese Optionen nur unter Windows 10+ unterstützt und sind in früheren Versionen nicht verfügbar. Siehe Microsoft – AppLocker-Regelsammlungserweiterungen
AppID.sys wertet die Anwendungsattribute ausSTATUS_ACCESS_DISABLED_BY_POLICY_OTHER abgebrochen⚠️ AppLocker beendet keine laufenden Prozesse.
Die Durchsetzung von AppLocker gilt nur für neue Prozesserstellungsereignisse. Bereits laufende EDR-Prozesse werden bis zum Neustart des Systems weiter ausgeführt. Dies ist eine grundlegende architektonische Einschränkung.
Hinweis zur Telemetrie des Kernel-Treibers:
Selbst nach der Blockierung von EDR-Userland-Executables bleiben Kernel-Treiber (*.sys) aktiv und funktionsfähig. Diese Treiber:
Umfangreiche Tests zeigen jedoch, dass diese Telemetrie funktional wirkungslos wird. Ohne Userland-Analyse-Engines, Korrelationssysteme und Meldemechanismen können die rohen Telemetriedaten nicht zu verwertbaren Erkennungen verarbeitet werden. EDR-Lösungen sind stark von Userland-Komponenten abhängig für:
GhostLocker ist eine C++-Implementierung, die die Bereitstellung von AppLocker-Richtlinien automatisiert, um EDR-Executables zu blockieren.
GhostLocker bietet zwei Implementierungsvarianten:
main.cpp – Dynamische AufzählungsversionDiese Version zählt laufende Prozesse auf und ermittelt ihre vollständigen Image-Pfade mithilfe nativer APIs (NtQuerySystemInformation).
Die aufgelösten absoluten Pfade werden dann verwendet, um präzise AppLocker-Deny-Regeln zu generieren.
Das Tool verwendet CreateToolhelp32Snapshot mit TH32CS_SNAPPROCESS, um alle laufenden Prozesse aufzuzählen. Es vergleicht Prozessnamen mithilfe von case-insensitive Matching (_wcsicmp) mit einer vordefinierten Zielliste.
Warum dieser Ansatz?
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
);
Technische Details:
SystemProcessIdInformation (0x58)\Device\HarddiskVolume3\Windows\System32\...