Chromium projekti arendajad 912 ohtlikku ja kriitilist haavatavust, mis on avastatud stabiilsetes Chrome'i vĂ€ljaannetes alates 2015. aastast, ja leitud, et 70% neist tulenesid ebaturvalisest mĂ€luhaldusest (pointers'iga seotud vead C/C++ koodis). Pool sellest probleemist (36.1%) on pĂ”hjustatud mĂ€lust vabastatud mĂ€lutĂŒkkide kasutamisest (use-after-free).
Chromium'i kavandamisel oli algselt , et koodis vÔivad esineda vead, seetÔttu pandi suur rÔhk liivakasti isolatsiooni rakendamisele haavatavuste tagajÀrgede piiritlemiseks. Praegu on selle tehnoloogia rakendamise vÔimalused saavutanud oma piiri ja edasine protsesside jagamine ei ole ressursikasutuse seisukohalt otstarbekas.
Googleâi koodibaasi turvalisuse tagamiseks rakendatakse ka "" jĂ€rgimist, mille kohaselt peab kĂ”ik lisatav kood vastama mitte rohkem kui kahele kolmest tingimusest: töötamine kontrollimata sisendiga, ebaturvalise programmeerimiskeele kasutamine (C/C++) ja tĂ€iendavate privileegide tĂ€itmine. Selle reegli kohaselt peab vĂ€listest andmetest töötav kood olema kas vĂ€hendatud minimaalse privileegiga (isoleeritud) vĂ”i kirjutatud turvalisel programmeerimiskeeles.
Koodibaasi turvalisuse edasiarendamiseks on kĂ€ivitatud projekt mĂ€luhalduse vigade ennetamiseks koodibaasis. Peamised lĂ€henemisviisid on: C++ raamatukogude loomine, mis sisaldavad funktsioone mĂ€luga turvaliseks töötamiseks ja prĂŒgikogumise ulatuse laiendamine, riistvaraliste kaitsemehhanismide rakendamine (Memory Tagging Extension) ja komponentide kirjutamine keeli, mis tagavad mĂ€luga turvalise töötamise (Java, Kotlin, JavaScript, Rust, Swift).
Oodatakse, et töö keskendub kahele suunale:
- Oluline muudatus C++ arendamisprotsessis, mis ei vĂ€lista negatiivset mĂ”ju jĂ”udlusele (tĂ€iendavad piiride kontrollid ja prĂŒgikogumine). Raw-punktide asemel pakutakse koodis kasutada tĂŒĂŒpi , mis vĂ”imaldab vĂ€hendada kuritegelikke use-after-free vigu mitte-turvalistele krahhidele, ilma mĂ€rkimisvÀÀrse negatiivse mĂ”juta jĂ”udlusele, mĂ€lukasutusele ja stabiilsusele.
- Kasutades keeli, mis on mÔeldud mÀlu turvalise kasutamise kontrollide teostamiseks kompileerimise ajal (see vÀlistab koodi kÀitamise ajal sarnaste kontrollide negatiivse mÔju jÔudlusele, kuid toob kaasa tÀiendavad kulud, et korraldada uue keele koodi koostöö C++-koodiga).
MĂ€lu turvaliseks kasutamiseks raamatukogude kasutamine on kĂ”ige lihtsam, kuid ka vĂ€hem efektiivne meetod. Koodi ĂŒmberkirjutamine Rust'i on hinnatud kui kĂ”ige efektiivsem, kuid ka vĂ€ga kallis tee.
Allikas: opennet.ru
