To the English version

TETRA RustIEC

RustIEC is een VLAIO TETRA project (grant HBC.2021.0066) met als doel Vlaamse bedrijven de Rust programmeertaal te doen beheersen. Het project legt specifiek de focus op veiligheid in IoT systemen, veiligheid in edge computing en veiligheid in cloud computing.

Het RustIEC project wordt geleid door het Smartnets lab van de Vrije Universiteit Brussel en het DistriNet lab van de KU Leuven. Ontmoet het team!

Projectdoel

Problemen met geheugen, zoals geheugenlekken, buffer overflows en memory dumps, zijn heel gekende softwareproblemen die kunnen uitgebuit worden door aanvallers. Het aantal cyberaanvallen neemt jaar na jaar toe. Niet alleen grote bedrijven, maar ook kleine bedrijven worden steeds vaker het doelwit en kunnen hiervan heel nefaste gevolgen ondervinden.

Bij de meeste programmeertalen, zoals bijvoorbeeld C en C++, worden deze geheugenproblemen pas laattijdig opgemerkt, meestal wanneer ze tijdens het uitvoeren sporadisch optreden omdat ze bij compilatie of debuggen niet opvallen. Wanneer de problemen pas in productie optreden, kan er grote schade ondervonden worden. Het zoekproces naar de oorzaak kan trouwens zeer tijdrovend zijn.

De programmeertaal Rust biedt hierop een adequaat antwoord. De compiler laat de programmeur niet toe om onveilige code neer te schrijven. Inherent door ontwerp ligt het aantal softwarefouten in Rust geschreven programmeercode veel lager. Bijgevolg worden fouten reeds van in het begin van het proces vermeden, hetgeen het onderhoud van code veel doeltreffender maakt. Tevens laat Rust ook toe om performante code te genereren. De programmeertaal beschikt globaal gezien over goede documentatie en er zijn reeds veel bibliotheken ter beschikking, zowel voor ingebedde als niet ingebedde systemen.

De belangrijkste doelstelling van dit project is bedrijven kennis te laten maken met de voordelen die de Rust programmeertaal kan opleveren, zodat ze zelf een afweging kunnen maken voor toekomstige ontwikkelingen.

We hebben de volgende resultaten voor ogen:

  • Twee uitgewerkte, gedocumenteerde gevalstudies, waarbij opstelling en code open beschikbaar worden gesteld.
  • Benchmarks opgesteld voor het vergelijken van prestatie tussen Rust en gangbare programmeercode zoals C, C++, Python voor een aantal veel voorkomende en representatieve algoritmes in de domeinen van IoT-gedreven veilige webapplicaties.
  • Uitgewerkt onderzoek naar de interoperabiliteit van Rust met andere programmeertalen en de overdraagbaarheid naar verschillende platformen.
  • Onderzoek naar efficiëntie van C naar Rust conversietools zoals C2Rust en CRUST.
  • Organisatie van één inleidende en één meer geavanceerde hands-on workshop om met Rust aan de slag te gaan en het ter beschikking stellen van het workshopmateriaal.
  • Het integreren van de opgedane kennis in minstens drie cursussen voor beide onderzoeksinstellingen.

Projectdeelnemers

Ausy Digazu LSEC OTN Systems Sky Hero Barco Gemone Lumency Quicksand Verhaert Digital COMmeto MatchID Shayp

Vrije Universiteit Brussel Vlaio KU Leuven

To the English version

Het team

Het RustIEC project wordt geleid door het INDI/ETRO Smartnets lab van de Vrije Universiteit Brussel en het DistriNet lab van de KU Leuven.

Projectbegeleiders

Kris Steenhaut An Braeken Jorn Lapon Stijn Volckaert

Kris Steenhaut (Vrije Universiteit Brussel) heeft de ETRO/IRIS/Smartnets groep geleid vanaf 2005. Haar onderzoeksactiviteiten focussen op het ontwerp, de implementatie en de experimentele evaluatie van draadloze sensornetwerken en hun integratie op het Internet en het wereldwijde web. Onderwerpen van bijzondere belangstelling zijn voornamelijk interoperabiliteit, veiligheid en privacy en de interactie met fog en cloud. Kris Steenhaut heeft verschillende ITEA- en SBO-projecten en verschillende EU-projecten over Internet of Things, smart grid, slimme verlichting en milieubewaking begeleid. Zij speelt een actieve rol in de ontwikkelingssamenwerking met Cuba en Vietnam.

An Braeken (Vrije Universiteit Brussel) werd professor in 2007 aan de Erasmushogeschool Brussel, sinds 2013 aan de Vrije Universiteit Brussel in het departement Industriële Wetenschappen. Haar huidige interesses omvatten security- en privacyprotocols voor IoT, cloud, fog, blockchain en 5G security. Ze nam deel en coördineerde in meer dan 12 nationale en internationale projecten.

Jorn Lapon (KU Leuven) is een Research Manager in Secure Software van de DistriNet Research Group van de KU Leuven campus in Gent. Hij is zowel in de industrie als in de academische wereld actief geweest en doctoreerde in 2012 op Anonymous Credential Systems. Onderwerpen van bijzonder belang zijn IoT-beveiliging, met een focus op veilige ontwikkeling en beveiligingstesten. Zijn nauwe samenwerking met de industrie is waardevol gebleken voor zowel de bedrijven als het academisch onderzoek.

Stijn Volckaert (KU Leuven) is an assistant professor at imec-DistriNet, KU Leuven - Technology Campus Ghent. His research currently focuses on exploit mitigations, software diversity, multi-variant execution, and automated migration of legacy code to safe languages.

Projectmedewerkers

Ruben De Smet Diana Deac Roald Van Glabbeek Andreas Declerck

Ruben De Smet (Vrije Universiteit Brussel) gebruikt actief Rust sinds 2016 en heeft bijgedragen aan meerdere Rust "crates", onder meer in het asynchrone ecosysteem, in cryptografische bibliotheken en in de "qmetaobject" bibliotheek. Hij onderhoudt mede een reeks Signal bibliotheken en ontwikkelt een Signal client. Voor zijn doctoraatsonderzoek werkt hij aan peer-to-peer technologie. Ruben vervoegde de Belgium Rust User Group in 2017 en organiseert deze sinds 2020.

Diana Deac (Vrije Universiteit Brussel) begon onlangs software te ontwikkelen in Rust na het werken met Contiki-NG dat geschreven is in de C programmeertaal. Ze ontwierp een adaptieve scheduler voor Time Slotted Channel Hopping (TSCH) voor Contiki-NG. Momenteel werkt ze aan de implementatie van het RPL-protocol in Rust. De focus van haar doctoraatsonderzoek is het verbeteren van protocollen voor draadloze sensornetwerken met het oog op veiligheid.

Roald Van Glabbeek (Vrije Universiteit Brussel) draagt bij met zijn expertise in embedded platformen en ontwerp en implementatie van MAC, RDC en routingprotocols.

Andreas Declerck (Vrije Universiteit Brussel) is bezig met Rust sinds 2017 en maakt occasioneel contributies aan de in Rust geschreven X11 window manager LeftWM. Voor zijn master thesis onderzoekt hij mogelijkheden om Rust te gebruiken bij het implementeren van multicast in het RPL netwerk protocol en CSMA op embedded devices. Hij is actief in de kunstwereld waar hij kunstenaars helpt met het uitbouwen van de technische kant van hun kunstinstallaties. In zijn vrije tijd is hij een actief vrijwilliger bij CoderDojo België waar hij kinderen tussen 7 en 18 jaar leert programmeren.

Projectbijdragers

Thibaut Vandervelden Robrecht Blancquaert Alicia Andries

Thibaut Vandervelden (Vrije Universiteit Brussel) draagt bij aan verschillende Rust crates sinds 2019. Zijn hoofdzakelijke focus ligt op het schrijven van software voor ingebedde apparaten die gebruikmaken van laagvermogen draadloze protocols, zoals IEEE802.15.4. Hij droeg bij aan de smoltcp crate, waarin hij de 6LoWPAN implementatie voorzag. Hij werkt momenteel aan een RPL protocol implementatie. De prestaties van de Rust programmeertaal op ingebedde apparaten is de focus van zijn doctoraatsonderzoek.

Robrecht Blancquaert (Vrije Universiteit Brussel) werkt aan snelle, veilige implementaties van elliptische krommen voor laagvermogen ingebedde apparaten, met automatische specialisatie voor verschillende CPU architecturen.

Alicia Andries (KU Leuven) is een doctoraatsonderzoeker aan de imec-DistriNet onderzoeksgroep van de KU Leuven onder leiding van Stijn Volckaert. Ze werkt aan het semi-automatisch migreren van code in onveilige systeemprogrammeertalen naar veiligere alternatieven, zoals Rust. Zo werkt ze aan het vertalen van drivers naar Rust, waarbij ze de huidige beperkingen van bestaande automatische migratietools en Rust for Linux onderzoekt.

To the English version

Workshops

Deel van de doelstelling van het RustIEC project is het organiseren van minstens één inleidende en twee geavanceerde hands-on workshops om met Rust aan de slag te gaan.

RustIEC 101

RustIEC 101 is onze beginnerscursus Rust, gebaseerd op de A-modules van de cursus "101-rs" door Tweede Golf. De materialen zijn beschikbaar in het Engels op https://101.rustiec.be/, en de broncode is beschikbaar op https://gitlab.com/etrovub/smartnets/rustiec-101/.

Deel 1

Deze cursus wordt gedoceerd in vorm van een workshop op:

  • 14 maart 2023 op de VUB campus;
  • 27 maart 2023 op de VUB campus;
  • 28 maart 2023 op de VUB campus;

aan in totaal 35 verwachte deelnemers.

Deel 2

Het tweede deel van de RustIEC 101 cursus leert meer geavanceerde Rustconcepten aan.

  • 13 september 2023 op de VUB campus;
  • 19 october 2023 op de campus van Barco;

To the English version

Contact

Voor vragen die verband houden met de onderzoeksdomeinen van een medewerker of bijdrager, contacteert u gerust direct het relevante teamlid.

Algemene vragen, of project vervoegen

An Braeken

Wenst u met uw bedrijf het project te vervoegen, kan u contact opnemen met An Braeken, op an.braeken@vub.be.

Inhoudelijke vragen

Voor vragen en suggesties betreffende de inhoud van het project, kan u rechtstreeks de medewerkers en bijdragers contacteren.

Web, cloud en async

Ruben De Smet

Betreffende cloud en webtechnologie neemt u contact op met Ruben De Smet op rubedesm@vub.be, alsook voor asynchroon programmeren.

Ingebedde software

Thibaut Vandervelden Diana Deac

Betreffende ingebedde software kan u contact opnemen met Thibaut Vandervelden en Diana Deac.

Automatische vertaling en Linux kerneldrivers

Stijn Volckaert Stijn Volckaert

Omtrent automatische vertaling of vragen rond Linux kerneldriver ontwikkeling in Rust, neemt u contact op met Stijn Volckaert en Alicia Andries.

To the English version

Kick-off meeting 24 november 2022

Ruben De Smet: RustIEC kick-off

Kick-off Introduction slides

Download slides "kick-off introduction"

Ruben De Smet

Stijn Volckaert: Safe Systems Programming in Rust

Kick-off Introduction slides

Download slides "Safe Systems Programming in Rust"

Stijn Volckaert

Ruben De Smet & Thibaut Vandervelden: the Rust ecosystem

The Rust ecosystem

Download slides "Rust Ecosystem"

Ruben De Smet Thibaut Vandervelden

To the English version

Gebruikersgroepvergadering 27 maart 2023

Ruben De Smet: overzicht gebruikersgroepvergadering

Gebruikersgroepvergadering slides

Download gebruikersgroepvergadering slides

Ruben De Smet

Alicia Andries: C to Rust and making unsafe code safe

"C to Rust" slides

Download "C to Rust" slides

Alicia Andries

Thibaut Vandervelden: smoltcp

"smoltcp" slides

Download "smoltcp" slides

Thibaut Vandervelden

RustIEC nieuwsbrief (Juni 2023)

Welkom bij de eerste nieuwsbrief van het RustIEC project. Allereerst willen we de deelnemers van de eerste Rust Hands-On workshop bedanken, waarvoor we zeer goede en inzichtelijke feedback hebben ontvangen. In september zal de vervolgcursus van deze Rust Hands-On workshop plaatsvinden. Op basis van de resultaten van de vragenlijst hebben we besloten dat een gespecialiseerde cursus op een later tijdstip gericht zal zijn op embedded programmeren met Rust.

In deze nieuwsbrief geven we u updates over de voortgang van de RustIEC teams.

RPL implementatie door de Vrije Universiteit Brussel

Het VUB-team legt momenteel de laatste hand aan de implementatie en evaluatie van het Routing Protocol for Low-power and lossy networks (RPL). De implementatie is geschreven in Rust en toegevoegd aan de smoltcp TCP/IP bibliotheek, een lichtgewicht TCP/IP protocol stack. Als ingebed besturingssysteem hebben we het Embassy framework gebruikt. Beide zijn geschreven in de programmeertaal Rust.

Netwerk Stack Figuur 1: Protocol- en applicatiestack van Embassy met smoltcp en Contiki-NG.

Als eerste stap gebruikten we een simulator om de correctheid van de RPL-implementatie te evalueren. Daarna werden echte apparaten gebruikt, met name de nRF52840 ontwikkelingskit. Het te evalueren netwerk bestond uit apparaten die de smoltcp RPL implementatie met het Embassy framework draaiden en apparaten die de bekende Contiki-NG RPL implementatie draaiden, geschreven in C, die deel uitmaakt van het Contiki-NG besturingssysteem. Figuur 1 illustreert de protocolstacks voor zowel smoltcp als Contiki-NG.

De testopstelling bestond uit drie nodes, zoals weergegeven in Figuur 2. Een van de knooppunten diende als node, een ander als router en het derde als leaf node. Meerdere opstellingen werden geëvalueerd, waarbij de Contiki-NG implementatie werd gecombineerd met de smoltcp implementatie. Deze aanpak had als doel om de compatibiliteit van de Rust RPL implementatie te testen met een bestaande RPL implementatie geschreven in C.

Testopstellign Figuur 2: Testopstelling van nRF52840-DK's met smoltcp en Contiki-NG.

De op Rust gebaseerde RPL met smoltcp is robuust, maar vereist 145,5 KB flashgeheugen, terwijl RPL met Contiki-NG in C 47,7 KB vereist. De firmware zonder RPL heeft 117,3 KB nodig voor smoltcp en 38,1 KB voor Contiki-NG. Het is echter belangrijk om op te merken dat deze Rust-implementatie een eerste iteratie is, waardoor er voldoende ruimte is voor optimalisatie en verdere verfijning.

Het VUB-team werkte, in samenwerking met een masterstudent, aan de implementatie van het Generic Header Compression (GHC) protocol. Dit protocol dient als uitbreiding van de 6LoWPAN adaptatielaag voor IPv6. De implementatie werd ook toegevoegd aan de Rust smoltcp bibliotheek. Na de evaluatie concludeerden ze dat GHC vooral in specifieke scenario's zijn nut bewijst. IPv6-adressen maken deel uit van het woordenboek dat gebruikt wordt in het compressiealgoritme, waardoor het alleen efficiënt is wanneer de te comprimeren payload IPv6-adressen bevat.

Het VUB-team onderzoekt nu hoe de datalinklaag in Rust kan worden geïmplementeerd voor ingebedde apparaten, meer bepaald Medium Access Protocols (MAC) zoals Carrier Sense Multiple Access (CSMA) en Time Slotted Channel Hopping (TSCH). Wanneer deze protocollen in Rust worden geïmplementeerd, is er een volledige stack in een veilige programmeertaal beschikbaar voor apparaten die de IEEE 802.15.4 standaard gebruiken.

Vooruitgang op C naar Rust transpilers door KU Leuven

Het team van de KU Leuven heeft haar casestudy van de Rust voor Linux kernel afgerond. Ze hebben met succes een prototype gemaakt van een parallellepoortdriver in Rust en hebben een aantal belangrijke lessen geleerd over de interoperabiliteit van C en Rust. Je moet bijvoorbeeld nadenken over het soort beveiligingsfuncties dat je hebt toegevoegd aan de C code en of die ook moeten worden toegevoegd aan de Rust-code. Domen Puncen Kugler heeft hier een aantal interessante voorbeelden van gevonden. Ook als u een deel van uw C code vertaalt naar Rust zult u veel onveilige functies moeten gebruiken om te kunnen communiceren met de C code vanuit de nieuwe Rust code. Het is belangrijk om zulke onveilige functies in veilige functies te wikkelen die geheugenveiligheidscontroles kunnen uitvoeren voordat je Rust code simpelweg een pointer laat gebruiken die door C code werd aangeleverd. Hoewel het team van de KU Leuven hun studie van de Rust voor Linux kernel voorlopig opzij heeft gezet, houden ze belangrijke ontwikkelingen in de gaten. Bijvoorbeeld de verdere Rust-integraties in de mainline Linux kernel met de release van kernelversie 6.2. De Rust-integraties voor deze versie zijn voornamelijk low-level ondersteuningscode. Het zal nog een hele tijd duren voordat een substantiële Rust driver zal worden ondersteund door de mainline kernel.

Het team van de KU Leuven is momenteel bezig met een evaluatie van de stand van zaken op het gebied van het automatisch vertalen van C naar veiliger Rust. De drie publicaties van bijzonder belang zijn Mehmet Emre et al.'s OOPSLA 2021 paper "Translating C to Safer Rust", Bryan Tan Yao Hong's MSc thesis getiteld "From C Towards Idiomatic & Safer Rust Through Constraints-Guided Refactoring", en Hanliang Zhang et al.'s VAC 2023 paper "Ownership guided C to Rust translation". Ze bespraken de eerste twee papers op de vorige gebruikersgroepvergadering. Alledrie de publicaties hebben zeer verschillende technieken voor het transformeren van C naar veilig Rust, maar ze gebruiken allemaal C2Rust van Immunant als opstapje omdat het niet-idiomatisch, onveilig Rust kan genereren uit C code. C2Rust helpt niet om een programma veiliger te maken of te bewijzen dat een programma veilig was. Het enige waar het voor gemaakt is, is een syntactische vertaling. Deze syntactische vertaling neemt echter al wel een eerste horde weg voor iedereen die idiomatische Rust code probeert te genereren uit C code.

Omdat alle drie de publicaties C2Rust gebruiken, lijkt het begin van hun werkproces erg op elkaar. Ze volgen allemaal de workflow in Figuur 3. Ze gebruiken eerst C2Rust om onveilig Rust te genereren, daarna voegen ze hun eigen bijdrage toe in het blok Refactoring. Hoewel de papers een vergelijkbare workflow voor het omzetten delen, hebben ze verschillende manieren om de effectiviteit van hun tools te evalueren, wat het vergelijken van hun verschillende architecturen lastig maakt.

C2Rust Overview Figuur 3: Overzicht van de werking van C2Rust.

De architectuur van Mehmet Emre et al. is de meest eenvoudige. Ze transformeren simpelweg elke pointer van een specifiek type dat ze tegenkomen naar een Rust-referentie. Als de transformaties niet compileren, kijken ze automatisch naar de compilerfouten en de voorgestelde fixes en passen die toe. Dit is een zeer agressieve techniek. De architectuur die Bryan Tan Yao Hong voorstelt, is daarentegen heel precies. Ze bereiden transformaties voor op enkele zeer specifieke gevallen, zoals het transformeren van array pointers naar Rust types. Tot slot is de voorgestelde architectuur van Hanliang Zhang et al. gebaseerd op het vinden van pointers die passen in het eigendomsmodel van Rust. De basis van het idee lijkt erg op die van Immunant's eigendomsanalyse.

Na uitgebreide experimenten stelde het team van de KU Leuven vast dat alle ontwerpen veelbelovend zijn, maar dat de implementaties van deze architecturen verschillende fundamentele ontwerpfouten en tekortkomingen hebben. Het team van de KU Leuven vat momenteel de sterke en zwakke punten van de ontwerpen samen en zal dan richtlijnen en aanbevelingen formuleren die als uitgangspunt moeten dienen voor een nieuw en verbeterd ontwerp.

Rust: pros and cons

This report is available in English. Dit verslag is beschikbaar in het Engels

Rust: tools and interoperability

This report is available in English. Dit verslag is beschikbaar in het Engels

Benchmarking Rust against C and C++

This report is available in English. Dit verslag is beschikbaar in het Engels

Automatic conversion and interfaces

This report is available in English. Dit verslag is beschikbaar in het Engels

Overzicht lopende onderzoeksproblemen

This report is available in English. Dit verslag is beschikbaar in het Engels

Best practices m.b.t. veiligheid in Rust

This report is available in English. Dit verslag is beschikbaar in het Engels