Folge 8:von Vlad Tsyrklevich in Seattle, Washington (November 2019)
Vorherige Folgen
Die Behebung von Fehlern der Arbeitsspeichersicherheit wie Use-After-Frees oder Pufferüberläufen kann schwierig sein. Tools wie AddressSanitizer (ASan) sind hilfreich, um Speicherfehler in Einheitentests und Fuzzers zu lokalisieren. Viele Fehler treten jedoch erst nach der Bereitstellung für Nutzer auf, bei denen der Overhead von ASan übermäßig hoch ist.
GWP-ASan ist ein Heap-Only-Speicherfehlerdetektor für den Einsatz in freier Wildbahn. Es erkennt Use-After-Frees, Pufferüberläufe/-unterläufe und Double Frees. Im Gegensatz zu ASan erkennt es keine Fehler auf dem Stack oder in globalen Ressourcen.
Durch die Stichprobenerhebung eines kleinen Prozentsatzes der Zuweisungen kann GWP-ASan eine probabilistische Fehlererkennung mit vernachlässigbarem Speicher- und Leistungsaufwand bereitstellen. GWP-ASan führt dazu, dass der Prozess sofort abstürzt, wenn bei einer Stichprobenzuordnung ein Speicherfehler auftritt. Dadurch ist es einfacher, den Fehler zu erkennen, da der Absturz genau an der Stelle auftritt, an der er aufgetreten ist, und nicht erst später, wenn beschädigter Arbeitsspeicher verwendet wird.
Wie bei ASan enthalten GWP-ASan-Absturzberichte Stacktraces für Zuweisungen und die Freigabe von Stacktraces, um Speicherprobleme zu beheben. Sehen wir uns ein Beispiel (crbug/956230) für einige der zusätzlichen Daten in der Absturz-UI an:
Die Nutzung und die Freigabe stammen aus PDFiumEngine::ExtendSelection()
.
Die Quelle zeigt schnell an, dass der Fehler die Verwendung eines ungültigen std::vector
-Iterators ist.
GWP-ASan ist in der stabilen Version für Zuweisungen aktiviert, die mit malloc
/new
und PartitionAlloc
unter Windows und macOS vorgenommen wurden. Android wird derzeit unterstützt. Bisher wurden über 60 GWP-ASan-Fehler gemeldet und etwa 70 % wurden behoben. GWP-ASan-Abstürze sind alles mögliche Sicherheitsprobleme, die ausgenutzt werden können. Daher sollten Sie sie schnell erkennen und bei Bedarf Backports anfordern.