70% dintre problemele de securitate din Chromium sunt cauzate de erori de memorie

Dezvoltatorii proiectului Chromium analizat 912 vulnerabilități cu risc ridicat și critice identificate în versiunile stabile ale Chrome din 2015 și au ajuns la concluzia că 70% dintre ele au fost cauzate de insecuritatea memoriei (erori la lucrul cu pointeri în codul C/C++). Jumătate dintre aceste probleme (36.1%) sunt cauzate de accesările la buffer după eliberarea memoriei asociate acestuia (use-after-free).

70% dintre problemele de securitate din Chromium sunt cauzate de erori de memorie

La proiectarea Chromium a fost inițial asezat, că este posibil să apară erori în cod, așa că s-a pus un accent mare pe utilizarea izolației sandbox pentru a limita consecințele vulnerabilităților. În prezent, posibilitățile de utilizare a acestei tehnologii au atins limita capacităților lor și fragmentarea ulterioară în procese este nepractică din punct de vedere al consumului de resurse.

Pentru a menține securitatea bazei de cod, Google aplică și „regula de doi„, conform căreia orice cod adăugat trebuie să îndeplinească nu mai mult de două din trei condiții: lucrul cu date de intrare nevalidate, folosirea unui limbaj de programare nesigur (C/C++) și rularea cu privilegii ridicate. Această regulă implică faptul că codul pentru prelucrarea datelor externe trebuie fie redus la privilegii minime (izolat), fie scris într-un limbaj de programare securizat.

Pentru a spori și mai mult securitatea bazei de cod, a fost lansat un proiect pentru a preveni apariția erorilor de memorie în baza de cod. Există trei abordări principale: crearea de biblioteci C++ cu funcții pentru funcționarea în siguranță a memoriei și extinderea domeniului de aplicare a colectorului de gunoi, folosind mecanisme de protecție hardware MTE (Memory Tagging Extension) și componente de scriere în limbi care asigură lucrul sigur cu memoria (Java, Kotlin, JavaScript, Rust, Swift).

Este de așteptat ca activitatea să se concentreze pe două domenii:

  • Schimbare semnificativă a procesului de dezvoltare C++, care nu exclude un impact negativ asupra performanței (verificări suplimentare ale limitelor și colectarea gunoiului). În loc de pointeri brute, se propune utilizarea tipului MiraclePtr, care vă permite să reduceți erorile exploatabile de utilizare după eliberare la blocări care nu reprezintă o amenințare pentru securitate, fără un impact negativ vizibil asupra performanței, consumului de memorie și stabilității.
  • Utilizarea limbilor concepute pentru a efectua verificări de siguranță a memoriei în timpul compilării (va elimina impactul negativ asupra performanței inerent unor astfel de verificări în timpul executării codului, dar va duce la costuri suplimentare pentru organizarea interacțiunii codului într-o limbă nouă cu codul în C++).

Utilizarea bibliotecilor sigure pentru memorie este cea mai simplă, dar și mai puțin eficientă modalitate. Rescrierea codului în Rust este considerată cea mai eficientă, dar și foarte costisitoare modalitate.

70% dintre problemele de securitate din Chromium sunt cauzate de erori de memorie

Sursa: opennet.ru

Adauga un comentariu