本文介绍如何安装、配置和排查 适用于 Linux 的 Windows 子系统 (WSL) 2 的Microsoft Defender for Endpoint插件问题。 该插件支持在支持的 Windows 设备上运行的传统 WSL 2 发行版和 WSL 容器(WSLc),并已集成到 Microsoft Defender for Endpoint Plan 2。
注意
WSL 容器(WSLc)支持目前处于 公开预览阶段。 要参与公开预览并获取兼容 WSLc 的 Microsoft Defender for Endpoint for WSL 插件预览版,请填写注册表单
概述
适用于 Linux 的 Windows 子系统 (WSL) 2 取代了 Microsoft Defender for Endpoint 支持的早期版本的 WSL (,没有插件) ,它提供了一个与 Windows 无缝集成,但使用虚拟化技术进行隔离的Linux环境。 Microsoft Defender for Endpoint插件支持传统的WSL 2 Linux发行版和新的WSL容器(WSLc)。 适用于 WSL 的 Defender for Endpoint 插件通过接入隔离的子系统,使 Defender for Endpoint 能够更全面地洞察所有正在运行的 WSL 容器。
先决条件
在安装 Endpoint WSL 插件Defender之前,请确保满足以下先决条件:
- WSL 版本
2.0.7.0或更高版本必须正在运行,且至少有一个活跃的发行版。 运行wsl --update以确保使用的是最新版本。 如果wsl -–version显示低于2.0.7.0的版本,请运行wsl --update --pre-release以获取最新更新。 - 对于WSL容器(WSLc),则需要WSL 2.9.5或更高版本。 WSLc 支持目前处于公开预览阶段,并且需要使用受支持的适用于 WSL 的 Microsoft Defender for Endpoint 插件预览版。
- Windows 客户端设备必须载入到 Defender for Endpoint。
支持的操作系统
以下操作系统支持 Defender for Endpoint 的 WSL 插件:
- Windows 10 版本 2004 及更高版本(内部版本 19044 及更高版本)
- Windows 11以支持可与插件配合使用的 WSL 版本。
已知问题和限制
在开始之前,请注意以下注意事项:
- 该插件不支持在 之前的
1.24.522.2版本中自动更新。 在版本1.24.522.2及更高版本中。 所有通道均支持通过 Windows 更新进行更新。 为确保程序包的稳定性,通过 Windows Server Update Services (WSUS)、System Center Configuration Manager (SCCM) 和 Microsoft 更新目录提供的更新仅在生产环中受支持。 - 插件完成实例化需要几分钟时间,而 WSL2 实例自行完成接入最多可能需要 30 分钟。 生存期较短的 WSL 容器实例可能会导致 WSL2 实例未显示在Microsoft Defender门户中。 当任何发行版持续运行足够长时间(至少 30 分钟)时,WSL2 实例确实会显示在 Microsoft Defender 门户中。
- 不支持运行自定义内核和自定义内核命令行。 尽管插件不会阻止在该配置中运行,但当你运行自定义内核和自定义内核命令行时,它不保证 WSL 中的可见性。 建议使用Microsoft Intune wsl 设置阻止此类配置。
- 具有 ARM64 处理器的计算机上不支持该插件。
- Windows 10 和 11 的多会话变体不支持插件。
- 该插件提供对来自 WSL 的事件的可见性,但其他功能(如反恶意软件、危险和漏洞管理和响应命令)不适用于 WSL 逻辑设备。
- 不同Linux发行版的检测和警报行为可能有所不同。
软件组件和安装程序文件名
安装程序: Defenderplugin-x64-1.26.813.1.msi。 可以从Microsoft Defender门户中的载入页面下载安装程序。 (前往设置>端点>引导>适用于 Linux 的 Windows 子系统 2(插件)。)
注意
上述安装程序适用于WSL 2部署。
对 WSL 容器(WSLc)的支持目前处于公开预览阶段,需要 Microsoft Defender for Endpoint 插件的预览版。 要参与WSLc公开预览并获取预览安装器,请填写以下 注册表
安装目录:
%ProgramFiles%%ProgramData%
已安装的组件:
-
DefenderforEndpointPlug-in.dll。 此 DLL 是用于加载 Defender for Endpoint 以在 WSL 中工作的库。 您可以在%ProgramFiles%\Microsoft Defender for Endpoint plug-in for WSL\plug-in找到它。 -
healthcheck.exe。 此程序检查 Defender for Endpoint 的运行状况状态,使你能够查看已安装的 WSL、插件和 Defender for Endpoint 版本。 您可以在%ProgramFiles%\Microsoft Defender for Endpoint plug-in for WSL\tools找到它。
安装适用于 WSL 的 Defender for Endpoint 插件
如果尚未安装适用于 Linux 的 Windows 子系统,请执行以下步骤:
打开终端或命令提示符。 (在 Windows 中,转到 “启动>命令提示符”。或者,右键单击“开始”按钮,然后选择“ Terminal.)
运行命令
wsl -–install。确认 WSL 已安装并正在运行。
使用终端或命令提示符运行
wsl –-update以确保具有最新版本。对于WSL容器(WSLc),运行
wsl --update --pre-release以安装WSLc功能所需的最新WSL预览版本。运行
wsl命令,以确保 WSL 在测试前已启动。
按照以下步骤安装插件:
安装从 Microsoft Defender 门户的载入部分下载的 MSI 文件, (设置>终结点>载入>适用于 Linux 的 Windows 子系统 2 (插件) ) 。
对于WSL容器(WSLc),安装兼容WSLc的Microsoft Defender for Endpoint插件的公开预览版。
打开命令提示符/终端并运行
wsl。
可以使用 Microsoft Intune 部署包。
注意
如果 WslService 正在运行,它将在安装过程中停止。 您无需单独接入该子系统。 相反,插件会自动加入到 Windows 主机加入到的租户。
Microsoft Defender for Endpoint 适用于 WSL 的插件 KB 更新。
安装验证清单
使用以下清单验证插件是否已正确安装并按预期运行:
更新或安装后,请等待至少 5 分钟,使插件完全初始化并写入日志输出。
打开终端或命令提示符。 (在 Windows 中,转到 “启动>命令提示符”。或者,右键单击“开始”按钮,然后选择“ Terminal.)
运行以下命令:
cd "%ProgramFiles%\Microsoft Defender for Endpoint plug-in for WSL\tools".运行命令
.\healthcheck.exe。对于WSL容器(WSLc),请确认所有活跃的WSLc虚拟机都列在HealthCheck输出中,并且每个虚拟机都报告健康的Defender状态。
查看 Defender 和 WSL 的详细信息,并确保它们符合或超过以下要求:
-
插件版本:
1.24.522.2 -
WSL 版本:
2.0.7.0或更高版本 -
Defender 应用版本:
101.24032.0007 -
Defender 运行状况:
Healthy
-
插件版本:
为在 WSL 中运行的 Defender 设置代理
你可以为适用于 WSL 的 Defender for Endpoint 插件配置代理连接。 如果你的企业使用代理来提供与 Windows 主机上运行的 Defender for Endpoint 的连接,请继续阅读以确定是否需要为插件配置它。
如果要让 WSL 插件中的 MDE 使用主机上的 Windows EDR 遥测代理 配置,则无需进行其他设置。 插件会自动采用Windows EDR 遥测代理配置。
如果要让 MDE for WSL 插件使用主机 winhttp 代理配置,则无需执行任何其他操作。 插件会自动采用主机 WinHTTP 代理配置。
如果要让 MDE for WSL 插件使用主机网络和网络代理设置,则无需进行其他配置。 插件会自动采用主机网络代理配置。
注意
WSL defender 仅支持 http 代理。
WSL 插件如何选择代理
如果主机包含多个代理设置,插件将使用以下层次结构选择代理配置:
Defender for Endpoint 静态代理设置 (
TelemetryProxyServer)。Winhttp通过netsh命令配置的代理。网络 & Internet 代理设置。
例如,如果主机同时具有
Winhttp proxy和Network & Internet proxy,则插件会选择Winhttp proxy作为代理配置。
注意
DefenderProxyServer 注册表项已不再受支持。 按照为在 WSL 中运行的 Defender 设置代理中的步骤,在插件中配置代理。
WSL 中运行的 Defender for Endpoint 的连接性测试
每当设备上的代理设置发生更改时,都会触发 Defender for Endpoint 连接测试,并且该测试还会按计划每小时运行一次。
启动 WSL 虚拟机后,等待 5 分钟,然后运行 healthcheck.exe(连接测试结果位于 %ProgramFiles%\Microsoft Defender for Endpoint plug-in for WSL\tools)。 如果连接测试成功,运行状况检查将报告成功的结果。 如果连接测试失败,健康检查会将状态报告为 invalid,表明从适用于 WSL 的 MDE 插件到 Defender for Endpoint 服务 URL 的客户端连接失败。
验证功能和 SOC 分析助手的使用体验
注意
包括设备时间线、警报、事件和高级搜寻在内的调查体验,在 WSL 2 和 WSLc 工作负载中是相同的。
安装插件后,子系统及其所有正在运行的容器将载入Microsoft Defender门户。
登录到Microsoft Defender门户,然后打开“设备”视图。
使用标记 WSL2 进行筛选。
你可以查看环境中所有已启用适用于 WSL 的 Defender for Endpoint 插件的 WSL 实例。 这些实例表示在给定主机上 WSL 内运行的所有分发。 设备的主机名与 Windows 主机的主机名匹配。 但是,它显示为 Linux 设备。
打开设备页。 在“概述”窗格中,托管链接显示设备正在Windows主机上运行。 你可以选择此链接,转到 Windows 主机进行进一步调查和/或响应处置。
时间线填充,类似于 Linux 上的 Defender for Endpoint,其中包含来自子系统内部的事件 (文件、进程、网络) 。 您可以在时间线视图中查看活动情况和检测结果。 也会根据需要生成警报和事件。
为 WSL 机器设置自定义标签
该插件使用标记 WSL2 加入 WSL 计算机。 如果你或组织需要自定义标记,请执行以下步骤来配置一个:
以管理员身份打开注册表编辑器。
使用以下详细信息创建注册表项:
- 名称:
GROUP - 类型:
REG_SZ或注册表字符串 - 值:
Custom tag - 路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Advanced Threat Protection\DeviceTagging
- 名称:
设置注册表后,使用以下步骤重启 wsl:
打开命令提示符并运行命令
wsl --shutdown。运行
wsl命令。
等待 5-10 分钟,让门户反映更改。
注意
注册表项中 GROUP 配置的自定义标记值后缀为 _WSL2. 例如,如果 GROUP 注册表值为 Microsoft,则自定义标记会显示在 Microsoft_WSL2 门户中。
测试插件
若要在安装后测试插件,请执行以下步骤:
打开终端或命令提示符。 (在 Windows 中,转到 “启动>命令提示符”。或者,右键单击“开始”按钮,然后选择“ Terminal.)
运行命令
wsl。从 MDE Linux EDR DIY 测试包下载并提取脚本文件。
在Linux提示符下,运行命令
./mde_linux_edr_diy.sh。 几分钟后,门户中应显示一个警报,用于对 WSL2 实例进行检测。注意
事件大约需要 5 分钟才能显示在Microsoft Defender门户中。
将计算机视为环境中要对其执行测试的常规Linux主机。 具体而言,我们希望获得你关于使用新插件发现潜在恶意行为的能力的反馈。
使用高级搜寻来调查 WSL 设备
高级狩猎体验在WSL 2和WSL容器工作负载中是完全相同的。 现有查询无需修改即可继续使用。
在高级搜寻架构的 DeviceInfo 表中,有一个名为 HostDeviceId 的新属性,可用于将 WSL 实例映射到其 Windows 主机设备。 下面是一些示例搜寻查询:
获取当前组织/租户的所有 WSL 设备 ID
使用以下查询列出您的租户中的所有 WSL 设备 ID:
//Get all WSL device ids for the current organization/tenant
let wsl_endpoints = DeviceInfo
| where OSPlatform == "Linux" and isnotempty(HostDeviceId)
| distinct DeviceId;
wsl_endpoints
获取 WSL 设备 ID 及其对应的主机设备 ID
使用以下查询将每个 WSL 设备 ID 映射到其相应的Windows主机设备 ID:
//Get WSL device ids and their corresponding host device ids
DeviceInfo
| where OSPlatform == "Linux" and isnotempty(HostDeviceId)
| distinct WSLDeviceId=DeviceId, HostDeviceId
获取运行 curl 或 wget 的 WSL 设备 ID 列表
使用以下查询来查找已执行 curl 或 wget 的 WSL 设备:
//Get a list of WSL device ids where curl or wget was run
let wsl_endpoints = DeviceInfo
| where OSPlatform == "Linux" and isnotempty(HostDeviceId)
| distinct DeviceId;
DeviceProcessEvents
| where FileName == "curl" or FileName == "wget"
| where DeviceId in (wsl_endpoints)
| sort by Timestamp desc
故障排除
[!注意] 关于与WSLc相关的故障排除,请查看本 节。
使用以下故障排除步骤来诊断和解决适用于终结点的 Defender WSL 插件的常见问题。
安装失败
如果在启动 WSL 时看到错误,例如 A fatal error was returned by plugin 'DefenderforEndpointPlug-in' Error code: Wsl/Service/CreateInstance/CreateVm/Plugin/ERROR_FILE_NOT_FOUND,则表示用于 WSL 的 Defender for Endpoint 插件安装有问题。 若要修复它,请执行以下步骤:
在“控制面板”中,转到“程序>程序和功能”。
搜索并选择 适用于 WSL 的 Microsoft Defender for Endpoint 插件。 然后选择“ 修复”。 此操作应通过将正确的文件放在预期的目录中来解决此问题。
命令 healthcheck.exe 显示输出“使用'bash'命令启动 WSL 发行版,并在五分钟内重试。
如果您看到此消息,请启动一个 WSL 发行版并等待片刻,然后再重新运行运行状况检查:
打开终端实例并运行命令
wsl。请至少等待五分钟后,再重新执行运行状况检查。
该 healthcheck.exe 命令可能会显示输出“正在等待遥测”。 请在五分钟内重试。”
遥测仍在初始化时,可能会看到以下消息:
如果出现“正在等待遥测”消息,请等待 5 分钟并重新运行 healthcheck.exe。
在 Microsoft Defender 门户中看不到任何设备,或者在时间线中看不到任何事件
检查以下事项:
如果您没有看到计算机对象,请确保已预留足够的时间让载入过程完成(通常最多需要 10 分钟)。
请确保使用正确的筛选器,并且你具有相应的权限来查看所有设备对象。 (例如,你的帐户/组是否仅限于特定组?)
使用运行状况检查工具查看插件整体运行状况概览。 打开“终端”,然后运行位于
%ProgramFiles%\Microsoft Defender for Endpoint plug-in for WSL\tools的healthcheck.exe工具。启用连接测试,并检查 WSL 中 Defender for Endpoint 的连接情况。 如果连接测试失败,请将运行状况检查工具的输出提供给支持团队。
在运行状况检查中,连接测试报告“无效”
如果连接测试报告 invalid,请使用以下检查来诊断问题:
如果计算机具有代理设置,请运行命令
healthCheck --extendedProxy。 这将提供有关计算机上设置了哪些代理 () 以及这些配置是否对 WSL defender 无效的信息。
如果运行
healthCheck --extendedProxy后仍无法解决连接测试失败,请在位于%UserProfile%中的.wslconfig文件中添加以下配置设置,然后重启 WSL。 有关设置的详细信息,请参阅 WSL 设置。在 Windows 11 中
将以下设置添加到
.wslconfig文件以启用 DNS 隧道和镜像网络:# Settings apply across all Linux distros running on WSL 2 [wsl2] dnsTunneling=true networkingMode=mirrored在 Windows 10
将以下设置添加到
.wslconfig文件以禁用 DNS 代理:# Settings apply across all Linux distros running on WSL 2 [wsl2] dnsProxy=false
连接问题仍然存在
按照以下步骤收集网络日志:
打开提升的(管理员)PowerShell 提示符。
下载并运行:
.\collect-networking-logs.ps1Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/microsoft/WSL/master/diagnostics/collect-networking-logs.ps1" -OutFile collect-networking-logs.ps1 Set-ExecutionPolicy Bypass -Scope Process -Force .\collect-networking-logs.ps1打开新的命令提示符并运行以下命令:
wsl。以管理员身份打开命令提示符,并运行以下命令:
wsl --debug-shell。在调试 shell 中,运行:
mdatp connectivity test。允许完成连接测试。
停止步骤 2 中运行的 .ps1 脚本。
分享生成的 .zip 文件,以及通过从
healthcheck.exe --supportBundle运行%ProgramFiles%\Microsoft Defender for Endpoint plug-in for WSL\tools收集的支持包。
收集支持包
若要收集支持诊断信息,请使用以下步骤生成支持捆绑包:
如果遇到任何其他挑战或问题,请打开终端。 首先,导航到 Defender for Endpoint WSL 插件工具目录,然后运行
healthcheck.exe工具以生成支持包:cd "%ProgramFiles%\Microsoft Defender for Endpoint plug-in for WSL\tools"然后运行以下命令,生成一个支持捆绑包,用于收集诊断信息进行故障排除:
.\healthcheck.exe --supportBundle可以在上一个命令提供的路径中找到支持捆绑包。
WSL1 与 WSL2
适用于 WSL 的 Microsoft Defender for Endpoint 插件支持在 WSL 2 上运行的 Linux 发行版。 如果这些 Linux 分发版与 WSL 1 相关联,可能会遇到问题。 因此,建议禁用 WSL 1。 若要使用Intune策略执行此操作,请执行以下步骤:
依次转到 设备>配置文件>创建>新建策略。
选择Windows 10及更高版本的>“设置目录”。
为新配置文件创建一个名称,并搜索适用于 Linux 的 Windows 子系统以查看和添加可用设置的完整列表。
将 “允许 WSL1 ”设置设置为 “已禁用”,以确保只能使用 WSL 2 分发版。
或者,如果要继续使用 WSL 1,或者不使用 Intune 策略,可以通过在 PowerShell 中运行以下命令,有选择地将特定已安装的分发版从 WSL 1 升级到 WSL 2:
wsl --set-version <YourDistroName> 2若要确保在默认情况下使用 WSL 2 创建所有将来的分发版,请在 PowerShell 中运行以下命令,将 WSL 2 设置为默认版本:
wsl --set-default-version 2
替代 WSL 插件的发布通道
可以通过配置注册表设置来替代插件的默认发布通道。
- 默认情况下,插件使用 Windows EDR 环。 如果您希望切换到较早的通道,请在注册表中将
OverrideReleaseRing设置为以下值之一,然后重启 WSL:-
名称:
OverrideReleaseRing -
类型:
REG_SZ -
值:
Dogfood or External or InsiderFast or Production -
路径:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Defender for Endpoint plug-in for WSL
-
名称: