首页
论坛
课程
招聘
[原创]NCSTISC Linux Kernel的另一种解法(浅析)
2019-2-13 19:39 4881

[原创]NCSTISC Linux Kernel的另一种解法(浅析)

2019-2-13 19:39
4881
关于这个linux kernel pwn的细节不再赘述,网上已经有很多啦,感兴趣的小伙伴可以阅读,这里我提供一下我博客关于这道题的writeup地址:
https://whereisk0shl.top/NCSTISC%20Linux%20Kernel%20pwn450%20writeup.html

我会在帖子中简单讲解一下,同时会和real world中的漏洞做一些简单比对,这样相结合的分析,能对未来real world中漏洞挖掘有一些帮助。

之前看了很多小伙伴讨论了关于tty_struct的细节,我和ling在做这道题目的时候参考了0ctf的题目所以使用了tty_struct,后来和atum聊过之后发现用cred也是可以的,但并不是所有都适用,但因为这个题目的品相非常好,在real world中如果有这样的条件的,可以算是极品漏洞:1、申请内核空间的大小可控,2、object写入位置可控,在real world中如果有这样的条件,可以说无所不能,而且面对各种mitigation都是很有杀伤力的。

今天是熟悉的patch tuesday,下symbol很慢无聊就在我之前博客提供的exp代码基础上修改了一下,写了这道题用cred的解法,因为slab分配器可以用cred占用之前题目kfree之后留下的内存空洞,而我们可以打开两个设备A和设备B,通过close 设备A,让全局buffer调用kfree释放掉,这样相当于我们得到了一个dangling pointer,之后通过操作设备B达到一个UAF的效果,这里之所以我的博客中提到是一个伪条件竞争,因为这种情况是几乎不可能在real world中出现的,真正的real world中的条件竞争,是需要通过在某个时间窗内操作全局变量完成race,这道题目严格意义上来说只是一个UAF。

因为设备B可以用write直接写入,那么我们可以通过修改cred的uid等等成员变量来直接提升权限。



左侧rdi是要写入的地址,可以看到此时已经覆盖上cred了,之后会调用copy_from_user写入,在real world的内核研究,无论是win,linux还是macos等等,对用户空间到内核空间的拷贝,或者内核空间到用户空间的拷贝的函数都是极为敏感的,因为它们很有可能造成oob r/w等各种问题,前段时间gp0的内核巨佬j00ru公开的bochspwn源码的一个主要思路也是在U->K, K->U这类双向拷贝上做文章。

这里直接贴出代码,关于这个漏洞已经被很多小伙伴分析过了,就不再赘述了。虽然我不是一个真正的ctf选手,只是日常帮战队打打酱油,但是我觉得这类题目研究还是很有意义的,而且近几年看战队的小伙伴参加CTF比赛,发现很多CTF比赛越来越贴近real world,而这类题目除了单纯的解题外,还需要阅读很多内核源码了解诸如slab,slub这种分配器的内存分配机制等等,对未来real world的安全研究还是很有意义的。


[公告]《CTF高级解混淆》训练营,国际顶尖CTF战队大牛亲自授课,助你快速成长!

最后于 2019-2-14 09:09 被Keoyo编辑 ,原因:
上传的附件:
收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 268
活跃值: 活跃值 (809)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bbsshop 活跃值 2019-2-14 09:49
2
0
游客
登录 | 注册 方可回帖
返回