70% no Chromium drošības problēmām izraisa atmiņas kļūdas

Chromium projekta izstrādātāji analizēts Kopš 912. gada stabilajos Chrome laidienos konstatētas 2015 augsta riska un kritiskās ievainojamības, un secināts, ka 70% no tām izraisīja atmiņas nedrošība (kļūdas, strādājot ar norādes C/C++ kodā). Pusi no šīm problēmām (36.1%) izraisa piekļuve buferim pēc tam, kad ir atbrīvota ar to saistītā atmiņa (izmantošana pēc brīva).

70% no Chromium drošības problēmām izraisa atmiņas kļūdas

Izstrādājot Chromium, tas sākotnēji bija atguldīts, ka kodā var parādīties kļūdas, tāpēc liels uzsvars tika likts uz smilškastes izolācijas izmantošanu, lai ierobežotu ievainojamību sekas. Šobrīd šīs tehnoloģijas izmantošanas iespējas ir sasniegušas savu iespēju robežu un tālāka sadrumstalotība procesos no resursu patēriņa viedokļa ir nepraktiska.

Lai uzturētu kodu bāzes drošību, Google arī ievieš "divu noteikums“, saskaņā ar kuru jebkuram pievienotajam kodam jāatbilst ne vairāk kā diviem no trim nosacījumiem: darbam ar nevalidētiem ievades datiem, nedrošas programmēšanas valodas (C/C++) izmantošanai un darbam ar paaugstinātām privilēģijām. Šis noteikums nozīmē, ka ārējo datu apstrādes kods ir jāsamazina līdz minimālajām privilēģijām (izolēts), vai arī jāraksta drošā programmēšanas valodā.

Lai vēl vairāk uzlabotu kodu bāzes drošību, ir uzsākts projekts, lai novērstu atmiņas kļūdu parādīšanos kodu bāzē. Ir trīs galvenās pieejas: C++ bibliotēku izveide ar funkcijām drošai atmiņas darbībai un atkritumu savācēja darbības jomas paplašināšana, izmantojot aparatūras aizsardzības mehānismus. MTE (Memory Tagging Extension) un rakstīšanas komponenti valodās, kas nodrošina drošu darbu ar atmiņu (Java, Kotlin, JavaScript, Rust, Swift).

Paredzams, ka darbs tiks koncentrēts divās jomās:

  • Būtiskas izmaiņas C++ izstrādes procesā, kas neizslēdz negatīvu ietekmi uz veiktspēju (papildu robežu pārbaudes un atkritumu izvešana). Neapstrādātu rādītāju vietā tiek piedāvāts izmantot veidu MiraclePtr, kas ļauj samazināt izmantojamās lietošanas pēc brīvas kļūdas līdz avārijām, kas nerada draudus drošībai, bez manāmas negatīvas ietekmes uz veiktspēju, atmiņas patēriņu un stabilitāti.
  • Valodu izmantošana, kas paredzētas atmiņas drošības pārbaužu veikšanai kompilēšanas laikā (novērsīs negatīvo ietekmi uz veiktspēju, kas raksturīga šādām pārbaudēm koda izpildes laikā, bet radīs papildu izmaksas, organizējot koda mijiedarbību jaunā valodā ar kodu C++).

Atmiņai drošu bibliotēku izmantošana ir vienkāršākais, bet arī mazāk efektīvs veids. Koda pārrakstīšana Rust ir novērtēta kā visefektīvākais, bet arī ļoti dārgs veids.

70% no Chromium drošības problēmām izraisa atmiņas kļūdas

Avots: opennet.ru

Pievieno komentāru