脏牛漏洞原理

漏洞概述

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博客

posted @ 2023-03-29 13:01  lisenMiller  阅读(495)  评论(0)    收藏  举报