首页
社区
课程
招聘
简单吐槽一下dirtyCow
发表于: 2016-10-26 11:28 14010

简单吐槽一下dirtyCow

2016-10-26 11:28
14010

本来是来论坛看看有没有分享相关内容的,结果只看到了一个测试poc的帖子~~

来简单说说本人的分析。
这个漏洞涉及到的内核代码很复杂,如果没有相关基础的童鞋,建议还是放弃分析吧。

我是按照 https://github.com/dirtycow/dirtycow.github.io/wiki/VulnerabilityDetails 上的介绍,把相关流程看了一遍。简单介绍一下漏洞的触发流程。

1. 要写入的文件f必须可读,这样才能以read only模式打开文件f,并映射到内存空间
2. 把read only模式打开的文件映射到内存空间之后,以read write方式打开/proc/self/mem,这个文件就是本进程的内存,所以打开的mem是可写的。
3. 写mem,由于文件f是只读的,所以会触发Copy-On-Write,复制一份内存,复制完了之后,系统会认为新复制的内存页完全属于该进程,所以可以写。这时候会触发罪魁祸首的一段一代

1883				/*
1884				 * The VM_FAULT_WRITE bit tells us that
1885				 * do_wp_page has broken COW when necessary,
1886				 * even if maybe_mkwrite decided not to set
1887				 * pte_write. We can thus safely do subsequent
1888				 * page lookups as if they were reads. But only
1889				 * do so when looping for pte_write is futile:
1890				 * in some cases userspace may also be wanting
1891				 * to write to the gotten user page, which a
1892				 * read fault here might prevent (a readonly
1893				 * page might get reCOWed by userspace write).
1894				 */
1895				if ((ret & VM_FAULT_WRITE) &&
1896				    !(vma->vm_flags & VM_WRITE))
1897					foll_flags &= ~FOLL_WRITE;
1898
1899				cond_resched();

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (4)
雪    币: 53
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
分析得很好,在android上root的最大的难点就在于怎么绕过selinux。
2016-10-26 12:46
0
雪    币: 6956
活跃值: (1517)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
3
是呢.. selinux 在android上很头疼!!
2016-10-26 13:37
0
雪    币: 6
活跃值: (1201)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错,不过似乎还没有分析到关键
2016-10-28 18:10
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主分析得没错,关键就是FOLL_WRITE被清了
2016-10-28 19:26
0
游客
登录 | 注册 方可回帖
返回
//