Rootkit 和其他低级恶意软件如何仍能在受安全启动(和 TB/MB)保护的系统上加载?

信息安全 视窗 恶意软件 开机 uefi 核心
2021-08-27 05:57:34

让我试着这样问我的问题......

假设我是一个攻击性网络坏人,为外国政府资助的高级持续威胁部门工作。例如,我的部门被指控从美国公司窃取高价值知识产权。(具体的上下文并不重要;“场景”只是为了帮助我展示我要问的问题。)

我的团队正在准备……比方说,针对美国多家公司的一组知名研发主管进行鱼叉式钓鱼活动。(同样,场景细节并不重要。)我的团队有一些 pdf 阅读器漏洞可供阅读,还有一些 Windows 权限升级漏洞可以继续使用,并获取我们决定植入内核级权限的任何恶意软件有效负载。

(另一个团队负责在我们的目标中入侵 Mac 用户。:))

无论如何,假设我负责将恶意软件有效负载放在一起,该有效负载将适用于所有现代版本的 Windows。当然,我会想安装一个模块,它可以通过我喜欢的任何途径秘密地监听命令和泄露信息。可能我也会马上在那里放一个键盘记录器。当然,一个组件可以加载和安装我可能决定在初始渗透完成后上传的任何其他模块和工具,并且我想继续查看目标网络中有趣的内容并找到一些多汁的 IP 来窃取。平常的东西。

但是,我还需要 从反恶意软件、系统管理软件、手动检查(使用 TaskManager、Sysinternals 工具等),甚至可能是 HIDS中隐藏所有这些东西。我还希望我的恶意软件能够在最大范围内持续存在我真的希望它能够存活下来,例如,安装 Windows 更新和升级、尝试删除恶意软件(如果应该检测到),甚至是圣杯:擦除和操作系统重新安装。

现在,如果我们谈论的是使用传统 BIOS 攻击 PC 并运行 Windows 7 或更早版本,我有很多选择。我可以使用许多 rootkit 中的任何一个来让我的恶意软件加载最低级别的 Windows 内核,绕过 Windows 的防御并在安全软件加载之前破坏它的检测能力。我可以使用bootkit攻击主引导记录并在 Windows 引导加载程序启动之前加载部分恶意软件。如果我正在为一个真正先进的高级持续性威胁单元工作,我什至可以为来自多个 BIOS 制造商的东西提供多个BIOS 植入选项。有很多选择。

但是,我还需要我的恶意软件逃避检测并在具有 UEFI 且运行 Windows 8.1 或 Windows 10 的较新 Windows PC 上持续存在。

这就是我遇到一个大问题的地方。因为 Windows 8.1 和 10 具有一组专门设计用于阻止低级恶意软件在操作系统和反恶意软件加载之前加载的保护

对策

Windows 8.1 支持四种功能来帮助防止在启动过程中加载 rootkit 和 bootkit:

-安全启动。具有 UEFI 固件和受信任平台模块 (TPM) 的 PC 可以配置为仅加载受信任的操作系统引导加载程序。

- 受信任的引导。Windows 在加载它之前检查启动过程的每个组件的完整性。

- 早期启动反恶意软件 (ELAM)。ELAM 在加载之前测试所有驱动程序,并防止加载未经批准的驱动程序。

-测量引导。PC 的固件会记录启动过程,Windows 可以将其发送到可以客观评估 PC 健康状况的可信服务器。

(这里这里的问题答案也有助于解释安全启动、可信启动、ELAM 和测量启动的工作原理,尽管它们在这里没有解决我的问题。)

在 TechNet 帖子的结尾,描述了这些保护措施及其工作原理,Microsoft 毫不避讳地吹嘘它们:

Secure Boot、Trusted Boot 和 Measured Boot 创建了一种从根本上抵抗 bootkit 和 rootkit 的架构。在 Windows 8.1 中,这些功能有可能从您的网络中消除内核级恶意软件。这是 Windows 有史以来最具突破性的反恶意软件解决方案:它超越了其他一切。使用 Windows 8.1,您可以真正信任操作系统的完整性。

因此,作为一个仍然非常希望将我的恶意软件植入目标 PC 深处的坏人——即。内核级、引导加载程序级或 UEFI 级——因此它将逃避检测并尽可能长时间地持续存在,在受安全引导/可信引导/等保护的系统上存在哪些方法和方法可以做到这一点。? 换句话说,一个坏人有什么选择可以绕过这些保护措施,让他的恶意软件组件在启动的早期仍然加载?

额外问题:在阻止那些攻击者方法以规避这些启动保护方面,防御者可能想要考虑哪些关键对策?

笔记:

  • 我在这里使用 Windows 是因为它在工作/企业客户端环境中占主导地位,并且因为它是我最熟悉的专业生态系统。但是,我很清楚这些保护现在存在于许多其他平台上。如果您愿意,请随意谈论这些引导保护和攻击者方法以更普遍地绕过它们。

  • 为简单起见,假设我的 APT 单位不如Ft 的人先进。Meade或安全研究人员设法将恶意软件隐藏在非 UEFI 系统部件(如网卡、视频卡等)的固件中。

  • 这个问题谈到了微软用来验证开发人员身份的业务流程的安全性以及组件的非恶意性,然后才会签署该组件,以便在启动期间加载该组件。一个非常有趣的问题/答案,但不是真正了解我想要了解的问题。

  • “信息丰富的”微软图表:

Windows 8.1 启动过程

4个回答

一个简单的答案是实现这些安全功能的代码中的错误。例如,最近发布的CVE-2015-2552允许在启用了安全启动的系统上加载未签名(好吧,测试签名,这几乎是一样的东西)驱动程序。UEFI 实现(和其他低级代码)中也存在许多错误,这些错误允许人们绕过某些检查,甚至完全禁用安全启动,可能在操作系统仍然认为它已启用时(这些主要在设备上发现,例如手机和平板电脑,所有者希望安装自定义操作系统映像,但 OEM 不希望允许这样做,但也可能适用于 PC)。

可以选择简单地解决安全启动问题。例如,所有 Win8.x PC 都必须允许用户禁用安全启动和/或添加自己的签名密钥(执行任一操作都将允许攻击者用攻击者的代码替换启动过程中受信任的组件)。这通常需要对 PC 进行物理访问,但这通常可以通过例如“邪恶女仆”攻击来实现。引导密码(或至少是固件设置实用程序上的密码)可以防止这种情况发生,但可能会被硬件键盘记录器破解。

另一种可能性是低于EFI。如果攻击者可以修改运行在(例如)硬盘上的固件- 这已经被证明至少在某些情况下是可能的——那么攻击者可以做各种各样的事情。例如,能够以软件扫描的方式访问所有已保存数据的间谍软件——无论多么低级别(甚至是原始块设备访问)——都无法检测到。签名检查可能容易受到使用时间检查漏洞的影响,其中数据在一次传递中被散列(用于签名检查),但随后再次读取磁盘以进行实际执行;如果“drivekit”能够判断哪些读取用于签名检查以及哪些用于执行,则它可以利用这一点。类似的攻击可以针对网卡之类的东西进行,尽管硬盘是一个特别有趣的目标,因为它既可以存储大量恶意代码,又可以查看计算机曾经访问过的几乎所有数据。

还有一些方法可以实现大量攻击,而无需在单台机器上绝对持久。例如,如果我可以将恶意软件添加到您的安装媒体中,那么重新安装操作系统对您没有帮助。如果恶意软件通过受感染的闪存驱动器或其他外围设备/附件传播,那么它可能会在没有任何明确的利用向量的情况下持续传播到整个组织(想想 Stuxnet)。或者,只要网络上至少存在一台受感染的机器并且漏洞利用仍然可以利用,多主机网络中的蠕虫可以在连接到网络时立即感染新的(或者更确切地说是新重新格式化的)机器。即使检测到此类恶意软件,实际上根除它也可能非常困难。

欢迎提出问题、更正、澄清和可能实现此类攻击的其他方式。

您可以通过破坏 UEFI 固件来坚持下去,这样做非常容易(对于国家资助的攻击者而言)。在大多数消费级机器上,固件映像没有签名检查,因此您可以安装恶意固件,并且由于该固件强制执行安全启动,因此您可以绕过安全启动。就我个人而言,我只知道戴尔 Latitude 和联想 Thinkpad 允许要求制造商对固件映像进行签名,即使这样,默认情况下它也是禁用的,这意味着您可能已经在运行受损固件。

TPM 支持的功能基于从固件开始并一直延伸到操作系统的信任链。如果您拥有固件,您可以轻松地向 TPM 提供虚假数据,以使 PCR 匹配正确的值,即使系统受到损害。这可以通过将一小部分固件设置为只读的方式来缓解,这样它就不会被软件破坏(因此不会对 TPM 撒谎关于可能被破坏的下一个组件的哈希值),或者给出TPM 直接访问固件内存芯片,因此它甚至可以在执行其中的潜在恶意代码之前自行测量它们。

许多计算机安全增强功能使一般攻击者难以访问计算机,同时仍然允许西方政府轻松破解它们。因此,很大程度上取决于您的假冒攻击者是否能够获得西方政府已知的特殊破解知识。

1) Windows 有很多漏洞,因此内核是否使用 UEFI 安全加载并不重要。rootkit 可以随时加载并且同样有效。它甚至可能只停留在用户空间并正常工作。有传言称,微软会在修复程序发布之前提前通知美国政府安全漏洞。

2) 如果您使用的是不同的操作系统,那么无论如何都必须关闭安全启动。

3) TPM 具有可能由制造商保存并提供给政府的私钥。从我读过的书里我了解到,知道私钥会破坏 TPM 的安全性。

4) 杀毒软件只检测它所知道的。大多数新的恶意软件根本不会被检测到。因此,这不是定向攻击的问题。

5) 一个大问题是仍然允许加载带有安全漏洞的旧签名驱动程序。您甚至不需要禁用驱动程序签名或执行任何操作。只需找到一些旧驱动程序并使用它。

6)我想(尚未研究)旧签名内核可能存在相同的情况。你能加载一个带有安全漏洞的旧签名内核并在启动时使用它获得访问权限,然后返回并加载真正的内核吗?

7) 制作自己的闭源驱动程序并由 Microsoft 签名相当便宜。

8) 一旦你利用了 Windows 内核环 0,你暂时就可以像 Windows 一样访问系统。您可以将 Windows 切换到开发人员模式以允许加载未签名的驱动程序吗?您可以禁用其中一些功能,例如 Trusted Boot 和 ELAM 吗?在启用安全启动的同时可以完成这些事情吗?您可以刷新/修改 BIOS(系统固件)吗?您可以更改选项 ROM 中的数据吗?您现在可以完全访问硬盘。您可以将固件恶意软件放入其中,该恶意软件将在所有系统重新安装后持续存在。只是有些事情要考虑。

如果启动和硬件是您需要访问的,并假设您可以通过金钱支持您对计算机进行物理访问......(并为我的菜鸟道歉)那么这是我的思考过程。让计算机认为它是一个硬件。例如,典型的 ram 是 2gb 或更多,您能否将基本的最低级别代码写入 ram 芯片,如硬编码?然后访问计算机并更换其中一个 ram 芯片......你如何做到这一点又回到了你的间谍背景。
我认为代码只需要制作一个基本的shell,“这个人是超级超级用户......然后有root su,但是susu 更好,如果root 具有访问权限,那么susu 具有更多访问权限。” 完成后,您可以从那里构建。