Softwarekwetsbaarheid: de zwakke plek in digitale systemen
Een softwarekwetsbaarheid is een fout in een computerprogramma waardoor iemand met kwade bedoelingen dingen kan doen die niet de bedoeling zijn: gegevens stelen, een systeem overnemen, of een dienst laten crashen. Vergelijk het met een huis waarvan de voordeur stevig op slot zit, maar waarbij een raam aan de achterkant niet goed sluit. De bewoner denkt veilig te zijn, maar wie weet van dat ene raam, kan toch naar binnen.
Vrijwel alle software bevat fouten; programmeren is mensenwerk en foutloze code bestaat nauwelijks. De meeste fouten zijn onschuldig, zoals een knop die net verkeerd staat. Een kleine groep fouten heeft echter gevolgen voor de beveiliging: die noemen we kwetsbaarheden. Of zo'n kwetsbaarheid daadwerkelijk misbruikt wordt, hangt af van wie het ontdekt en wat diegene ermee doet.
Wat is het precies?
Een kwetsbaarheid is dus een bug (programmeerfout) met een beveiligingsrisico. Belangrijk is het onderscheid met een exploit: dat is de daadwerkelijke code of truc waarmee een kwetsbaarheid wordt misbruikt. Een kwetsbaarheid is de opening, een exploit is het gereedschap waarmee iemand er daadwerkelijk doorheen klimt.
Er bestaan veel soorten kwetsbaarheden. Een buffer overflow ontstaat wanneer een programma meer gegevens in een geheugenruimte probeert te proppen dan er past, waardoor aangrenzend geheugen overschreven raakt en een aanvaller soms eigen code kan laten uitvoeren. Bij SQL-injectie stuurt een aanvaller speciaal opgemaakte tekst naar een invoerveld van een website, zodat de onderliggende database onbedoelde opdrachten uitvoert. Cross-site scripting (XSS) maakt het mogelijk om kwaadaardige scripts in een webpagina te laten draaien die andere bezoekers te zien krijgen. Daarnaast zijn er fouten in authenticatie (bijvoorbeeld een wachtwoordcontrole die te omzeilen is) en race conditions, waarbij twee processen op een onverwachte manier met elkaar interfereren omdat de volgorde van handelingen niet goed is afgedwongen.
Om kwetsbaarheden eenduidig te kunnen bespreken, bestaat het CVE-systeem (Common Vulnerabilities and Exposures): elke erkende kwetsbaarheid krijgt een uniek nummer, zoals CVE-2021-44228. Daarnaast krijgt een kwetsbaarheid vaak een CVSS-score (Common Vulnerability Scoring System), een cijfer van 0 tot 10 dat aangeeft hoe ernstig het risico is, gebaseerd op factoren als hoe makkelijk misbruik is en wat de impact kan zijn. Een zero-day is ten slotte een kwetsbaarheid die nog onbekend is bij de softwaremaker zelf op het moment dat die al (potentieel) misbruikt wordt; er is dan nog geen patch beschikbaar, vandaar de naam: er zijn nul dagen geweest om het te verhelpen.
Wat wil men ermee bereiken?
Kwetsbaarheidsonderzoek bestaat om digitale systemen veiliger te maken vóórdat kwaadwillenden er misbruik van maken. Onderzoekers die een kwetsbaarheid vinden, melden die idealiter eerst privé bij de softwaremaker, zodat die een patch (reparatie) kan maken. Dit proces heet responsible disclosure of gecoördineerde bekendmaking: pas nadat een oplossing beschikbaar is, of na een afgesproken termijn, wordt de kwetsbaarheid publiek gemaakt.
Om dit proces te stimuleren, organiseren veel bedrijven bug bounty-programma's: onderzoekers krijgen een geldbedrag als ze op de juiste manier een kwetsbaarheid melden. Voor organisaties die software gebruiken, draait het vooral om risicobeheer: welke systemen zijn kwetsbaar, hoe ernstig is dat, en hoe snel moet er gepatcht worden? Het uiteindelijke doel is simpel geformuleerd maar moeilijk in de praktijk: zorgen dat de "ramen" dichtgaan voordat iemand ze vindt en gebruikt.
Voorbeelden uit de praktijk
Heartbleed (2014): een fout in OpenSSL, software die miljoenen websites gebruikten om verbindingen te versleutelen. Door de bug konden aanvallers stukjes geheugen van een server uitlezen, waaronder soms wachtwoorden en versleutelingssleutels. De kwetsbaarheid trof een groot deel van het toenmalige internet en zorgde voor een golf van noodreparaties.
EternalBlue en WannaCry (2017): EternalBlue was een kwetsbaarheid in Windows die aanvankelijk bekend was bij de Amerikaanse inlichtingendienst NSA voordat deze uitlekte. Criminelen bouwden er de ransomware WannaCry mee, die wereldwijd honderdduizenden computers trof, waaronder systemen van het Britse gezondheidszorgsysteem NHS.
Meltdown en Spectre (bekendgemaakt januari 2018): twee kwetsbaarheden die niet in software zaten, maar in het ontwerp van moderne processoren zelf, van vrijwel alle grote fabrikanten. Ze maakten het mogelijk om via een techniek genaamd "speculative execution" gevoelige gegevens uit het geheugen van andere programma's te lezen. Omdat het om hardware ging, waren de reparaties lastig en gingen soms ten koste van prestaties.
SolarWinds (ontdekt eind 2020): hier ging het niet om één kwetsbaarheid, maar om een zogeheten supply chain-aanval: aanvallers slaagden erin kwaadaardige code in een software-update van het netwerkbeheerprogramma Orion te verstoppen. Duizenden organisaties, waaronder Amerikaanse overheidsinstanties, installeerden de besmette update zelf.
Log4Shell (december 2021): een ernstige kwetsbaarheid in Log4j, een veelgebruikte Java-bibliotheek voor het bijhouden van logboeken. Omdat Log4j in ontelbare producten verwerkt zat, zonder dat gebruikers dat altijd wisten, leidde dit tot een van de breedste en meest hectische patch-operaties ooit.
Hoe ver is de techniek?
Het aantal geregistreerde CVE's groeit elk jaar; recente jaren tellen doorgaans tussen de 25.000 en 30.000 nieuwe geregistreerde kwetsbaarheden, een stijging ten opzichte van een decennium geleden. Dat komt deels doordat er simpelweg meer software is, en deels doordat er beter en gestructureerder naar kwetsbaarheden wordt gezocht.
Geautomatiseerde tools spelen daarbij een steeds grotere rol. SAST (static application security testing) analyseert broncode zonder het programma uit te voeren, DAST (dynamic application security testing) test een draaiende applicatie van buitenaf, en fuzzing bestookt software met willekeurige of afwijkende invoer om crashes en fouten op te sporen. Deze technieken zijn de afgelopen jaren volwassener geworden en worden steeds vaker automatisch ingebouwd in ontwikkelprocessen.
Een nieuwere ontwikkeling is het inzetten van AI-modellen om kwetsbaarheden in code te herkennen of zelfs patches voor te stellen. Onderzoek en eerste praktijktoepassingen laten veelbelovende resultaten zien, maar de techniek is nog volop in ontwikkeling: modellen missen kwetsbaarheden, geven soms valse meldingen, en vervangen voorlopig geen menselijke beveiligingsexperts.
De grootste obstakels zijn minder technisch dan praktisch. Veel organisaties draaien nog legacy-software: oude systemen die moeilijk te vervangen of te patchen zijn, soms omdat de leverancier niet meer bestaat. Patches zijn vaak beschikbaar, maar worden niet (op tijd) geïnstalleerd, bijvoorbeeld uit angst dat een update iets anders stuk maakt. En uiteindelijk blijft de menselijke factor een zwakke schakel: phishing-mails en zwakke wachtwoorden leiden nog altijd tot veel incidenten, los van technische kwetsbaarheden.
Wie werken eraan?
Het CVE-programma wordt beheerd door MITRE, een Amerikaanse non-profitorganisatie, in samenwerking met tientallen "CVE Numbering Authorities" wereldwijd die kwetsbaarheden mogen registreren. Het Amerikaanse NIST (National Institute of Standards and Technology) beheert de National Vulnerability Database, die de CVE-gegevens verrijkt met onder meer CVSS-scores.
OWASP (Open Worldwide Application Security Project) is een wereldwijde non-profitcommunity die onder andere de bekende OWASP Top 10 publiceert, een overzicht van de meest voorkomende risico's in webapplicaties. Grote techbedrijven hebben eigen onderzoeksteams en bug bounty-programma's, zoals Google Project Zero en Microsoft Security Response Center (MSRC), die actief naar kwetsbaarheden zoeken in zowel eigen als andermans software.
Op nationaal niveau bestaan er CERT's en CSIRT's (Computer Emergency/Security Incident Response Teams) die overheden en bedrijven ondersteunen bij het omgaan met kwetsbaarheden en incidenten. In Nederland is dat het NCSC (Nationaal Cyber Security Centrum), in de Verenigde Staten speelt CISA (Cybersecurity and Infrastructure Security Agency) een vergelijkbare rol. Daarnaast doen universiteiten en onafhankelijke onderzoeksgroepen wereldwijd fundamenteel onderzoek naar nieuwe soorten kwetsbaarheden en betere detectiemethoden.