70 % av sikkerhetsproblemene i Chromium er forårsaket av minnefeil

Utviklere av Chromium-prosjektet analysert 912 høyrisiko og kritiske sårbarheter identifisert i stabile utgivelser av Chrome siden 2015, og konkluderte med at 70 % av dem var forårsaket av minneusikkerhet (feil ved arbeid med pekere i C/C++-kode). Halvparten av disse problemene (36.1%) er forårsaket av tilgang til bufferen etter frigjøring av minnet knyttet til den (bruk-etter-fri).

70 % av sikkerhetsproblemene i Chromium er forårsaket av minnefeil

Ved utformingen av Chromium var det i utgangspunktet lagt ned, at det er mulig for feil i koden, så det ble lagt stor vekt på bruk av sandkasseisolasjon for å begrense konsekvensene av sårbarheter. Foreløpig har mulighetene for å bruke denne teknologien nådd grensen for deres evner, og ytterligere fragmentering i prosesser er upraktisk fra et ressursforbrukssynspunkt.

For å opprettholde sikkerheten til kodebasen, håndhever Google også "to-regel", ifølge hvilken enhver tilføyd kode ikke må oppfylle mer enn to av tre betingelser: arbeide med uvaliderte inngangsdata, bruke et usikkert programmeringsspråk (C/C++) og kjøre med forhøyede rettigheter. Denne regelen innebærer at koden for behandling av eksterne data enten må reduseres til minimale privilegier (isolert) eller skrives på et sikkert programmeringsspråk.

For ytterligere å øke sikkerheten til kodebasen er det lansert et prosjekt for å forhindre at minnefeil dukker opp i kodebasen. Det er tre hovedtilnærminger: å lage C++-biblioteker med funksjoner for sikker drift av minne og utvide omfanget av søppelsamleren ved å bruke maskinvarebeskyttelsesmekanismer MTE (Memory Tagging Extension) og skrivekomponenter på språk som sikrer trygt arbeid med minne (Java, Kotlin, JavaScript, Rust, Swift).

Det forventes at arbeidet vil bli fokusert på to områder:

  • Betydelig endring i C++-utviklingsprosessen, som ikke utelukker en negativ innvirkning på ytelsen (ytterligere grensekontroller og søppelinnsamling). I stedet for råpekere foreslås det å bruke typen MiraclePtr, som lar deg redusere utnyttbare bruk-etter-frie feil til krasj som ikke utgjør en sikkerhetstrussel, uten merkbar negativ innvirkning på ytelse, minneforbruk og stabilitet.
  • Bruken av språk designet for å utføre minnesikkerhetskontroller på kompileringstidspunktet (vil eliminere den negative innvirkningen på ytelsen som ligger i slike kontroller under kjøring av kode, men vil føre til ekstra kostnader for å organisere samspillet mellom kode på et nytt språk med kode i C++).

Å bruke minnesikre biblioteker er den enkleste, men også mindre effektive måten. Omskriving av kode i Rust er vurdert som den mest effektive, men også veldig kostbare måten.

70 % av sikkerhetsproblemene i Chromium er forårsaket av minnefeil

Kilde: opennet.ru

Legg til en kommentar