Компания 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
