首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
《0day:软件漏洞分析技术》
发新帖
0
0
[原创]《0day安全第二版》样章发布5:第24章 内核漏洞案例分析
发表于: 2011-2-28 16:20
6399
[原创]《0day安全第二版》样章发布5:第24章 内核漏洞案例分析
shineast
4
2011-2-28 16:20
6399
第24章 内核漏洞案例分析 1
24.1 远程拒绝服务内核漏洞 1
24.2 本地拒绝服务内核漏洞 1
24.3 缓冲区溢出内核漏洞 1
24.4 任意地址写任意数据内核漏洞 6
24.5 任意地址写固定数据内核漏洞 6
[LEFT][LEFT]
[/LEFT][/LEFT]
第
24
章
内核漏洞案例分析
一般的,内核漏洞大多出没于
ring3
到
ring0
的交互中。我们能想到的从
ring3
进入
ring0
的通道,以及操作系统提供的
API
都有可能存在漏洞。例如:驱动程序中
IoControl
的处理函数,
SSDT
和
Shadow SSDT
中的系统服务函数(无论是否被
hook
都有可能存在漏洞),系统回调函数,内核钩子程序等。从漏洞数量来看,驱动程序中
IoControl
的处理函数中的漏洞最为多见,尤其是第三方的驱动程序。
前面
21.3.1
节中,内核漏洞按照严重程度和利用原理分别进行了分类,本节将对几种典型的内核漏洞,用几个真实的内核漏洞案例来详细分析。
24.1
远程拒绝服务内核漏洞
样章中省略
…
24.2
本地拒绝服务内核漏洞
样章中省略
…
24.3
缓冲区溢出内核漏洞
缓冲区溢出内核漏洞——是指能够利用来使得本地或远程系统运行过程中缓冲区溢出,进而执行任意代码的内核程序
bug
或缺陷。
这里以“
[2009-07-31][ALWIL][avast4.8.1335_Professionnel][aswmon2.sys][
本地缓冲区溢出内核漏洞
][
本地权限提升
]
”漏洞为例分析这种漏洞的具体细节。
该漏洞存在于
avast! 4.8.1335 Professionnel
软件的
aswmon2.sys
驱动对派遣例程的处理中,在对
IoControlCode
为
0xb2c8000c
的处理中存在缓冲区溢出漏洞,当两次调用这个
IoControl
处理函数后,会导致内存中的函数指针被覆盖成一个固定的
DWORD
,该值为
0x57523c00
,而这个地址开始的内存是可以在用户态申请分配的,那么攻击者可以在此存放
Ring0 shellcode
,等该函数指针指向的函数在攻击进程中被调用时,
Ring0 shellcode
就会被执行。如果在别的进程上下文中被调用,就会造成内存非法访问,导致蓝屏崩溃。
首先我们定位
aswmon2.sys
驱动中
IoControlCode
为
0xb2c8000c
的处理程序,反汇编整理后的代码如下:
//
省略部分代码
......
if ( IoControlCode != (PCSZ)0xB2C80008 )
{
if ( IoControlCode != (PCSZ)0xB2C8000C )
{
//
省略部分代码
......
}
if ( InputBufferLength != 0x1448u )
goto LABEL_92;
memcpy(&dword_18BD8, InputBuffer, 0x1448u);
sub_108F0();
return 0;
}
//
省略部分代码
......
从以上代码可以看出,当
IoControlCode
为
0xb2c8000c
时,首先检查输入缓冲区长度是否等于
0x1448
,如果不等,则直接返回;如果相等,会将输入缓冲区中的
0x1448
字节复制到
&
dword_18BD8
指向的内存中,然后调用
sub_108F0
函数并返回。
下面我们再来分析分析
sub_108F0
函数的逻辑。
sub_108F0
函数如下:
char __cdecl sub_108F0()
{
const char *v0; // esi@1
const char *v1; // esi@3
const char *v2; // edi@5
int v4; // edi@7
//
省略部分代码
......
v2 = &byte_19418;
if ( byte_19418 )
{
do
{
sub_143EC(v2);
v2 += strlen(v2) + 1;
}
while ( *v2 );
}
*(_DWORD *)v2 = *(_DWORD *)aRw_fon;
v4 = (int)(v2 + 4);
*(_DWORD *)v4 = *(_DWORD *)&aRw_fon[4];
v4 += 4;
*(_WORD *)v4 = *(_WORD *)&aRw_fon[8];
*(_BYTE *)(v4 + 2) = aRw_fon[10];
sub_12374(0, 1);
return 1;
}
sub_108F0
函数中,首先让
v2
指针指向
byte_19418
这个变量,如果
byte_19418
不为空字节,则进入
do-while
循环,循环的条件是
v2
指向的字符不为空,这里暂且不考虑循环体中的
sub_143EC
函数,每次循环会移动
v2
指针到
v2
指向的字符串
'\0'
结尾的下一个字符处,即上面代码中的“
v2 += strlen(v2) + 1
”。直到
v2
指向的字符为空时,退出循环。接着后面几行很好理解,即将
aRw_fon
指针指向的
11
个字节写入
v2
指向的内存中。
上面我们要注意的是,在调用
sub_108F0
函数之前,从
&dword_18BD8
(即
aswmon2+18BD8
)开始的
0x1448
字节是我们可以控制的,而在
sub_108F0
函数中引用到的
&byte_19418
(即
aswmon2+19418
)开始的内存正好处于其中。这也就是说至少我们可以控制
sub_108F0
函数中
do-while
循环这段代码。另一方面,
aRw_fon
所指向的是一个静态字符串
"<RW>*.FON"
。
。。。。。。(详见附件中的样章)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
上传的附件:
24_样章.pdf
(651.06kb,153次下载)
收藏
・
0
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
2
)
QEver
雪 币:
233
活跃值:
(285)
能力值:
( LV12,RANK:270 )
在线值:
发帖
32
回帖
581
粉丝
4
关注
私信
QEver
5
2
楼
前排支持,期待出版中……
2011-2-28 16:30
0
高军
雪 币:
322
活跃值:
(113)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
204
粉丝
0
关注
私信
高军
3
楼
认真听课,期待出版
2011-2-28 16:35
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
shineast
4
20
发帖
60
回帖
170
RANK
关注
私信
他的文章
[原创]CVE-2014-4114 SandWorm 沙虫漏洞分析报告
9439
[注意]微软杯Exploit Me安全调试技术挑战赛 比赛结果
90256
微软杯Exploit Me安全调试技术挑战赛 赛题
107820
[原创]《0day安全第二版》样章发布:第1章 基础知识
82648
[原创]《0day安全第二版》样章发布5:第24章 内核漏洞案例分析
6400
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
谁下载
×
kanxue
amw1130906
icyfox
crazybug
zhuliang
RuShi
lclee
chuxuezhe
lonkil
sumter
xtiger
asklux
pcasa
坚持到底
Eter
wine
linxder
evilx
wangms
coolwxd
shineast
yets
popeylj
hawkish
pandaforum
feelsky
loudy
tenmoons
joshuki
xingjunjie
wyzpark
kurtw
COMPUTE
linxders
苏打
baiyik
tornodo
灏瀚潋
startion
huaxiang
dengyangpp
godsg
nhskyer
xinyuweb
bboyiori
可见光
ChiChou
qishuguang
hwli
nwgao
adomore
tujunhong
libeey
eddie
kindsjay
ImHolly
txawplh
FJX
寒冰心结
FthPku
elfchery
icebabay
wmhfzh
xiaojinge
pangziwuwu
kinglord
gdstcs
aiie
wootengxjj
mohaab
youstar
pourquio
Giwon
bluerust
sllssy
txx
小菜举手
dimk
nudtmao
tscu
failed
HitIt
sinsoul
正happy
ltvictory
hohell
ghban
fqhlxw
阳光不绣
Pursuer
cto
水晶蜗牛
cnssrstar
weiaimou
hwxk
桂花树下
Younth
落幕CC
ijajan
家园春浓
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部