Linux内核的内存子系统在处置惩罚写时拷贝(Copy-on-Write,缩写为COW)时保存条件竞争误差,导致可以破损私有只读内存映射。一个低权限的外地用户能够使用此误差获取其他只读内存映射的写权限,进而可以获取整个系统的最高权限。误差详情如下:
https://github.com/dirtycow/dirtycow.github.io/wiki/VulnerabilityDetails
误差验证程序
POC链接地点如下:
https://github.com/dirtycow/dirtycow.github.io/blob/master/dirtyc0w.c
受影响的规模
该误差从Linux内核版本>=2.6.22以后就最先保存,影响全版本Linux,直到2016年10月18日才修复。其中Red Hat、Debian和Ubuntu三个刊行版的受影响及修复情形见如下链接:
- Red Hat: https://access.redhat.com/security/cve/cve-2016-5195
- Debian: https://security-tracker.debian.org/tracker/CVE-2016-5195
- Ubuntu : http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-5195.html
误差剖析
COW=Copy On Write写时复制,当程序准备写一块映射的区域,则会天生一块映射的复制,对此区域的任何修改都不会写回原来的文件。在通常的情形下,若是在COW时间爆发了缺页异常,则处置惩罚缺页异常的函数handle_mm_fault()函数则会阻止页表写入并重试COW。
通常情形下,当一个程序写一个内存页,且这个物理页不可写的时间,会触发异常,由于目今物理页在用户空间,不在内核空间中。以是挪用handle_pte_fault,这个函数经由一系列的判断,发明是由于内存页不可写导致的异常,则会挪用do_wp_page来完成写时复制(COW)。不过,父子历程是以匿名映射来共享内存的,以是只需要完成reuse_swap_page即可。可是,会丧失FOLL_WRITE标记位。
若是另一个线程一直的告诉内核这个物理页不再需要、可以释放,当内核释放掉谁人物理页后,handle_mm_fault在处置惩罚一个读过失(!pte_present)从而获得一个pagecache也就是文件的缓存。从而破损私有映射完成只读文件的写入。
作者在修复代码中是这样处置惩罚的,在扫除映射的时间检查了COW状态和页表的脏位(dirty bit),如下图所示:
作者在代码中增添了一个COW的标识来体现COW是否完成,设置COW位为未完成。并且,当程序要写一块内存时,必需知足以下条件:
这块内存可写或者完成COW并且脏位被设置。这样就包管了程序不会在没有COW的情形下完成写操作。
LINUX内核外地提权误差修复建议
- 使用前一节所提刊行版Linux的用户,可以参考上述链接,凭证官方建议举行升级或按要求接纳规避步伐
- 用户可以凭证如下链接,修改内核源码,重新编译并装置Linux内核,即可修复: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619
- 使用AG公司科技的远程评估系统RSAS举行清静评估。
- 短期服务:AG公司科技工程师现场处置惩罚。确保第一时间消除网络内相关危害点,控制事务影响规模,提供事务剖析报告。
- 中期服务:提供 3-6个月的危害监控与巡检服务。根除危害,确保事务不复发。
- 恒久服务:基于行业营业危害解决计划(威胁情报+攻击溯源+专业清静服务)。
声 明
本清静通告仅用来形貌可能保存的清静问题,AG公司科技不为此清静通告提供任何包管或允许。由于撒播、使用此清静通告所提供的信息而造成的任何直接或者间接的效果及损失,均由使用者自己认真,AG公司科技以及清静通告作者不为此肩负任何责任。AG公司科技拥有对此清静通告的修改息争释权。如欲转载或撒播此清静通告,必需包管此清静通告的完整性,包括版权声明等所有内容。未经AG公司科技允许,不得恣意修改或者增减此清静通告内容,不得以任何方法将其用于商业目的。

AG公司云





