Auteur: John Kronenberg ● john.kronenberg@gmail.com
Redactie: Kimberly Snoyl en Paul Beving
Bij softwaretesten moet ik altijd aan de ‘Coopertest’ denken. Een oefening die ik als jonge jongen altijd moest doen ‘op de club’. Een Coopertest is een test om iemands conditie te meten. Het idee is dat iemand in twaalf minuten een zover mogelijke afstand probeert af te leggen. Ook al kent de test een tabel met leeftijd, geslacht, afstand en bijbehorende score tegen elkaar afgezet, mijn coach destijds vond het belangrijker dat je twaalf minuten hardliep zonder te stoppen, dan zover mogelijk te komen.
De parallel die ik met testen zie is dat je als tester niet zoveel IT-kennis hoeft te hebben om ‘te blijven hardlopen’, je kunt met relatief weinig detail IT-kennis een goede testopdracht doen. Testers hoeven bijvoorbeeld niet in detail te weten hoe queuing werkt, of hoe een e-mail van jouw iPad op de pc van je collega terechtkomt, wat er ‘under-the-hood’ gebeurt als je een webpagina bezoekt en hoe bijvoorbeeld DNS werkt. Ik ben ervan overtuigd dat deze detail IT-kennis je een betere tester maakt, maar ook dat het tegenovergestelde, deze detail IT-kennis niet hebben, je niet direct een slechte(re) tester maakt. Deze tegenstelling maakt denk ik dat veel testers, als het over IT-kennis gaat, op een basisniveau blijven hangen, en niet de intrinsieke drijfveer hebben, om in de terminologie van de Coopertest te blijven, een zover mogelijke afstand te lopen.
Detail IT-kennis opbouwen
In mijn wens om meer detail IT-kennis op te bouwen las ik over een in 2011 door Nederlanders (Jobert Abma en Michiel Prins) gestart bedrijf, HackerOne. Dit bedrijf is naar mijn weten het eerste bedrijf dat ethische testers beloont voor het vinden van kritische securityfouten in de (web)applicaties van hun opdrachtgevers. Op dit moment zijn tientallen bedrijven in dit bedrijfsmodel, de zogenoemde Bug Bounty programma’s, gestapt. Omdat hacking nog altijd een negatieve connotatie heeft worden de securitytesters liefkozend researchers genoemd. Veel grote bedrijven hebben Bug Bounty programma’s, waaronder Facebook, Tesla, Google, Amazon en Marktplaats. In principe kan iedereen, van bijvoorbeeld een onopgeleide Noor, tot een hoogopgeleide Indiër, bugs gaan zoeken in deze programma’s. Een researcher probeert dus kritische bugs te vinden. De mate van het kritiek zijn van de bug en het als eerste gevonden hebben van de bug, bepaalt de hoogte van het bedrag dat de researcher van de opdrachtgever ontvangt. Het zal niemand verbazen dat een klein deel van deze researchers door fulltime op deze Bug Bounty programma’s te werken, een dikke boterham verdienen. Alleen Google al heeft over heel 2020 6,7 miljoen dollar aan researchers betaald. Maar belangrijker dan het geld dat je met Bug Bounties kunt verdienen, je maakt het Internet een veiligere plek.
Uit interesse ben ik me gaan verdiepen in deze Bug Bounty programma’s en ik ben gestart om de website van een paar van deze opdrachtgevers op security bugs te testen. De teleurstelling kwam al snel: natuurlijk vind je niet zomaar een bug, laat staan een kritische bug. Deze websites worden door duizenden researchers getest, dus de kans dat je ‘low hanging fruit’ vindt, is bijzonder klein. Om uit deze impasse te komen, zo begreep ik al snel, moet je én de security bug classes heel goed kennen (XSS, IDOR, XSRF, CORS etc.) én weten hoe je ze kan vinden. Ook moet je heel goed de technologie begrijpen die het programma gebruikt om bijvoorbeeld hun website te doen werken. Door een paar avonden op te offeren voor het zoeken van security bugs op websites heb ik en kennis opgebouwd over security testing en heb ik detailkennis opgebouwd over bijvoorbeeld GraphQL. Voor wie GraphQL niet kent, GraphQL (graph query language) is een zoektaal, die in 2012 door Facebook intern is ontwikkeld en in 2015 werd uitgebracht. Het vormt een alternatieve manier om over meerdere REST API’s heen te zoeken in data gemodelleerd als een graaf.
De open source community heeft veel applicaties geschreven (veelal in Python en Perl) om de researcher te ondersteunen in verschillende fasen van het Bug Hunting proces. Door met deze tools te leren werken, kun je prima ervaring opdoen met bijv. GIT of de command line. Op deze pagina kun je een indrukwekkende lijst met Open Source Bug Bounty en Security Testing tools vinden.
Internet een veiligere plek
In het coronajaar heb ik in de avonduren behoorlijk wat tijd geïnvesteerd om security bugs te vinden. Nu heb ik wel een aantal behoorlijk kritische bugs gevonden waar ik een paar euro voor heb ontvangen, maar ik moet concluderen dat dit zakcentje de tijdsinvestering niet rechtvaardigt. Wat de tijdsinvestering wel rechtvaardigt, is de IT-kennis die je door dit ‘paaseieren zoeken’ opbouwt. Door deze Bug Bounties kun je een betere tester worden en het proces van het zoeken naar en het vinden van een bug is ook nog eens leuk en waardevol. En wat ook fijn is, ik heb nu al een maand geen website in een Bug Bounty programma meer getest. Misschien ga ik in de nabije toekomst weer eens een website testen die in bijvoorbeeld AngularJS is gebouwd. Gewoon, om AngularJS beter te begrijpen. Of niet. Deze vrijblijvendheid trekt me aan in deze programma’s.
Geïnteresseerd? Ga eens naar de website HackerOne, meld je aan en doe een paar Capture The Flag opdrachten om te bepalen of het voor jou een manier kan zijn om een betere tester te worden. En als bijkomend voordeel kun je je opgebouwde (test)kennis dan ook gebruiken om het internet veiliger te maken. Een veiliger internet gaat ons allemaal aan.