Aanvallen met SQL-injectie zijn een van de oudste kwetsbaarheden in web-apps. Er wordt al sinds het einde van de jaren negentig over gesproken, maar ze blijven vandaag de dag nog steeds relevant. Hier leggen we uit wat ze zijn, hoe ze werken en hoe je ze kunt voorkomen.
SQL-injectie: betekenis en definitie
Een SQL-injectie, soms afgekort als SLQi is een soort cyberaanval waarbij een hacker een SQL-codefragment (Structured Query Language) gebruikt om een database te manipuleren en toegang te verkrijgen tot mogelijk waardevolle informatie. Het is een van de meest gebruikte en dreigende aanvallen omdat het tegen alle web-apps of websites kan worden gebruikt die een op SQL-gebaseerde database hebben.
Hoe werken aanvallen met SQL-injectie?
Om SQL-injectie te begrijpen, is het belangrijk om te weten wat structured query language (SQL) is. SQL is een querytaal die wordt gebruikt bij het programmeren om toegang te krijgen tot gegevens opgeslagen in relationele databases en om deze gegevens te wijzigen en te verwijderen. Aangezien de overgrote meerderheid van websites en web-apps afhankelijk is van SQL-databases, kan een SQL-injectieaanval ernstige gevolgen hebben voor organisaties.
Een SQL query is een verzoek dat naar een database - een archief vol informatie op de computer - wordt verstuurd om informatie te verzamelen of om een SQL-code uit te voeren. Een voorbeeld hiervan is inloginformatie die via een webformulier wordt ingestuurd om een gebruiker toegang te geven tot een website. Deze webformulieren zijn meestal ontworpen om alleen specifieke gegevens zoals een naam en/of wachtwoord te accepteren. Als de informatie is ingevoerd, wordt deze gecontroleerd. De gebruiker krijgt toegang als de informatie overeenkomt met de database. Zo niet, wordt hen de toegang ontzegd.
De problemen ontstaan omdat het bij veel webformulieren niet mogelijk is om te voorkomen dat meer informatie wordt ingevoerd. Aanvallers kunnen hier gebruik van maken en invoervelden van het formulier gebruiken om hun eigen verzoeken naar de database te sturen. Dit kan er voor zorgen dat ze verschillende misdadige activiteiten kunnen uitvoeren zoals het stelen van gevoelige gegevens of informatie in de database manipuleren voor hun eigen doeleinden.
Doordat veel websites en servers gebruikmaken van databases is de SQL-injectie een van de oudste en meest wijdverspreide soorten aanvalsmethoden. Verschillende ontwikkelingen in de hacker-gemeenschap, en in het bijzonder de komst van tools om SQL-injectie te detecteren en misbruiken, hebben het risico op dit soort aanvallen vergroot. Deze tools zijn gemakkelijk te verkrijgen en maken het mogelijk voor cybercriminelen om binnen een paar minuten automatisch aan te vallen door ze met een enkele klik van de muis toegang te geven tot elke tabel of kolom in de database.
Symptomen van SQLi
Een succesvolle SQL-injectieaanval heeft mogelijk helemaal geen symptomen. Soms zijn er echter uiterlijke tekenen, waaronder:
- Een buitensporig aantal verzoeken ontvangen binnen een kort tijdsbestek. Je kunt bijvoorbeeld talloze e-mails van het contactformulier van je webpagina zien.
- Advertenties die omleiden naar verdachte websites.
- Vreemde pop-ups en foutmeldingen.
Types SQL-injectie
Afhankelijk van hoe ze toegang krijgen tot back-endgegevens en de omvang van de potentiële schade die ze veroorzaken, vallen SQL-injecties in drie categorieën:
In-band SQLi:
Dit type SQLi-aanval is eenvoudig voor aanvallers, omdat ze hetzelfde communicatiekanaal gebruiken om aanvallen uit te voeren en resultaten te verzamelen. Dit type SQLi-aanval heeft twee subvarianten:
- Error-based SQLi: De database produceert een foutmelding vanwege de acties van de aanvaller. De aanvaller verzamelt informatie over de database-infrastructuur op basis van de gegevens die door deze foutmeldingen worden gegenereerd.
- Union-based SQLi: De aanvaller gebruikt de UNION SQL-operator om de gewenste gegevens te verkrijgen door meerdere select statements samen te voegen in één HTTP-response.
Inferential SQLi (Ook gekend als Blinde SQL-injectie):
Bij dit type SQLi gebruiken aanvallers de respons- en gedragspatronen van de server na het verzenden van gegevens om meer te weten te komen over de structuur ervan. Gegevens worden niet overgedragen van de websitedatabase naar de aanvaller, dus de aanvaller ziet geen informatie over de aanval in-band (vandaar de term 'blinde SQLi'). Inferentiële SQLi kan worden ingedeeld in twee subtypen:
- Time-based SQLi: aanvallers sturen een SQL-query naar de database, waardoor de database een paar seconden wacht voordat deze op de query als waar of onwaar reageert.
- Boolean SQLi: Aanvallers sturen een SQL-query naar de database, waardoor de app reageert door een waar of onwaar resultaat te genereren.
Out-of-band SQLi:
Dit type SQL-aanval vindt plaats in twee scenario's:
- Wanneer aanvallers niet in staat zijn hetzelfde kanaal te gebruiken om de aanval uit te voeren en ook niet om informatie te verzamelen; of,
- Wanneer een server te traag of instabiel is om deze acties uit te voeren.
Impact van SQL-injectieaanvallen
Een succesvolle SQL-injectieaanval kan ernstige gevolgen hebben voor een bedrijf. Dit komt omdat een SQL-injectieaanval het volgende kan doen:
- Gevoelige gegevens blootgeven. Aanvallers kunnen gegevens ophalen, waardoor gevoelige gegevens die op de SQL-server opgeslagen zijn, het risico lopen om blootgesteld te worden.
- Gegevensintegriteit beïnvloeden. Aanvallers kunnen informatie van je systeem wijzigen of verwijderen.
- Gebruikersprivacy beïnvloeden. Afhankelijk van de gegevens die op de SQL-server zijn opgeslagen, kan een aanval gevoelige gebruikersinformatie blootleggen, zoals adressen, telefoonnummers en creditcardgegevens.
- Een aanvaller beheerderstoegang geven tot je systeem. Als een databasegebruiker beheerdersrechten heeft, kan een aanvaller toegang krijgen tot het systeem met behulp van kwaadaardige code.
- Een aanvaller algemene toegang geven tot je systeem. Als je zwakke SQL-opdrachten gebruikt om gebruikersnamen en wachtwoorden te controleren, kan een aanvaller toegang krijgen tot je systeem zonder de inloggegevens van een gebruiker te kennen. Van hieruit kan een aanvaller grote schade aanrichten met toegang te krijgen tot gevoelige informatie en deze informatie te manipuleren.
De kosten van een SQL-injectie-aanval zijn niet alleen financieel: het kan ook leiden tot verlies van klantvertrouwen en reputatieschade als persoonlijke informatie zoals namen, adressen, telefoonnummers en creditcardgegevens worden gestolen. Het vertrouwen van de klant kan erg moeilijk te herstellen zijn eenmaal het geschonden is.
Voorbeelden SQL-injectie
Door de jaren heen zijn veel organisaties het slachtoffer geworden van SQLi. Enkele spraakmakende voorbeelden:
Fortnite, 2019Fortnite is een online game met meer dan 350 miljoen gebruikers. In 2019, werd een SQL-injectiekwetsbaarheid ontdekt waarbij aanvallers toegang kregen tot gebruikersaccounts. Er werd een patch uitgegeven voor de kwetsbaarheid.
Cisco, 2018
In 2018 werd een SQL-injectiekwetsbaarheid gevonden in Cisco Prime License Manager. Door de kwetsbaarheid konden aanvallers shell-toegang krijgen tot systemen waarop de licentiebeheerder was geïmplementeerd. Cisco heeft ondertussen een patch ontwikkeld voor de kwetsbaarheid.
Tesla, 2014
In 2014 kondigden beveiligingsonderzoekers aan dat ze de website van Tesla konden binnendringen met behulp van SQL-injectie. Zo verkrgen ze beheerdersrechten en konden ze gebruikersgegevens stelen.
FAQs over SQL-injectieaanvallen
Veelgestelde vragen over SQLi zijn onder meer:
Wat is een SQL-injectie-aanval??
Een SQL-injectieaanval maakt gebruik van kwaadaardige SQL-code voor manipulatie van de backend-database om toegang te krijgen tot privé-informatie. Deze informatie kan gevoelige bedrijfsgegevens, gebruikerslijsten of klantgegevens bevatten. SQL staat voor 'structured query language' en SQL-injectie wordt soms afgekort tot SQLi.
Wat doet SQL-injectie?
Met SQL-injectieaanvallen kunnen aanvallers identiteit vervalsen, bestaande gegevens wijzigen, gegevens openbaar maken, vernietigen of anderszins onbeschikbaar maken, en beheerders van de databaseserver worden. Aanvallen met SQL-injectie kunnen bedrijven ernstige schade toebrengen, waaronder verlies van klantvertrouwen als vertrouwelijke gebruikersgegevens worden geschonden.
Hoe vaak komen SQL-injectieaanvallen voor?
Omdat ze relatief eenvoudig te implementeren zijn en omdat de potentiële beloning groot is, zijn SQL-injectieaanvallen niet ongewoon. Statistieken variëren, maar naar schatting vormen SQL-injectieaanvallen de meerderheid van de aanvallen op softwaretoepassingen. Volgens het Open Web Application Security Project waren injectieaanvallen, waaronder SQL-injecties, het op twee na grootste beveiligingsrisico voor webapplicaties in 2021.
SQL-injectieaanvallen voorkomen
Voor bedrijven die zich zorgen maken over het vermijden van SQL-injectie, zijn de belangrijkste principes om websites en webapplicaties te helpen verdedigen:
Personeelstraining:Creëer bewustzijn over op SQLi gebaseerde risico's binnen het team dat verantwoordelijk is voor jouw webtoepassing en geef alle gebruikers de nodige training gebaseerd op rollen.
Houd gebruikersinvoer onder controle:Elke gebruikersinvoer die in een SQL-query wordt gebruikt, brengt risico's met zich mee. Behandel input van geverifieerde en/of interne gebruikers op dezelfde manier als openbare input totdat deze is geverifieerd. Geef accounts die verbinding maken met de SQL-database alleen de minimaal benodigde rechten. Gebruik standaard whitelists in plaats van blacklists om gebruikersinput te verifiëren en te filteren.
Gebruik de nieuwste versies: het is belangrijk om de nieuwste versie van de ontwikkelomgeving te gebruiken om de bescherming te maximaliseren, aangezien oudere versies mogelijk geen actuele veiligheidsfuncties hebben. Installeer indien beschikbaar de nieuwste software en beveiligingspatches.
Scan webapplicaties voortdurend:
Gebruik uitgebreide tools voor het beheer van applicatieprestaties. Het regelmatig scannen van webapplicaties , identificeert potentiële kwetsbaarheden en pakt ze aan voordat ze ernstige schade veroorzaken.
Gebruik een firewall:Een webapplicatie firewall (WAF) wordt vaak gebruikt om SQLi en andere online bedreigingen eruit te filteren. Een WAF is afhankelijk van een lange en regelmatig bijgewerkte lijst met handtekeningen waarmee schadelijke SQL-query's kunnen worden weggefilterd. Meestal bevat de lijst handtekeningen om specifieke aanvalsvectoren te detecteren en wordt deze regelmatig gepatcht als reactie op nieuw ontdekte kwetsbaarheden.
Gerelateerde producten:
- Kaspersky Anti-Virus
- Kaspersky Total Security
- Kaspersky Internet Security
- Kaspersky Password Manager
- Kaspersky Secure Connection
Verdere lectuur: