linux本地内核提权漏洞 Dirty COW 成因分析

本文深入探讨Linux内核的Dirty COW漏洞,解释其核心成因,涉及写时复制机制的滥用,通过分析线程调用栈和关键函数,揭示漏洞如何发生。并介绍官方的修复策略。

        关于“Dirty COW" 的影响,这方面的文章网上写的太多了,但是关于此漏洞真实成因的文章却很缺乏,基于此,我写了这篇文章,希望对想深入研究的人一些帮助。

脏牛漏洞核心成因:

  • 攻击思想主要就是穿透写时复制机制(COW),所以首先需要构造能产生COW的场景,这个场景就是:

先用读方式去映射这个特权文件,然后再以写远端进程内存的方式去访问这段映射内存,操作系统为支持进程调试机制,相对比较友好,就会给你COW页面了(不会直接给你访问违例)。

  • 第二步就是欺骗操作系统把原始页(而不是备份页)返回给我们

那要怎样欺骗OS让他出错呢?

通过两个线构造竞争场景(对映射物理页的操作产生竞争关系)

1.一个线程告诉OS映射物理页我不需要了

2.另一个线程又不断以远端进程内存的方式去写这段映射物理页

 

  • 这种竞争条件下就会有两种结果:

1.映射物理页加载了,产生COW页

<think>好的,我现在需要回答用户关于Dirty COW漏洞原理及利用方法的问题。首先,我需要回忆一下关于这个漏洞的基本信息,并确保引用的资料正确。 根据用户供的引用内容,Dirty COW漏洞(CVE-2016-5195)是一个Linux内核中的竞态条件漏洞,影响所有基于Linux的系统,包括Android,存在时间从2007年到2016年修复。漏洞原理涉及写时复制(Copy-on-Write, COW)机制中的竞态条件。用户还到了利用该漏洞可以修改受保护的文件并,引用[3]和[4]具体到了这一点。 接下来,我需要组织回答的结构。首先解释漏洞的基本原理,然后说明利用方法。在原理部分,需要说明写时复制的机制,以及竞态条件是如何被触发的。在利用方法方面,可能需要到如何通过多线程操作来竞争内存页的可写状态,从而覆盖只读文件或。 需要确保使用正确的中文术语,并且所有数学表达式或代码用合适的格式。例如,代码示例需要用代码块,而像内存地址或函数名可能需要用行内代码格式。 另外,用户供的引用[3]详细说明了漏洞是竞态条件,而引用[4]给出了利用漏洞的步骤,比如编译exp并执行。需要将这些信息整合到回答中,并在适当的位置添加引用标识。例如,在漏洞存在时间时引用[3],在利用步骤时引用[4]。 可能还需要比较Dirty COWDirty Pipe的区别,因为用户到了Dirty Pipe(CVE-2022-0847),但这里的问题是关于Dirty COW的,所以需要明确区分两者,但可能作为扩展信息到。 需要注意用户供的引用中有到exp的使用,比如编译dirty.c,设置密码等步骤,这些需要详细描述,但要注意不要供实际的攻击代码,而是说明步骤。 最后,生成相关问题,可能需要包括漏洞影响版本、防御措施、与其他漏洞的比较等。 现在需要检查是否有遗漏的信息,比如漏洞的根本原因,具体如何通过COW机制导致,以及利用时的具体步骤,比如如何修改/etc/passwd等敏感文件。 总结,回答的结构大致如下: 1. 漏洞概述:时间、影响、基本原因 2. 原理详解:COW机制、竞态条件如何被利用 3. 利用方法:步骤说明,可能包括修改文件或的过程 4. 引用标识的正确放置 5. 相关问题生成 确保所有技术术语准确,并且符合用户供的引用内容。</think>### Dirty COW 漏洞原理及利用方法 #### 1. 漏洞概述 Dirty COW(CVE-2016-5195)是 Linux 内核中的一个**写时复制(Copy-on-Write, COW)竞态条件漏洞**,2007 年起存在于内核代码中,直到 2016 年才被发现并修复[^3]。该漏洞允许攻击者修改受保护的只读文件(如 `/etc/passwd`),从而将普通用户升至 root 限。 #### 2. 漏洞原理 **关键机制:写时复制(COW)** 当进程尝试修改只读内存页时,内核会复制该页到新内存区域,并标记为可写。原始页仍保持只读,其他进程继续共享它[^3]。 **竞态条件触发** 漏洞通过以下步骤触发: 1. 线程 A:对只读内存页发起写操作,触发 COW 机制,内核开始复制新页。 2. 线程 B:在复制完成前,强制释放原始内存页的引用,使内核错误地将原始页标记为可写。 3. 攻击者通过反复操作,最终写入原始只读页,修改受保护文件(如相关的系统文件)。 $$漏洞条件:\text{COW 复制延迟} \cap \text{内存页释放操作} \rightarrow \text{限绕过}$$ #### 3. 利用方法 **典型利用步骤** 1. **编译 EXP**:使用公开的漏洞利用代码(如 `dirty.c`),编译生成可执行文件: ```bash gcc -pthread dirty.c -o dirty -lcrypt ``` 2. **执行攻击**:运行 EXP 并设置新密码,覆盖 `/etc/passwd` 文件中的 root 密码字段: ```bash ./dirty 新密码 ``` 3. **验证**:通过 `su` 命令切换至 root 用户,使用新密码完成[^4]。 **防御措施** - 升级内核至修复版本(4.8.3 及以上) - 限制非特用户对敏感文件的访问限 #### 4. 对比:Dirty COWDirty Pipe - **Dirty Pipe(CVE-2022-0847)**:影响内核 5.8+,通过管道机制覆盖只读文件,无需依赖 COW[^1]。 - **Dirty COW**:依赖 COW 竞态条件,影响更广泛的内核版本[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值