– Jeg tror æraen med ikke-minnesikre språk er i ferd med å ta slutt. Det er ikke slutten ennå, men kanskje begynnelsen på slutten.
Det sa Helge Penne under et foredrag på NDC TechTown på Kongsberg denne uken. Penne har jobbet med programvareutvikling i mer enn 30 år, for det meste i C++, og har de siste 11 årene jobbet i Thales Norway.
– Jeg er ingen Rust undercover-agent som prøver å kritisere C++, kunne Penne forsikre tilhørerne om.
Likevel mener han at C++ ikke er laget for å håndtere dagens sikkerhetstrusler, og at det virker som at språket ikke er i stand til å tilpasse seg. Mange av feilene er kanskje ikke mulig å fikse, tror han.
– Er C++ den nye COBOL-en? Ja, til slutt er det det – men det vil ta tid.
Hvis folk ikke tror språket kan møte utfordringene, vil de begynne å bruke noe annet, advarte han.
Under angrep fra flere hold
Penne refererte i sitt foredrag til statistikk som viser at rundt 70 prosent av sårbarheter i programvare er relatert til minnesikkerhet.
– Vi har et minnesikkerhetsproblem, slo han fast.
Problemet har ifølge Penne vært kjent lenge, men det har vært liten fremgang i arbeidet med å løse det. Selv om C++ har blitt modernisert på et overordnet nivå, har det vært gjort lite for å gjøre det sikrere utover det.
Han spurte seg om hvorvidt C++-miljøet dermed har oppført seg uansvarlig, og ikke i tråd med det ansvaret man har overfor samfunnet. Yrkesgrupper som oppfører seg uansvarlig, vil bli regulert, sa han.
Og regulering er nettopp det som kan være i ferd med å skje: Blant annet NSA og Det Hvite hus har gått ut og anbefalt at bransjen migrerer vekk fra C og C++ til minnesikre språk som Rust.
NSA mener du bør droppe C/C++ til fordel for språk som C#, Java, Go og Rust
I desember i fjor kom også NSA med en rapport der de oppfordret bedrifter til å skrive og publisere planer for hvordan de har tenkt å "bli minnesikre" og også at programvareleverandører må utnevne en person som skal ha ansvaret for å bli kvitt sårbarheter knyttet til minnesikkerhet.
– Dette er ikke noe vagt, dette er så nær regulering som det er mulig å komme uten å faktisk gjøre det, sa Penne.
«Er du smart nok til å lære C++, er du smart nok til å lære også Rust.»
Må fjerne ting fra språket
Ifølge Penne kan det altså komme krav om å migrere til minnesikre språk, og bransjen risikerer i verste fall også straff. Derfor tror han at alle fremtidige programmeringsspråk vil være minnesikre.
Så hvorfor ikke gjøre C++ til et minnesikkert språk? Grunnen er at det er overraskende vanskelig å få det til.
I foredraget gikk Penne gjennom en del ting han mente kunne gjøres for å gjøre C++ mer minnesikkert. Men for å til det må noe fjernes fra språket.
– Vi må forby peker-aritmetikk!
Penne argumenterte også for at det må legges til bedre "range-checking" til standardbiblioteket for å unngå "out of bounds"-feil – altså at et program får tilgang til minne det ikke skulle ha hatt tilgang til. Slike sjekker er riktignok på plass allerede, men er noe som må aktiveres manuelt. Veldig mange vet ikke at det eksisterer, eller bruker det ikke.
– Minnesikkerhet må være standard! Hvis du gjør det til valgfritt, så vil ingen bruke det!
Vil knekke kode
Mye av det i C++ som kan gi sårbarheter, er ting som brukes mye – og det er ikke bare å fjerne det, eller forby bruken av det – det vil "brekke" en masse kode rundtomkring.
– Du kan bruke Rust sin "borrow checker". Det er kanskje det eneste som fungerer, du vil jo ikke ha "garbage collection".
Mange av sårbarhetene som finnes kan avdekkes ved hjelp av statisk analyse av koden. Men ikke alt. En del ting trenger du kanskje et nytt standardbibliotek for å løse, ifølge Penne.
Penne gikk også gjennom andre tiltak som gjøres for å øke minnesikkerheten, inkludert hva som kommer i nye versjoner av C++ fremover. Men dette er langt fra nok, mener han.
Mange er ifølge Penne ikke villige til å la sikkerhetsforbedringer gå på bekostning av ytelse, noe han mente man burde gjøre – ettersom moderne kompilatorer uansett er veldig gode på å optimalisere.
Full C mot Rust-krangel i Linux, utvikler trekker seg
Du er smart nok for Rust!
– Kan vi bli minnesikre? Ja, men det krever en masse veldig kompliserte ting. Vi trenger en slags borrow checker, og vi trenger å forby referanser og pekere, som vil brekke alt.
Og alt vil måtte være skrudd på som standard. I praksis vil det være et nytt språk, mente Penne.
– Jeg skulle ønske vi fikk en koordinert satsning på sikkerhetsforbedringer, og at sikkerhetsforbedringer blir prioritert. Det er det viktigste av alt.
Han frykter imidlertid at vi ikke vil se noen virkelig store forbedringer før om minst 5-6 år.
Av alternativer til C++ nevnte Penne både Go, Swift og Java – og selvfølgelig Rust. Og det er Rust som kanskje er det mest aktuelle alternativet for de fleste C++-utviklere, selv om det kanskje kan være noe vanskeligere å lære, mente han.
– Men min erfaring er at også C++ er vanskelig å lære. Er du smart nok til å lære C++, er du smart nok til å lære også Rust.