In een reeks van artikelen ga ik u meenemen in de wereld van de OWASP top 10. Ofwel de 10 meest voorkomende, en tevens meest bedreigende, soorten cyberaanvallen. Er bestaat namelijk nog veel onduidelijkheid over hoe bepaalde aanvalstechnieken werken en wat je er tegen kunt doen. En als je dan gaat zoeken dan kom je vaak uit bij artikelen die de gemiddelde leek niet begrijpt. Dat bedoel ik niet als belediging, maar er is een gebrek aan helder geschreven content over deze dreigingen. Maar daar gaan wij van Rootsec verandering in brengen. En wel in de vorm van gemakkelijk te begrijpen content zonder een overvloed aan termen waar je nog nooit van hebt gehoord. We trappen af met de vraag Wat is een SQL-injectie?
Ah ja, de SQL-injectie. Deze boef staat al geruime tijd op nummer 1 in de OWASP top 10. En is daarmee de meest voorkomende en engste van alle dreigingen. Waarom? Dat gaan we zo uitleggen. Eerst maar eens even stilstaan bij de term SQL. Dit staat voor “Structured Query Language”. En wat je er verder van moet onthouden is dat het een programmeertaal is die gebruikt wordt om gegevens te onthouden. Bijvoorbeeld de gegevens van mensen die zich registeren op een webshop. Ze moeten dan een account aanmaken en deze gegevens komen dan in de SQL database. De eerstvolgende keer dat die persoon dan inlogt, dan worden al zijn gegevens behouden. Heel handig natuurlijk dat het wordt onthouden, maar mogelijk zie je hier ook meteen het gevaar. Deze database bevat dus ongekend veel informatie die een hacker maar al te graag in handen wil hebben. En dat lukt nog best vaak ook. En dat gebeurt aan de hand van een SQL-injectie.
Een SQL-injectie is een soort cyberaanval waarbij een hacker een SQL-codefragment gebruikt om een database te manipuleren en om toegang te verkrijgen tot mogelijk waardevolle informatie. Het probleem met de SQL-injectie is het feit dat megaveel webapplicaties of websites een database hebben die op SQL draait. U begint nu ongetwijfeld te begrijpen waarom deze badboy op nummer 1 staat. Ok, nu een stukje technisch geleuter, want je wilt natuurlijk wel weten hoe het allemaal werkt.
Om het simpel te houden, en dat is het doel, is een SQL-injectie niets meer dan een verzoek dat naar een database (van website of applicatie) wordt verzonden met als doel het verzamelen van informatie of het uitvoeren van bepaalde code. En je zult begrijpen dat ‘bepaalde code’ in dit geval bijzonder negatieve gevolgen heeft voor de ontvanger. Ter illustratie het volgende voorbeeld:
Jij bent lid van Facebook en telkens als je inlogt dan vul jij je gegevens in, dus je inlognaam en wachtwoord. Op het moment dat de door jou ingevoerde informatie klopt (dus overeenkomt met wat er in de database staat) krijg jij toegang tot jouw Facebook account. Komt de informatie niet overeen, mag je het nogmaals proberen. Het probleem ontstaat op het moment dat het mogelijk is om die invoervelden te misbruiken en andere informatie in te voeren. Een hacker kan dan bepaalde verzoeken doen aan de database en dit stelt ze vervolgens in staat om gevoelige gegevens te stelen (jouw Facebook inloggegevens!) of zelfs de website te manipuleren. Foute boel dus.
Waarom deze methode zo populair is? Omdat het enorm gemakkelijk is. Het is een methode die al even meegaat (ruim 14 jaar), dus is er veel informatie over te vinden. En om het nog erger te maken, tegenwoordig is het heel erg simpel om geautomatiseerde programma’s voor SQL-injecties te vinden en te gebruiken. Dit maakt het leven van de hacker een stuk gemakkelijker.
“Kort samengevat gebruikt een hacker bepaalde karakters of vergelijkingen in het invulgedeelte van een formulier, waardoor zijn input niet louter als tekst, maar als uit te voeren actie beschouwd wordt”
Het voorkomen van een SQL injectie is relatief simpel maar wordt vaak toch over het hoofd gezien. Allereerst is het installeren van een WAF, Webapplication Firewall, een goede zet. Deze WAF die zorgt ervoor dat alles en iedereen wordt gemonitord. Ziet de WAF dat Henk met gekke code bezig is op de website dan wordt deze er zonder pardon uitgebonjourd. Vaak zien wij nog dat er te weinig bedrijven bezig zijn met het implementeren van een WAF en zich daarmee toch kwetsbaar opstellen. De tweede optie om SQL-injecties te voorkomen is het gebruik van parameters voor de invoer. Klinkt moeilijk, valt mee. Dit betekent niets meer dan dat je aan de achterkant van de invoervelden gaat instellen wat er wel en wat er niet ingevoerd mag worden. Als jij enkel letters en cijfers toestaat, kunnen andere tekens (die vaak gebruikt worden bij SQL-injecties) zoals een asterisk* niet worden ingevoerd. Op die manier kan je jezelf dus zeer degelijk beschermen tegen een SQL-injectie.
Bij Rootsec is het altijd ons doel geweest om informatiebeveiliging simpel te maken. En dat proberen we nu, aan de hand van deze serie van artikelen, kracht bij te zetten. Heeft u naar aanleiding van dit artikel vragen of opmerkingen? Of wilt u graag weten wat Rootsec voor u kan betekenen? Neem dan vrijblijvend contact op en we helpen u graag verder.