2015-03-01から1ヶ月間の記事一覧
「Linuxカーネルモジュールでret2usrによる権限昇格をやってみる」では、Kernel Address Display Restriction(KADR)を無効にした上で/proc/kallsymsからカーネルシンボルのアドレスを取得し、カーネル空間からユーザ空間の関数を実行させることにより権限…
Linuxカーネルモジュールにおける任意アドレス書き換え(Arbitrary address write)の脆弱性を利用し、ret2usr(Return-to-user)と呼ばれる手法によるroot権限への権限昇格をやってみる。 環境 Ubuntu 14.04.1 LTS 64bit版、Intel SMEP無効 $ uname -a Linu…
Linuxにおけるカーネルエクスプロイトの下準備として、無条件で権限昇格する(安全でない)カーネルモジュールを書いてみる。 環境 Ubuntu 14.04.1 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.13.0-44-generic #73-Ubuntu SMP Tue Dec 16 00:22:43 UTC 201…
dog - opposite of cat 背景 Burp SuiteのDecoder機能では、下図のように適当な文字列に対して複数回のエンコード、デコード、ハッシュ計算を簡単に行うことができる。 便利なので、コマンドラインとパイプでもやりたい。 また、Ubuntu 8.04ではcat(1)に対し…
「ARMでReturn-oriented Programming(ROP)をやってみる」ではlibcのベースアドレス、libc関数のオフセットを調べた上でROPを行った。 ここでは、ASLRが有効となっている場合を想定し、GOTアドレスの書き出しおよびstack pivotをもとにしたDynamic ROP(JIT…
ARM EABI(armel)環境でReturn-oriented Programming(ROP)をやってみる。 環境 Ubuntu 14.04.2 LTS ARM版(ユーザモードQEMU利用) # uname -a Linux c7b94bb2fc1e 2.6.32 #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 armv7l armv7l armv7l GNU/Linux #…
「単純なスタックバッファオーバーフロー攻撃をやってみる」と同様に、Linux ARM(armel)環境でスタックバッファオーバーフローからのシェルコード実行をやってみる。 環境 Ubuntu 14.04.2 LTS ARM版(ユーザモードQEMU利用) # uname -a Linux c7b94bb2fc1…
「Linux x86用のシェルコードを書いてみる」と同様に、Linux ARM(armel)用のシェルコードを書いてみる。 環境 Ubuntu 14.04.2 LTS ARM版(ユーザモードQEMU利用) # uname -a Linux c7b94bb2fc1e 2.6.32 #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 armv…
ARM EABI(armel)についてのメモ。 RealView Compilation Tools アセンブラガイド バージョン 4.0 ARMレジスタ r0からr15までのレジスタとcpsrレジスタがあり、r11はフレームポインタ(fp)、r12はプロシージャ内呼び出しスクラッチレジスタ(ip; intra-pro…
手元にx64マシンしかない状況でARM環境を用意しようとした場合、以下のような選択肢が考えられる。 実機を用意する(Raspberry Pi、Android端末など) お金がかかる、使うのに手間がかかる QEMUのシステムエミュレーションを使う 再現性が高い一方、重い QEM…
「use-after-freeによるC++ vtable overwriteをやってみる」では、ASLRを無効にした条件下でシェル起動を行った。 ASLRが有効の場合、書き換えるvtableの関数ポインタが指すアドレスが推測可能でなければならないが、ヒープ領域に任意の数のオブジェクトを生…