Code execution
AanvallenActie waarbij iemand ongewild programmacode laat uitvoeren door een computer of programma. Doet iemand dat op afstand, dan heet dat remote code execution.
Code execution is een type cyberaanval waarbij een aanvaller erin slaagt om willekeurige programmacode uit te voeren op een doelsysteem. Dit is een van de ernstigste kwetsbaarheden in cybersecurity, omdat de aanvaller hiermee volledige controle kan krijgen over het getroffen systeem. Wanneer code execution op afstand plaatsvindt, spreek je van Remote Code Execution (RCE). De impact van een succesvolle code execution-aanval kan varieren van het stelen van gegevens tot het installeren van ransomware, het opzetten van een backdoor of het volledig overnemen van een server of netwerk.
Hoe werkt code execution?
Code execution-kwetsbaarheden ontstaan wanneer een applicatie onvoldoende controle uitoefent over invoer van gebruikers of externe bronnen. De aanvaller stuurt speciaal geprepareerde data naar het systeem die niet als data maar als uitvoerbare code wordt geinterpreteerd. Dit kan op verschillende manieren gebeuren, afhankelijk van de technologie en de specifieke kwetsbaarheid.
Bij een buffer overflow schrijft de aanvaller meer data naar een geheugenbuffer dan deze kan bevatten, waardoor aangrenzend geheugen wordt overschreven. Door strategisch shellcode in het overgeschreven geheugen te plaatsen, kan de aanvaller de uitvoeringsstroom van het programma omleiden naar zijn eigen code. Dit type aanval is met name relevant voor applicaties geschreven in geheugenonveilige talen zoals C en C++.
Deserialisatie-kwetsbaarheden vormen een andere veelvoorkomende aanvalsvector. Wanneer een applicatie data deserialiseert zonder adequate validatie, kan een aanvaller een kwaadaardig object injecteren dat bij het deserialiseren code uitvoert. Dit type kwetsbaarheid komt voor in talen zoals Java, PHP en Python en heeft geleid tot grootschalige incidenten bij organisaties wereldwijd.
SQL injection kan in bepaalde configuraties eveneens leiden tot code execution. Als de databasegebruiker voldoende rechten heeft, kan een aanvaller via SQL-commando's besturingssysteemcommando's uitvoeren op de databaseserver. Command injection is een verwante techniek waarbij gebruikersinvoer direct in shell-commando's wordt verwerkt zonder adequate sanitisatie.
Hoe herken je code execution?
Het detecteren van code execution-pogingen vereist meerdere lagen van monitoring en detectie. Op netwerkniveau kunnen intrusion detection systems (IDS) verdachte payloads herkennen die wijzen op exploit-pogingen. Patronen zoals shellcode-signatures, ongebruikelijke encodings en bekende exploit-strings worden door signature-based detectie opgepikt.
Op applicatieniveau zijn web application firewalls (WAF) in staat om veel voorkomende code execution-pogingen te blokkeren. Een WAF analyseert inkomend HTTP-verkeer en blokkeert verzoeken die verdachte patronen bevatten, zoals pogingen tot command injection, cross-site scripting of SQL injection die tot code execution kunnen leiden.
Gedragsanalyse op endpoints detecteert code execution die de preventieve maatregelen heeft omzeild. Als een webserverproces plotseling shell-commando's uitvoert, een databaseproces bestanden aanmaakt op het bestandssysteem, of een Office-applicatie PowerShell start, zijn dit sterke indicatoren van code execution. Endpoint detection and response (EDR) oplossingen monitoren dit soort verdachte procesrelaties continu.
Vulnerability scanners en static application security testing (SAST) tools kunnen code execution-kwetsbaarheden identificeren voordat ze worden geexploiteerd. Regelmatige scans van je applicaties en infrastructuur helpen om kwetsbare componenten op te sporen en te patchen voordat aanvallers ze ontdekken.
Hoe bescherm je je tegen code execution?
Invoervalidatie is de belangrijkste verdediging tegen code execution. Elke vorm van gebruikersinvoer, van formuliervelden tot API-parameters en bestandsuploads, moet worden gevalideerd, gesanitiseerd en waar mogelijk worden getypeerd. Gebruik parameterized queries voor database-interactie om SQL injection te voorkomen en vermijd het direct opnemen van gebruikersinvoer in shell-commando's of systeemaanroepen.
Houd alle software up-to-date door patches snel te installeren. Veel code execution-aanvallen maken gebruik van bekende kwetsbaarheden waarvoor patches beschikbaar zijn. Het patch management-proces moet prioriteit geven aan kwetsbaarheden met een hoge CVSS-score, met name die welke remote code execution mogelijk maken. Automatiseer het patchproces waar mogelijk om de tijd tussen publicatie en installatie te minimaliseren.
Pas het principle of least privilege toe op alle niveaus. Applicaties draaien onder een service account met minimale rechten, database-accounts krijgen alleen de permissions die strikt noodzakelijk zijn, en netwerkverkeer wordt beperkt tot het noodzakelijke. Als een aanvaller code execution bereikt in een omgeving met minimale rechten, is de impact aanzienlijk kleiner dan wanneer het proces als administrator draait.
Implementeer sandboxing en containerisatie om de impact van code execution te beperken. Door applicaties te isoleren in sandboxes of containers voorkom je dat een aanvaller die code execution bereikt in een applicatie, toegang krijgt tot het onderliggende besturingssysteem of andere applicaties. Technologieen zoals AppArmor, SELinux en container runtime security versterken deze isolatie.
Impact van code execution op organisaties
De gevolgen van een succesvolle code execution-aanval zijn vaak verstrekkend. Een aanvaller die code kan uitvoeren op een server krijgt doorgaans volledige controle over dat systeem. Vanuit die positie kan de aanvaller gegevens stelen, ransomware installeren, backdoors plaatsen voor toekomstige toegang of het gecompromitteerde systeem gebruiken als springplank om dieper het netwerk in te dringen via lateral movement.
Historische voorbeelden illustreren de ernst. De Log4Shell-kwetsbaarheid in december 2021 was een remote code execution-kwetsbaarheid in de veelgebruikte Java-bibliotheek Log4j. Omdat deze bibliotheek in duizenden applicaties wereldwijd werd gebruikt, waren miljoenen systemen kwetsbaar. De WannaCry-aanval in 2017 maakte gebruik van een RCE-kwetsbaarheid in het Windows SMB-protocol om ransomware te verspreiden naar meer dan 200.000 systemen in 150 landen. Deze incidenten tonen aan dat een enkele code execution-kwetsbaarheid kan escaleren tot een wereldwijde crisis wanneer deze op grote schaal wordt geexploiteerd.
Veelgestelde vragen over code execution
Wat is het verschil tussen code execution en remote code execution?
Code execution (ook wel arbitrary code execution) is de overkoepelende term voor het uitvoeren van willekeurige code op een systeem. Remote code execution (RCE) is een specifieke variant waarbij de aanvaller de code op afstand kan uitvoeren via een netwerkverbinding, zonder fysieke of lokale toegang tot het systeem te hebben. RCE wordt als ernstiger beschouwd vanwege de afstand.
Hoe ernstig is een code execution-kwetsbaarheid?
Code execution-kwetsbaarheden krijgen doorgaans de hoogste CVSS-scores (9.0 tot 10.0) en worden als kritiek geclassificeerd. Een succesvolle exploitatie geeft de aanvaller volledige controle over het systeem, waardoor alle gegevens gecompromitteerd kunnen worden. Het patchen van code execution-kwetsbaarheden heeft altijd de hoogste prioriteit.
Welke programmeertalen zijn het meest kwetsbaar?
Geheugenonveilige talen zoals C en C++ zijn het meest vatbaar voor buffer overflow-gebaseerde code execution. Webapplicatietalen zoals PHP, Java en Python zijn kwetsbaar voor deserialisatie en injection-aanvallen. Moderne talen met ingebouwd geheugenbeheer zoals Rust reduceren bepaalde categorien kwetsbaarheden, maar sluiten code execution niet volledig uit.
Kan een firewall code execution voorkomen?
Een traditionele netwerkfirewall biedt beperkte bescherming tegen code execution omdat de aanval vaak via toegestane poorten en protocollen verloopt. Een web application firewall (WAF) biedt betere bescherming voor webapplicaties door verdachte payloads te herkennen en blokkeren. De meest effectieve bescherming is een combinatie van WAF, invoervalidatie en patching.
Wat is een zero-day code execution exploit?
Een zero-day code execution exploit maakt gebruik van een kwetsbaarheid die nog niet bekend is bij de softwareleverancier en waarvoor dus geen patch beschikbaar is. Dit maakt zero-day exploits bijzonder gevaarlijk, omdat standaard patchprocessen geen bescherming bieden. Detectie is afhankelijk van gedragsanalyse en anomaliedetectie in plaats van signature-based methoden.
Bescherm je applicaties tegen code execution. Vergelijk Applicatiebeveiliging aanbieders op IBgidsNL.