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

适用于:

适用于 Linux 上Microsoft Defender for Endpoint的扩展 Berkeley 数据包筛选器 (eBPF) 为 Linux 操作系统提供补充事件数据。 eBPF 可用作审核的替代技术,因为 eBPF 有助于解决在已审核的事件提供程序中看到的几类问题,并且有利于性能和系统稳定性领域。

主要的优点包括:

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

eBPF 的工作原理

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

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

注意

eBPF 与已审核结合使用,而 auditd 仅用于用户登录事件,并捕获这些事件,而无需任何自定义规则并自动流式处理这些事件。 请注意,审核将在未来版本中逐步删除。

系统先决条件

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

注意

内核版本为 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

默认情况下,eBPF 传感器会自动为所有客户启用代理版本“101.23082.0006”及更高版本。 客户需要更新到上述受支持的版本才能体验该功能。 在终结点上启用 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 在任何特定内核上未启用或不受支持,它将自动切换回已审核并保留所有审核的自定义规则。

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

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

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

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

  4. 运行以下查询: DeviceTvmInfoGathering

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

Auditd 的不可变模式

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

% 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 版本,请切换到审核模式。
  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。
    • 如果需要使用相同的内核版本,请切换到审核模式
sudo mdatp config  ebpf-supplementary-event-provider  --value disabled

以下两组数据有助于分析潜在问题并确定最有效的解决方法选项。

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

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

排查性能问题

如果在终结点上看到Microsoft Defender资源消耗量增加,请务必确定占用最大 CPU/内存使用率的进程/装入点/文件,然后应用必要的排除项。 应用可能的 AV 排除项后,如果 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 创建票证,以排除此过程。 将来,作为即将推出的增强功能的一部分,你可以对最终应用此类排除项有更多的控制权。

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

另请参阅