70% e problemeve të sigurisë në Chromium shkaktohen nga gabimet e kujtesës

Zhvilluesit e projektit Chromium analizuar 912 dobësi me rrezik të lartë dhe kritike u identifikuan në lëshimet e qëndrueshme të Chrome që nga viti 2015 dhe arritën në përfundimin se 70% e tyre ishin shkaktuar nga pasiguria e kujtesës (gabime gjatë punës me tregues në kodin C/C++). Gjysma e këtyre problemeve (36.1%) shkaktohen nga akseset në tampon pas çlirimit të memories së lidhur me të (përdorimi-pas-free).

70% e problemeve të sigurisë në Chromium shkaktohen nga gabimet e kujtesës

Gjatë projektimit të Chromium ishte fillimisht shtruar, se është e mundur që gabimet të shfaqen në kod, kështu që një theks i madh u vu në përdorimin e izolimit të sandbox për të kufizuar pasojat e dobësive. Aktualisht, mundësitë e përdorimit të kësaj teknologjie kanë arritur kufirin e aftësive të tyre dhe fragmentimi i mëtejshëm në procese është jopraktik nga pikëpamja e konsumit të burimeve.

Për të ruajtur sigurinë e bazës së kodeve, Google zbaton gjithashtu "rregulli i dy“, sipas të cilit çdo kod i shtuar duhet të plotësojë jo më shumë se dy nga tre kushtet: të punosh me të dhëna hyrëse të pavlefshme, të përdorësh një gjuhë programimi të pasigurt (C/C++) dhe të ekzekutosh me privilegje të ngritura. Ky rregull nënkupton që kodi për përpunimin e të dhënave të jashtme ose duhet të reduktohet në privilegje minimale (i izoluar) ose të shkruhet në një gjuhë programimi të sigurt.

Për të rritur më tej sigurinë e bazës së kodit, është nisur një projekt për të parandaluar shfaqjen e gabimeve të kujtesës në bazën e kodit. Ekzistojnë tre qasje kryesore: krijimi i bibliotekave C++ me funksione për funksionimin e sigurt të memories dhe zgjerimi i fushës së kolektorit të mbeturinave, duke përdorur mekanizmat e mbrojtjes së harduerit. MTE (Zgjerimi i etiketimit të kujtesës) dhe shkrimi i komponentëve në gjuhë që sigurojnë punë të sigurt me kujtesën (Java, Kotlin, JavaScript, Rust, Swift).

Pritet që puna të fokusohet në dy fusha:

  • Ndryshim i rëndësishëm në procesin e zhvillimit të C++, i cili nuk përjashton një ndikim negativ në performancë (kontrolle shtesë të kufijve dhe grumbullimi i mbeturinave). Në vend të treguesve të papërpunuar, propozohet të përdoret lloji MrekulliPtr, i cili ju lejon të reduktoni gabimet e shfrytëzueshme të përdorimit pa pagesë në përplasje që nuk përbëjnë një kërcënim sigurie, pa një ndikim të dukshëm negativ në performancën, konsumin e kujtesës dhe stabilitetin.
  • Përdorimi i gjuhëve të dizajnuara për të kryer kontrolle të sigurisë së kujtesës në kohën e përpilimit (do të eliminojë ndikimin negativ në performancën e natyrshme në kontrolle të tilla gjatë ekzekutimit të kodit, por do të çojë në kosto shtesë për organizimin e ndërveprimit të kodit në një gjuhë të re me kodin në C++).

Përdorimi i bibliotekave të sigurta për memorie është mënyra më e thjeshtë, por edhe më pak efikase. Rishkrimi i kodit në Rust vlerësohet si mënyra më efektive, por edhe shumë e shtrenjtë.

70% e problemeve të sigurisë në Chromium shkaktohen nga gabimet e kujtesës

Burimi: opennet.ru

Shto një koment