针对 Internet Explorer 版本 9 到 11 的零日漏洞利用

信息安全 网页浏览器 开发 零日 IE浏览器
2021-08-23 07:51:58

几天前,FireEye 发现了一个漏洞,该漏洞影响所有版本的 IE(甚至是最新的 11)。微软对此问题有官方声明。

FireEye在他们的博客上写了一篇技术文章,解释了细节:

该漏洞利用以前未知的释放后使用漏洞,并使用众所周知的 Flash 漏洞利用技术来实现任意内存访问并绕过 Windows 的 ASLR 和 DEP 保护。

和剥削。虽然我认为我理解了要点,但如果有人能用更简单的术语解释它,我会很高兴。我真的很喜欢阅读关于 openSsl 中 heartbleed 漏洞的解释,并希望有人能以类似的方式解释它。

2个回答

我真的不知道提问者或这里的任何人/每个人的技术能力水平如何,所以让我们试着从最底层开始,用我能做到的最简单的语言进行工作。如果您拥有计算机科学硕士学位,或者您是 ROP 传奇人物或其他任何人,请不要被冒犯...

为了理解所讨论的漏洞利用,即使是在基本层面上,您也需要对计算机的计算方式有所了解,即您需要了解“存储程序控制”机器的基本原理。一旦你掌握了这一点,我们就可以讨论一般的缓冲区溢出攻击。然后,一旦我们了解了缓冲区溢出,我们就对这两件事都有了理解,我们可以开始查看具体的示例,尽管如此,使用这些更高级技术中的一些的相对高级的示例,并希望真正了解它们的任何细节。

从最底部开始,让我们简单谈谈计算机如何计算或处理器如何处理......在您的计算机中,您有一个 CPU,而 CPU 有各种寄存器,它可以在这些寄存器上进行直接的数学运算。计算机也有内存,程序从这里加载和运行。有一个称为指令指针的特殊寄存器,它的工作是指向内存中当前正在运行的程序指令所在的位置,以便 CPU 可以获取并执行它。它会一一执行指令,直到跳转或分支或返回等。然后它将更改指令指针,使其指向内存中的不同位置并继续执行。这个指令指针非常重要。如果你能劫持它,你也许可以让计算机运行你放在内存其他地方的东西。见过那些写着“Got EIP”的 T 恤吗?这就是我们在这里所说的。如果你能控制 EIP,你就可以控制机器。

现在,让我们从这个“机器级别”“上移”一点。大多数现代编程语言都有这个子程序调用的概念。这将导致指令指针跳转到函数代码所在的新内存区域。该函数将运行直到完成,然后控制权将返回到主程序,导致指令指针被设置回主函数中之前停止执行的位置。为了简化一点……所以你已经让这个程序运行了,它一直运行到它得到一个函数调用。函数调用会将执行移动到内存中的不同位置。然后它将在新位置运行,直到返回。此时它必须返回主函数。应该清楚的是机器会记住初始值,初始指令指针的值,否则它不会知道这里返回。这称为返回指针。因此返回指针包含调用函数的地址,并存储在称为堆栈的数据结构(在内存中)中。堆栈以 LIFO 方式工作,后进先出,因此它被称为“堆栈”。最后进的就是第一个出的。通常堆栈包含与函数调用相关的东西。将堆栈视为一种用于记住小事的便笺。因此,当进行函数调用时,首先被压入堆栈的是函数调用参数..如果有的话..然后它将主程序中的指令指针的值压入堆栈(返回指针)。然后调用函数本身,并在堆栈上为函数本身的局部变量分配空间。该函数一直执行它,直到它返回。在这一点上,这些局部变量从堆栈中退出(弹出),然后返回指针被弹出,并且再次被设置为指令指针 - 我们返回到主程序中的执行。这实际上在您面前的计算机上每秒发生数百万次。

现在,让我们进入缓冲区溢出错误。缓冲区溢出一类称为代码错误的错误。缓冲区溢出已经有几十年的历史了,但直到 1996 年 Aleph One 的开创性论文“Smashing the Stack for Fun and Profit”出现在 Phrack 杂志第 49 期时才成为主流。即使在今天,它也值得一读。缓冲区溢出允许攻击者将数据发送到目标机器并执行一些代码,即在盒子上获得 root/admin。有些在本地工作,有些在网络上工作。基本思想是一个程序接受用户输入,但在移动数据之前没有正确检查数据的大小。这是关于没有对输入字段进行适当的边界检查。想想把很大的东西塞进一个小盒子里。我赢了'

几小时后回来查看。我得马上去。我会回来的。我将讨论有问题的具体漏洞。抱歉,如果此站点的这种非典型或常见行为,我是新来的。只去过几次。

我会尽量简单。浏览器漏洞利用是客户端漏洞,可用于绕过浏览器的沙箱环境以及操作系统,以获得机器上的升级权限。

释放后使用漏洞:UAF 是一个典型的浏览器漏洞,几乎在所有流行的浏览器中都频繁出现。在此漏洞中,攻击者首先创建一个 Javascript 对象,然后将其删除。一旦对象被删除或释放,脚本就会尝试再次访问同一个对象。这会导致浏览器内部的内存损坏。现在,为了准确定位内存位置以控制指针,攻击者使用内存喷射技术,如堆喷射面向返回的编程 (ROP)根据操作系统的类型,攻击者采用不同的技术在内存中喷洒垃圾数据,并在成功利用后启动有效载荷。

我试图变得简单。希望它可以帮助你。