将基于 eBPF 的传感器用于 Linux 上的Microsoft Defender for Endpoint

适用于

注意

从 Linux 上的 Defender for Endpoint 版本 101.2408.0000开始,不再支持 AuditD 作为补充事件提供程序。 有关详细信息,请参阅本文末尾的常见问题解答。

适用于 Linux 上Microsoft Defender for Endpoint的扩展 Berkeley 数据包筛选器 (eBPF) 为 Linux 操作系统提供补充事件数据。 eBPF 有助于解决 AuditD 事件提供程序中出现的多类问题,在性能和系统稳定性方面非常有用。

主要的优点包括:

  • 降低系统范围的 AuditD 相关日志干扰
  • 优化了系统范围的事件规则,否则会导致应用程序之间的冲突
  • 降低了文件事件 (文件读取/打开) 监视的开销
  • 提高了事件速率吞吐量,减少了内存占用量
  • 优化了特定配置的性能

eBPF 的工作原理

使用 eBPF 时,以前从 AuditD 事件提供程序获取的事件现在从 eBPF 传感器流出。 这有助于提高系统稳定性,提高 CPU 和内存利用率,并减少磁盘使用率。 eBPF 有助于降低应用程序之间发生冲突的可能性,因为不需要自定义规则。 与 eBPF 相关的数据将记录到 /var/log/microsoft/mdatp/microsoft_defender_core.log 文件中。

此外,eBPF 传感器使用 Linux 内核的功能,而无需使用有助于提高系统稳定性的内核模块。

系统先决条件

Linux 上用于 Microsoft Defender for Endpoint 的 eBPF 传感器在以下最低分发版本和内核版本上受支持:

Linux 分发版 分发版本 内核版本
Ubuntu 16.04 4.15.0
Fedora 33 5.8.15
CentOS 7.6 3.10.0-957.10
SLES 15 5.3.18-18.47
RHEL 7.6 3.10.0-957.10
Debian 9.0 4.19.0
Oracle Linux RHCK 7.9 3.10.0-1160
Oracle Linux UEK 7.9 5.4
Amazon Linux 2 2 5.4.261-174.360
Rocky Linux 8 8.7 4.18.0-425
Rocky Linux 9 9.2 5.14.0-284
Alma Linux 8 8.4 4.18.0-305
Alma Linux 9 9.2 5.14.0-284

注意

内核版本为 5.15.0-0.30.20.el8uek.x86_64、5.15.0-0.30.20.1.el8uek.x86_64 的 Oracle Linux 8.8 将在 eBPF 作为补充子系统提供程序启用时导致内核挂起。 此内核版本不应用于 eBPF 模式。 有关缓解步骤,请参阅故障排除和诊断部分。

使用 eBPF

默认情况下,系统会自动为所有客户启用代理版本及更高版本的 101.23082.0006 eBPF 传感器。 客户需要更新到受支持的版本才能体验该功能。 在终结点上启用 eBPF 传感器时,Linux 上的 Defender for Endpoint 会将supplementary_events_subsystem更新为 ebpf。

mdatp health 命令中的 ebpf 子系统突出显示

如果要手动禁用 eBPF,可以运行以下命令:

sudo mdatp config ebpf-supplementary-event-provider --value [enabled/disabled]

还可以更新 mdatp_managed.json 文件:

{
    "features": {
        "ebpfSupplementaryEventProvider": "disabled"
    }
}

有关详细示例 json 文件 - 在 Linux 上设置Microsoft Defender for Endpoint首选项,请参阅链接。

重要

如果禁用 eBPF 或在任何特定内核上不支持 eBPF 的情况下,补充事件提供程序将切换到 Netlink。 所有进程操作将继续无缝流动,但你可能会错过 eBPF 在其他情况下捕获的特定文件和套接字相关事件。

还可以使用 Microsoft Defender 门户中的高级搜寻检查 linux 终结点上 eBPF (已启用/禁用) 的状态。 步骤如下:

  1. 转到Microsoft Defender门户并登录。

  2. 在导航窗格中,转到 “搜寻>高级搜寻”。

  3. “高级搜寻”下,转到“Defender 漏洞管理”。

  4. 运行以下查询: DeviceTvmInfoGathering

  5. 在输出的“ 其他字段 ”列中,选择“ 显示更多”,然后查找 “EBPF STATUS: true”。

AuditD 的不可变模式

对于在不可变模式下使用 AuditD 的客户,启用 eBPF 后需要重新启动,以便清除 Microsoft Defender for Endpoint 添加的审核规则。 此要求是 AuditD 的不可变模式的限制,这会冻结规则文件并禁止编辑/覆盖。 此问题通过重新启动得到解决。

重新启动后,运行以下命令以检查是否清除了审核规则:

% sudo auditctl -l

上一命令的输出不应显示任何规则或任何用户添加的规则。 如果未删除规则,请执行以下步骤以清除审核规则文件:

  1. 切换到 ebpf 模式。

  2. 删除文件 /etc/audit/rules.d/mdatp.rules

  3. 重新启动计算机。

故障排除和诊断

可以通过运行mdatp运行状况命令检查代理运行状况状态。 使用以下命令行检查当前内核版本,确保支持适用于 Linux 上的 Defender for Endpoint 的 eBPF 传感器:

uname -a

已知问题

  1. 使用 SAP 在 RHEL 8.1 版本上启用 eBPF 可能会导致内核崩溃。 若要缓解此问题,可以执行以下步骤之一:

    • 使用高于 RHEL 8.1 的发行版版本。
    • 如果需要使用 RHEL 8.1 版本,请切换到 AuditD 模式。
  2. 将 Oracle Linux 8.8 与内核版本 5.15.0-0.30.20.el8uek.x86_64、5.15.0-0.30.20.1.el8uek.x86_64 配合使用可能会导致内核崩溃。 若要缓解此问题,可以执行以下步骤之一:

    • 如果要使用 eBPF 作为补充子系统提供程序,请在 Oracle Linux 8.8 上使用高于或低于 5.15.0-0.30.20.el8uek.x86_64、5.15.0-0.30.20.1.el8uek.x86_64 的内核版本。 Oracle Linux 的最低内核版本为 RHCK 3.10.0,Oracle Linux UEK 为 5.4。

    • 如果需要使用相同的内核版本,请切换到 AuditD 模式

      sudo mdatp config  ebpf-supplementary-event-provider  --value disabled
      
    • 以下两组数据有助于分析潜在问题并确定最有效的解决方法选项。

      1. 使用以下说明从客户端分析器工具收集诊断包:排查 Linux 上Microsoft Defender for Endpoint的性能问题

      2. 在 Defender for Endpoint 使用大量资源时,使用以下说明收集调试诊断包:在 Linux 资源上Microsoft Defender for Endpoint

  3. 当 ksplice 用于实时内核修补时,系统在运行 Defender for Linux 的 Oracle Linux 7.9 上挂起。

    • ksplice 的自动安装修补只需将 cron 作业添加到终结点。
    • 若要缓解挂起问题,可以创建一个 cron 作业,该作业将首先停止 mdatp 服务,应用基于 ksplice 的修补,然后启动服务。
    • 由于内核修补是几秒钟的活动,因此在安全性方面不会有重大风险。

排查性能问题

如果终结点上Microsoft Defender资源消耗增加,请务必确定导致大部分 CPU/内存使用率的进程/装入点/文件。 然后,可以应用必要的排除项。 应用可能的防病毒排除项后,如果 wdavdaemon (父进程) 仍在消耗资源,请使用 ebpf-statistics 命令获取排名靠前的系统调用计数:

sudo mdatp diagnostic  ebpf-statistics
Output
Monitor 20 seconds
Top file paths:
/var/log/microsoft/mdatp/microsoft_defender.log : 10
/var/log/microsoft/mdatp/rotated/microsoft_defender.log00001 : 2
/var/log/microsoft/mdatp/rotated/microsoft_defender.log : 1
/home/gargank/tmp-stress-ng-rename-13550-31/stress-ng-rename-13550-31-374993 : 1
/home/gargank/tmp-stress-ng-rename-13550-31/stress-ng-rename-13550-31-374991 : 1
/home/gargank/tmp-stress-ng-rename-13550-31/stress-ng-rename-13550-31-374989 : 1
/home/gargank/tmp-stress-ng-rename-13550-31/stress-ng-rename-13550-31-374987 : 1
/home/gargank/tmp-stress-ng-rename-13550-31/stress-ng-rename-13550-31-374985 : 1
/home/gargank/tmp-stress-ng-rename-13550-31/stress-ng-rename-13550-31-374983 : 1
/home/gargank/tmp-stress-ng-rename-13550-31/stress-ng-rename-13550-31-374981 : 1

Top initiator paths:
/usr/bin/stress-ng : 50000
/opt/microsoft/mdatp/sbin/wdavdaemon : 13

Top syscall ids:
82 : 1699333
90 : 10
87 : 3

在前面的输出中,可以看到 stress-ng 是生成大量事件的主要进程,并可能导致性能问题。 最有可能的 stress-ng 正在生成 ID 为 82 的系统调用。 可以使用 Microsoft 创建票证,以排除此过程。 将来,作为即将推出的增强功能的一部分,你可以对最终应用此类排除项有更多的控制权。

应用于 AuditD 的排除项无法迁移或复制到 eBPF。 eBPF 内部已处理干扰性日志、内核崩溃、干扰性 syscalls 等常见问题。 如果想要添加任何进一步的排除项,请联系 Microsoft 以应用必要的排除项。

常见问题解答 - 过渡到 eBPF

1. 为什么要考虑迁移到 eBPF?

Linux 上适用于 Microsoft Defender for Endpoint 的扩展 Berkeley 数据包筛选器 (eBPF) 是 AuditD 的有效替代方案,解决了与 AuditD 事件提供程序相关的各种挑战,同时在性能和系统稳定性方面提供显著优势。 一些关键优势包括 -

  • 性能:与 AuditD 相比,eBPF 通过减少系统资源的开销显著提高了性能。

  • 资源效率:eBPF 使用的资源更少,即使在负载较重的情况下,也有助于保持系统稳定性。

  • 可伸缩性:eBPF 的体系结构更具可伸缩性,因此对于工作负载不断增加或复杂环境而言,它是更好的选择。

  • 现代技术:eBPF 是一种与未来 Linux 内核开发保持一致的现代前瞻性技术,可确保更好的长期支持。

2. 如何继续使用 AuditD?

如果想要继续使用 AuditD:

  • 支持的版本:可以保留在 Linux 版本 101.24072.0000 上的 Defender for Endpoint 上,这将在生成有效期(大约 9 个月)期间支持 AuditD。 这提供了足够的过渡期来计划迁移到 eBPF。 通过在 Linux 服务器上运行 命令 mdatp health ,可以检查到期日期。

  • Long-Term 计划:在继续 101.24072.0000 执行生成是一个选项时,我们建议你计划在此时间范围内过渡到 eBPF,以确保你从最新的安全和性能改进中受益,并获得持续支持。

也就是说,我们的建议是计划将 eBPF 用作主要事件提供程序。

3. 如果在某些情况下不支持 eBPF,会发生什么情况?

在不支持 eBPF 的情况下:

  • Netlink 回退:系统回退到使用 Netlink 事件提供程序。 虽然 Netlink 继续捕获 (进程事件(exec例如 、、exitforkgidtid) ),但它不支持文件系统相关事件 (例如 renameunlink) 或套接字事件。

  • 影响:工作负载不会中断,但可能会错过 eBPF 在其他情况下捕获的特定文件和套接字相关事件。

4. 如何使用更新版本管理排除项?

以下是放置 AuditD 排除项的一些常见原因:

  • 性能,因为某些 syscall 或进程正在产生大量干扰

  • 内核崩溃,有时大量 syscalls 特别是网络/文件系统调用会导致内核崩溃。

  • 干扰性日志,其中审核日志占用磁盘空间。 客户放置了干扰进程的排除项,以减小日志大小。

使用 eBPF 时,前两个用例是迁移的候选项。 日志不再是 eBPF 的问题。 对于前两个用例,可以从以下选项中进行选择:

  • 联系支持人员:联系Microsoft以从后端应用排除项。

  • 全局排除:在 Linux 上的 Defender for Endpoint 更新版本中,可以使用全局排除项来管理排除项。 全局排除项同时适用于防病毒和 EDR,目前可以通过托管 json 进行配置。 有关详细信息,请参阅 并验证 Microsoft Defender for Endpoint 在Linux上的排除

5. 如果出现问题,我该怎么办?

  • 联系支持人员:如果在过渡到 eBPF 期间或之后遇到任何问题,请联系技术支持寻求帮助。 我们致力于确保平稳过渡,并可帮助解决你可能面临的任何挑战。

  • 支持渠道:可以通过Microsoft Defender门户联系支持人员。 此外,我们的知识库和社区论坛是排查常见问题的宝贵资源。

另请参阅