サニタイザーは動的分析ツールの一つで、コンパイラによって挿入されたインストルメンテーションを通じて、実行時にプログラムのミスを検出します。メモリの安全性に関する問題の検出も対象となります。Android では次のサニタイザーの使用をサポートしており、それらの使用を強くおすすめします。
Hardware-assisted AddressSanitizer(HWASan)
HWASan は、メモリの安全性に関する問題を検出するメインのサニタイザーです。ARM64 が必要で、次のものを検出できます。
- スタックとヒープのバッファ オーバーフローまたはアンダーフロー
- 解放後のヒープ使用
- スコープ後のスタック使用
- 返却後のスタック使用
- 二重解放またはワイルド解放
Address sanitizer(ASan)
ASan は HWASan に類似したツールです。より多くのプラットフォームで機能しますが、Android ではサポートされていません。
KernelAddress sanitizer(KASan)
KASan は上記のユーザー空間ツールのカーネル版です。同じコンパイラ実装を共有します。KASan と ASan / HWASan は補完的です。一方のツールはカーネルに適用され、他方のツールはユーザー空間に適用されます。ビルド構成の数とテスト マトリックスを減らすために、両方を同時に有効にすることをおすすめします。
UndefinedBehavior sanitizer(UBSan)
UBSan は、コンパイル時にインストルメンテーションを実行し、メモリの安全性に欠けるさまざまな種類の未定義の動作をチェックします。符号付きおよび符号なし整数オーバーフロー チェック(IntSan)や静的にサイズ設定される配列の境界チェック(BoundsSan)など、さまざまな種類の未定義動作のチェックがあります。IntSan と BoundsSan はセキュリティ対策として本番環境で有効にすることもできます。