Als er één ding is waar cybercriminelen dol op zijn, dan zijn het data. Gestolen gegevens zijn zeer waardevol op illegale marktplaatsen en toegang tot privédatabases kan een geweldige manier zijn voor kwaadwillende actoren om winst te maken met hun ondernemingen. Een manier om toegang te krijgen tot privégegevens is via een SQL-injectie. Maar wat is een SQL-injectie precies, hoe werkt het en is zo'n aanval te voorkomen?
Wat is een SQL-injectie?
Softwareprogramma's zijn afhankelijk van code om te functioneren. Code is ook de taal die machines gebruiken om bewerkingen uit te voeren, en kan in vele vormen voorkomen (Python, JavaScript, C++, enz.). Het is vaak via code dat cybercriminelen slachtoffers kunnen aanvallen, en SQL-injecties (of SQLi's) zijn niet anders. Hiermee kunnen kwaadwillende actoren schadelijke code "injecteren" in een SQL-instructie.
Laten we eerst eens kijken wat SQL betekent.
SQL staat voor Structured Query Language. Dit is een ander soort programmeertaal specifiek gebruikt bij het omgaan met databases. SQL is in de jaren 70 ontwikkeld door IBM en kan database-informatie manipuleren, opslaan en ophalen. Veel databasecommunicatiesystemen over de hele wereld gebruiken SQL, dus het is geen verrassing dat aanvallers manieren hebben bedacht om het te misbruiken om databases aan te vallen.
SQL-instructies vormen een belangrijk onderdeel van databasecommunicatie. Een SQL-statement is een commando dat komt in veel verschillende vormen. Sommige wijzigen gegevens, sommige halen ze op of verwijderen ze, en sommige kunnen de structuur van de database zelf wijzigen. Wanneer een SQL-injectie plaatsvindt, wordt de schadelijke code geïnjecteerd in een SQL-instructie.
Natuurlijk moet een website of applicatie de SQL-programmeertaal gebruiken om een SQL-injectie mogelijk te maken. Maar hoe werkt deze aanvalsvector?
Stel dat u een normale regel code heeft die door een toepassing wordt gebruikt. Wanneer een cybercrimineel een kwaadaardige SQL-injectie invoegt, wordt er een regel code toegevoegd die kan interfereren met de vragen die de applicatie zelf naar zijn database stuurt. Door dit te doen, kan de database zodanig worden misbruikt dat de dreigingsactor gegevens kan bekijken waartoe hij anders geen toegang zou hebben.
Vanaf hier kan de cybercrimineel gegevens stelen om deze direct te exploiteren of verkoop het op het dark web of elders. Ze kunnen ook gegevens uit de beoogde database wijzigen, toevoegen of verwijderen. Afhankelijk van de mate van de SQL-injectieaanval kan er veel schade worden aangericht. Als er toegang wordt verkregen tot betalingsgegevens, burgerservicenummers of andere soorten privégegevens, lopen veel mensen het risico te worden uitgebuit.
Aan de andere kant, als de aanvaller erin slaagt de database aanzienlijk te wijzigen, kunnen grote hoeveelheden gegevens permanent verloren gaan. Al met al kunnen SQL-injecties met slechts één aanval hele databases vernietigen. Hoewel ze al sinds 1998 bestaan, zijn ze nog steeds relevant en gevaarlijk in onze huidige tijd.
Zoals gevonden door de Open Web Application Security Project (OWASP), werden in 2021 274.000 exemplaren van SQL-injecties geïdentificeerd bij het testen van applicaties op de aanwezigheid van een dergelijke aanval.
De soorten SQL-injectie
Er zijn een aantal verschillende soorten SQL-injecties, waarvan de drie belangrijkste blinde, in-band en out-of-band injecties zijn.
Een blinde (of inferentiële) SQL-injectie vindt plaats wanneer de applicatie of site wordt aangevallen door de injectie, maar de geleverde HTTP-antwoorden (Hypertext Transfer Protocol) bevatten niet het resultaat van de SQL-query. Met andere woorden, er worden geen gegevens uit de aangevallen database aan de cybercrimineel gegeven. Wat heeft dit voor zin?
Met behulp van een blinde SQL-injectie stuurt een aanvaller gegevens naar de doelserver en kan vervolgens bepaalde dingen over een database onderscheiden door de aard van het HTTP-antwoord zelf. Bovendien kunnen factoren die verband houden met de HTTP-respons de aanvaller helpen om een andere, effectievere SQL-injectie te maken om toegang te krijgen tot de database.
Er zijn twee hoofdtypen blinde SQL-injectie, bekend als tijdgebaseerd en booleaans. Deze twee varianten lijken qua aard behoorlijk op elkaar. Zowel een booleaanse als op tijd gebaseerde SQL-injectie verzendt een reeks ja- of nee-antwoordvragen, hoewel de database voor het laatste een korte tijd moet wachten voordat deze op de vragen reageert.
Vervolgens zijn er in-band SQL-injecties. Met in-band SQL-injecties kan de operator de aanval uitvoeren en het gewenste resultaat behalen via hetzelfde kanaal. In-band SQL-injecties worden het meest gebruikt, simpelweg omdat ze het gemakkelijkst uit te voeren zijn omdat ze maar één kanaal nodig hebben.
Ten slotte heb je een out-of-band SQL-injectie. Dit is in wezen de alternatieve versie van een in-band SQL-injectie, waarbij de aanvaller de aanval niet in zijn geheel kan uitvoeren via één enkel kanaal. Een andere mogelijkheid is dat een aanval zijn toevlucht moet nemen tot een out-of-band SQL-injectie als de doelserver simpelweg niet snel genoeg is om resultaten te leveren.
Deze factoren maken het proces een beetje moeilijker, wat betekent dat het afhankelijk moet zijn van bepaalde functies om actief te zijn in de gerichte database voor succes. Het platform dat wordt aangevallen, moet bijvoorbeeld een gebrek aan invoeropschoning hebben. Hierdoor komen in-band SQL-injecties veel vaker voor dan out-of-band SQL-injecties. Maar ze gebeuren nog steeds.
Kunnen SQL-injecties worden vermeden?
SQL-injecties zijn een grotere zorg voor bedrijven en organisaties dan voor gewone individuen. Maar er zijn dingen die deze potentiële doelen kunnen doen om de kans te verkleinen dat ze door een dergelijke aanval worden geraakt.
Invoeropschoning is de belangrijkste gangbare praktijk om SQL-injecties te vermijden. Dit is een filterproces dat de invoer van gevaarlijke tekens scant en opschoont. Als SQL-code wordt verwerkt voordat deze wordt opgeschoond, neemt de kans op een SQL-injectie natuurlijk toe.
Bovendien kunnen geparametriseerde query's u helpen SQL-injecties te vermijden. Dit zijn query's die ten minste één parameter vereisen voor uitvoering. Het toepassen van parameters maakt het voor cybercriminelen moeilijker om een SQL-injectieaanval succesvol uit te voeren.
Maar er is geen trefzekere manier om een SQL-injectie te voorkomen. Zoals bij veel cyberaanvallen het geval is, is het vrijwel onmogelijk om uw apparaten en systemen volledig luchtdicht te houden. Als het gaat om SQL-injecties, kunt u het beste alle invoer opschonen en geparametriseerde query's instellen.
SQL-injecties zijn verouderd, maar vormen nog steeds een bedreiging
Hoewel SQL-injecties al meer dan 20 jaar bestaan, vormen ze nog steeds een risico voor veel websites en applicaties. Het is dus een goed idee om deze vorm van aanval in gedachten te houden en de nodige stappen te ondernemen om het te voorkomen, aangezien het op een bepaald moment in de toekomst een bedreiging kan vormen voor uw databases.