Vývojáři projektu Chromium Bylo identifikováno 912 nebezpečných a kritických zranitelností ve stabilních verzích Chrome od roku 2015 a bylo zjištěno, že 70 % z nich bylo způsobeno nebezpečným zacházením s pamětí (chybami při práci s ukazateli v kódu v C/C++). Polovina z těchto problémů (36,1 %) byla způsobena přístupy k bufferu po uvolnění související paměti (use-after-free).
Při navrhování Chromium bylo původně , že v kódu se mohou vyskytnout chyby, proto se kladl velký důraz na aplikaci sandboxové izolace pro omezení následků projevování zranitelností. V současnosti dosáhly možnosti používání této technologie svých limitů a další rozdělení na procesy není z pohledu spotřeby zdrojů opodstatněné.
Pro udržení bezpečnosti kódové základny Google také uplatňuje „“, podle kterého jakýkoli přidávaný kód musí splňovat maximálně dvě z tří podmínek: práce s neověřenými vstupy, použití nebezpečného programovacího jazyka (C/C++) a provádění s zvýšenými privilegii. Z tohoto pravidla vyplývá, že kód pro zpracování externích dat musí být buď omezen na minimální privilegium (izolován), nebo napsán v bezpečném programovacím jazyce.
Pro další zvýšení bezpečnosti kódové základny byl spuštěn projekt k prevenci vzniku chyb při práci s pamětí v kódové základně. Vymezeny jsou tři hlavní přístupy: vytvoření knihoven C++ s funkcemi pro bezpečné zacházení s pamětí a rozšíření oblasti použití sběrače odpadu, použití hardwarových mechanismů ochrany (Memory Tagging Extension) a psaní komponentů v jazycích, které zajišťují bezpečné zacházení s pamětí (Java, Kotlin, JavaScript, Rust, Swift).
Očekává se, že činnost bude soustředěna do dvou směrů:
- Značná změna procesu vývoje v C++, která nezahrnuje negativní dopad na výkon (další kontroly hranic a sběr odpadu). Místo raw-ukazatelů se navrhuje použít v kódu typ , který umožňuje snížit exploatované chyby třídy use-after-free na neohrožující bezpečnostní selhání, bez zřetelného negativního vlivu na výkon, spotřebu paměti a stabilitu.
- Použití jazyků zaměřených na kontrolu bezpečné správy paměti během kompilace (vyloučí negativní dopad na výkon, který je vlastností takových kontrol během běhu kódu, ale povede k dodatečným nákladům na zajištění interakce kódu v novém jazyce s kódem v C++).
Použití knihoven pro bezpečnou správu paměti je nejjednodušší, ale také méně efektivní metodou. Přepsání kódu do Rustu je považováno za nejefektivnější, ale zároveň i velmi nákladné řešení.
Zdroj: opennet.ru
