让我试着这样问我的问题......
假设我是一个攻击性网络坏人,为外国政府资助的高级持续威胁部门工作。例如,我的部门被指控从美国公司窃取高价值知识产权。(具体的上下文并不重要;“场景”只是为了帮助我展示我要问的问题。)
我的团队正在准备……比方说,针对美国多家公司的一组知名研发主管进行鱼叉式钓鱼活动。(同样,场景细节并不重要。)我的团队有一些 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 系统部件(如网卡、视频卡等)的固件中。
这个问题谈到了微软用来验证开发人员身份的业务流程的安全性以及组件的非恶意性,然后才会签署该组件,以便在启动期间加载该组件。一个非常有趣的问题/答案,但不是真正了解我想要了解的问题。
“信息丰富的”微软图表: