Zhvilluesit e projektit Chromium 912 dobësi të rrezikshme dhe kritikë, të identifikuara në versionet e stabilizuara të Chrome që nga viti 2015, dhe arritën në përfundimin se 70% e tyre ishin të shkaktuara nga punimi i pa sigurt me memorien (gabime në punën me treguesit në kodin C/C++). Pjesa më e madhe e këtyre problemeve (36.1%) ishte shkaktuar nga qasjet në një bufer pas lirimit të memorjes së lidhur me të (use-after-free).
Gjatë projektimit të Chromium ishte paraparë , se në kod nuk përjashtohet shfaqja e gabimeve, ndaj një vlerësim i madh është bërë për përdorimin e izolimit sandbox për të kufizuar pasojat e shfaqjes së dobësive. Aktualisht, mundësitë e aplikimit të kësaj teknologjie kanë arritur kufirin e mundësive të saj dhe përpjesëtimi i mëtejshëm në procese nuk është i arsyeshëm nga pikëpamja e konsumit të burimeve.
Për të mbajtur sigurinë e bazës së kodit, Google gjithashtu përdor "", sipas të cilit çdo kod i shtuar duhet të përfitojë jo më shumë se dy kushte nga tri: puna me të dhëna hyrëse të pa verifikuara, përdorimi i një gjuhe programimi të pasigurt (C/C++) dhe ekzekutimi me privilegje të larta. Nga ky rregull del, se kodi për trajtimin e të dhënave të jashtme duhet ose të jetë i kufizuar në privilegje minimale (izoluese), ose të jetë shkruar në një gjuhë programimi të sigurt.
Për të forcuar më tej mbrojtjen e bazës së kodit, është nisur një projekt për të parandaluar shfaqjen e gabimeve të punës me memorien në bazën e kodit. Tre qasje kryesore janë identifikuar: krijimi i bibliotekave C++ me funksione për punë të sigurt me memorien dhe zgjerimi i fushës së përdorimit të mbledhësit të mbetjeve, aplikimi i mekanizmave të mbrojtjes hardware (Memory Tagging Extension) dhe shkruajtja e komponenteve në gjuhë që garantojnë punë të sigurt me memorien (Java, Kotlin, JavaScript, Rust, Swift).
Pritet që puna të përqendrohet në dy drejtime:
- Një ndryshim të rëndësishëm në procesin e zhvillimit në C++, i cili nuk përjashton ndikime negative në performancë (kontroll të shtuar të kufijve dhe mbledhje mbetjesh). Në vend të treguesve raw, propozohet përdorimi në kod të tipit , duke lejon të reduktojë gabimet e klasës use-after-free në crashes që nuk paraqesin një kërcënim për sigurinë, pa ndikuar ndjeshëm në performancën, konsumimin e memories dhe stabilitetin.
- Përdorimi i gjuhëve që janë të dizajnuara për të kryer verifikime të sigurta të punës me memorien gjatë kompilimit (do të përjashtojë ndikimin negativ në performancë, tipik për verifikimet e tilla gjatë ekzekutimit të kodit, por do të sjellë edhe shpenzime të shtuara për organizimin e ndërveprimit të kodit në një gjuhë të re me kodin në C++).
Përdorimi i bibliotekave për punën e sigurt me memorien është mënyra më e thjeshtë, por edhe më pak efektive. Rishkrimi i kodit në Rust konsiderohet si rruga më efektive, por gjithashtu është një proces shumë i kushtueshëm.
Burimi: opennet.ru
