teppay’s log

セキュリティ、CTF、機械学習などに興味があります。情報系学生です。興味のあることを思い立った時に書きます。曖昧なことの整理にも使います。月1が目標です。

カーネルエクスプロイト入門してみるー第1章ー

はじめに

  • セキュキャンでカーネルエクスプロイトの講義を受けるので事前学習。
  • 正直、カーネルエクスプロイトはまったくアウトオブ興味だったが、セキュキャンでは自分の興味のある分野と、まだなにも知らない分野を開拓するのがいいという誰かのツイートを見たので。
  • るくすさんのブログの記事を追っていきます。

参考文献

rkx1209.hatenablog.com

環境

1 環境構築

  • なんかMacやWinだとブログの通りすんなり行かないらしい。kgdbができない?
  • VMを2つ使うといいらしい

1.1 VM作成

  • カーネルエクスプロイトされる用のVM(Ubuntu14.04 amd 64bit)を新規作成し、GuestAdditionをインストー
  • スナップショットをとる
  • もう一つのデバッガ側のVMはもともとあったものを使用する予定
  • 共有フォルダを設定する
  • CPUのコアは多いほうがいいらしい。
  • ネットワークアダプタブリッジアダプタを割り当てる。

1.2 Linuxカーネルをビルドする

ここからデバッグされる側のVMをデバッギ、デバッグする側をデバッガと呼びます

  • ダウンロードしてきたバニラカーネル3.12のソースをダウンロードしてきて、共有フォルダを介してデバッギに送る。
  • 共有フォルダにアクセスしようとするとPermissionのエラーが出たのでぐぐる
$ sudo gpasswd -a ユーザ名 vboxsf

再起動でグループに入ってアクセスできるようになった。

  • 共有フォルダから他のフォルダにソースをコピー。
$ cp -r /media/sf_vm_sync/linux-3.12 ~/

若干時間がかかった。
コピーするだけで時間かかったので、コンパイルなどにどんな時間がかかるんだとビビる。

$ cd ~/linux-3.12
$ make localmodconfig

るくすさんのブログにEnterを叩けばいいとかいてあったので終わるまでひたすらEnterを叩いた。

$ make menuconfig
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.
 *** 
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2

このたび初めてのエラー様がお目見えしました。 ncurses-develをインストールしろって言われていますが、

$ sudo apt-get install ncurses-devel

としても、ないと言われました。 ぐぐると、

$ sudo apt-get install ncurses-dev

で良いそうです。気を取り直して、

$ make menuconfig

f:id:teppay:20170719010508p:plain

terminalが謎のGUIになりました。ここで、

Kernel Hacking ---> 
  <*> KGDB: kernel debugger

Device Drivers ---> 
  Network device support --->     
   <M> Network console logging support (EXPERIMENTAL)

をオンにすればいいそうです。

  • ビルド
$ make -j4

-jオプションは並列化のレベル?を決めるものらしいです。
単純に数字を大きくすれば高速になるというものでは無いらしく、コア数の2倍が相場らしいです。 自分の環境では10分かかりませんでした。

$ sudo make module_install
$ sudo make install

この2つはすぐ終わりました。

寝ます。

  • 最近眠くなったら寝ることにしているので寝ます。
  • 明日またやります。

第2章↓

teppay.hatenablog.com