asroot2

■asroot2 その1

flashrec - Project Hosting on Google Code (own*.c)
http://code.google.com/p/flashrec/source/browse/#svn/trunk/android-root
flashrec - Revision 37: /trunk
http://flashrec.googlecode.com/svn/trunk/

819
 これのown*.cを書き換えるのはどうだろ。 
 http://code.google.com/p/flashrec/source/browse/#svn/trunk/android-root 

825
 >>819 
 asrootもasroot2も、Android1.5時代の脆弱性で、すでに修正されてるっぽい 
 asroot2に関してはHTC Hero用のを落としてきたからわからんけど 

831
 >>825 
 ソースからコンパイルしないとダメだよ (特にカーネル部分は)。 

 ソースのダウンロードはここから。 
 svn checkout http://flashrec.googlecode.com/svn/trunk/ flashrec 
 
 RageAgainstTheCageは権限迂回でroot取ってるだけだからカーネル空間へは入れないはず。 
 これがダメなら誰も試していない別の脆弱性を探すしかないかも。 

836
 >>831 
 ソース読んで確認した。このパッチあてられてないからasroot2は動くはず。 
 http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ad3960243e55320d74195fb85c975e0a8cc4466c 

839
 >>836 の件、カーネルバージョンに合わせた構造体のメンバの調整が必要なので、 
 include/linux/pipe_fs_i.h と突合せ (wait.hとlist.hとspinlock_types.hとspinlock_types_up.hにも依存)したけども、 
 2620と構造変わってないっぽい。 

841
 asroot2をIS01のカーネルヘッダを使ってコンパイルしてみたけど、 
 $ ./asroot2_is01 /system/bin/sh 
 [+] Using newer pipe_inode_info layout 
 Opening: /proc/2656/fd/3 
 ってなって止まったまま 何が悪いんだろ? 

842
 >>840 
 C言語とバイナリの知識が必要になるね。 
 
 >>841 
 レース・コンディションが起きるまで待つ必要がある。けど、あまり長くかかるなら、うまくいってないかも。 

845
 >>842 
 3分くらい放置してみたけどダメだった 

846
 >>845 
 うーむ…ちょっと調べてみる。 

847
 誰か同じようにテストしてくれると助かる 

848
 >>845-846 
 exploit理解。 
 NULL付近にデータ突っ込んで、NULL参照されたときにそれが読み出されるようになってる。 
 何故突っ込めるかは理解してないけど、クラッシュしてないからそこの問題じゃないはず。 
 
 credsの構造体が異なるっぽい。own2.cのincludeのところに 
 #include <linux/cred.h> 
 を追加してcreds-> を current->cred-> に置き換えると良い予感がするが、 
 ちゃんと読んでないのでダメかも。 

849
 >>848 
 get_rootまるまる置き換える必要あるか。こんな感じで。 
 
 int get_root(struct pipe_inode_info *pipe, struct pipe_buffer *buf) 
 { 
 current->cred->uid = current->cred->euid = 0; 
 current->cred->gid = current->cred->egid = 0; 
 got_root = 1; 
 
 return -ENOSYS; 
 } 

850
 >>848 
 attribute指定がNULLに配置するためのカギっぽい 
 x86ならmmap()とか使ったりする必要があるけどARMならこれでいいっぽい 
 
 構造体の件を試したいけど、時間がない… 


■asroot2 その2

982
 昔調査したasroot2について、再度調査してみた。 
 前は使えないと判断されたけど、再度試したところHTC Hero用のasroot2がIS01でも使えることが判明した。 
 ログはこちら。 
 http://codepad.org/Mj1UlYex 

987
 >>982 
 Pipeのアレ、前にカーネル逆アセして確認したけど対策されて無さそうだったので 
 動かないという報告が不思議だった。 
 これってカーネル空間で任意のコード実行だから、module_disable無効化できると思う。 
 01.00.10でも動くといいね。 

988
 >>987 
 insmod+ -f 

989
 >>988 
 言葉足らずでした。 
 
 goroh_kun氏の見つけた穴が塞がれるとinit.rcでmodule_disableが有効化されて 
 insmodが出来なくなる。 
 その場合に備えて別の方法があれば良いなと。 
 カーネル空間のメモリ書き換えが出来れば良いので、これが代替策として使えるかと。 

990
 NULLにデータをマップする必要があるので、別の方法でrootに権限昇格して、mmap_min_addrを0にする必要がある。 
 あと、何回かやらないと成功しない。 

991
 どうやら誤報っぽいです。 
 au公式のカーネルに戻したら、HTC Heroのasroot2が動かなくなりました。 
 カーネルを逆アセンブルして調査する必要がありそうです。 

993
 >>991 の件ですが、調査した結果、原因が分かりました。 
 pipe関連のexploitは、/proc/<pid>/fd以下にあるパイプへのリンクを参照します。 
 アクセスする際、proc_fd_access_allowed()で権限があるかどうかチェックされます。 
 チェックにはptrace_may_access()が使用されていて、これがLSMに引っかかり、アクセスができません。 
 別のアプローチがあるかもしれませんが、それについては調査中です。 
 
 しかし、arege_master氏のinsmod+があるので、これ以上の調査は不要かもしれません。 

18
 前スレ989さん 
 insmod+は-fでmodules_disabledをバイパスします。 
 
 goroh_kunさんが一番でしたので、後続である私にできることをと考え、 
 プランBとして掘削を継続してました。本当は、skype対応のアップデート 
 ぐらいまで引っ張りたかったのですけども。 
 
 そんな訳で、少なくともskype対応までには私の穴も塞がれそうですので、 
 プランCの準備もしないとならないかな。 
 
 現状、先人のハッカーさん方へ礼儀を欠いた状態でして、Acknowledgements 
 も含めたソースを後日公開します。 
 
 しかし、穴塞ぎの対応がこうも早いとは…掘削作業も共同してやる必要が 
 あるかもしれません。 
 
 NVさんとは密談したいかもw 

21
 >>18 
 どこかでチャットでもやりますか? 

insmod参照

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年12月17日 22:16
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。