将基于 eBPF 的传感器用于 Linux 上的Microsoft Defender for Endpoint
适用于:
- Microsoft Defender for Endpoint 服务器版
- 服务器的Microsoft Defender
注意
从 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。
如果要手动禁用 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 (已启用/禁用) 的状态。 步骤如下:
转到Microsoft Defender门户并登录。
在导航窗格中,转到 “搜寻>高级搜寻”。
在“高级搜寻”下,转到“Defender 漏洞管理”。
运行以下查询:
DeviceTvmInfoGathering
。在输出的“ 其他字段 ”列中,选择“ 显示更多”,然后查找 “EBPF STATUS: true”。
AuditD 的不可变模式
对于在不可变模式下使用 AuditD 的客户,启用 eBPF 后需要重新启动,以便清除 Microsoft Defender for Endpoint 添加的审核规则。 此要求是 AuditD 的不可变模式的限制,这会冻结规则文件并禁止编辑/覆盖。 此问题通过重新启动得到解决。
重新启动后,运行以下命令以检查是否清除了审核规则:
% sudo auditctl -l
上一命令的输出不应显示任何规则或任何用户添加的规则。 如果未删除规则,请执行以下步骤以清除审核规则文件:
切换到 ebpf 模式。
删除文件
/etc/audit/rules.d/mdatp.rules
。重新启动计算机。
故障排除和诊断
可以通过运行mdatp
运行状况命令检查代理运行状况状态。 使用以下命令行检查当前内核版本,确保支持适用于 Linux 上的 Defender for Endpoint 的 eBPF 传感器:
uname -a
已知问题
使用 SAP 在 RHEL 8.1 版本上启用 eBPF 可能会导致内核崩溃。 若要缓解此问题,可以执行以下步骤之一:
- 使用高于 RHEL 8.1 的发行版版本。
- 如果需要使用 RHEL 8.1 版本,请切换到 AuditD 模式。
将 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
以下两组数据有助于分析潜在问题并确定最有效的解决方法选项。
使用以下说明从客户端分析器工具收集诊断包:排查 Linux 上Microsoft Defender for Endpoint的性能问题。
在 Defender for Endpoint 使用大量资源时,使用以下说明收集调试诊断包:在 Linux 资源上Microsoft Defender for Endpoint。
当 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
例如 、、exit
、fork
gid
或tid
) ),但它不支持文件系统相关事件 (例如rename
、unlink
) 或套接字事件。影响:工作负载不会中断,但可能会错过 eBPF 在其他情况下捕获的特定文件和套接字相关事件。
4. 如何使用更新版本管理排除项?
以下是放置 AuditD 排除项的一些常见原因:
性能,因为某些 syscall 或进程正在产生大量干扰
内核崩溃,有时大量 syscalls 特别是网络/文件系统调用会导致内核崩溃。
干扰性日志,其中审核日志占用磁盘空间。 客户放置了干扰进程的排除项,以减小日志大小。
使用 eBPF 时,前两个用例是迁移的候选项。 日志不再是 eBPF 的问题。 对于前两个用例,可以从以下选项中进行选择:
联系支持人员:联系Microsoft以从后端应用排除项。
全局排除:在 Linux 上的 Defender for Endpoint 更新版本中,可以使用全局排除项来管理排除项。 全局排除项同时适用于防病毒和 EDR,目前可以通过托管 json 进行配置。 有关详细信息,请参阅 并验证 Microsoft Defender for Endpoint 在Linux上的排除。
5. 如果出现问题,我该怎么办?
联系支持人员:如果在过渡到 eBPF 期间或之后遇到任何问题,请联系技术支持寻求帮助。 我们致力于确保平稳过渡,并可帮助解决你可能面临的任何挑战。
支持渠道:可以通过Microsoft Defender门户联系支持人员。 此外,我们的知识库和社区论坛是排查常见问题的宝贵资源。