Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ラボユース:夏の開発合宿2017 成果報告

E07887f3d78b19948b0585bcedfc15a2?s=47 megumish
August 25, 2017

ラボユース:夏の開発合宿2017 成果報告

最近、カーネルエクスプロイトが流行ってると聞きカーネルエクスプロイト問題を制作してみようと思いました。
ただ、パソコン初心者だったのでほとんどの時間を環境構築に奪われ作問の進捗はほぼゼロです。

E07887f3d78b19948b0585bcedfc15a2?s=128

megumish

August 25, 2017
Tweet

Transcript

  1. ラボユース:夏の開発合宿2017 成果報告 川田 恵氏 @megumish

  2. やりたかったこと • Linux Kernel x86-64 Heap Exploit to ROP bypass

    SMEP - KASLR – KADR問を作る • Kernel空間のHeapの脆弱性をついてそれをROP につなげることで、セキュリティ機構 SMEP、KASLR、KADRを回避しシェルを起動する という解法を想定した問題を作る予定でした。
  3. 補足ーセキュリティ機構の説明ー • KASLR – メモリに配置されるカーネルのアドレスのオフセットがラ ンダムになる • SMEP – ユーザーランドのコードをカーネルランドで実行できなく

    なる • KADR – カーネルのアドレスを/proc下のファイルなどから参照で きないようにする
  4. やれたこと • 環境構築 – カーネルをビルドして、qemuで起動、initramfsは busyboxを使う。 – ホスト-ゲスト間のネットワークの設定 – ユーザーの設定

    – 簡単なバッファオーバーフローの脆弱性を持ったカーネ ルモジュールの作成 • キャラクターデバイスとしてmountして長い文字列を書き込む だけでRIPを奪える。
  5. やれたこと • KASLRとKADRをわざとbypassできるようにカーネ ルのバージョンを下げる。 – カーネルのソースを改変することでも同様の効果が得ら れる。 – – –

    • カーネル空間に配置されたアドレスが表示される。 – カーネルのベースアドレス(先頭のアドレスからの)オフ セットは変わらないので、これでカーネルの任意のアドレ スを特定できる。
  6. 次への課題 • まだ調べられていないことについて調べて、簡易的 に脆弱なカーネルモジュールを実装する。 – ユーザランドのヒープではASLRの効いた環境で脆弱 性を突くことでlibcのアドレスを特定することができる。 – カーネルのヒープでも同じようなことはできるのか?でき るのであれば先ほどの方法ではなく、こちらも検討した

    い。
  7. 参考文献 • Linux Kernel x86-64 bypass SMEP - KASLR -

    kpt r_restric – http://blackbunny.io/linux-kernel-x86-64-bypass- smep-kaslr-kptr_restric/ • Patchwork [4.4,07/58] mm/page_alloc: Remove kernel address exposure in free_reserved_are a() – https://patchwork.kernel.org/patch/9891775/