KASANの内部構造を解き明かす:毒、レッドゾーン、シャドウメモリ

Poison, redzones and shadows: inside KASAN

KASANの内部構造を解き明かす:毒、レッドゾーン、シャドウメモリ

LinuxカーネルはC言語で書かれているため、メモリ管理のバグ(バッファオーバーフローやuse-after-freeなど)が発生しやすい。KASAN(Kernel Address Sanitizer)は、コンパイラによる計測とシャドウメモリを使って、これらの問題を実行時に検出するツールである。この記事では、KASANの内部実装を解説し、シャドウメモリの仕組み、メモリの「毒化(poisoning)」と「解毒(unpoisoning)」のプロセス、そして実際のKASANレポートの読み方を紹介する。virtme-ngを使ったテスト環境の構築方法も示す。

シャドウメモリは、割り当てられたメモリ領域の終端をバイト単位で追跡できるが、先頭は常に8バイト境界にアラインされるため、追跡の必要がない。