漏洞概述
脏牛提权(Dirty COW,CVE-2016-5195)是Linux内核中一个基于写时复制(COW)竞态条件的漏洞,允许低权限用户通过竞争内存页的写权限,修改受保护的只读文件(如/etc/passwd),进而将权限提升至root。
漏洞原理与触发条件
写时复制(COW)机制
Linux内核通过COW技术优化内存使用:当多个进程共享同一块内存时,只有某个进程尝试修改内容时,内核才会复制该页到新内存区域并标记为可写,原始页仍保持只读。例如,进程A和B共享内存页X,当A修改X时,内核会复制X为X'并允许A写入,而B继续读取原始X。竞态条件漏洞
脏牛漏洞利用了COW过程中的竞态条件:
- 线程A:对只读内存页发起写操作,触发COW机制,内核开始复制新页。
- 线程B:在复制完成前,通过
madvise(MADV_DONTNEED)
系统调用强制释放原始页的引用,导致内核错误地将原始页标记为可写。
通过反复操作,攻击者可绕过COW保护,直接写入原始只读页。漏洞触发条件
- 内核版本:受影响版本为Linux内核≥2.6.22(2007年发布),修复于2016年10月18日发布的4.8.3及以上版本。
- 本地访问权限:攻击者需先获得目标系统的局部权限(如普通用户账户)。
- 可写映射文件:需存在一个可写的映射文件(如拥有SUID/SGID权限的可执行文件)作为攻击载体。
漏洞利用步骤
- 选择攻击工具
常用公开工具包括:
- dirty.c:通过覆盖
/etc/passwd
文件中的root密码字段,创建新用户并赋予root权限。- 40616.c:利用类似原理,通过多线程竞争修改内存页权限。
- dcow.cpp:C++实现的漏洞利用程序,支持通过HTTP传输和编译执行。
- 编译与执行
以dirty.c
为例:gcc -pthread dirty.c -o dirty -lcrypt # 编译生成可执行文件 ./dirty my-new-password # 运行程序并设置新密码
程序会:
- 备份原始
/etc/passwd
到/tmp/passwd.bak
。- 修改文件中的root密码字段,插入新用户(如
firefart
)。- 提示用户通过
su firefart
或SSH登录新账户。- 提权验证
执行su root
或id
命令验证权限:su root # 输入新设置的密码 id # 若输出`uid=0(root)`,则提权成功
漏洞危害与防御措施
- 危害范围
- 全版本Linux系统:包括桌面版、服务器版及Android设备(因基于Linux内核)。
- 权限提升:低权限用户可绕过安全限制,执行任意命令或修改系统配置。
- 持久化控制:通过修改系统文件(如
/etc/sudoers
)实现长期驻留。- 防御措施
- 升级内核:将内核升级至4.8.3及以上版本,或应用厂商提供的补丁。
- 限制敏感文件权限:通过
chmod
减少非特权用户对/etc/passwd
、/etc/shadow
等文件的访问权限。- 使用安全工具:部署漏洞扫描工具(如
Linux Exploit Suggester
)定期检测系统风险。- 最小权限原则:避免为普通用户分配不必要的SUID/SGID权限。
实际案例与复现
- VulnHub靶机复现
在靶机lampiao
中,攻击者通过以下步骤利用脏牛漏洞:
- 使用
nmap
扫描目标端口,发现Drupal CMS存在远程代码执行漏洞(CVE-2018-7600)。- 通过Metasploit模块
drupal_drupalgeddon2
获取初始Shell(用户权限为www-data
)。- 上传
dcow.cpp
并编译执行,成功提权至root:g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil ./dcow # 运行后提示输入新密码 su root # 使用新密码切换至root
- 企业环境防御建议
- 补丁管理:建立自动化补丁更新机制,确保内核版本及时升级。
- 入侵检测:部署文件完整性监控工具(如AIDE),实时监测
/etc/passwd
等关键文件变更。- 用户隔离:通过容器化技术(如Docker)限制用户权限,减少攻击面。
结语
坚持你所热爱的
热爱你所坚持的
剩下的交给时间就好
!!!