Chromium Chronicle #8: GWP-ASan: Mendeteksi bug di alam liar

Episode 8: oleh Vlad Tsyrklevich di Seattle, WA (November, 2019)
Episode sebelumnya

Men-debug error keamanan memori, seperti use-after-frees atau buffer overflow, dapat menjadi sulit. Alat seperti AddressSanitizer (ASan) sangat membantu untuk menemukan error memori dalam pengujian unit dan fuzzer, tetapi banyak bug hanya muncul setelah deployment ke pengguna ketika overhead ASan sangat tinggi.

GWP-ASan adalah detektor error memori khusus heap yang dirancang untuk digunakan di kehidupan nyata. Fungsi ini mendeteksi use-after-free, buffer overflow/underflow, dan double-free. Tidak seperti ASan, ASan tidak mendeteksi error pada stack atau di global.

Dengan mengambil sampel sebagian kecil alokasi, GWP-ASan mampu menyediakan deteksi error probabilitas dengan memori yang dapat diabaikan dan overhead performa. GWP-ASan akan menyebabkan proses langsung error saat terjadi error memori pada alokasi sampel. Hal ini memudahkan Anda menemukan bug saat error terjadi tepat di tempat error terjadi, bukan di kemudian hari saat memori rusak digunakan.

Seperti ASan, laporan error GWP-ASan menyertakan pelacakan tumpukan alokasi dan dealokasi untuk membantu men-debug masalah memori. Mari kita lihat contoh (crbug/956230) beberapa data tambahan yang disajikan dalam UI error:

Penggunaan dan dealokasi keduanya berasal dari PDFiumEngine::ExtendSelection(). Sumber tersebut dengan cepat menunjukkan bahwa bug adalah penggunaan iterator std::vector yang tidak valid.

GWP-ASan diaktifkan di saluran stabil untuk alokasi yang dibuat menggunakan malloc/new dan PartitionAlloc di Windows dan macOS. Dukungan Android sedang berlangsung. Lebih dari 60 bug GWP-ASan telah dilaporkan sejauh ini dan sekitar 70% telah diperbaiki. Error GWP-ASan adalah semua masalah keamanan kandidat yang mungkin dapat dieksploitasi, jadi lakukan triase dengan cepat dan minta backport jika diperlukan.