KASLR
KASLR とは何ですか?
KASLRKASLR(カーネル ASLR)は起動ごとにカーネル基底とモジュール配置を乱数化し、攻撃者が固定カーネルシンボルに依存したローカル権限昇格を行えないようにします。
KASLR は ASLR をカーネルに拡張する仕組みで、カーネルイメージ、モジュール、vmalloc 領域、physmap、スタックなどが起動ごとに乱数オフセットでロードされます。Linux は 2014 年に基本機能を導入し、Meltdown 対策の KAISER/KPTI で強化、Windows も Vista 以降に搭載し Windows 10 で改善が続いています。カーネルは通常単一のアドレス空間を共有するため、ポインタの一つの漏洩でも KASLR は破られやすく、キャッシュや TLB、プリフェッチ、投機実行のサイドチャネルでオフセットが復元可能であることが研究で示されています。KASLR は SMEP/SMAP、KPTI、kCFI に加え、/proc や dmesg の厳格な制限と組み合わせて運用するのが効果的です。
● 例
- 01
Linux が起動ごとに 1 GiB 整列の乱数オフセットでカーネル基底を移動する。
- 02
Windows 10 が起動ごとに ntoskrnl.exe のロードアドレスを乱数化する。
● よくある質問
KASLR とは何ですか?
KASLR(カーネル ASLR)は起動ごとにカーネル基底とモジュール配置を乱数化し、攻撃者が固定カーネルシンボルに依存したローカル権限昇格を行えないようにします。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。
KASLR とはどういう意味ですか?
KASLR(カーネル ASLR)は起動ごとにカーネル基底とモジュール配置を乱数化し、攻撃者が固定カーネルシンボルに依存したローカル権限昇格を行えないようにします。
KASLR はどのように機能しますか?
KASLR は ASLR をカーネルに拡張する仕組みで、カーネルイメージ、モジュール、vmalloc 領域、physmap、スタックなどが起動ごとに乱数オフセットでロードされます。Linux は 2014 年に基本機能を導入し、Meltdown 対策の KAISER/KPTI で強化、Windows も Vista 以降に搭載し Windows 10 で改善が続いています。カーネルは通常単一のアドレス空間を共有するため、ポインタの一つの漏洩でも KASLR は破られやすく、キャッシュや TLB、プリフェッチ、投機実行のサイドチャネルでオフセットが復元可能であることが研究で示されています。KASLR は SMEP/SMAP、KPTI、kCFI に加え、/proc や dmesg の厳格な制限と組み合わせて運用するのが効果的です。
KASLR からどのように防御しますか?
KASLR に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
KASLR の別名は何ですか?
一般的な別名: カーネル ASLR。
● 関連用語
- appsec№ 064
ASLR
ASLR はコード、スタック、ヒープ、ライブラリの配置アドレスを実行ごとに乱数化し、攻撃者がエクスプロイトに使う目標アドレスを予測できないようにする緩和策です。
- appsec№ 1058
SMEP / SMAP
SMEP と SMAP は、カーネルがユーザー空間のページを実行したりアクセスしたりすることを禁じる CPU 機能で、典型的なローカル権限昇格を阻止します。
- appsec№ 217
コントロールフロー整合性(CFI)
CFI はプログラムの間接呼び出しと戻りを事前計算した正当な遷移先集合に制限し、ROP や JOP による制御フロー奪取を阻止します。
- appsec№ 670
メモリ安全性
メモリ安全性とは、プログラムが正当に確保していないメモリを読み書きしたり実行したりしないという性質で、脆弱性のクラスをまとめて排除できます。
- appsec№ 545
Intel CET
Intel CET(制御フロー強制技術)は、ハードウェアシャドースタックと間接分岐追跡(IBT)を組み合わせ、ROP/JOP/COP の悪用を阻止する CPU 機能です。
- appsec№ 671
メモリ安全言語
Rust、Go、Swift、Java、C# などのメモリ安全言語は、C/C++ における悪用可能な脆弱性の大半を生む空間的・時間的なメモリエラーを構造的に防ぎます。