70% problema sa bezbednošću u Chromium-u uzrokuju greške u radu sa memorijom

Razvijalci projekta Chromium so analizirali 912 nevarnih in kritičnih ranljivosti, odkritih v stabilnih izdajah Chromov od leta 2015, in prišli so do zaključka, da je 70% od njih povzročilo negotovo ravnanje s spominom (napake pri obravnavanju kazalcev v C/C++). Polovica teh težav (36,1%) izhaja iz dostopov do pomnilnika po njegovem sprostitvi (use-after-free).

70% problema sa bezbednošću u Chromium-u uzrokuju greške u radu sa memorijom

Pri načrtovanju Chromiuma je bilo izhodiščno predvideno, da v kodi niso izključene napake, zato se je velik poudarek dajal uporabi peskovnika za omejevanje posledic rabe ranljivosti. Danes so možnosti uporabe te tehnologije dosegle svoje meje in nadaljnje razbijanje na procese ni smiselno z vidika porabe virov.

Za vzdrževanje varnosti kode Google prav tako uporablja "pravilo dveh", po katerem vsak dodan koda izpolnjuje največ dve od treh pogojev: delo z nepreverjenimi vhodnimi podatki, uporaba nevarnega programskega jezika (C/C++) in izvajanje z višjimi privilegiji. Iz tega pravila sledi, da mora biti kod za obravnavo zunanjih podatkov bodisi omejen na minimalne privilegije (izoliran) bodisi napisan v varnem programskem jeziku.

Za nadaljnje krepitev varnosti kode je bil zagnan projekt za preprečevanje napak pri ravnanju s spominom v kodi. Izpostavljajo se tri osnovne pristope: ustvarjanje knjižnic C++ s funkcijami za varno delo s spominom in razširitev uporabe zbiralnika smeti, uporaba strojnih zaščitnih mehanizmov MTE (Memory Tagging Extension) in pisanje komponent v jezikih, ki zagotavljajo varno delo s spominom (Java, Kotlin, JavaScript, Rust, Swift).

Pričakuje se, da se bo delo osredotočilo na dve usmeritvi:

  • Znatna sprememba procesa razvoja v C++, ki ne izključuje negativnega vpliva na zmogljivost (dodatne omejitve in zbiranje smeti). Namesto surovih kazalcev se predlaga uporaba tipa MiraclePtr, ki omogoča, da se izkoriščene napake razreda use-after-free zmanjšajo na neškodljive zrušitve, brez očitnega negativnega vpliva na zmogljivost, porabo pomnilnika in stabilnost.
  • Uporaba jezika, zasnovanih na preverjanju varnosti dela s pomnilnikom med prevajanjem (kar bo odpravilo negativne vplive na uspešnost, značilne za takšna preverjanja med izvajanjem kode, a bo privedlo do dodatnih stroškov za organizacijo medsebojnega delovanja kode v novem jeziku s kodo v C++).

Uporaba knjižnic za varno delo s pomnilnikom je najbolj preprost, a manj učinkovit pristop. Prepisovanje kode v Rust pa se ocenjuje kot najučinkovitejši, a zelo drag postopek.

70% problema sa bezbednošću u Chromium-u uzrokuju greške u radu sa memorijom

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster