Pegasus iOS 漏洞利用和内核内存损坏

信息安全 恶意软件 开发 IOS 核心 苹果浏览器
2021-09-12 00:26:45

我目前正在 Lookout 博客文章中阅读有关 Pegasus 的信息,这是 iOS 上使用 3 个零日漏洞的恶意软件。

关于飞马的博客文章

我是第一年的一名 cs 学生,我知道恶意软件需要获得内核权限才能完全控制系统,但我不明白这个过程是如何工作的。我真的很好奇,并考虑在以后的学习中专攻信息安全。

特别是:

  1. Pegasus(以某种方式在网站上运行?抱歉,我从来没有做过 web 开发)如何从 safari 进入内核?它是否使用恶意 javascript 代码或者我应该如何想象?那么它是如何破坏 webkit 的内存的,为什么给我那个内存位置呢?

  2. 为什么程序/攻击者知道内核的内存位置是不好的?我以为内核内存受到保护?

  3. 破坏内核内存如何导致越狱?据我了解,内存损坏只是覆盖了另一个程序使用的内存,对吗?为什么内核要在内存位置执行新代码?

提前致谢!

1个回答

该漏洞利用三个漏洞的组合。每个漏洞都是 iOS 组件中的一个错误,允许攻击者做一些不应该做的事情。

第 1 阶段 ( CVE-2016-4657 ) 是 WebKit 中的一个错误,WebKit是一个用于呈现网页的代码库。WebKit 代码在 iOS 的 Safari 网络浏览器的上下文中执行。尚未发布任何详细信息,仅描述为“通过改进内存处理解决了内存损坏问题”。这可能是缓冲区溢出释放后使用,或其他一些类似类型的错误。内存损坏错误的一般概念是攻击者传递不一致的数据(这里是一些网页内容——可能是 HTML、CSS、JavaScript 等),而不是检测不一致,程序以不一致的方式运行并最终覆盖它自己的一些指令以及攻击者提供的数据。这允许攻击者在 Safari 中执行他们选择的代码。

第 3 阶段 ( CVE-2016-4656 ) 也是一个内存损坏错误,尚未发布任何详细信息,但这次是在内核中。此错误允许 iOS 应用程序破坏内核中的某些数据结构并在内核中执行代码或(我怀疑给出了描述)至少提升调用应用程序的权限,以便它可以执行应用程序不应该做的事情要做的事情,例如安装绕过正常 iOS 权限的程序,因此允许安装不会显示在已安装应用程序列表中的间谍软件,因为它伪装成基本操作系统的一部分。

第 2 阶段(CVE-2016-4655) 是第 3 阶段的促成因素。通常,程序知道内核如何映射其内存并不重要。如果攻击者能够使内核执行任意代码,那么游戏就失败了。但是可能会发生(这里可能就是这种情况),攻击者没有太多的发挥空间。例如,可能存在一个大小检查,但略有偏差,因此攻击者只能覆盖注入数据所在位置之后的几个字节。在这种情况下,攻击者可能需要确切地知道在该位置放置什么,否则他们将无法产生任何有趣的效果。如果他们可以覆盖的位置是一个指针,他们需要知道放在那里的内容会导致内核使用有效但错误的数据,而不是只会导致崩溃的无效指针。例如,将指向功能列表的指针更改为内存中已知包含看起来像包含一些关键系统功能的列表的位置的地址。为此,知道内核映射其数据的位置可以让攻击者计算正确的指针值。

为了清楚起见,我只是给出了符合此时已发布的单行描述的合理攻击方法的示例。

了解其工作原理的最佳方法是自己编写一些漏洞利用。获取一些具有已知可利用漏洞的旧版本软件(最好是开源的),然后编写一个漏洞利用程序。您可能还想玩一些 CTF