一、什么是edr
终端检测与响应(EDR)是一种安全解决方案,可检测并响应勒索软件和恶意软件等威胁。它通过持续监控端点可疑活动来工作,方法是收集有关事件的数据,如系统日志、网络流量、进程间通信 (IPC)、RPC 调用、身份验证尝试和用户活动。
安装在端点上的 EDR 将收集数据,然后分析并关联它们以识别潜在威胁。当检测到威胁时,EDR 解决方案可以通过将受影响的端点隔离和包含在网络中,或执行其他预定义操作(例如删除恶意文件或终止可疑进程)来自动响应。
此外,EDR 还会在沙箱中运行程序,并在其运行期间持续监控程序,以查找恶意行为。
EDR 应作为更广泛网络安全策略的一部分,与其他解决方案(例如防火墙、入侵检测系统 (IDS)、入侵防御系统 (IPS) 以及安全信息和事件管理 (SIEM) 解决方案)一起使用。蓝队成员还使用 EDR 日志来进行威胁搜寻和搜索解决方案可能忽略的 IoC
二、EDR 的工作原理
EDR 代理通常由两部分组成:用户模式应用程序和内核模式驱动程序。这些部分利用前面提到的各种方法收集信息。然后分析收集到的数据并将其与特征码和恶意行为进行匹配。在检测到恶意或可疑行为时,EDR 会将发现记录在安全仪表板中。EDR 设置高度可定制,视具体设置而定,它可以自行采取措施或仅提供警报。以下是 Microsoft 的其中一篇 文章 中的图片,显示了 Microsoft Defender For Endpoint 的安全仪表板,其中包含一些警报。
签名检测
防病毒软件通常仅限于基本的签名检测,且很容易被绕过。尽管 EDR 更为复杂且包含更多功能,但它确实包含用于检测已知恶意软件的 AV 功能。此外,防御者还可以通过创建自定义规则来扩展其 EDR 检测功能。
基于行为的检测
行为和运行时检测是 EDR 的主要特性之一,它可以使用以下几种方法监视正在运行的进程:
用户态钩子
EDR利用用户态钩子检测传给函数的恶意参数,以及在有效载荷解密后对其进行查看,下图进一步演示了用户态钩子在作用中的情况。
Windows 事件跟踪 (ETW)
ETW 或 Windows 事件跟踪) 是一种集成到 Windows 操作系统中的内核模式机制,可跟踪和记录系统上由驱动程序和用户模式应用程序触发的事件。
下图来自 Microsoft ,展示了 ETW 架构。
ETW 可以记录事件,如进程创建和终止、设备驱动程序加载和卸载、文件和注册表访问以及用户输入事件。它还可以通过记录已建立连接和身份验证请求来捕获网络事件。
端点检测和响应 (EDR) 解决方案可以利用此内置机制进一步增强它们收集特定端点信息的能力。另一方面,几个工具也利用 ETW,例如 Sysmon) 和 Procmon。
反恶意软件扫描接口 (AMSI)
AMSI 或 反恶意软件扫描接口 是从 Windows 10 开始内置于 Windows 操作系统中的另一种安全机制。它允许第三方软件与它集成,进而扫描和检测恶意应用程序。
下图来自微软的 反恶意软件扫描接口 (AMSI) 如何帮助防御恶意软件 文章(https://learn.microsoft.com/zh-cn/windows/win32/amsi/how-amsi-helps),其中对 AMSI 的架构进行了可视化。
通过使用 AMSI,安全软件能够检查动态执行和注入的脚本、代码和 .NET 程序集,例如用 JavaScript、VBScript、PowerShell 或其他脚本语言编写的程序集。此外,AMSI 还能够扫描 .NET 程序集,这些程序集是用 Microsoft 的 .NET 框架构建并用 C# 和 VB.NET 编程的程序。
AMSI 是通过一组 API 利用的,微软将这些 API 分类如下:
反恶意软件扫描接口枚举 - AMSI 编程元素使用的枚举。
反恶意软件扫描接口函数 - 应用程序可以调用这些函数来请求扫描。下图显示了可用的 AMSI 扫描函数。
AMSI API 的核心实现是由 amsi.dll 提供的,这是一个 AMSI 用来执行其操作的主 DLL(引用上述函数)。操作系统安全子系统和与 AMSI 集成的第三方安全产品是 AMSI 使用的另外两组 DLL。
基于内存的检测
基于内存的检测是指执行有效载荷后生成且通常是由其创建的 IoC 和签名。这些 IoC 可以是堆分配、挂钩 API 时的跳转、线程栈和 RWX 内存段。
内核回调和Minifilter驱动程序
内核回调是一种在 Windows 操作系统中使用的机制,它允许内核模式代码注册函数,以便操作系统在特定时间或发生事件时调用这些函数。一些示例事件包括文件创建、注册表项修改和 DLL 被加载。
当事件发生时,操作系统将调用已注册的回调函数,并通知内核模式代码事件已发生。这个“内核模式代码”可以是安全产品创建的设备驱动程序,在这种情况下,它是一个 EDR。
值得注意的是,编写不当或配置错误的回调会导致系统不稳定、性能问题,甚至安全漏洞,因此并非所有 EDR 供应商都使用此方法。
一些示例回调如下所示。
PspCreateProcessNotifyRoutine
- 注册一个驱动程序提供的回调,以便在每次创建或删除进程时进行调用。
PspLoadImageNotifyRoutine
- 注册一个驱动程序提供的回调,以便在每次将映像(DLL 或 EXE)加载(或映射)到内存时进行调用。
CmRegisterCallbackEx
- 注册一个驱动程序提供的回调,以便在每次线程对注册表进行操作时进行调用。
为了拦截、检查并可能阻止 I/O 事件,Microsoft 建议安全供应商使用 内核回调和Minifilter驱动程序程序。内核回调和Minifilter驱动程序驱动程序用于 Windows 操作系统中,用于拦截和修改应用程序和文件系统之间的 I/O 请求。这些驱动程序在文件系统和处理物理 I/O 请求的设备驱动程序之间的一个层上运行。EDR 可以利用迷你筛选驱动程序为每个 I/O 操作注册回调,该回调将向驱动程序通知特定操作,例如进程创建、注册表修改等。
此外,EDR Minifilter组件可以注册内核回调,以便直接从内核获取未修改的数据,而不是从用户态资源获取数据,因为这些数据可能会被篡改和修改
EDR 如何使用Minifilter驱动程序和内核回调的一个例子,是通过调用 PspCreateProcessNotifyRoutine 来触发 EDR 将其用户模式 DLL 加载到新创建的进程中,在其中执行系统调用 hooking(钩取),然后使用 minifilter 驱动程序的功能来监控该新创建进程的 I/O 文件系统请求。
IOC
建立网络连接的进程有更高的可疑性,因为该连接有可能连接到攻击者控制的 C&C 服务器。EDR 将监视网络连接,当平时不会使用网络连接的进程开始使用网络连接时,将触发警报。例如,如果进程注入到了 notepad.exe 中,并且它开始连接到互联网,这被认为是高度可疑的。此外,还需要分析网络连接的各个方面,例如目标 IP 地址、域名、端口号和网络流量。