Firma Google przeanalizowała skuteczność użycia w kodzie w języku C++ typu MiraclePtr (raw_ptr<T>) zamiast zwykłych wskaźników w celu ochrony przed lukami bezpieczeństwa spowodowanymi dostępem do już zwolnionych obszarów pamięci (use-after-free). MiraclePtr tworzy opakowanie wokół wskaźników, przeprowadzając dodatkowe kontrole i nagle kończąc działanie w przypadku wykrycia dostępu do zwolnionych obszarów pamięci. Wsparcie dla MiraclePtr zostało włączone domyślnie na platformach Windows i Android w maju 2022 roku (w Chrome 102), a na platformach ChromeOS, Linux i macOS w czerwcu 2023 roku. Ochrona oparta na MiraclePtr w Chrome stosowana jest dla wszystkich procesów z wyjątkiem procesu odpowiedzialnego za renderowanie (renderer).
Po zbadaniu dynamiki zgłaszania luk w zabezpieczeniach i awaryjnych zakończeniach pracy, a także analizy związanych z bezpieczeństwem incydentów i wyników testowania fuzzing, stwierdzono, że wdrożenie MiraclePtr zapewniło ochronę przed 57% luk klasy use-after-free, dzięki przejściu na wykorzystanie MiraclePtr dla pól klas i parametrów wywołań callback. Ponadto zaznaczone zostało, że 5 z 6 wykrytych w ubiegłym roku krytycznych luk w stabilnej gałęzi Chrome zostało zidentyfikowanych dzięki badaniu raportów dotyczących awaryjnych zakończeń pracy związanych z użyciem MiraclePtr.
Kosztem stosowania MiraclePtr jest zwiększone zużycie pamięci, ponieważ dla wskaźników wymagane jest przechowywanie dodatkowych 4 bajtów z licznikiem odniesień. Zużycie pamięci przez główny proces przeglądarki przy użyciu MiraclePtr wzrasta o 5,5-8% w wersjach dla systemów desktopowych i o 2% w wersji na Androida. Średni wzrost zużycia dla wszystkich procesów szacuje się na 1-3%. Ponadto, korzystając z MiraclePtr, odnotowano pojedyncze regresje, które prowadzą do spadku wydajności, ale nie są związane z kluczowymi metrykami, takimi jak czas ładowania i renderowania strony. Zidentyfikowane regresje to opóźnienie o 1,5% pierwszego wejścia w Chrome OS, spowolnienie o 1,5% otwierania kart na platformie Android oraz zwiększenie prawdopodobieństwa opóźnienia wejścia z powodu konkurencji w głównym wątku (wzrost prawdopodobieństwa o 10% w 99. percentylu).
Źródło: opennet.ru
