Veiligheid voor alles
- January 17, 2023
- 0
Heel wat basissoftware die we dagelijks gebruiken, is onveilig en zit waarschijnlijk nog vol met fouten.
De meest voorkomende beveiligingsfouten zijn geheugenfouten, en die elimineer je met een geheugenveilige programmeertaal en compiler, zoals Rust. Daar mag wel eens wat meer aandacht naar gaan. [Koen Vervloesem]
Uit allerlei studies blijkt dat 60 tot 70% van de beveiligingsfouten te wijten zijn aan een incorrect gebruik van geheugen. Een klassieker is de buffer overflow: een programma definieert een buffer van 10 bytes, maar voert geen controles uit en schrijft er 20 bytes naar. De gegevens die erna staan, worden dan overschreven. Als daar een pointer staat die naar een geheugenadres verwijst dat hierna uitgevoerd wordt, kan een aanvaller met wat slimme trucs een pointer na die buffer schrijven die naar zijn eigen kwaadaardige code verwijst. Maar geheugenfouten kunnen ook tot een crash of het lekken van informatie leiden.
Beveiligingsfouten blijven zo vaak voorkomen, omdat we programmeertalen zoals C en C++ blijven gebruiken die verwachten dat je zelf het geheugen beheert. Uit de cijfers is duidelijk dat de gemiddelde programmeur dat niet kan: er worden veel te veel fouten tegen gemaakt. Programmeertalen met een garbage collector zoals Java, Python en Go nemen je dat werk uit handen, maar introduceren een hele overhead. Daardoor worden deze talen niet gebruikt voor systemen waar de prestaties een topprioriteit zijn. Een andere oplossing biedt Rust, de programmeertaal waarmee Mozilla in 2010 startte. In Rust kijkt de compiler heel strikt toe op de toewijzing van het geheugen, waardoor een hele klasse van geheugenfouten gewoon niet meer mogelijk zijn: als je code compileert, mag je gerust zijn, en als je code niet compileert, krijg je een foutmelding met de uitleg wat je moet oplossen. Helaas is Rust niet zo eenvoudig om te leren en vraagt het een hele andere manier van denken voor wie C of C++ gewoon is. Maar na 10 jaar beginnen eindelijk meer en meer belangrijke projecten Rust te gebruiken. Mozilla uiteraard, maar ook Google en Microsoft zijn ermee bezig. Ook Dropbox, Facebook, Discord en Canonical hebben al heel wat lijnen code in Rust draaien. Kijk eens na welke basissoftware op je servers er in C geschreven is. Kies er een uit en zoek eens op welke kwetsbaarheden er zoal in gevonden zijn. Krijg je het al benauwd als je nadenkt over de impact die dit op je servers had kunnen hebben? Zoek dan eens uit of er geen alternatief voor de software bestaat in Rust.
Ben je wat ambitieuzer, bekijk dan eens of je Rust kunt gebruiken voor je volgende programmeerprojecten. Voor webontwikkeling biedt de website Are We Web Yet (www.arewewebyet.org) talloze interessante bronnen. Of neem eens een kijkje in de GitHub-repository van het project Awesome Rust (https://github.com/rust-unofficial/awesome-rust) om nieuwe Rust-projecten te ontdekken die de moeite waard zijn om uit te proberen. Uiteraard kun je niet zomaar gelijk welke software vervangen door iets anders, en het zal een inspanning vereisen. Maar als iedereen wat inspanningen levert om naar veiligere software te migreren, dan maken we allemaal samen een grote stap naar een veiligere wereld. Nu nog een Rust-vervanger voor de Linux-kernel, en we kunnen op beide oren slapen…