Security by design: pentesten

Geschreven door Rob Dekkers

In de voorgaande blogs hebben we allerlei aspecten van het ontwikkelen van een veilige Mendix app besproken. In deze blog gaan we in op het verifiëren van de maatregelen ter voorkoming of vermindering van veiligheidsrisico’s. We gaan, net als met het functioneel testen van een applicatie, proberen om kwetsbaarheden in een Mendix app aan te tonen. Dit is, net als bij functionele testen, geen garantie dat er geen problemen meer zijn, maar geeft wel een indicatie van de kwaliteit van de maatregelen die zijn genomen.

Browserkwetsbaarheden

Browserkwetsbaarheden, zoals mogelijkheden tot cross-site scripting, kunnen in kaart worden gebracht met diverse tools. We noemden al BURP suite. OWASP levert het tool ZAP (Zed Attack Proxy). Ook is er een snelle scan mogelijk via securityheaders.com of een online dieptescan via Probely en via diverse andere leveranciers en plugins van browsers. Dit zijn generieke middelen die voor elke website ingezet kunnen worden.

Library’s

Het is mogelijk om een snelle scan op de gebruikte versies van de javascript library’s uit te voeren met het opensource retire.js dat ook als extensie van Chrome, Firefox, BURP suite en ZAP bestaat. De scan geeft overzicht van Javascript library’s waarvan bekend is dat er kwetsbaarheden in zitten en waarvan een recentere versie bestaat.

Injectie

Hier begint het meer specifieke testen van de Mendix app. Als ingelogde gebruiker zul je de verschillende schermen moeten openen en data invoeren. Voer dan een alert in Javascriptcode als tekst in. Het is dan meteen duidelijk als de code wordt uitgevoerd na het opslaan en weer opnieuw weergeven in het scherm.

Het is handig om kennis te hebben van de schermen in de Modeler (whitebox testing), zodat standaard widgets of widgets waarin geen HTML kan worden getoond in de test kunnen worden overgeslagen. Mendix runtime zorgt er al namelijk voor dat in standaard widgets geen code uitgevoerd kan worden.

Ook is het handig te weten of de Mendix app SQL- of OQL-statements samenstelt en uitvoert, zodat injectie hier gericht op getest kan worden.

Client API

Om de rechten van gebruikers en de mogelijkheden om gebruik te maken van de client API te verifiëren kan gebruik worden gemaakt van specifieke scripts die de client API aanroepen. Dat is veel productiever dan zelf Javascript statements in de browser uitvoeren. Er bestaat een extensie voor Chrome en zelf gebruiken wij een script in Javascript. Dit script kan CRUD-operaties uitvoeren op de entiteiten en ook over associaties navigeren. Hieronder een screenshot:

Screenshot

Kleuren geven aan of een attribuut read-only of een associatie is. Selecties kunnen worden gemaakt met behulp van Xpath expressies.

Het is nu de bedoeling om steeds met verschillende gebruikersrollen in te loggen, het script uit te voeren en CRUD-acties op entiteiten te proberen. Het is dan snel zichtbaar of de gebruiker teveel data kan raadplegen en/of muteren. Of dat schadelijk is, is afhankelijk van de applicatie en het afbreukrisico. Vooral de rechten van anonieme gebruikers dienen op deze wijze gecontroleerd te worden.

Nawoord

Dit was de laatste blog uit een reeks over het ontwikkelen van veilige Mendix apps. De blogs pretenderen geen volledig beeld te geven van het onderwerp, maar zijn vooral bedoeld om de belangrijkste aspecten van veilige Mendix apps onder de aandacht te brengen en hiervan bewustwording te creëren. We hopen dat dat is gelukt en dat daarmee een positieve bijdrage wordt geleverd aan veiligere Mendix apps.