漏洞概述
dirty cow漏洞是一种发生在写时复制的竞态条件产生的漏洞
写时复制(copy on write)
允许不同进程中的虚拟内存映射到相同物理内存页面的技术
三个重要流程
A:制作映射内存的副本
B:更新页表,是的虚拟内存指向新创建的物理内存
C 写入内存
tips:他们可以被其他线程中断从而产生潜在的竞态条件
漏洞成因1 mmap()函数
系统调用mmap() 将文件或者设备映射到进程内存的系统调用(对进程内存的读写就是文件的读写)
mmap()函数包含几个参数
参数1和2是映射内存区域的起始地址和大小 参数3:指定映射方式(map_shared,map_private)
参数解析
map_shared是指当多个线程将同一个文件映射到自己的虚拟地址中,它们都共享同一个物理内存块,说通俗点就是共享内存,
map_private则是将文件映射到进程的私有内存
关键点:map_private允许程序通过WRITE系统调用往物理内存块的副本中写入数据,这为我们后面的利用创造了条件。
总结:写时复制可能会具有竞态条件的漏洞
漏洞成因2 madvise()函数
关键点:madvise(),这个调用通过指定第三个参数为MADV_DONOTNEED告诉内核不再需要声明地址部分的内存,内核将释放该地址的资源,进程的页表会重新指向原始的物理内存。
漏洞利用
学习链接:(17条消息) Dirty COW漏洞原理与简单利用_dirtycow_卖行家的小报纸的博客-CSDN博客
标签:map,映射,mmap,private,漏洞,脏牛,内存,原理 From: https://www.cnblogs.com/lisenMiller/p/17268539.html