Uw IP: Onbekend · Je status: BeschermdOnbeschermdOnbekend

Ga naar hoofdinhoud

Wat is een SQL-injectie? Een simpele uitleg

Een SQL-injectie (SQLi) is een cyberaanval waarbij SQL-code wordt gebruikt om een database te manipuleren en toegang tot gevoelige informatie te krijgen. Als de aanval slaagt, kunnen hackers gegevens uit de database stelen en root-toegang tot het systeem krijgen. In dit artikel leggen we uit wat een SQL-injectie is, of je site gevaar loopt en hoe je deze aanval kan voorkomen.

Wat is een SQL-injectie? Een simpele uitleg

Wat is SQL?

SQL staat voor Structured Query Language. Het is een programmeertaal die door databasemanagementsystemen (DBMS) wordt gebruikt om informatieverzoeken (query’s) van een gebruiker door te geven aan een database. SQL gebruikt herkenbare Engelse woorden voor zijn query’s. Met SQL kun je gegevens in een database aanmaken, structureren, filteren en analyseren. Het is een belangrijke taal voor webontwikkelaars omdat het ze in staat stelt met databases te communiceren en (geavanceerde) webapplicaties en dynamische websites te ontwikkelen.

Wanneer je bijvoorbeeld een trefwoord intikt in de zoekbalk van je browser, wordt achter de schermen een SQL-verzoek gegenereerd. Dit verzoek bevat het trefwoord dat je hebt ingevoerd, en opdrachten voor het DBMS. Het verzoek wordt naar de database gestuurd, waar de DBMS het interpreteert, de gevraagde informatie ophaalt en deze naar de gebruiker stuurt.

Wil je een stapsgewijze SQL-uitleg? Dit is het proces:

  1. Een gebruiker zoekt een trefwoord.
  2. Er wordt een SQL-string gemaakt die dat trefwoord bevat.
  3. De SQL-string wordt naar de database gestuurd, waar hij door het DBMS wordt verwerkt.
  4. Het DBMS ontvangt de gecodeerde SQL-opdrachten en haalt de gevraagde gegevens op.
  5. De relevante informatie wordt naar de gebruiker gestuurd en verschijnt op zijn scherm.

Wat is een SQL-injectie?

Een SQL-injectie is een type van cybercriminaliteit waarbij hackers kwaadaardige code in een site ‘injecteren’ om verschillende kwaadaardige acties uit te voeren. SQL-injecties kunnen worden uitgevoerd op websites die niet goed beveiligd zijn.

Een SQL-injectie ‘misleidt’ een website om SQL-strings te maken die de opdrachten van de hacker bevatten. Wanneer de strings naar de database worden gestuurd en geïnterpreteerd, herkent het DBMS de ‘geïnjecteerde’ opdrachten als uitvoerbare instructies, waarna hij ze zal uitvoeren. Op deze manier kan een hacker het DBMS manipuleren om informatie terug te geven die de eigenaar van de site juist privé wil houden.

Stel dat een hacker gebruikersnamen en wachtwoorden van klanten van een online winkel wil stelen. Als de beveiliging van de site niet optimaal is, kan een hacker bepaalde functies van de site gebruiken om opdrachten in te typen. De hacker kan bijvoorbeeld een SQL-instructie in de zoekfunctie van de site intypen, waarna de database deze instructie automatisch uitvoert.

Een SQL-injectie kan elke SQL-database treffen, zoals Oracle, MySQL, MSSQL of Microsoft SQL Server.

SQL-injectie

Wat zijn SQL-query’s?

Je gebruikt SQL-query’s om met een database te communiceren. Met een query geef je een database de opdracht iets te doen. De meest voorkomende query is de SELECT-opdracht. Met deze opdracht vraag je een database gegevens te retourneren op basis van specifieke criteria. Er zijn veel verschillende opdrachten (ook wel SQL-commando’s genoemd) die de database herkent.

Soorten SQL-injecties

Nu je weet wat SQL is en wat SQL-injecties en query’s zijn, kunnen we het over de verschillende soorten SQL-injecties hebben. Aanvallen met SQL-injecties worden ingedeeld op basis van de methodes die hackers gebruiken om toegang tot een database te krijgen

In-band SQLi (klassieke SQLi)

In-band SQLi (klassieke SQLi) is de meest voorkomende SQL-injectie en de meest eenvoudige om uit te voeren. De hacker ontvangt het resultaat van zijn query direct via hetzelfde communicatiekanaal. Als de hacker de aanval bijvoorbeeld handmatig uitvoert met een webbrowser, wordt het resultaat in dezelfde webbrowser weergegeven.

Er zijn twee hoofdtypes van in-band SQLi-aanvallen: error-based SQLi en union-based SQLi.

Error-based SQLi

Zoals de naam al aangeeft, zorgen error-based SQL-injecties ervoor dat de database een fout genereert. De aanvaller krijgt een database error string terug die veel gevoelige informatie over de gegevensstructuur van de database kan bevatten. Met de informatie uit de string, kan hij een nieuwe SQL-query invoeren om de database verder te exploiteren.

Union-based SQLi

Een Union-opdracht combineert de resultaten van twee of meer individuele query’s tot één output. Met behulp hiervan kan een hacker query’s vervalsen om databasegegevens uit meerdere tabellen op te vragen. Dit is het gevaarlijkste type SQL-injectie, omdat de aanvaller hiermee rechtstreeks bijna alle informatie uit de database kan verkrijgen.

Inferential SQLi (Blind SQLi)

Bij dit type SQL-aanval krijgt een hacker het antwoord op zijn query’s niet rechtstreeks te zien (daarom wordt het ook een ‘blinde’ aanval genoemd). De aanvaller kan echter wel het gedrag van de applicatie observeren en de structuur ervan reconstrueren.

Er zijn twee typen inferential SQL-injecties: blind-boolean-based SQLi en blind-time-based SQLi.

Boolean-based (content-based) blind SQLi

Een aanvaller verstuurt verschillende SQL-query’s die TRUE- of FALSE-antwoorden opleveren.

Time-based blind SQLi

Een time-based blind SQLi-aanval is een techniek waarbij een aanvaller query’s naar de SQL-database stuurt en deze de opdracht geeft om een bepaalde tijd te wachten alvorens te reageren. Als een website niet onmiddellijk reageert, geeft dit aan dat hij kwetsbaar is voor een blind SQL-aanval.

Out-of-band SQLi

Een out-of-band SQLi-aanval is een exploitatie waarmee hackers gegevens kunnen exfiltreren via DNS- of HTTP-kanalen.

Voorbeeld van een SQL-injectie

Een goed voorbeeld van een SQL-injectie is de UNION-opdracht, die kan worden gebruikt om extra sub-query’s toe te voegen aan de hoofdquery van de gebruiker. Deze sub-query’s kunnen een database dwingen om extra informatie te retourneren samen met de legitieme zoekresultaten.

Met deze methode kan een hacker toegang krijgen tot de tabel met e-mails van klanten, gebruikersnamen of wachtwoorden van bijvoorbeeld een webwinkel. Als een database kwetsbaar blijkt voor SQL-injecties, is het een kleine stap om in te breken en gebruikersaccounts en gevoelige informatie te stelen of zelfs de beheerdersrechten over de website die aan de database gelinkt is over te nemen.

Wat kan een SQL-hacker stelen?

Als een site niet goed beveiligd is, is er eigenlijk geen limiet aan de gegevens waartoe een hacker met SQL-injecties toegang kan krijgen. Bijna alle informatie in de database kan gecompromitteerd worden.

Met eenvoudige SQL-opdrachten kunnen hackers een database dwingen een volledige lijst van alle tabellen in de database vrij te geven. Dit geeft ze een routekaart naar elke subsectie van de database, zodat ze alle gewenste informatie makkelijk en snel kunnen opvragen.

SQL-injecties voorkomen

Scheiden van gegevens

Hoe meer gecentraliseerd je gegevens zijn, hoe meer schade een SQL-aanval kan aanrichten. In het voorbeeld van de webwinkel hierboven is de hack schadelijk omdat gevoelige gebruikersgegevens in dezelfde database worden bewaard als de producttabellen. Door informatie te scheiden en over verschillende databases te verdelen, kun je de schade van een aanval tot een minimum beperken.

Prepared statements

Een van de beste strategieën om schade door SQL-injecties te voorkomen is de implementatie van prepared statements. Een slecht beveiligde website genereert elke keer dat iemand een verzoek verstuurt een nieuwe SQL-query, wat hackers de mogelijkheid geeft hun eigen code te injecteren.

Je kunt dit vermijden door je site te programmeren om vooraf gemaakte SQL-sjablonen te gebruiken, met vaste waarden en een vraagteken waar normaal het sleutelwoord zou staan. Je DBMS kan worden gecodeerd om dat vraagteken te lezen als de gegevens in de zoekbalk, maar de query zelf is van tevoren al gemaakt. Met een prepared statement kan een hacker geen nieuwe opdrachten aan de string toevoegen.

Invoercontrole

Invoercontrole moet in de backend van een website worden ingebouwd, met een whitelist van geaccepteerde tekens en woorden. De whitelist kan worden bijgewerkt wanneer nieuwe doorzoekbare items aan de database worden toegevoegd. Als een hacker naar een kwaadaardige opdracht ‘zoekt’, controleert het systeem de invoergegevens aan de hand van zijn whitelist. Als er geen geldige overeenkomst wordt gevonden, wordt de code niet uitgevoerd en wordt alleen een ‘geen resultaten’-bericht teruggestuurd.

Online beveiliging begint met een klik.

Blijf veilig met ‘s werelds toonaangevende VPN