0day安全:软件漏洞分析技术——系统内核漏洞

     本文是阅读《0day安全:软件漏洞分析技术》后的笔记。
     内核漏洞主要的作用包括:远程任意代码执行,本地权限提升,远程拒绝服务攻击,本地拒绝服务攻击。从漏洞的利用来看,远程拒绝服务和本地拒绝服务类型的内核漏洞利用起来比较简单,不必过多地考虑“构造”(构造漏洞成功触发的条件和数据)。相反,远程任意代码执行和本地权限提升类型的内核漏洞,利用起来往往比较复杂,需要有精心的构造,包括漏洞触发条件的构造,相关数据的构造等。

从公布的漏洞数量来看,远程任意代码执行类型的内核漏洞已经很少见了,更多的是本地权限提升类型的内核漏洞。(说的没错,老铁!!!)
在这里插入图片描述
    目前主要有这三种:任意地址写任意数据固定地址写任意数据任意地址写固定数据类型的内核漏洞。
    目前常见的内核漏洞利用方法主要有两种:一是篡改内核内存数据;二是执行 Ring0 Shellcode。

    执行 Ring0 Shellcode的实现:
    例如 SSDT(SystemService Dispatch Table)、HalDispatchTable 等。如果能修改这些表中的内核 API 函数地址为事先准备好的 ShellCode 存放的地址(本进程空间内存地址),然后在本进程中调用这个内核 API函数,这样便实现了在 Ring0 权限下执行 Shellcode 的目的。
    在选用内核 API 函数的时候,一定要选用那些“冷门”函数,最好是那些不常被调用的函数。因为我们的 Shellcode 保存在自己进程的 Ring3 内存地址中,别的进程无法访问到,别的进程一旦也调用这个内核 API 函数,就会导致内存访问错误或内核崩溃,是相当危险的。

    调用门/中断门/任务门/陷阱门。有兴趣的可以学习一下四门机制。
    四门机制是出入 Ring0/Ring3 的重要手段。若能在系统中成功添加一个门,就能在后续代码中,自由出入 Ring0 和 Ring3。
    这里以调用门为例,展示如何利用瑞星这个漏洞向系统中添加一个调用门。调用门描述符可以放在 GDT、LDT 中,但是不能放在 IDT 中。在 Windows XP 中,没有 LDT。也就是说,我们要添加调用门需要修改 GDT。Ring3 实际上是可以获取 GDT 地址的,通过 sgdt 指令即可。因此我们的思路就是,在 Ring3 获取 GDT 地址,然后通过这个漏洞来修改 GDT,添加调用门。
在这里插入图片描述
GDT 中 0x03e8 偏移处的段选择子的各字段含义

    DPL 为 3 表示 Ring3 有权限调用,调用无参数。DT=0,说明是系统段描述符和门描述符。类型为二进制的 1010,即 0xA,表示“执行/读”属性。
在这里插入图片描述
    调用此新添加的调用门后,实际上是以 Ring0 权限调用了 GDT 中 0 偏移处的代码,而 GDT 偏移处的第一个指令是一条返回指令,即 0xC3。那么在 Ring3 调用该调用门后,就会直接返回,并且携带有 Ring0 的权限。

在这里插入图片描述
    利用过程可以大致分成以下 5 个步骤:

  1. 获取 HalDispatchTable 表地址
    HalDispatchTable 是由内核模块导出的。要得到 HalDispatchTable 在内核中的准确地址,首
    先要得到内核模块的基址,再加上 HalDispatchTable 与内核模块基址的偏移。
    有了这个表的地址 x,那么x+4 便存放的是 HalQuerySystemInformation 函数地址。
  2. 在 0x0 处申请一段内存,并写入 Ring0 Shellcode
    在指定的地址申请内存,推荐使用 ZwAllocateVirtualMemory 函数,该函数第二个参数BaseAddress 是一个指针,指向的值便是您指定的要申请内存的地址。系统会从指定的地址开始向下搜寻,找到一段需要大小的内存。
  3. 利用漏洞向地址 x+4写入 0x0
  4. 调用 NtQueryIntervalProfile 函数

首先,感谢任何一个阅读,关注或点赞我博客的朋友!! 当然博客中的任何问题都欢迎大家随时指出! 欢迎有兴趣的人私信留下你的联系方式,我们可以一起沟通,一起学习哦!我的学习交流QQ群366469549。 再次感谢大家的支持!!! 我会再接再厉的!!!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摔不死的笨鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值