Behandelen van parameters is complex
software architect
Expert van Computable voor de topics: ECM, Internet en Open Source
MeerHet onlangs gevonden lek in Ruby on Rails is gevaarlijk voor iedereen die dit platform gebruikt, niet alleen voor DigiD. Het lek zit immers niet in de code die voor DigiD is gemaakt, maar in het onderliggende platform, Rails. Ruby is de programmeertaal waarin Rails is geschreven, en heeft dus eigenlijk niets te maken met het lek. Het is interessant om te zien hoe dit lek kon ontstaan, omdat vrijwel alle webapplicatieplatformen dit soort lekken hebben gehad, of misschien nog hebben of gaan krijgen.
Het zwakke punt in dergelijke platformen is het gebruik van gegevens die van de gebruiker van de website komen. Deze parameters zijn natuurlijk belangrijk voor het functioneren van een website, denk bijvoorbeeld aan het invoeren van een gebruikersnaam en wachtwoord, een adres, of een locatie. De parameters die van de gebruiker komen worden meestal gebruikt om gegevens in een database op te vragen of te veranderen. Dit gaat via sql-opdrachten, waarin de parameters worden ingevuld. Neem bijvoorbeeld:
"SELECT * FROM users WHERE name = ‘" + userName + "‘;"
waarbij userName de door de gebruiker aangeleverd parameter bevat. Door een ‘vreemde’ gebruikersnaam op te geven (bijvoorbeeld ‘ or ‘1’=‘1) kan de sql-opdracht worden veranderd, zoals uitgelegd op de Wikipedia-pagina over sql-injectie. Op deze manier is het eenvoudig om allerlei gegevens uit de database te halen.
De meeste websites zijn wel beveiligd tegen simpele sql-injectie, omdat ‘vreemde’ parameters die de sql-opdrachten veranderen, worden tegengehouden. Maar een simpele zoekopdracht op Google naar "inurl:select inurl:where inurl:%20" geeft nog altijd een handjevol websites die duidelijk niet beveiligd zijn.
Natuurlijk biedt een platform als Rails beveiliging tegen sql-injectie. Het probleem is echter dat er heel veel types parameters zijn. Denk aan namen, getallen, datums, maar ook webservice-aanroepen en xml-documenten. Daarnaast worden deze parameters ook nog eens op verschillende manieren gecodeerd en gedecodeerd. Door alle verschillende representaties, coderingen en omzettingen is het behandelen van parameters een complexe aangelegenheid. Een webframework neemt de meeste decoderingen en typeomzettingen voor zijn rekening, maar vaak moet de programmeur aangeven welke omzettingen en filters toegestaan zijn.
Kwaadwillenden kunnen zelfs een simpel invoerveld in een webpagina misbruiken om sql, en in het geval van het Rails-lek ook Ruby-code, te ‘injecteren’ in een webapplicatie. Het Rails-lek ontstond, omdat bij het decoderen van parameters een automatische conversie plaatsvond naar het juiste datatype. Wanneer een parameter zelf aangaf dat deze de YAML, een variant van xml om gegevens te coderen, representatie gebruikte, ging Rails deze automatisch omzetten naar een interne gegevensstructuur. Gestructureerde xml- en YAML-documenten bevatten echter verwijzingen naar interne en externe gegevens, en daarmee was het mogelijk om code te injecteren.
Door de complexiteit van conversies is het heel moeilijk geworden om gebruikersparameters te controleren. Het is bijvoorbeeld niet voldoende om te controleren of een xml-document dat van buiten komt geen (sql- of Ruby-) code bevat. Ook zonder dergelijke code is het simpel om een denial of service-aanval uit te voeren.
Betekent dit nu dat we voor belangrijke applicaties niet meer moeten vertrouwen op platforms zoals Rails, en alle lagen van een applicatie zelf moeten bouwen? Dat lijkt mij niet. Hoewel de beveiliging van Rails niet 100 procent waterdicht bleek te zijn, is deze op een niveau dat een softwareontwikkelteam niet snel zal evenaren. Er zijn zoveel aanvalsmogelijkheden dat deze alleen voor experts is te overzien. Rails wordt door veel websites gebruikt, waardoor dit lek belangrijk en urgent was. Omdat Rails open source is, kennen veel mensen de programmacode en kon het lek snel worden gedicht. De meeste lekken in ‘eigenbouw’-oplossingen worden waarschijnlijk nooit gevonden, behalve door mensen die ernaar op zoek zijn met kwade bedoelingen.
17-05 De Red Diesel Blues
17-05 Efficiency en kostenbesparing dient de IT-mens
16-05 Groei IT-budgetten bij grote ondernemingen
15-05 Big data opvangen met open hybride cloud
14-05 Ontwerp websites en cloud moeten schaalbaar zijn
14-05 Noem man en paard bij cloud computing
13-05 BYOD onmogelijk door logge software
13-05 EPD/LSP definitief uit as herrezen?
08-05 Cloud aggregator krijgt rol in IT-markt
08-05 Zorg voor een doeltreffend Programma van Eisen
10-05 Novell Filr geeft mobiele toegang tot bestanden
24-04 Gemeente Neerijnen stapt over op LibreOffice
23-04 SkySQL fuseert met MariaDB-ontwerpers
22-04 Red Hat zet in op OpenStack enterprise
19-04 Paragon brengt de ExtFS voor Mac OS X 9.0
12-04 VX levert open source-module Reclassering op
11-04 Open source rammelt aan de Digipoort
03-04 IBM verbetert big data-platform voor Hadoop
27-03 Valori breidt uit met Test Tool Services
21-03 Viafrica zoekt mensen voor Tanzania en Kenia
|
|
24-01-13 ‘Maatwerksoftware deed DigiD de das om’
18-01-13 ‘Lek Ruby on Rails snel dicht door open source’
17-01-13 NCSC waarschuwt voor lek in Joomla add-on
17-01-13 ‘Ruby on Rails blijft zonder update risicovol’
15-01-13 ‘Lek in Ruby on Rails heeft beperkte impact’
14-01-13 Ontwikkelen veilige software is complex
09-01-13 Lek in Ruby on Rails is griezelig
11-01-13 De voor- en nadelen van Ruby on Rails
11-01-13 Top 3 gedupeerden door Ruby on Rails-lek
10-01-13 Lek in Ruby on Rails heeft veel kanten
14-01-13 Na Ruby on Rails volgt weer een ander systeem
10-01-13 Ruby on Rails-patch kan problemen opleveren
09-01-13 De gevaren door het Ruby on Rails-lek
11-01-13 ‘Dienst gebouwd op Ruby on Rails moet offline’
09-01-13 Logius haalt DigiD offline na lek in Ruby on Rails
Zorg en Zekerheid , Leiden
NIVEL , Utrecht
Itility , Son
Hays Amsterdam , Amsterdam
ReflexSystems , Almere

