70 % varnostnih težav v Chromiumu povzročajo napake v pomnilniku

Razvijalci projekta Chromium analizirali 912 visoko tveganih in kritičnih ranljivosti, ugotovljenih v stabilnih izdajah Chroma od leta 2015, in ugotovili, da jih je 70 % povzročila negotovost pomnilnika (napake pri delu s kazalci v kodi C/C++). Polovica teh težav (36.1 %) je posledica dostopov do medpomnilnika po sprostitvi pomnilnika, povezanega z njim (use-after-free).

70 % varnostnih težav v Chromiumu povzročajo napake v pomnilniku

Pri načrtovanju Chromiuma je bilo prvotno položeno, da se lahko v kodi pojavijo napake, zato je bil velik poudarek dan uporabi izolacije peskovnika za omejevanje posledic ranljivosti. Trenutno so možnosti uporabe te tehnologije dosegle mejo svojih zmogljivosti in nadaljnja drobitev na procese je z vidika porabe virov nepraktična.

Da bi ohranil varnost kodne baze, Google tudi uveljavlja "pravilo dveh“, v skladu s katerim mora katera koli dodana koda izpolnjevati največ dva od treh pogojev: delo z nepreverjenimi vhodnimi podatki, uporaba nevarnega programskega jezika (C/C++) in delovanje s povišanimi privilegiji. To pravilo pomeni, da mora biti koda za obdelavo zunanjih podatkov zmanjšana na minimalne privilegije (izolirana) ali napisana v varnem programskem jeziku.

Za dodatno izboljšanje varnosti kodne baze je bil uveden projekt za preprečevanje pojavljanja pomnilniških napak v kodni bazi. Obstajajo trije glavni pristopi: ustvarjanje knjižnic C++ s funkcijami za varno delovanje pomnilnika in razširitev obsega zbiralnika smeti z uporabo mehanizmov za zaščito strojne opreme. Mte (Memory Tagging Extension) in pisanje komponent v jezikih, ki zagotavljajo varno delo s pomnilnikom (Java, Kotlin, JavaScript, Rust, Swift).

Predvidoma bo delo usmerjeno na dve področji:

  • Pomembna sprememba razvojnega procesa C++, ki ne izključuje negativnega vpliva na zmogljivost (dodatna preverjanja meja in zbiranje smeti). Namesto neobdelanih kazalcev je predlagana uporaba tipa MiraclePtr, ki vam omogoča, da zmanjšate izkoriščene napake brez uporabe na zrušitve, ki ne predstavljajo varnostne grožnje, brez opaznega negativnega vpliva na zmogljivost, porabo pomnilnika in stabilnost.
  • Uporaba jezikov, zasnovanih za izvajanje varnostnih preverjanj pomnilnika v času prevajanja (odpravila bo negativen vpliv na zmogljivost takih preverjanj med izvajanjem kode, vendar bo povzročila dodatne stroške za organizacijo interakcije kode v novem jeziku s kodo v C++).

Uporaba pomnilniško varnih knjižnic je najenostavnejši, a tudi manj učinkovit način. Prepisovanje kode v Rust je ocenjeno kot najučinkovitejši, a tudi zelo drag način.

70 % varnostnih težav v Chromiumu povzročajo napake v pomnilniku

Vir: opennet.ru

Dodaj komentar