image

VS wijst softwarebedrijven op 'bad practices': gebruik geen C en C++

donderdag 17 oktober 2024, 11:23 door Redactie, 12 reacties

De Amerikaanse overheid heeft softwarebedrijven en -ontwikkelaaars gewezen op 'bad practices' bij het ontwikkelen van producten, waaronder het gebruik van programmeertalen C en C++ als er alternatieve 'memory-safe' programmeertalen beschikbaar zijn. Begin dit jaar riep het Witte Huis programmeurs ook al op om 'memory-safe' programmeertalen te gebruiken. De nu verschenen adviezen van de FBI en het Amerikaanse Cybersecurity and Infrastructure Security Agency (CISA) zijn niet bindend.

Met de publicatie 'Product Security Bad Practices' geven de FBI en het CISA naar eigen zeggen een overzicht van risicovolle methodes en werkwijzes, met name voor softwarebedrijven die software voor de vitale infrastructuur en nationale veiligheid ontwikkelen. Er wordt specifiek gekeken naar producteigenschappen, beveiligingsfuncties en organisatorische processen en beleid die beschrijven hoe een softwarebedrijf met security omgaat.

Geen C en C++

Concreet wordt geadviseerd geen 'memory-unsafe' programmeertalen zoals C en C++ te gebruiken als er alternatieve 'memory-safe' programmeertalen beschikbaar zijn. Het gebruik van 'memory-unsafe' programmeertalen wordt door de FBI en het CISA omschreven als gevaarlijk en vergroot de risico voor de nationale veiligheid, nationale economische veiligheid, volksgezondheid en publieke veiligheid 'aanzienlijk'.

Voor bestaande software die in een 'memory-unsafe' programmeertaal is gemaakt zou uiterlijk 1 januari 2026 een roadmap beschikbaar moeten zijn waarin de ontwikkelaar beschrijft hoe er naar een 'memory-safe' programmeertaal wordt overgestapt of hardwaremogelijkheden worden gebruikt om memory safety kwetsbaarheden te voorkomen. Het gaat dan bijvoorbeeld om buffer overflows, waardoor een aanvaller in het ergste gevalle willekeurige code op systemen kan uitvoeren.

Andere zaken waarvoor de Amerikaanse overheid waarschuwt is gebruikersinvoer in SQL query strings, aangezien dit tot SQL Injection kan leiden, de aanwezigheid van standaard wachtwoorden, de aanwezigheid van bekende misbruikte kwetsbaarheden, de aanwezigheid van opensourcesoftware met bekende te misbruiken kwetsbaarheden, een gebrek aan multifactorauthenticatie (MFA), het niet tijdig publiceren van CVE-nummers voor gevonden kwetsbaarheden en het niet publiceren van vulnerability disclosure beleid voor het melden van kwetsbaarheden.

Reacties (12)
Vandaag, 11:47 door Anoniem
Feit is dat linux voor een groot deel uit C code bestaat. En dat je dat niet zomaar even naar een memorysafe taal omzet met een roadmap.

Ook is oude code veiliger als nieuwe code die net geschreven is. Dus tien jaar oude C code is niet zo'n probleem wanneer je erover nadenkt.
Vandaag, 12:02 door Anoniem
Gebruik daar bovenop besturingsystemen die zulke memory overflow exploits mitigeren door te zorgen dat programma's niet onveilig worden uitgevoert, ongeacht of dat het desbetreffende werking van het programma in de weg zit.
Als je de software niet kunt patchen kun je de omgeving waarin de software draait patchen.
Uiteraard is dit makkelijker te doen in open source omgevingen dan te wachten tot Microsoft of Apple het een keertje voor je doet...
GrapheneOS heeft allerlei mitigaties om dit te voorkomen zoals MTE, (Pixel 8 en hoger) hardened memory allocator en meer.
Op desktop systemen kan een VM goed helpen, deze sandboxing kunnen systemen minder snel compromiteren, gebruik besturingsystemen zoals QubesOS.
Correct me if I'm wrong.
Vandaag, 12:51 door Anoniem
Door Anoniem: Feit is dat linux voor een groot deel uit C code bestaat. En dat je dat niet zomaar even naar een memorysafe taal omzet met een roadmap.

Ook is oude code veiliger als nieuwe code die net geschreven is. Dus tien jaar oude C code is niet zo'n probleem wanneer je erover nadenkt.

Dat geld voor elk OS. Windows, Mac, Unix, Linux, BSD
Vandaag, 13:00 door Anoniem
de aanwezigheid van opensourcesoftware met bekende te misbruiken kwetsbaarheden
Hoezo geldt dit niet voor closed source software?
Vandaag, 13:13 door Anoniem
Grappig is wel dat Rust "memory-unsafe" kan voorkomen maar een van de laatste CVE's voor Firefox maakt hier dus misbruik van.
En van wie is Rust? Rust began as a personal project in 2006 by Mozilla Research employee Graydon Hoare.

Daarom is het grappig :p
Vandaag, 15:34 door Anoniem
Door Anoniem: Feit is dat linux voor een groot deel uit C code bestaat. En dat je dat niet zomaar even naar een memorysafe taal omzet met een roadmap.

Ook is oude code veiliger als nieuwe code die net geschreven is. Dus tien jaar oude C code is niet zo'n probleem wanneer je erover nadenkt.
Het beste voorbeeld dat ik zo snel kan bedenken is de OpenSSL heartbleed bug (https://heartbleed.com).
Ook wel CVE-2014-0160 (https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2014-0160).
"allows remote attackers to obtain sensitive information from process memory via crafted packets that trigger a buffer over-read, as demonstrated by reading private keys, related to d1_both.c and t1_lib.c"

Ofwel: jarenlange exposure van open source C-code recht in het gezicht van experts die denken dat ze goede code hadden geschreven! En toch zijn die mensen geen God, want ze hebben zich vergist, met hele grote gevolgen!

Dan is er nu een methodiek van 'memory safe' programmeertalen als Rust, met een garantie dat een hele categorie bugs niet voor kan komen. En dan zijn er genoeg programmeurs die C / C++ programmeren die geen zin hebben om hun expertise te verruilen voor een lagere instap in een andere taal. Logisch, maar niet veilig.
Gelukkig speelt Rust met iedereen: je kan onveilige code in 'unsafe {}' blokken plaatsen. Of je linkt een C of C++ library, dan ben je er ook, dus ik snap dat probleem niet.
Er zijn ook verstandiger mensen, zo is er een project om alle core utilities in Linux te herschrijven met een memory-safe programmeertaal: https://github.com/uutils/coreutils. Ook big tech gebruikt al langer Rust om hun OS-en veiliger te maken, bijvoorbeeld Google: https://security.googleblog.com/2021/04/rust-in-android-platform.html

Overigens is Rust niet meer van Mozilla, maar van heel big tech.
https://blog.rust-lang.org/2020/08/18/laying-the-foundation-for-rusts-future.html

De conclusie is dat C en C++ in snel tempo dino's aan het worden zijn. Meldingen uit de VS als hierboven beschreven versnellen dat proces nog eens extra. Het is aanpassen of uitsterven (kan even duren, zie de mainframe knakkers met FORTRAN). Ik kan er zelf niet mee zitten want ik zit aan de veilige kant door met Rust te werken.
Vandaag, 15:43 door Anoniem
Nog een aardig artikel, in 2014 werd er al uitgebreid over geschreven: https://ieeexplore.ieee.org/abstract/document/6547101
Vandaag, 16:43 door Anoniem
Door Anoniem: Ofwel: jarenlange exposure van open source C-code recht in het gezicht van experts die denken dat ze goede code hadden geschreven! En toch zijn die mensen geen God, want ze hebben zich vergist, met hele grote gevolgen!

Van https://www.theregister.com/2024/09/25/google_rust_safe_code_android/:
The good news for organizations with a lot of unsafe legacy code is that rewriting old code in new languages probably isn't necessary. As Vander Stoep and Rebert point out, vulnerabilities have half-life – they decay over time as code evolves. "For example, based on the average vulnerability lifetimes, 5-year-old code has a 3.4x (using lifetimes from the study) to 7.4x (using lifetimes observed in Android and Chromium) lower vulnerability density than new code," they said.

Schrijf en compile je je operating system zelf? Omdat je aan de veilige kant zit met Rust?

Anoniem 11:47
Vandaag, 16:51 door Anoniem
Door Anoniem:
Ook is oude code veiliger als nieuwe code die net geschreven is. Dus tien jaar oude C code is niet zo'n probleem wanneer je erover nadenkt.
Er worden anders genoeg buffer overflow gerelateerde bugs gevonden in code van 10 jaar en ouder. Grappig, wanneer het een probleem met een PHP applicatie betreft staan mensen direct klaar om die taal totaal de grond in te boren (waarbij opvalt dat er nogal eens geschermd wordt met gebreken die al > 10 jaar niet meer aanwezig zijn), maar wanneer eindelijk eens de zwakke plekken van C en C++ worden benoemd vegen we dat maar onder het tapijt nadat code een bepaalde leeftijd heeft bereikt?
Vandaag, 16:57 door Anoniem
Door Anoniem:
Door Anoniem: Feit is dat linux voor een groot deel uit C code bestaat. En dat je dat niet zomaar even naar een memorysafe taal omzet met een roadmap.

Ook is oude code veiliger als nieuwe code die net geschreven is. Dus tien jaar oude C code is niet zo'n probleem wanneer je erover nadenkt.
Het beste voorbeeld dat ik zo snel kan bedenken is de OpenSSL heartbleed bug (https://heartbleed.com).
Ook wel CVE-2014-0160 (https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2014-0160).
"allows remote attackers to obtain sensitive information from process memory via crafted packets that trigger a buffer over-read, as demonstrated by reading private keys, related to d1_both.c and t1_lib.c"

Ofwel: jarenlange exposure van open source C-code recht in het gezicht van experts die denken dat ze goede code hadden geschreven! En toch zijn die mensen geen God, want ze hebben zich vergist, met hele grote gevolgen!

Je moet even beter onderzoek doen dan zo maar wat roepen om rust te promoten.
Het ging om een extension voor OpenSSL geschreven door een PhD student (geen experts dus die dachten dat ze goede code hadden geschreven zoals jij beweert) . Daarnaast is deze code alleen door Stephen Henson (1 van de 4 core developers) ge-reviewd. Die fout heeft er 2 jaar ingezeten en dus geen jaren!
Het gaat om een ingewikkelde library. Het probleem was te weinig dedicated full-time resources. Zeg maar zoals zo vaak in Nederland wel willen gebruiken maar betalen of bijdragen ho maar.
Vandaag, 17:09 door majortom
Probleem is dat een memory-safe programmeertaal maar een fractie van het aantal securityproblemen oplost (buffer overflow). De echte problemen blijven er gewoon inzitten: dit zorgt voor schijnveiligheid.
Vandaag, 17:14 door Anoniem
Door majortom: Probleem is dat een memory-safe programmeertaal maar een fractie van het aantal securityproblemen oplost (buffer overflow). De echte problemen blijven er gewoon inzitten: dit zorgt voor schijnveiligheid.
Slechte programmeurs schrijven security bugs in iedere programmeertaal.

En dat terwijl een competente C++ programmeur weet welke subset van C++ veilig te gebruiken is (en hoe je dat doet).
Reageren
Ondersteunde bbcodes
Bold: [b]bold text[/b]
Italic: [i]italic text[/i]
Underline: [u]underlined text[/u]
Quote: [quote]quoted text[/quote]
URL: [url]https://www.security.nl[/url]
Config: [config]config text[/config]
Code: [code]code text[/code]

Je bent niet en reageert "Anoniem". Dit betekent dat Security.NL geen accountgegevens (e-mailadres en alias) opslaat voor deze reactie. Je reactie wordt niet direct geplaatst maar eerst gemodereerd. Als je nog geen account hebt kun je hier direct een account aanmaken. Wanneer je Anoniem reageert moet je altijd een captchacode opgeven.