Vooraanstaande Amerikaanse overheidsdiensten hebben richtlijnen gepubliceerd waarin ze softwareontwikkelaars dringend oproepen over te stappen op memory-safe-programmeertalen. Het rapport benadrukt dat geheugenkwetsbaarheden ernstige risico’s vormen voor de nationale veiligheid en kritieke infrastructuur.
Het zijn de Amerikaanse Cybersecurity & Infrastructure Security Agency (Cisa) en de National Security Agency (NSA) die in een rapport de oproep doen. Memory safety verwijst naar de mate waarin programmeertalen bescherming bieden tegen kwetsbaarheden die ontstaan door verkeerd geheugenbeheer. Talen zoals Rust, Go, C#, Java, Swift, Python en JavaScript ondersteunen geautomatiseerd geheugenbeheer of implementeren compile-time checks om memory-gerelateerde fouten te voorkomen. Veel van deze talen zitten ook in de lift.
Code
C en C++, twee van de meest gebruikte programmeertalen, zijn evenwel niet standaard memory safe. Hoewel ontwikkelaars deze veiliger kunnen maken door best practices en statische analysetools, wordt code niet altijd met die zorgvuldigheid geïmplementeerd. Bovendien kunnen dergelijke zogenaamde veilige talen nog steeds onveilige C/C++-libraries importeren via zogenaamde foreign function interface.
De impact van memory safety-problemen is aanzienlijk. Google en Microsoft hebben het merendeel van de kwetsbaarheden in grote softwareprojecten toegeschreven aan memory safety-fouten. In Google’s Android was negentig procent van de high-severity-kwetsbaarheden in 2018 het gevolg van memory safety bugs. De beruchte Heartbleed-fout in OpenSSL was eveneens het resultaat van een vergelijkbaar probleem.
Techindustrie
Nieuw is de discussies niet. Meer, de techindustrie is ook al begonnen met de transitie. Microsoft-executives riepen in 2022 op tot het schrijven van nieuwe applicaties in memory safe-talen zoals Rust. Google slaagde erin memory safety-kwetsbaarheden in Android tegen 2024 terug te brengen tot 24 procent van het totaal.
De overgang verloopt niet zonder weerstand. In de Linux-kernelcommunity ontstond het afgelopen jaar controverse over pogingen om Rust-gebaseerde drivers te integreren. Ook C/C++-gemeenschappen werken aan alternatieven zoals TrapC, FilC en Safe C++ om de memory safety-beloften van Rust te evenaren.
De overheid op haar beurt ondersteunt deze transitie met projecten zoals Tractor van Defense Advanced Research Projects Agency, dat een geautomatiseerde methode ontwikkelt om C-code naar Rust te vertalen.
Het Cisa/NSA-rapport erkent dat memory safe-talen geen wondermiddel zijn en dat de transitie significante uitdagingen met zich meebrengt, vooral voor organisaties met grote bestaande codebases. Al is het rapport ook duidelijk: ‘Het gebruik van memory safe-programmeertalen wordt beschouwd als een belangrijke strategie om de beveiliging van software te verbeteren. En het risico op kostbare beveiligingsincidenten te verminderen.’
Zolang de Amerikaanse overheid het gebruik van memory-safe talen niet VERPLICHT stelt zullen veel bedrijven hun schouders ophalen en gewoon doorgaan met wat ze nu doen. Een (sterke) oproep alleen is niet voldoende.
Men had op zijn minst kunnen voorsorteren dat de Amerikaanse overheid van plan is om in de toekomst het gebruik van memory-safe talen VERPLICHT te stellen. Dan kunnen leveranciers zich hier op voorbereiden zonder dat ze nu op stel en sprong alles overhoop hoeven halen.
Ik vind de discussie tussen deterministic memory management (Rust) en garbage collection (Java, C#) onzinnig. Garbage collection is afdoende voor 90% van de toepassingen. Alleen voor heel specialistische tijdkritische applicaties is Rust met zijn deterministisch geheugenmanagement nodig.