在 Microsoft Windows 环境中运行的软件应用程序可能会将代码插入到本身并不存在的进程中。虽然此行为与恶意软件类似,但它也是 Microsoft Windows 的内置机制。这一机制可让软件开发人员为用户提供更为丰富的计算体验。
我们遇到了大量的软件应用程序,可能会将 Dll 加载到我们的进程中。虽然我们尝试阻止这些 DLL 加载尝试,但技术限制允许这些注入有时会成功。然后需要进行备用响应,以允许 ENS 继续正常工作。此情况会导致实用工具
MfeSysPrep.exe 。
MfeSysPrep.exe可通过技术支持获取,并可用作 DLL 带有注入程序发现工具。对于遇到由进程中的第三方 Dll 存在的症状所导致的任何环境,建议使用此实用工具。此外,它还包括以下
问题 声明中所述的第三方 dll。
背景:
我们的软件将已注入到我们的进程中的第三方 Dll 视为不受信任的 Dll。换言之,
- 我们未编写其代码。
- 我们不知道自己的代码是什么用途,或者它可以执行什么操作。
- 我们不知道是否会遭到恶意的破坏和使用。
我们需要了解的是,从该第三方的 DLL 功能中所做的任何工作都似乎来自注入的进程。因此,如果存在恶意活动,则似乎我们的软件会执行恶意操作。允许将第三方 DLL 注入到我们的进程中是不可接受的。我们采用了访问保护(AP)技术(也称为任意访问控制)来抵御第三方 DLL 注入的措施。我们还实施了验证和信任保护(VTP)框架。此框架可抵御发生注入的情况。
我们如何使用 VTP:
VTP 服务
MFEVTPS.exe 是一项重要服务,它执行 dll 的检查并运行进程(包括与我们的代码交互的进程),以验证这些对象是否受信任。该服务取决于 Microsoft 加密服务(
CryptSvc )、与信任相关的 API 以及证书存储和目录文件的运行状况。如果这些依赖项状态不良,则我们的服务可能无法正常运行。
要了解有关文件签名的详细信息,请参阅此
Microsoft 有关数字签名的文章。
- 当我们的代码需要确保正在使用的进程或对象受信任或同时进行这两项操作时,会发生验证检查。
- 当我们的进程初始化时,VTP 服务用于验证是否正在加载受信任的代码。我们使用 AP or AAC 来确保仅加载受信任的 dll。
如上所述,只有我们的代码和 Microsoft 代码会受到隐式信任。
缓存
- The MFEVTPS.exe 缓存验证检查的结果,以提高将来验证检查的性能。
- 执行验证检查时,始终首先检查缓存。
- 如果验证检查返回 "不受信任," 该对象缓存为不受信任。如果对象缓存为不受信任的形式,则只有缓存重置可以更正。
仅当引导到安全模式时,缓存才会重置,但不会在网络连接或运行命令。
VTPInfo.exe /ResetVTPCache 的安全模式下进行重置。如果需要,我们还可以通过 DAT 重置缓存。在缓存重置之后,用户可能会遇到性能较低的一小段时间。
信任失败
当预期的结果 "受信任时,信任失败会看到导致" 不受信任 "的验证检查。"
示例:
- 第三方注入我们的流程。我们不信任第三方,因此该进程会失败验证检查。
- 签名Microsoft签名的文件包含无效的签名信息。 因此,无法对其进行验证,我们的进程无法加载它。
- 有效的 DLL 文件被缓存为 "不受信任" 不正确,加载它的后续尝试将被拒绝。
所有这些示例都可能会导致受影响的进程失败,例如未正确加载或未正确执行预期的任务。这些失败是由我们自己的安全机制(AAC)拒绝访问不受信任的代码造成的。
如何使用 AP 或 AAC:
AAC 已更换 AP。该技术从内核Windows运行。 它可以阻止对对象(如网络、文件、注册表和进程对象)的访问。 该功能具有一组规则,用于确定要阻止哪些项和允许哪些项。 规则介绍了必须阻止或拒绝的"不良"或"不安全"行为。 许多规则由您控制,在用户界面或 ePolicy Orchestrator (ePO) 策略中公开。 某些尚未公开的规则仍然有效。我们认为这些规则对产品的运行状况至关重要。我们可显示的规则可能为:
- 已启用或已禁用。
- 设置为仅报告。
- 已修改以添加其他进程以保护或保护免遭攻击或排除,因此我们不再阻止某一进程违反规则。
- 您可以创建自己的行为阻止规则,从而将此功能作为您计划项目时最强大的工具之一,从而保护您的环境。
为总结 AAC 的工作原理,它会看到尝试执行的操作、步骤以及提出以下情况:
- 进程名称是什么?
- 进程访问的对象是什么?
- 尝试对该对象执行的操作是什么?
- 是否允许此操作,是还是否?
"不" 意味着我们阻止它。如果启用了"报告",我们将记录此报告并将事件发送到ePO 服务器。 "是的" 表示该操作是允许的。
我们的私有规则包括更多条件,例如:
- 由谁编写此代码? 获取此信息需要查看数字签名。
- 我们是否信任该供应商的数字证书? 我们仅信任我们的 Microsoft,默认情况下也是如此。
添加的标准可增加安全性。 相反,如上所述,如果验证检查失败或产生 "不受信任" 结果,我们自己的保护可能会阻止进程访问对象。如上面的
背景 声明所示,此结果为预期结果。