際際滷

際際滷Share a Scribd company logo
Auther:idkqh7
徭失B初
}?? 巌樋來好弔了云
}?? $$寄僥の云輝にあった伽い三
}??
兆念idkqh7
Us坤蓬`トしてたら寄僥へ
T坤丱ぅインフォマティクス
箸龍坤廛蹈哀薀潺鵐阿判睥
}?? vxで慌喘のパソコンを聞っていた
}?? 隠便弐sのvSで慧崔されAける巌樋

來があった
}?? $apt-get install $$が聞いたかった。
}?? 縮娩にS辛だけはもらえた
☆パソコンの秘れ紋えに育い、バグはFixさ
れています
$$寄僥の云輝にあった伽い三
 

セキュリティホ`ルを旋喘して
云栖ならばありえない嘛
をさせるコ`ドのこと。

  これらはセキュリティホ`ルの編^コ`ドとしてアプ
リやソ`スコ`ドの侘で匯違に塘下されている。
ただのバグだから
仝よく蛍からないけどアプリが崙K阻する 
ときには揖じ圻咀によるときも´´	

仝サ`バ`のル`トとられた。。 
セキュリティホ`ルを旋喘した好
}?? バッファオ`バ`フロ`好庁┘丱奪侫,離丱娃
}?? フォ`マット猟忖双好庁塀のバグ
}?? ダングリングポインタ好庁┘櫂ぅ鵐燭離丱娃

モニタリングによる好
:?? スニッフィング┘僖吋奪肇ャプチャリング
:?? キ`ロガ`┘`ロギング
$$寄僥の云輝にあった伽い三
CVE-2009-2692
  The Linux kernel 2.6.0 through 2.6.30.4, and
2.4.4 through 2.4.37.4, does not initialize all
function pointers for socket operations in
proto_ops structures, which allows local users to
trigger a NULL pointer dereference and gain
privileges by using mmap to map page zero,
placing arbitrary code on this page, and then
invoking an unavailable operation, as
demonstrated by the sendpage operation
(sock_sendpage function) on a PF_PPPOX socket.	
}??
proto_ops夛悶┘廛蹈札考平で宥佚を佩うための
夛悶にv方ポインタが贋壓するんだけど、ある圭
隈でアクセスするとポインタを兜豚晒せずにNULLポ
インタ聞える┘妊螢侫.譽鵐坑らしいよ。
 そこから mmap()v方でメモリのI囃を函って┘廛
グラムのきzめるI囃をメモリ貧に_隠その嶄に
やばいコ`ドをくとrootとられちゃうよ。
NULLポインタの_Jもしないクソ勸隻は
sock_sendpagev方です。云輝にありがとうござい
ました。
struct	
  roto_
p
ops	
  	
 
{
	
 	
 	
 	
 	
 	
 	
 	
 int	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 f iy;
am l 	
 
	
 	
 	
 	
 	
 	
 	
 	
 struct	
  odul
m
e	
 	
 	
 *ow ner;
	
 
	
 	
 	
 	
 	
 	
 	
 	
 int	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 ( ease)
*rel
	
 	
 	
 (
struct	
  ocket	
  sock)	
 
s
*
;
	
 	
 	
 	
 	
 	
 	
 	
 int	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 ( nd)
*bi 	
 	
 	
 	
 	
 	
 (struct	
  ocket	
  sock,
s
*
	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 struct	
  ockaddr	
  m yaddr,
s
*
	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 int	
  ockaddr_en)	
 
s
l ;
	
 	
 	
 	
 	
 	
 	
 	
 int	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 (
*connect)
	
 	
 	
 (
struct	
  ocket	
  sock,
s
*
	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 struct	
  ockaddr	
  vaddr,
s
*
	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 int	
  ockaddr_en,int	
  l ;
s
l 	
  fags)	
 
	
 	
 	
 	
 	
 	
 	
 	
 int	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 (
*socketpai (struct	
  ocket	
  sock1,
r)
s
*
	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 struct	
  ocket	
  sock2)	
 
s
*
;
	
 	
 	
 	
 	
 	
 	
 	
 int	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 (
*accept)
	
 	
 	
 	
 (struct	
  ocket	
  sock,
s
*
	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 struct	
  ocket	
  new sock,int	
  l ;
s
*
	
  fags)	
 
	
 	
 	
 	
 	
 ..
.	
 
}	
 
;
}?? rootを函るってどういうこと

}?? NULLポインタデリファレンスでどうなるの
#include <unistd.h>
#include <stdlib.h>

	

int main(void)
{
setuid(0);
system("/bin/sh");

//ファイル侭嗤宀の慙泙妊灰泪鵐匹g佩
//シェルの柵び竃し

return 0;
}
System()はシステム?
コ`ルであるexecve()
のWrapperv方
ファイル侭嗤宀の慙泙妊廛蹈哀薀爐g佩するC嬬。

聞い圭
chmod 4711 hogehoge

user s-bit(4000) が羨っているコマンドはそのファ
イル侭嗤宀の慙泙g佩 (setuid) される。
★侭嗤宀をrootにすればrootの慙泙g佩できる
噸宥SetUIDは匯違ユ`ザ`に匯r議に蒙悗鰉
えるために聞う麗。
}??
}??
}??

Linux のプロセスは、task 夛悶で燕Fされている
task 夛悶にはプロセスが聞喘するさまざまな秤鵑ある
cred夛悶はuid、gid、groups 吉のY鯉秤鵑魃蹐
struct	
 cred	
 {
	
 
	
 	
 	
 	
 atom i
c_t	
 	
 	
 	
 	
 	
 	
 	
 usage;
	
 
	
 	
 	
 	
 ui
d_t	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 ui 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 /*	
 realU I 	
 of	
 the	
 task	
 */	
 
d;
	
  D
	
 	
 	
 	
 gi
d_t	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 gi 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 /*	
 realG I 	
 of	
 the	
 task	
 */	
 
d;
	
  D
	
 	
 	
 	
 ui
d_t	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 sui 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 /*	
 saved	
 U I 	
 of	
 the	
 task	
 */	
 
d;
D
	
 	
 	
 	
 gi
d_t	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 sgi 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 /*	
 saved	
 G I 	
 of	
 the	
 task	
 */	
 
d;
D
	
 	
 	
 	
 ui
d_t	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 eui 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 /*	
 effecti U I 	
 of	
 the	
 task	
 */	
 
d;
ve	
  D
	
 	
 	
 	
 gi
d_t	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 egi 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 /*	
 effecti G I 	
 of	
 the	
 task	
 */	
 
d;
ve	
  D
..
.	
 
	
 	
 	
 	
 struct	
 user_struct	
 *user;
	
 	
 	
 	
 	
 	
 	
 /*	
 realuser	
 I 	
 subscri on	
 */	
 
	
 
D
pti
	
 	
 	
 	
 struct	
 group_i *group_i 	
 	
 /*	
 suppl entary	
 groups	
 for	
 eui
nfo	
 
nfo;
em
d/fsgi */	
 
d	
 
..
.	
 
}	
 
;
#include <unistd.h>
#include <stdlib.h>

	

int main(void)
{
setuid(0);
system("/bin/sh");

//ファイル侭嗤宀の慙泙妊灰泪鵐匹g佩
//シェルの柵び竃し

return 0;
}
System()はシステム?
コ`ルであるexecve()
のWrapperv方
念戻宰嗤宀がrootのとき、 SetUID(0)をg佩

euid(effective uid) = 0(root)
つまり、 SetUID(0)のやっていることは、徭プロセス
cred夛悶のeuid何蛍をきQえているだけ。
Credを荷れるならば慙泙o隈仇。
return?sock->ops->sendpage(sock, page, offset, size, flags);
	
 #include <unistd.h>
	
 #include <stdlib.h>
	
 int main(void)
{
	
setuid(0);
//ファイル侭嗤宀の慙泙妊灰泪鵐匹g佩
system("/bin/sh"); //シェルの柵び竃し
	
return 0;
	
}
	
NULLポインタデリファレンスをうまく聞うと、貧コ`ドがg佩できる。。
sock_sendpage()v方は	
	
return?sock->ops->sendpage(sock, page,
	
	
offset, size, flags);
	
といきなりいていた。	
	
if?(unlikely(!sock->ops->sendpage))
?return?-EINVAL;
このようにすればv方ポインタの兜豚晒はチェックされてい
たはず。
NULLポインタ修匹離▲疋譽垢瞞犬靴討い覆ぅ櫂ぅ鵐
gに冱うと、兜豚晒していないポインタ。
((void *)0) ´NULLポインタ協方╋x
これをデリファレンスすると´´
*((void*)0) ? *0
アドレスの0桑、鰆原┐垢襪海箸砲覆

	

‐デリファレンスとは/
}?? ポインタが峺し幣す坪否を誼ること
}?? g俊歌孚?歌孚翌しともUされる
}?? C冱Zでいうところのコイツ★

NULLポインタを喘いると0桑仇のアドレス坪否
にアクセス辛嬬となる
┘▲セス`郡などで崙K阻する圻咀にも
	

バグの圻咀
1.?
2.?

mmapv方 を聞って、 0 桑仇に慙N鯉コ`ド
を碧zんでおく。
まちがって NULL ポインタをv方ポインタとして
デリファレンス すると、その慙N鯉コ`ドがg佩
される。	

砿尖宀慙泙妊瓮轡Ε湫B
 mmapv方を喘いて仟・▲疋譽洪實gを恬撹
◎
0 桑仇に慙N鯉コ`ドを碧zんでおく。

◎
ヌルポインタ`でガッ
◎
蒙悒廛蹈哀薀爐らシェルを軟	

g廾するのは冱うほど
gじゃない
ソ`スコ`ドがi盾できなくても噸宥です。
Exploitのソ`スコ`ドはかなり蒙歩┻優譽ぅ筴`荷恬
な何に秘るので、兜ではまず尖盾できない。	

}??

AndroidOSのrootハックでも揖じ巌樋來が聞われた
☆Rり卦しになりますが、パソコンの秘れ紋えに
育いバグはFixされています
	

函り糊えず
>sudo apt-get install sl
}??

	

 ? ? ? ? ? ?==== ? ? ? ? ? ? ? ?________ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?___________ ?
 ? ?_D ?_| ? ?|_______/ ? ? ? ? ? ? ? ?__I_I_____===__|_________| ?
 ? ? ?|(_)--- ? ?| ? ? ?H________/ ?| ? ? ?| ? ? ? ? ? ? ? ?=|___ ?___| ? ? ? ? ? ?_________________ ? ?
 ? ? ?/ ? ? ? ? ?| ? ?| ? ? ?H ? ?| ? ?| ? ? ? ? ?| ? ? ?| ? ? ? ? ? ? ? ? ?||_| ?|_|| ? ? ? ? ?_| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?_____A ?
 ? ?| ? ? ? ? ? ?| ? ?| ? ? ?H ? ?|__--------------------| ?[___] ?| ? ? ?=| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ?
 ? ?| ?________|___H__/__|_____/[][]~_______| ? ? ? ? ? ? ?| ? ? ?-| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ?
 ? ?|/ ?| ? ? ?|-----------I_____I ?[][] ?[] ? ?D ? ? ?|=======|____|________________________|_ ?
__/ ?=| ?o ?|=-~~ ? ?/~~ ? ?/~~ ? ?/~~ ?____Y___________|__|__________________________|_ ?
 ?|/-=|___|| ? ? ? ?|| ? ? ? ?|| ? ? ? ?|| ? ? ? ?|_____/~___/ ? ? ? ? ? ? ? ? ? ?|_D__D__D_| ? ?|_D__D__D_| ?
 ? ?_/ ? ? ? ? ? ?__/ ? ?__/ ? ?__/ ? ?__/ ? ? ? ? ? ?_/ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?_/ ? ? ?_/ ? ? ? ?_/ ? ? ?_/ ?
	
 

A. ぬるぽ★ガッ

More Related Content

$$寄僥の云輝にあった伽い三