Det kommer att ta decennier innan gammal osäker C- och C++- kod är migrerad till Rust. Men islänningen Úlfar Erlingsson ger dig fyra billiga knep för att minnessäkra din gamla kod – utan att ens peta på den.
Hur säker är han på att hans recept fungerar? Så säker att han lovar en öl!
– Eller skickar en personlig check, som Knuth*, till den som hittar en C- eller C++-bugg – gammal eller ny – som kan utnyttjas för fjärrkodexekvering trots de här fyra skydden.
En stor andel av de allvarligaste cyberattackerna sker genom att angriparen lurar processorn att exekvera alternativ programkod. Úlfar Erlingsson pekar ut fyra platser där den alternativa programkoden kan stoppas in, och påpekar att det redan finns verktyg som kan användas för att detektera eller hindra att det sker.
Han publicerade sina tips på Arxiv i torsdags. Det är inte ens hans egna tips. Han har sammanställt dem och sätter sin underskrift på att kombinationen är en fungerande strategi. Han pekar bland annat på att skydden gjort stor skillnad på hans tidigare arbetsgivare Apple.
Här är det du ska göra.
- Skydda stacken (Stack Integrity)
- Skydda kontrollflödet (Control-Flow Integrity, CFI)
- Skydda högen (Heap Data Integrity)
- Skydda pekarna (Pointer Integrity)
Inget av skydden är nya. Elektroniktidningen skrev exempelvis så sent som idag om tyska Emproof, som bland annat erbjuder stackskydd.
Vi skrev nyligen även om hårdvarulösningar för pekarskydd. Men det som gör Úlfar Erlingssons fixar enkla är att de görs i mjukvara och att de typiskt inte ens rör din existerande programkod. Du kan införa dem idag.
Det enda du i bästa fall behöver göra är att kompilera om din kod med rätt flaggor, eller byta ut verktyg. Detta gäller om du arbetar i miljöer baserade på LLVM. Även Windows (MSVC) och GCC ger visst stöd.
Úlfar Erlingsson har jobbat med cybersäkerhet och sekretess i hela sin karriär. Idag i Googles moln. Tidigare på bland annat Apple och Microsoft.
FOTNOT
* Knuth är Donald Knuth som sedan 1968 publicerar en noggrann enmans-encyklopedi över datavetenskapen, med en liten belöning till alla som hittar fel.