2015-03-01から1ヶ月間の記事一覧

LinuxカーネルモジュールでStackjackingによるSMEP+SMAP+KADR回避をやってみる

「Linuxカーネルモジュールでret2usrによる権限昇格をやってみる」では、Kernel Address Display Restriction(KADR)を無効にした上で/proc/kallsymsからカーネルシンボルのアドレスを取得し、カーネル空間からユーザ空間の関数を実行させることにより権限…

Linuxカーネルモジュールでret2usrによる権限昇格をやってみる

Linuxカーネルモジュールにおける任意アドレス書き換え(Arbitrary address write)の脆弱性を利用し、ret2usr(Return-to-user)と呼ばれる手法によるroot権限への権限昇格をやってみる。 環境 Ubuntu 14.04.1 LTS 64bit版、Intel SMEP無効 $ uname -a Linu…

無条件で権限昇格するLinuxカーネルモジュールを書いてみる

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コマンドを作った

dog - opposite of cat 背景 Burp SuiteのDecoder機能では、下図のように適当な文字列に対して複数回のエンコード、デコード、ハッシュ計算を簡単に行うことができる。 便利なので、コマンドラインとパイプでもやりたい。 また、Ubuntu 8.04ではcat(1)に対し…

ARMでstack pivot、Dynamic ROPをやってみる

「ARMでReturn-oriented Programming(ROP)をやってみる」ではlibcのベースアドレス、libc関数のオフセットを調べた上でROPを行った。 ここでは、ASLRが有効となっている場合を想定し、GOTアドレスの書き出しおよびstack pivotをもとにしたDynamic ROP(JIT…

ARMでReturn-oriented Programming(ROP)をやってみる

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 #…

ARMで単純なスタックバッファオーバーフロー攻撃をやってみる

「単純なスタックバッファオーバーフロー攻撃をやってみる」と同様に、Linux ARM(armel)環境でスタックバッファオーバーフローからのシェルコード実行をやってみる。 環境 Ubuntu 14.04.2 LTS ARM版(ユーザモードQEMU利用) # uname -a Linux c7b94bb2fc1…

Linux ARM用のシェルコードを書いてみる

「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アセンブリについてのメモ

ARM EABI(armel)についてのメモ。 RealView Compilation Tools アセンブラガイド バージョン 4.0 ARMレジスタ r0からr15までのレジスタとcpsrレジスタがあり、r11はフレームポインタ(fp)、r12はプロシージャ内呼び出しスクラッチレジスタ(ip; intra-pro…

DockerでユーザモードQEMUによるARMエミュレーション環境を構築する

手元にx64マシンしかない状況でARM環境を用意しようとした場合、以下のような選択肢が考えられる。 実機を用意する(Raspberry Pi、Android端末など) お金がかかる、使うのに手間がかかる QEMUのシステムエミュレーションを使う 再現性が高い一方、重い QEM…

x64でuse-after-freeからのC++ vtable overwriteとheap sprayによるASLR+DEP回避をやってみる

「use-after-freeによるC++ vtable overwriteをやってみる」では、ASLRを無効にした条件下でシェル起動を行った。 ASLRが有効の場合、書き換えるvtableの関数ポインタが指すアドレスが推測可能でなければならないが、ヒープ領域に任意の数のオブジェクトを生…