Kernel

About This Section

本セクションでは、kernellandの基礎的な技術について触れていきます。 本セクションの目的は、講義当日の内容を理解し手を動かせる状態にしておくことです。

本セクションでは、以下のことを扱います:

  • kernelにおけるデバッグの基礎
  • 基礎的なexploitテクニックと、その根拠となるkernelコードリーディング

本セクションを進める際には、以下のことを意識してみてください:

  • 該当の処理をおこなっているkernelのソースコードを眺める
  • 配布されたデバッグシンボル付きvmlinuxを利用して、GDBで動かしながら該当の処理を追う
  • 実際に手を動かしてexploitを書いてみる

各章には題材となるChallengeを用意しており、 それに対するexploitを書いていくという形で進めていきます。 モジュールやexploitに関連するコンポーネントについては、それぞれ対応するソースコードを提示してあるため、 是非ソースコードを追いながら進めていってください。

全ての問題においてデバッグシンボルが付いたイメージを配布しています。 また、全ての問題は実際にリモートサーバ上で動作しています。 自分自身でexploitを組み立ててFlagを取ってみてください。


Preparation

Kernelのソースコードを読める・デバッグできる環境を作る

Warmup

簡単なkernel exploitの実践とGDBアシストされたソースコードリーディング

syscallとSMAP/KPTI

syscallの原理とページテーブルに関するセキュリティ機構とROPを使ったbypass

SLUBアロケータと構造体の利用

SLUBアロケータの概要と、kernelで使われる構造体を利用した攻撃

UAF / TOCTOU

SLUBにおけるUAFとTOCTOU

DirtyCred

CVE-2021-41073

Last modified November 15, 2023: add warning about challenge server (55ad5da)