漏洞分析Dirty COW Attack Lab(自用,记录)

1 实验概述

Dirty COW是竞争危害中的一个有趣案例。自从2007年开始它就已经存在于Linux之中,但直到2016年10月份才被发现和利用。这一个漏洞几乎影响所有的以Linux为基础发展起来的操作系统,包括安卓,因此产生了严重的后果:攻击者可以通过该漏洞获得ROOT权限。该漏洞存在于Linux内核的Copy-On-Write(这就是为什么我们称为dirty COW Attack)代码中。通过该漏洞,攻击者可以修改任何受保护的文件,即便对于这些文件,攻击者仅有读权限。

本实验的主要目的是让学生获得D-COW-Attack的上手经验,了解竞争条件下产生的该漏洞。从而对于一般的竞争条件漏洞有了更深的理解。在本实验中,学生将学会利用该攻击来获得root权限

2 Task1:修改只读文件

该项任务的目的就是利用Dirty-COW漏洞来对一个只读文件进行写操作。

2.1 创建一个只读文件
首先,需要选择一个目标文件。虽然目标文件可以使系统内任一的可读文件,但是为了防止实验过程可能出现的错误影响系统的安全,将使用一个自己创建的只读文件。请在root目录下创建一个为zzz的文件,修改其对普通用户的权限为只读,然后利用编辑器例如gedit随意输入一些内容
在这里插入图片描述
由上面可以看到,zzz文件对于普通用户的权限为只读,所以,如果在普通用户下对该文件进行写操作会失败,接下来尝试对zzz文件写入,看看是否失败,验证一下
在这里插入图片描述
可以由上面看到,写入失败。但是,因为Dirty-COW在系统中的漏洞,我们可以找到方法来对该文件进行写入。我们的目标是把目标模式串“XXXXXX”用“******”进行替换。

2.2 设置内存映射线程
可以从实验的网站下载程序cow_attack.c。 (具体代码在文末)该程序拥有三个线程:主线程,写线程,madvise线程( madvise()这个函数可以对映射的内存提出使用建议,从而提高内存)。主线程的作用是把/zzz文件映射到内存中,并且定位到目标模式XXXXXX处,然后创建了两个新的线程来利用Dirty-COW竞争条件漏洞
在这里插入图片描述
在下面的代码中,我们可以看到,在定位到目标模式XXXXXX处的时候,程序使用了一个字符串strstr()来找XXXXXX在被映射的内存块里的位置,接着开始另外两个线程。
在这里插入图片描述在这里插入图片描述

2.3 设置写线程
写线程的任务即为在内存中用******实现对字符串XXXXXX的替换。由于被映射的内存块使用的是Copy-On-Write机制,单单运行该线程仅仅可以对内存中的/zzz文件的映像进行更改,并不能对磁盘上的/zzz文件内容有任何影响。
在这里插入图片描述

2.4 The madvise Thread
madvise()线程仅仅做一件事:抛弃在内存中更改前文件映像,以至于页表可以把指针指向会更改后的映射内存块。

madvise(MADV_DONTNEED)基本功能是清除被管理的内存映射的物理页。就当前情况而言,在调用完该函数后,提到的这些页将被clear。当下一次用户尝试访问这些内存区域时,原始的内容会重新从磁盘或者页缓存中导入,而对于匿名的堆内存,则会填充零。
在这里插入图片描述

2.5 发起攻击
如果write()和madvise()系统调用是交替被唤醒,比如一个调用总是在另一

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值