70 % bezpečnostních problémů v prohlížeči Chromium je způsobeno chybami paměti

Vývojáři projektu Chromium analyzovány 912 vysoce rizikových a kritických zranitelností identifikovaných ve stabilních verzích Chrome od roku 2015 a došlo k závěru, že 70 % z nich bylo způsobeno nezabezpečením paměti (chyby při práci s ukazateli v kódu C/C++). Polovina těchto problémů (36.1 %) je způsobena přístupy do vyrovnávací paměti po uvolnění paměti s tím spojené (use-after-free).

70 % bezpečnostních problémů v prohlížeči Chromium je způsobeno chybami paměti

Při navrhování Chromia to bylo zpočátku položenaže je možné, že se v kódu mohou objevit chyby, proto byl velký důraz kladen na použití izolace sandbox pro omezení důsledků zranitelností. V současné době se možnosti využití této technologie dostaly na hranici svých možností a další fragmentace do procesů je z hlediska spotřeby zdrojů nepraktická.

Aby byla zachována bezpečnost kódové základny, Google také vynucuje „pravidlo dvou“, podle kterého jakýkoli přidaný kód nesmí splňovat více než dvě ze tří podmínek: práce s nevalidovanými vstupními daty, používání nezabezpečeného programovacího jazyka (C/C++) a běh se zvýšenými oprávněními. Toto pravidlo znamená, že kód pro zpracování externích dat musí být buď omezen na minimální oprávnění (izolován), nebo napsán v zabezpečeném programovacím jazyce.

Pro další zvýšení bezpečnosti kódové základny byl spuštěn projekt, který má zabránit výskytu chyb paměti v kódové základně. Existují tři hlavní přístupy: vytváření knihoven C++ s funkcemi pro bezpečný provoz paměti a rozšíření působnosti garbage collectoru pomocí mechanismů hardwarové ochrany Mte (Memory Tagging Extension) a komponenty pro zápis v jazycích, které zajišťují bezpečnou práci s pamětí (Java, Kotlin, JavaScript, Rust, Swift).

Předpokládá se, že práce bude zaměřena do dvou oblastí:

  • Významná změna ve vývojovém procesu C++, která nevylučuje negativní dopad na výkon (dodatečné kontroly mezí a garbage collection). Místo nezpracovaných ukazatelů se navrhuje použít typ MiraclePtr, která umožňuje omezit zneužitelné chyby bez použití na pády, které nepředstavují bezpečnostní hrozbu, bez znatelného negativního dopadu na výkon, spotřebu paměti a stabilitu.
  • Použití jazyků určených k provádění kontrol bezpečnosti paměti v době kompilace (eliminuje negativní dopad na výkon, který je těmto kontrolám vlastní během provádění kódu, ale povede k dalším nákladům na organizaci interakce kódu v novém jazyce s kódem v C++).

Použití knihoven bezpečných pro paměť je nejjednodušší, ale také méně efektivní způsob. Přepisování kódu v Rustu je hodnoceno jako nejefektivnější, ale také velmi nákladný způsob.

70 % bezpečnostních problémů v prohlížeči Chromium je způsobeno chybami paměti

Zdroj: opennet.ru

Přidat komentář