Uitgangspunt: de Application Compatibility-laag van Windows is bedoeld als convenience-mechanisme om legacy-software draaiend te houden op moderne OS-versies. Microsoft heeft hem ontworpen om door iedere user gebruikt te kunnen worden — ook zonder admin. Daarmee is hij één van de schaarse mechanismen waarmee een gewone user persistente gedragsmodificatie van willekeurige binaries kan instellen. Dat is precies wat aanvallers nodig hebben.

Wat is AppCompat / Shim — en waarom kan dit non-admin?

De AppCompat-shim-laag is een Windows-mechanisme dat tussen het OS en een uitvoerbaar bestand kan worden ingevoegd om gedrag te wijzigen: oudere API's emuleren, OS-versie-checks laten slagen, UAC-prompts onderdrukken, DLL-redirection toepassen. De configuratie zit gedeeltelijk in HKLM (admin-only) maar ook in HKCU — per user, zonder admin schrijfbaar. Een Shim Database (.sdb) kan eveneens per user worden geïnstalleerd via sdbinst.exe. Dat maakt deze laag een aantrekkelijk doelwit: persistent, onzichtbaar voor het meeste endpoint-toezicht, en juridisch "by design".

De WinRunElevated v0.3.0 "Shimmer"-test verifieert vijf testkaders (A1 t/m A5) die ieder een ander aspect van de shim-aanvalsketen aantonen. Hieronder per testkader: techniek, schade-scenario, defensie en detectie.

A1 — HKCU Layers persistent shim

A1Persistent shim-flag per user, geen admin

Wat het is

De registry-key HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers bevat per binary een REG_SZ-waarde van het formaat "C:\path\to.exe" = "RUNASINVOKER". Bij elke launch van die binary leest AppInfo.dll de waarde uit en past hem toe — ook na herstart, ook bij andere user-sessies van dezelfde profile.

Waarom kan een non-admin user dit?

HKCU is de user-eigen registry-hive. De Layers-key is daar standaard schrijfbaar voor de user zelf — bij Microsofts ontwerp uitgangspunt dat "een user mag zijn eigen apps compatibel maken". Er is geen UAC-prompt, geen elevation, geen logging-by-default.

Schade-scenario

Een aanvaller met initial-access binnen een user-account zet RUNASINVOKER op %LOCALAPPDATA%\evil.exe. Bij elke launch wordt de UAC-prompt onderdrukt — ook al vraagt het manifest om elevation. De aanval overleeft reboots, profile-roaming en zelfs het wissen van browser-cache. De user weet niets, de IT-afdeling ziet niets in standaard-monitoring.

Defensieve maatregelen

  • GPO: Turn off Application Compatibility Engine (Computer Configuration → Administrative Templates → Windows Components → Application Compatibility) — nucleaire optie
  • AppLocker / WDAC met script- en EXE-whitelist op getekende paths
  • Sysmon-regel die registry-writes op *AppCompatFlags\Layers* blokkeert of alarmeert

Detectie-mechanisme

Sysmon EID 12 (registry key create/delete) en EID 13 (registry value set), gefilterd op TargetObject matching HKU\*\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\*. Defender ATP signaleert dit als Suspicious AppCompat shim registration wanneer ATP-EDR-sensor aanstaat.

A2 — Per-user SDB install via sdbinst.exe

A2Custom Shim Database installeren zonder admin

Wat het is

Een Shim Database (.sdb) is een binair bestand met gedragsregels die Windows op één of meer binaries kan toepassen. Het commando sdbinst.exe -q evil.sdb registreert zo'n database. Sinds Windows 10 1607 kan dit per user, waarbij de entries verschijnen in HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\InstalledSDB en ...\Custom.

Waarom kan een non-admin user dit?

Microsoft heeft de per-user-route bewust open gelaten zodat applicaties uit de Store of click-to-run-installers shims kunnen meebrengen zonder de hele machine te raken. sdbinst.exe zelf vraagt geen elevation voor per-user-installatie.

Schade-scenario

Een aanvaller distribueert een .sdb die op notepad.exe een InjectDll-flag plaatst met pad naar %APPDATA%\Roaming\evil.dll. Zodra de user notepad opent, wordt de DLL geladen in een legitieme proces-context. Defender ziet alleen een normale notepad.exe. De DLL kan vervolgens credentials lezen, browser-data exporteren, of als C2-beacon dienen. Vergelijkbare gedragsregels: RedirectShortcut, VirtualRegistry, DisableNXShowUI.

Defensieve maatregelen

  • AppLocker-blokregel op sdbinst.exe voor alle non-admin users
  • Periodieke audit op HKCU\...\AppCompatFlags\InstalledSDB en ...\Custom — nieuwe entries onderzoeken
  • WDAC-policy die alleen Microsoft-getekende SDB-bestanden toestaat

Detectie-mechanisme

Sysmon EID 1 (process create) waarbij parent niet msiexec.exe of een legitieme installer is en command-line bevat sdbinst. Sysmon EID 13 op InstalledSDB- en Custom-keys. Defender ATP heeft een Application Shim installation-detectie sinds 2023.

A3 — AppCompat flags-matrix (__COMPAT_LAYER)

A3Ad-hoc gedragsmodificatie per process via env-var

Wat het is

De omgevingsvariabele __COMPAT_LAYER kan per proces worden gezet en bevat een of meer shim-flags, gescheiden door spaties. Voorbeelden: RunAsInvoker, RunAsHighest, WinXPSP3, Win7RTM, Win8RTM, Installer, Telemetry. Sommige flags onderdrukken UAC, andere liegen over de OS-versie tegenover de applicatie.

Waarom kan een non-admin user dit?

Environment variables zijn per definitie user-controlled. Er is geen mechanisme om een user te beletten een env-var te zetten vóór het starten van een proces — dat zou de hele scripting-economie breken.

Schade-scenario

Een aanvaller start evil.exe met __COMPAT_LAYER=WinXPSP3. De binary "ziet" een XP SP3-OS en activeert een code-path met een bekende kwetsbaarheid die op XP wel werkte maar op Windows 11 normaal gepatcht is. Resultaat: oude exploits worden bruikbaar op moderne systemen via OS-version-spoofing. Alternatief: RunAsInvoker onderdrukt UAC zonder dat er een registry-trace achterblijft.

Defensieve maatregelen

  • GPO: Turn off Application Compatibility Engine (zelfde als A1)
  • Sysmon command-line-logging met env-var-capture (sinds Sysmon 13)
  • EDR-regels die proces-starts met __COMPAT_LAYER= in command-line of environment markeren

Detectie-mechanisme

Sysmon EID 1 met CommandLine of process-environment bevattend __COMPAT_LAYER=. Defender ATP Advanced Hunting: DeviceProcessEvents | where ProcessCommandLine contains "__COMPAT_LAYER".

A4 — Shim-detection inventaris

A4Defensie-readiness van het endpoint

Wat het is

Dit testkader is geen aanval, maar een readiness-check: wat is de detectie-capaciteit van het endpoint zelf? De test inventariseert de aanwezigheid en status van Sysmon, Defender Real-Time-Protection, Behavior Monitoring, Tamper Protection, AMSI, PowerShell ScriptBlockLogging (EID 4104) en ModuleLogging (EID 4103).

Awareness-punt

Zonder PowerShell ScriptBlockLogging is shim-misuse via PowerShell-scripts vrijwel onzichtbaar. De aanvaller schrijft de Layers-key, installeert de SDB, of zet de env-var — allemaal één-regel-PowerShell. Zonder logging is er geen artefact achteraf. Tamper Protection moet aan staan — anders kan zelfs Defender per script worden uitgeschakeld voorafgaand aan de aanval.

Defensie-checklist (7 items)

  • Sysmon geïnstalleerd met productie-config (SwiftOnSecurity- of Olaf Hartong-baseline)
  • Defender Real-Time-Protection actief op alle endpoints
  • Defender Tamper Protection aan (voorkomt uitschakelen via script)
  • AMSI geïntegreerd met EDR-product en niet bypassed
  • PowerShell ScriptBlockLogging aan via GPO (Computer Configuration → Administrative Templates → Windows Components → PowerShell → Turn on PowerShell Script Block Logging)
  • Windows Event Forwarding ingesteld naar centrale SIEM (Splunk, Sentinel, Elastic)
  • Audit-policy compleet: registry-writes, process-creation met command-line, sysmon-channel forward

A5 — HKCU/HKLM Layers residue enum

A5Forensisch onderzoek naar oude shim-aanvallen

Wat het is

Een audit-mechanisme dat bestaande shim-entries in HKCU en HKLM Layers, InstalledSDB en Custom dumpt. Doel: detecteren of er ooit een shim-aanval heeft plaatsgevonden waarvan de artefacten nog steeds aanwezig zijn.

Schade-scenario

Een succesvolle shim-attack van 6 maanden terug zit nog steeds in de user-registry. De aanvaller is allang weg, maar de RUNASINVOKER-flag op %LOCALAPPDATA%\foo.exe is nooit opgeruimd. Niemand heeft het ooit gemerkt omdat baseline-monitoring ontbrak. Volgende keer dat de aanvaller terugkomt, hoeft hij alleen foo.exe te activeren — de persistence is nog intact.

Defensieve maatregelen

  • Baseline-snapshot van Layers, InstalledSDB en Custom per endpoint na uitrol
  • Scheduled task die wekelijks de huidige state vergelijkt met baseline en delta's rapporteert
  • Bij elke wisseling van eigenaar of profile-migratie: forensische sweep

Detectie-mechanisme

PowerShell-scheduled-task die de drie registry-keys dumpt en hash-vergelijkt met baseline. Verschil → alert naar SIEM. Voor Defender ATP-omgevingen: Advanced Hunting-query met DeviceRegistryEvents over een periode van 90 dagen.

Impact-matrix voor IT-managers

AannameWerkelijkheid
"Zonder admin kan een user niet aan UAC-gedrag komen"Via HKCU Layers + RUNASINVOKER kan een user UAC-prompts onderdrukken op willekeurige binary — persistent
"Shim Databases vereisen admin om te installeren"Per-user-route via sdbinst werkt sinds Windows 10 1607 zonder admin
"Defender vangt dit wel"Alleen als ATP-EDR-sensor én Tamper Protection én Behavior Monitoring én ScriptBlockLogging allemaal actief zijn
"Onze AppLocker-policy dekt dit"Alleen als sdbinst.exe expliciet geblokt is — standaard-policies missen het
"Bij een incident zien we het in de logs terug"Alleen als Sysmon, registry-auditing en command-line-logging úren vóór het incident al actief waren
"OS-versie-spoofing is een legacy-probleem"Met __COMPAT_LAYER=WinXPSP3 kan een aanvaller exploits voor oudere Windows-versies hergebruiken op Windows 11

7 tegenmaatregelen — concrete checklist

De effectiefste maatregelen tegen de AppCompat-shim-aanvalsketen, in volgorde van impact:

  • GPO: Turn off Application Compatibility Engine — nucleaire optie, breekt legacy-software maar dicht de hele klasse van aanvallen
  • AppLocker / WDAC met sdbinst.exe-blokkade voor alle non-admin users
  • Sysmon EID 12/13 op AppCompatFlags-keys met forward naar centrale SIEM
  • Defender Tamper Protection + ATP-EDR-sensor volledig actief op alle endpoints
  • PowerShell ScriptBlockLogging via GPO — zichtbaarheid op alle scripted shim-manipulatie
  • Periodieke audit van HKCU/HKLM Layers, InstalledSDB, Custom — scheduled task met baseline-vergelijking
  • Just-In-Time admin — gebruikers hebben nooit standaard verhoogde rechten, ook geen gedeeltelijke via shim

Wat de Werkplek-Beveiliging-Test aantoont

De WPB-test draait WinRunElevated v0.3.0 "Shimmer" met testkaders A1 t/m A5. Als A1 of A2 slaagt op uw werkplek, betekent dat: een aanvaller kan binnen één besmette user-account persistent gedrag injecteren op willekeurige binaries, zonder admin, zonder UAC-prompt, zonder zichtbaarheid in standaard-monitoring. A3 toont aan dat env-var-gebaseerde OS-spoofing werkt. A4 inventariseert uw detectie-capaciteit. A5 vindt eventuele residue uit eerdere aanvallen.

Goede uitkomst: A1 en A2 falen omdat AppCompat Engine via GPO is uitgeschakeld of sdbinst.exe via AppLocker geblokt is. A4 rapporteert: Sysmon actief, Tamper Protection aan, ScriptBlockLogging via GPO afgedwongen. A5 vindt geen onbekende entries.
Slechte uitkomst: A1 of A2 slaagt en A4 rapporteert ontbrekende detectie-componenten. Dat betekent dat uw endpoint kwetsbaar is voor de AppCompat-aanvalsketen én dat een succesvolle aanval onzichtbaar zou blijven. Tijd voor het gesprek met IT-/Security-team over de 7 tegenmaatregelen hierboven.

MITRE ATT&CK-referenties

Hoe nu verder?

Drie concrete vervolgstappen die elke IT-manager binnen een week kan zetten:

  • Audit uw AppCompat-engine-status over alle endpoints (GPO-rapport via Intune/SCCM). Welk percentage heeft de engine actief? Welke endpoints?
  • Pilot Sysmon met AppCompatFlags-filter op één team. Meet event-volume. Schaal op naar de hele organisatie.
  • Schakel ScriptBlockLogging in via GPO. Zonder dit is shim-manipulatie via PowerShell onzichtbaar. Vereiste vooraf voor elke serieuze detectie-maatregel.

iCt Horse helpt organisaties met evidence-based security research. Niet met PowerPoints — met werkende tests. Voor een audit van uw endpoint-shim-configuratie: info@icthorse.nl.


Bron-pagina: https://icthorse.nl/wpb-test/ · iCt Horse Security Research · KvK 96787112 · WinRunElevated v0.3.0 "Shimmer"