查看最新发布的 IE 漏洞利用的概述,我注意到我认为是汇编。我对漏洞利用开发一无所知,但我对汇编知之甚少。看到汇编代码,这是否意味着针对特定操作系统上的特定架构的漏洞利用?
如在,这是否意味着 IE 漏洞需要为每个操作系统(XP、Vista、7、8)开发一次,基于 32/64 位加倍,然后根据字节顺序再次加倍?
查看最新发布的 IE 漏洞利用的概述,我注意到我认为是汇编。我对漏洞利用开发一无所知,但我对汇编知之甚少。看到汇编代码,这是否意味着针对特定操作系统上的特定架构的漏洞利用?
如在,这是否意味着 IE 漏洞需要为每个操作系统(XP、Vista、7、8)开发一次,基于 32/64 位加倍,然后根据字节顺序再次加倍?
是的,大多数漏洞利用都依赖于平台。有细节。
例如,如果攻击者以 Internet Explorer 为目标,那么他的目标就是Windows 系统。大多数 Windows 系统在 x86 上运行。此外,在 Windows 7 之前,默认 IE 是 32 位版本,即使操作系统是 64 位 Windows。此外,在组装层面,XP、Vista 和 7 非常相似(确实,它们可以运行相同的应用程序,因此,从应用程序的角度来看,情况并没有太大变化)。
这意味着单个漏洞利用版本(32 位 x86,用于“Windows”)已经适用于绝大多数情况。勤奋的攻击者还会考虑为 Windows 8 提供 64 位版本,或者(极少数)使用 64 位 pre-8 操作系统并运行 64 位 IE 的用户。一个非常勤奋的攻击者会尝试为Surface RT制作 ARM 版本。
所有这些平台都是小端的。其他 CPU 的 IE 已经死了很长一段时间(我在 2000 年左右使用 Sparc/Solaris 版本,但它是 5.x 版本)。
重要的一点是攻击者不需要做太多的质量保证。如果攻击者发送给目标的内容不能在他当前未针对的其他机器上完美运行,这对攻击者来说不是问题。
漏洞利用取决于平台,因为每个平台可能有不同的处理内存布局和进程执行的方式。例如,在 WinXP 上执行漏洞利用会比在其他最新版本的 Windows 上更容易。特别是关于 IE 漏洞利用,它更多地与在某些浏览器函数或 DLL 中查找漏洞并利用这些漏洞绕过操作系统安全机制有关。
漏洞利用平台是否依赖?
是的。
如在,这是否意味着 IE 漏洞需要为每个操作系统(XP、Vista、7、8)开发一次,基于 32/64 位加倍,然后根据字节顺序再次加倍?
不。
汇编的使用不会使其更加依赖于平台。它只是依赖于平台,就像用 C 语言编写时一样(尽管对于大多数目的,C 使得定位那些不同的平台变得更加容易)。
您链接的页面并未指明漏洞利用的目标平台,仅显示 x86 代码。如果它还针对 x64,那仍然只有两个平台:x86 Windows 和 x64 Windows,即使对于这两个平台,代码也基本上是同构的(相似的)。仅仅因为它具有程序集这一事实并没有突然爆发支持在相同 CPU 架构上运行的不同版本的 Windows 的复杂性。
(只是为了强调一点:可移植程序集可以编写和编译一次,这样相同的机器代码块就可以在所有 Windows、OS X、Linux 和完全没有操作系统的情况下,在相同的 CPU 架构上执行。通过这种方式,汇编比其他语言更少依赖于平台,因为它需要更少的平台。不过,包含机器代码的标准可执行文件格式仍然是特定于操作系统的;例如,OS X 不知道如何加载一个 Windows .exe,即使里面的机器代码在加载后可以运行。)
字节顺序不是问题,因为 x86 和 x64 纯粹是小端。
另请注意,您看到的程序集是disassembly,因此不一定是用程序集编写的;它几乎可以用任何语言编写。由于这是一个漏洞,旨在做一些奇怪的语言外事情,它的骇人听闻的部分本来最容易用汇编本身编写,有些可能最容易用 C 编写,有些可能是用 C 开始的,反汇编,并适应组装。
所以简短的回答是,在漏洞利用中支持不同的 Windows 版本并不像你想象的那么困难。
跨浏览器或跨平台的漏洞利用是可能的。这将取决于库、框架和漏洞利用类型。
大多数漏洞利用将针对特定平台、特定版本等。漏洞利用是对逻辑的攻击,因此有可能编写一次代码,该代码将根据逻辑跨架构运行,但在某些情况下,您可能有针对更具体的架构。
例如,是利用一些编译器优化还是让它跳转到不同的指令。