Оценка эффективности применения MiraclePtr для предотвращения уязвимостей в Chrome

Компания Google проанализировала эффективность использования в коде на языке С++ типа MiraclePtr (raw_ptr) вместо обычных указателей для защиты от уязвимостей, вызванных обращением к уже освобождённым областям памяти (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-ом процентиле).

Release. Ссылка here.