Can JavaScript from untrusted sources be safely executed on the JVM?

Thomas
Toye

h1 { margin-bottom: 0.21cm; }h1.western { font-family: "Liberation Sans",sans-serif; font-size: 18pt; }h1.cjk { font-family: "Droid Sans Fallback"; font-size: 18pt; }h1.ctl { font-family: "FreeSans"; font-size: 18pt; }p { margin-bottom: 0.25cm; line-height: 120%; }

Hoe bescherm je iemand die blindelings bevelen moet opvolgen?


 

Stel je voor: je wil technisch ingestelde mensen, die je online-platform gebruiken, de mogelijkheid bieden om zelf extra logica te gaan toevoegen. Je zou ze kunnen vragen om hun wensen door te mailen, maar dat duurt even en dan moet je mensen inhuren om dit voor jou te gaan implementeren. Daarom kies je ervoor om de mogelijkheid tot scripting aan te bieden: je laat gebruikers toe zelf kleine programma's te schrijven die dan worden uitgevoerd op jouw servers.

Een no-brainer

Stel je een butler voor, die alles doet wat de mensen vragen. In een hotel die deze service aanbiedt, zullen veel mensen de weg vragen, hun auto laten halen of eten bestellen. Maar misschien vraagt een kwaadwillend persoon plots aan de butler om van het dak te springen. Een persoon zal twijfelen, maar een computer duikelt zonder aarzelen de diepte in.

99 problems

Met scripting toelaten heb je hetzelfde probleem, meer zelfs, verschillende problemen. Er zijn verschillende manieren die personen met slechte bedoelingen kunnen gebruiken om je servers neer te halen: ze kunnen de processor bezig houden, waardoor niemand anders nog iets kan doen, ze kunnen je harde schijf opvullen of objecten aanmaken in het geheugen, waardoor niemand anders nog programma's kan starten... Maar ze kunnen ook andere servers aanvallen, bijvoorbeeld wanneer er netwerktoegang is. Zo lijkt het alsof jij die aanval pleegde: die kwam namelijk van jou servers.

Virtual reality

Om dit probleem op te lossen, wordt er gewerkt met “virtuele machines”: in plaats van programma's directe toegang te geven tot een systeem, worden ze uitgevoerd in soort zandbak, waar niet alles in mogelijk is. Zo kan je bijvoorbeeld netwerktoegang gaan uitschakelen: daarmee vermijd je al een hele hoop mogelijke problemen.

Vaker wel dan niet moet je toegang deels gaan toelaten. Sommige programma's hebben nu eenmaal netwerktoegang nodig, of moeten aan bestanden kunnen op de harde schijf. Zo heeft een programma dat de weersvoorspelling van morgen ophaalt op het internet, netwerktoegang nodig. Daar beginnen de problemen: hoe ga je selectief programma's toegang geven tot bronnen? Er zijn zoveel omwegen en trucs om beveiligingen te omzeilen dat dit als een moeilijk probleem wordt beschouwd.

Self-service

Ik onderzocht de mogelijkheden om JavaScript, de populairste scriptingtaal, veilig uit te gaan voeren op de Java Virtual Machine, een van meest gebruikte serverplatformen. Het result was ontnuchterend: helaas, tegenwoordig nog niet mogelijk. Alle platformen die ik onderzocht, boden beschermingen aan, maar bij elk platform was er wel een mogelijkheid om snode plannen uit te voeren. Geen butler aanbieden dan maar?

Download scriptie (2.27 MB)
Universiteit of Hogeschool
Hogeschool West-Vlaanderen