70% sigurnosnih problema u Chromiumu uzrokovano je greškama u memoriji

Programeri Chromium projekta analiziran 912 visokorizičnih i kritičnih ranjivosti identifikovanih u stabilnim izdanjima Chrome-a od 2015. godine i zaključeno da je 70% njih uzrokovano nesigurnošću memorije (greške pri radu s pokazivačima u C/C++ kodu). Polovina ovih problema (36.1%) uzrokovana je pristupima baferu nakon oslobađanja memorije povezane s njim (use-after-free).

70% sigurnosnih problema u Chromiumu uzrokovano je greškama u memoriji

Prilikom dizajniranja Chromiuma to je bilo u početku položeno, da je moguće da se pojave greške u kodu, pa je veliki naglasak stavljen na korištenje sandbox izolacije kako bi se ograničile posljedice ranjivosti. Trenutno su mogućnosti korišćenja ove tehnologije dostigle granicu svojih mogućnosti i dalja fragmentacija u procese je nepraktična sa stanovišta potrošnje resursa.

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

Kako bi se dodatno poboljšala sigurnost kodne baze, pokrenut je projekat za sprječavanje pojavljivanja grešaka u memoriji u bazi koda. Postoje tri glavna pristupa: stvaranje C++ biblioteka sa funkcijama za siguran rad memorije i proširenje opsega sakupljača smeća, koristeći mehanizme hardverske zaštite Mte (Memory Tagging Extension) i komponente za pisanje na jezicima koji osiguravaju siguran rad sa memorijom (Java, Kotlin, JavaScript, Rust, Swift).

Očekuje se da će rad biti fokusiran u dvije oblasti:

  • Značajna promjena u C++ razvojnom procesu, što ne isključuje negativan utjecaj na performanse (dodatne provjere granica i sakupljanje smeća). Umjesto sirovih pokazivača, predlaže se korištenje tipa MiraclePtr, koji vam omogućava da svedete greške koje se mogu iskoristiti bez upotrebe na padove koji ne predstavljaju sigurnosnu prijetnju, bez primjetnog negativnog utjecaja na performanse, potrošnju memorije i stabilnost.
  • Upotreba jezika dizajniranih za obavljanje provjera sigurnosti memorije u vrijeme kompajliranja (eliminiraće negativan utjecaj na performanse koji je svojstven takvim provjerama tokom izvršavanja koda, ali će dovesti do dodatnih troškova za organiziranje interakcije koda na novom jeziku sa kodom u C++).

Korištenje memorijskih biblioteka je najjednostavniji, ali i manje efikasan način. Prepisivanje koda u Rustu je ocijenjeno kao najefikasniji, ali i vrlo skup način.

70% sigurnosnih problema u Chromiumu uzrokovano je greškama u memoriji

izvor: opennet.ru

Dodajte komentar