70% sigurnosnih problema u Chromiumu uzrokovano je pogreškama memorije

Programeri Chromium projekta analizirani 912 visokorizičnih i kritičnih ranjivosti identificiranih u stabilnim izdanjima Chromea od 2015. i zaključeno je da je 70% njih uzrokovano nesigurnošću memorije (pogreške pri radu s pokazivačima u C/C++ kodu). Polovica ovih problema (36.1%) uzrokovana je pristupima međuspremniku nakon oslobađanja memorije povezane s njim (use-after-free).

70% sigurnosnih problema u Chromiumu uzrokovano je pogreškama memorije

Prilikom dizajniranja Chromiuma u početku je bilo položen, da je moguće da se greške pojave u kodu, stoga je veliki naglasak stavljen na korištenje izolacije sandboxa kako bi se ograničile posljedice ranjivosti. Trenutno su mogućnosti korištenja ove tehnologije dosegle granicu svojih mogućnosti te je daljnja fragmentacija na procese nepraktična sa stajališta potrošnje resursa.

Kako bi održao sigurnost kodne baze, Google također provodi "pravilo dvojke“, prema kojem bilo koji dodani kod ne smije ispunjavati više od dva od tri uvjeta: rad s neprovjerenim ulaznim podacima, korištenje nesigurnog programskog jezika (C/C++) i rad s povišenim privilegijama. Ovo pravilo implicira da kod za obradu vanjskih podataka mora biti ili sveden na minimalne privilegije (izoliran) ili napisan u sigurnom programskom jeziku.

Kako bi se dodatno poboljšala sigurnost kodne baze, pokrenut je projekt za sprječavanje pojavljivanja memorijskih pogrešaka u kodnoj bazi. Postoje tri glavna pristupa: stvaranje C++ biblioteka s funkcijama za siguran rad memorije i proširenje opsega skupljača smeća, korištenjem hardverskih zaštitnih mehanizama MTE (Memory Tagging Extension) i pisanje komponenti na jezicima koji osiguravaju siguran rad s memorijom (Java, Kotlin, JavaScript, Rust, Swift).

Očekuje se da će rad biti usmjeren na dva područja:

  • Značajna promjena u procesu razvoja C++, koja ne isključuje negativan utjecaj na performanse (dodatne provjere granica i skupljanje smeća). Umjesto neobrađenih pokazivača, predlaže se korištenje tipa MiraclePtr, koji vam omogućuje smanjenje iskorištavajućih grešaka korištenja nakon oslobađanja na padove koji ne predstavljaju sigurnosnu prijetnju, bez primjetnog negativnog utjecaja na performanse, potrošnju memorije i stabilnost.
  • Korištenje jezika dizajniranih za izvođenje sigurnosnih provjera memorije tijekom kompajliranja (uklonit će negativan utjecaj na izvedbu svojstven takvim provjerama tijekom izvođenja koda, ali će dovesti do dodatnih troškova za organiziranje interakcije koda na novom jeziku s kodom u C++).

Korištenje memorijski sigurnih biblioteka je najjednostavniji, ali i manje učinkovit način. Prepisivanje koda u Rustu ocijenjeno je kao najučinkovitiji, ali i vrlo skup način.

70% sigurnosnih problema u Chromiumu uzrokovano je pogreškama memorije

Izvor: opennet.ru

Dodajte komentar