Chromium Chronicle #8: GWP-ASan: Detecte bugs na natureza

Episódio 8:por Vlad Tsyrklevich em Seattle, WA (novembro de 2019)
Episódios anteriores

A depuração de erros de segurança de memória, como use-after-free ou estouro de buffer, pode ser difícil. Ferramentas como o AddressSanitizer (ASan) são úteis para identificar erros de memória em testes de unidade e fuzzers, mas muitos bugs só se manifestam após a implantação para usuários em que a sobrecarga do ASan é proibitivamente alta.

O GWP-ASan é um detector de erros de memória somente heap projetado para ser usado globalmente. Ela detecta use-after-frees, estouros/underflows de buffer e liberações duplas. Ao contrário do ASan, ele não detecta erros na pilha ou nos globais.

Ao fazer a amostragem de uma pequena porcentagem de alocações, o GWP-ASan é capaz de fornecer detecção de erros probabilísticos com sobrecarga insignificante de memória e desempenho. O GWP-ASan fará com que o processo falhe imediatamente quando ocorrer um erro de memória com uma alocação de amostra. Isso facilita a detecção do bug, já que a falha acontece exatamente onde o erro ocorre, e não em algum momento posterior, quando a memória corrompida é usada.

Assim como o ASan, os relatórios de erros do GWP-ASan incluem stack traces de alocação e desalocação para ajudar a depurar problemas de memória. Veja um exemplo (crbug/956230) de alguns dos outros dados apresentados na IU de falhas:

O uso e a desalocação se originam em PDFiumEngine::ExtendSelection(). A fonte mostra rapidamente que o bug é o uso de um iterador std::vector invalidado.

O GWP-ASan está ativado no canal estável para alocações feitas usando malloc/new e PartitionAlloc no Windows e macOS. A compatibilidade com o Android está em andamento. Mais de 60 bugs do GWP-ASan foram relatados até agora, e cerca de 70% foram corrigidos. As falhas do GWP-ASan são todos os possíveis problemas de segurança que podem ser explorados. Por isso, faça uma triagem rápida e solicite backports quando necessário.