Компания Google е проучила ефективността на използването на типа MiraclePtr (raw_ptr<T>) в кода на C++ вместо обикновените указатели за защита от уязвимости, причинени от достъпа до вече освободени области на паметта (use-after-free). MiraclePtr предоставя обвивка над указателите, която извършва допълнителни проверки и аварийно прекратява работата при откриване на достъп до освободени области на паметта. Поддръжката на MiraclePtr беше включена по подразбиране на платформите Windows и Android през май 2022 г. (в Chrome 102), а на платформите ChromeOS, Linux и macOS през юни 2023 г. Защитата, основана на MiraclePtr в Chrome, се прилага за всички процеси, с изключение на процеса, отговарящ за рисуването (renderer).
След проучване на динамиката на докладите за уязвимости и аварийните прекратявания, както и анализа на свързани с безопасността инциденти и резултати от fuzzing тестиране, беше направен извод, че внедряването на MiraclePtr е предоставило защита срещу 57% от уязвимостите в клас use-after-free, благодарение на преминаването към използването на MiraclePtr за полета на класове и параметри на callback повиквания. Освен това се споменава, че 5 от 6 открити миналата година критични уязвимости в стабилната версия на Chrome бяха идентифицирани благодарение на проучването на докладите за аварийни прекратявания, свързани с използването на MiraclePtr.
Цената на използването на MiraclePtr е увеличение на консумацията на памет, тъй като за указателите е необходимо да се съхраняват допълнителни 4 байта със счетоводен указател. Консумацията на памет от основния процес на браузъра при използването на MiraclePtr се увеличава с 5.5-8% в билдовете за настолни системи и с 2% в версията за Android. Средното увеличение на консумацията за всички процеси се оценява на 1-3%. Освен това, при използването на MiraclePtr бяха регистрирани отделни регресии, водещи до намаляване на производителността, но не свързани с ключови метрики, като времето за зареждане и рисуване на страницата. От идентифицираните регресии се отбелязва забавяне от 1.5% на първото въвеждане в Chrome OS, забавяне от 1.5% при отваряне на табове на платформата Android, а също така увеличаване на вероятността от забавяне на въвеждането поради конкуренция в основния поток (увеличение на вероятността с 10% в 99-ия процентил).
Източник: opennet.ru
