Op weg naar veiligere software voor kritieke infrastructuur

Friedrich
Vandenberghe

Er draaien talloze softwareoplossingen op kritieke infrastructuren. In deze infrastructuren wordt vaak gebruikgemaakt van het I2C-protocol. Dit is een manier van communiceren tussen verschillende hardware componenten. Deze scriptie maakt dit protocol, in samenwerking met de internationale gemeenschap, veiliger en betrouwbaarder.

Wat er verwacht wordt van veilige software

Naast kritieke infrastructuur zijn consumentenproducten, variërend van babymonitoren tot smartwatches, alomtegenwoordig in ieders leven. Daarom heeft het Europees Parlement op 12 maart 2024 de Cyber Resilience Act goedgekeurd. Deze wet verplicht fabrikanten om er onder andere voor te zorgen dat kwetsbaarheden effectief worden aangepakt. Bovendien moeten beveiligingsupdates beschikbaar worden gesteld aan gebruikers. Daarnaast is er in de auto-industrie een snel groeiende praktijk van het draadloos uitsturen van software-updates naar voertuigen, zogenaamde over-the-air updates.

 

Wanneer een dergelijke update niet werkt, moet het mogelijk zijn om deze wijziging terug te draaien zonder gevolgen voor de gebruiker. Beveiliging en betrouwbaarheid zijn hier dus van het grootste belang. Bovendien zijn deze oplossingen vaak nauw geïntegreerd met slimme apparaten waarbij de chips zo simpel mogelijk zijn. Hierdoor moet de software ook zo simpel mogelijk zijn.
 

W3C WebAssembly (Wasm) en WebAssembly System Interface (WASI) is de technologie die aan al deze eisen voldoet. Gemaakt om zware programma's in de browser uit te voeren, wordt het nu ook daarbuiten gebruikt via WASI. WASI is een verzameling van afspraken die interactie met bestanden, het internet enz. mogelijk maakt. Op dit moment zijn er echter nog geen afspraken voor het I2C-protocol. Dit protocol, ontworpen in 1982, definieert een manier van praten tussen machines die veel gebruikt wordt in het Internet of Things (IoT) ecosysteem.
 

Eigenlijk hebben zowel Amazon als Siemens intern wel al afspraken gemaakt, maar deze zijn niet open-source, wat dus wil zeggen dat ze niet toegankelijk zijn voor de wijde wereld. Daarom is het belangrijk dat de afspraken die binnen de internationale gemeenschap gemaakt worden wel vrij toegankelijk zijn. Bijkomend is het ook belangrijk dat het zo makkelijk mogelijk moet zijn voor ontwikkelaars om de afspraken te volgen, dit door zo goed mogelijk te integreren met het huidige ecosysteem.

De afspraken

Friedrich Vandenberghe (Universiteit Gent), Merlijn Sebrechts (professor aan Universiteit Gent) en Maximilian Seidler (Siemens) zijn de voortrekkers om binnen de internationale gemeenschap tot een consensus te komen voor dit protocol. De gemeenschap bestaat uit onder andere Siemens, Bosch, Sony, Amazon, Microsoft, Intel en Imec. Een mix van academici en mensen uit de industrie, waardoor er een voortdurende inspanning is om de afspraken volledig gestandaardiseerd te krijgen, alsook de zekerheid dat de afspraken effectief gevolgd zullen worden.
 

Gedurende de scriptie hebben de voortrekkers een voorstel voorgedragen, met ook het bewijs dat dit voorstel effectief werkt. Dit alles werd positief onthaald door de gemeenschap. De voortrekkers hebben ook samen met de andere partijen een aantal criteria afgesproken waaraan de afspraken voor het protocol zeker moeten voldoen. Hierdoor is er zekerheid dat de afspraken niet te specifiek zijn voor een bepaalde computer, alsook de zekerheid dat de afspraken kunnen werken voor extreem simpele computers.

 

Aan dit I2C-voorstel zijn er nog een aantal verfijningen noodzakelijk vooraleer ze gestandaardiseerd kunnen worden. Zo missen er nog implementaties voor de allerzwakste computers en worden er enkele kleine elementen uit het protocol nog niet behandeld.

Bewijs dat de afspraken effectief nuttig zijn

Om aan te tonen dat het voorstel voor het I2C-protocol effectief werkt, hebben de voortrekkers twee simpele applicaties ontwikkeld. De ene kan via I2C de huidige temperatuur uitlezen van een sensor, en een andere kan de huidige tijd tonen op een simpel schermpje. Deze implementaties zijn maximaal anderhalve milliseconde trager dan het uitvoeren in een onveilige omgeving. In sommige gevallen is het uitvoeren in een veilige Wasm omgeving zelfs sneller.

 

Beide implementaties zijn ook nagekeken op een correcte werking. Bij het uitlezen van de temperatuur werd de waarde vergeleken met deze van de versie zonder WebAssembly, en bij het tonen van de tijd werd er gekeken op het scherm of de waarde klopte. Een voorbeeld van dergelijke waarde is te zien op onderstaande afbeelding.

Afbeelding van een Raspberry Pi met een aangekoppeld scherm dat 1234 weergeeft.

Een implementatie in een veilige omgeving met Wasm en WASI kan tot wel vier keer zo veel werkgeheugen nodig hebben als zonder Wasm. In juli 2024 zijn er wel vooruitgangen geboekt in de gemeenschap die het mogelijk zou moeten maken om dit te verlagen, maar tegen dan moest deze scriptie al ingediend zijn.

Bibliografie

 

Alliance, Bytecode. n.d.a. “Cargo-Component.”
https://github.com/bytecodealliance/cargo-component.

———. n.d.b. “ComponentizeJS.”
https://github.com/bytecodealliance/ComponentizeJS.

———. n.d.c. “Componentize-Py.”
https://github.com/bytecodealliance/componentize-py.

———. n.d.d. “Wamr-Rust-Sdk.”
https://github.com/bytecodealliance/wamr-rust-sdk.

———. n.d.e. “Wasm-Micro-Runtime.”
https://github.com/bytecodealliance/wasm-micro-runtime.

———. n.d.f. “Wasm-Tools.”
https://github.com/bytecodealliance/wasm-tools.

———. n.d.g. “Wit-Bindgen.”
https://github.com/bytecodealliance/wit-bindgen.

Aparicio, Jorge. n.d. “Svd2rust.” https://crates.io/crates/svd2rust.

Aptiv. 2020. “What Is over-the-Air (OTA)?” Mobility Insider, June.
https://www.aptiv.com/en/insights/article/what-is-over-the-air-(ota).

Chatain, Baptiste. 2024. “Cyber Resilience Act: MEPs Adopt Plans to
Boost Security of Digital Products.” European Parliament, March.
https://www.europarl.europa.eu/news/en/press-room/20240308IPR18991/cybe….

Clark, Lin. 2019. “Announcing the Bytecode Alliance: Building a Secure
by Default, Composable Future for WebAssembly.”
https://bytecodealliance.org/articles/announcing-the-bytecode-alliance.

———. 2022. “Wasmtime Reaches 1.0: Fast, Safe and Production Ready!”
https://bytecodealliance.org/articles/wasmtime-1-0-fast-safe-and-produc….

Clark, Pam. 2023. “Adobe Photoshop Streamlines Power and Precision for
the Web; Now Includes Widely Popular Adobe Firefly Powered Features.”
https://blog.adobe.com/en/publish/2023/09/27/photoshop-streamlines-powe….

Cole, Adrian. 2023. “Introducing Wazero from Tetrate.”
https://tetrate.io/blog/introducing-wazero-from-tetrate/.

Commission, European. 2023. “EU Cyber Resilience Act.”
https://digital-strategy.ec.europa.eu/en/policies/cyber-resilience-act.

community, The kernel development. n.d. “I2C Device Interface.”
https://www.kernel.org/doc/html/v5.4/i2c/dev-interface.html.

Dahl, Ryan, Bert Belder, and Bartek Iwańczuk. 2020. “Deno 1.0.”
https://deno.com/blog/v1.

Dennis, Jack B., and Earl C. Van Horn. 1966. “Programming Semantics for
Multiprogrammed Computations.” Commun. ACM 9 (3): 143–55.
https://doi.org/10.1145/365230.365252.

Eckel, Benjamin, and Andrea Peruffo. 2024. “Chicory: Creating a
Language-Native Wasm Runtime.”
https://www.youtube.com/watch?v=jrnMhWiV23w.

Embedded, Rust. n.d. “Embedded-Hal.”
https://github.com/rust-embedded/embedded-hal.

emscripten-core. n.d. “Emscripten.”
https://github.com/emscripten-core/emscripten.

fivdi. n.d. “I2c-Bus.” https://github.com/fivdi/i2c-bus/tree/master.

flamegraph-rs. n.d. “Flamegraph.”
https://github.com/flamegraph-rs/flamegraph.

Foundation, OpenJS. n.d. “Node.js.” https://nodejs.org/en.

Gallagher, Daniel. n.d. “Hts221.”
https://github.com/danielgallagher0/hts221.

Gohman, Dan. n.d. “WASI i/o.” https://github.com/WebAssembly/wasi-io.

Group, Embedded Rust Working. 2018. “PSA: Cortex-m Breakage (LLD as the
Default Linker).”
https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/.

———. 2024. “Embedded-Hal V1.0 Now Released!”
https://blog.rust-embedded.org/embedded-hal-v1/.

Harding, Scharon. 2024. “5.25-Inch Floppy Disks Expected to Help Run San
Francisco Trains Until 2030.” Ars Technica, April.
https://arstechnica.com/gadgets/2024/04/5-25-inch-floppy-disks-expected….

Hardware, CHIRIMEN Open. n.d. “CHIRIMEN Drivers.”
https://chirimen.org/chirimen-drivers/.

Heisler, Brook. n.d. “Criterion.rs.”
https://github.com/bheisler/criterion.rs/.

Hickey, Pat, Jakub Konka, Dan Gohman, Sam Clegg, Andrew Brown, Alex
Crichton, Lin Clark, et al. 2020. “WebAssembly/WASI: Snapshot-01.”
Zenodo, December. https://doi.org/10.5281/zenodo.4323447.

Hopkins, Mark. 2024. “Introduction to HID over I2C.”
https://learn.microsoft.com/en-us/windows-hardware/drivers/hid/hid-over….

Huene, Peter, Doug Anderson, and James Mart. n.d.
https://wasmbuilder.app/.

hybridgroup. n.d.a. “Mechanoid.” https://mechanoid.io/.

———. n.d.b. “Wasman.” https://github.com/hybridgroup/wasman.

I2C-Bus Specification and User Manual. 2021. NXP Semiconductors.

“IOI2CInterface.h User-Space.” n.d.
https://developer.apple.com/documentation/iokit/ioi2cinterface_h_user-s….

Jiang, Andy, Bartek Iwańczuk, David Sherret, Kevin Whinnery, Leo
Kettmeir, Matt Mastracci, Nayeem Rahman, Yoshiya Hinosawa, and Marvin
Hagemeister. 2023. “Deno 1.38: HTML Doc Generator and HMR.”
https://deno.com/blog/v1.38#deprecation-of-stdwasi.

Kladov, Alex. n.d. “Once_cell.” https://github.com/matklad/once_cell.

Kurte, Ryan. n.d. “Embedded HAL Compatibility Layer.”
https://github.com/ryankurte/embedded-hal-compat.

Meer, Rene van der. n.d. “RPPAL - Raspberry Pi Peripheral Access
Library.” https://github.com/golemparts/rppal.

Microsoft. n.d. “Debug Adapter Protocol.”
https://microsoft.github.io/debug-adapter-protocol/.

Nethercote, Nicholas. n.d. “Dhat-Rs.”
https://github.com/nnethercote/dhat-rs.

probe-rs. n.d. “Probe-Rs.” https://probe.rs/.

Resources Team, Rust Embedded -. n.d. “Embedded Rust.”
https://github.com/rust-embedded/awesome-embedded-rust.

rp-rs. n.d. “Rp-Pico.” https://github.com/rp-rs/rp-hal-boards.

Shah, Gopal. 2017. “Welcome Home to the New Google Earth.”
https://blog.google/products/earth/welcome-home-new-google-earth/.

System Management Bus (SMBus) Specification. 2022. System Management
Interface Forum.

team, Rust Embedded Linux. n.d. “Linux-Embedded-Hal.”
https://github.com/rust-embedded/linux-embedded-hal.

Vandenberghe, Friedrich. 2024. “Compiling Wamr-Sys for
Thumbv6m-None-Eabi Fails.”
https://github.com/bytecodealliance/wamr-rust-sdk/issues/30.

———. n.d.a. “Hts221.” https://github.com/Zelzahn/hts221.

———. n.d.b. “I2c-Wasm-Components.”
https://github.com/Zelzahn/i2c-wasm-components.

———. n.d.c. “Wasi-Embedded-Hal.”
https://github.com/Zelzahn/wasi-embedded-hal.

Vandenberghe, Friedrich, Lin Clark, and Jef Schilling. n.d. “WASI I2C.”
https://github.com/WebAssembly/wasi-i2c.

Volosatovs, Roman. n.d. “Wit-Deps.”
https://github.com/bytecodealliance/wit-deps.

wasmtime. n.d. “Macro Wasmtime::component::bindgen.”
https://docs.rs/wasmtime/latest/wasmtime/component/macro.bindgen.html.

Wuyts, Yosh. 2024a. “Announcing Jco 1.0.”
https://bytecodealliance.org/articles/jco-1.0.

———. 2024b. “Changes to Rust’s WASI Targets.”
https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html.

Download scriptie (4.45 MB)
Universiteit of Hogeschool
Universiteit Gent
Thesis jaar
2024
Promotor(en)
dr. ing. Merlijn Sebrechts, dr. ing. Tom Goethals, prof. dr. ir. Filip De Turchk, prof. dr. Bruno Volckaert