适用于 适用于 Linux 的 Windows 子系统 (WSL) 的 Microsoft Defender for Endpoint 插件

本文介绍如何安装、配置和排查 适用于 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 子系统,请执行以下步骤:

  1. 打开终端或命令提示符。 (在 Windows 中,转到 “启动>命令提示符”。或者,右键单击“开始”按钮,然后选择“ Terminal.)

  2. 运行命令 wsl -–install

  3. 确认 WSL 已安装并正在运行。

    1. 使用终端或命令提示符运行 wsl –-update 以确保具有最新版本。

      对于WSL容器(WSLc),运行 wsl --update --pre-release 以安装WSLc功能所需的最新WSL预览版本。

    2. 运行 wsl 命令,以确保 WSL 在测试前已启动。

  4. 按照以下步骤安装插件:

    1. 安装从 Microsoft Defender 门户的载入部分下载的 MSI 文件, (设置>终结点>载入>适用于 Linux 的 Windows 子系统 2 (插件) ) 。

      对于WSL容器(WSLc),安装兼容WSLc的Microsoft Defender for Endpoint插件的公开预览版。

    2. 打开命令提示符/终端并运行 wsl

    可以使用 Microsoft Intune 部署包

注意

如果 WslService 正在运行,它将在安装过程中停止。 您无需单独接入该子系统。 相反,插件会自动加入到 Windows 主机加入到的租户。 Microsoft Defender for Endpoint 适用于 WSL 的插件 KB 更新

安装验证清单

使用以下清单验证插件是否已正确安装并按预期运行:

  1. 更新或安装后,请等待至少 5 分钟,使插件完全初始化并写入日志输出。

  2. 打开终端或命令提示符。 (在 Windows 中,转到 “启动>命令提示符”。或者,右键单击“开始”按钮,然后选择“ Terminal.)

  3. 运行以下命令: cd "%ProgramFiles%\Microsoft Defender for Endpoint plug-in for WSL\tools".

  4. 运行命令 .\healthcheck.exe

    对于WSL容器(WSLc),请确认所有活跃的WSLc虚拟机都列在HealthCheck输出中,并且每个虚拟机都报告健康的Defender状态。

  5. 查看 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 插件如何选择代理

如果主机包含多个代理设置,插件将使用以下层次结构选择代理配置:

  1. Defender for Endpoint 静态代理设置 (TelemetryProxyServer)。

  2. Winhttp 通过 netsh 命令配置的代理。

  3. 网络 & Internet 代理设置。

    例如,如果主机同时具有 Winhttp proxyNetwork & 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 的客户端连接失败。

注意

ConnectivityTest 注册表项已不再受支持。

若要为 WSL 容器(即在该子系统上运行的发行版)设置代理,请参阅 WSL 中的高级设置配置

验证功能和 SOC 分析助手的使用体验

注意

包括设备时间线、警报、事件和高级搜寻在内的调查体验,在 WSL 2 和 WSLc 工作负载中是相同的。

安装插件后,子系统及其所有正在运行的容器将载入Microsoft Defender门户

  1. 登录到Microsoft Defender门户,然后打开“设备”视图。

  2. 使用标记 WSL2 进行筛选。

    显示设备清单筛选器的屏幕截图

    你可以查看环境中所有已启用适用于 WSL 的 Defender for Endpoint 插件的 WSL 实例。 这些实例表示在给定主机上 WSL 内运行的所有分发。 设备的主机名与 Windows 主机的主机名匹配。 但是,它显示为 Linux 设备。

  3. 打开设备页。 在“概述”窗格中,托管链接显示设备正在Windows主机上运行。 你可以选择此链接,转到 Windows 主机进行进一步调查和/或响应处置。

    显示设备概述的屏幕截图。

时间线填充,类似于 Linux 上的 Defender for Endpoint,其中包含来自子系统内部的事件 (文件、进程、网络) 。 您可以在时间线视图中查看活动情况和检测结果。 也会根据需要生成警报和事件。

为 WSL 机器设置自定义标签

该插件使用标记 WSL2 加入 WSL 计算机。 如果你或组织需要自定义标记,请执行以下步骤来配置一个:

  1. 以管理员身份打开注册表编辑器。

  2. 使用以下详细信息创建注册表项:

    • 名称:GROUP
    • 类型: REG_SZ 或注册表字符串
    • 值:Custom tag
    • 路径: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Advanced Threat Protection\DeviceTagging
  3. 设置注册表后,使用以下步骤重启 wsl:

    1. 打开命令提示符并运行命令 wsl --shutdown

    2. 运行 wsl 命令。

  4. 等待 5-10 分钟,让门户反映更改。

注意

注册表项中 GROUP 配置的自定义标记值后缀为 _WSL2. 例如,如果 GROUP 注册表值为 Microsoft,则自定义标记会显示在 Microsoft_WSL2 门户中。

测试插件

若要在安装后测试插件,请执行以下步骤:

  1. 打开终端或命令提示符。 (在 Windows 中,转到 “启动>命令提示符”。或者,右键单击“开始”按钮,然后选择“ Terminal.)

  2. 运行命令 wsl

  3. MDE Linux EDR DIY 测试包下载并提取脚本文件。

  4. 在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 列表

使用以下查询来查找已执行 curlwget 的 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 插件安装有问题。 若要修复它,请执行以下步骤:

  1. 在“控制面板”中,转到“程序>程序和功能”。

  2. 搜索并选择 适用于 WSL 的 Microsoft Defender for Endpoint 插件。 然后选择“ 修复”。 此操作应通过将正确的文件放在预期的目录中来解决此问题。

    显示控制面板中用于 WSL 修复选项的MDE插件的屏幕截图。

命令 healthcheck.exe 显示输出“使用'bash'命令启动 WSL 发行版,并在五分钟内重试。

如果您看到此消息,请启动一个 WSL 发行版并等待片刻,然后再重新运行运行状况检查:

显示 PowerShell 输出的屏幕截图。

  1. 打开终端实例并运行命令 wsl

  2. 请至少等待五分钟后,再重新执行运行状况检查。

healthcheck.exe 命令可能会显示输出“正在等待遥测”。 请在五分钟内重试。”

遥测仍在初始化时,可能会看到以下消息:

显示健康遥测状态的屏幕截图。

如果出现“正在等待遥测”消息,请等待 5 分钟并重新运行 healthcheck.exe

在 Microsoft Defender 门户中看不到任何设备,或者在时间线中看不到任何事件

检查以下事项:

  • 如果您没有看到计算机对象,请确保已预留足够的时间让载入过程完成(通常最多需要 10 分钟)。

  • 请确保使用正确的筛选器,并且你具有相应的权限来查看所有设备对象。 (例如,你的帐户/组是否仅限于特定组?)

  • 使用运行状况检查工具查看插件整体运行状况概览。 打开“终端”,然后运行位于 %ProgramFiles%\Microsoft Defender for Endpoint plug-in for WSL\toolshealthcheck.exe 工具。

    显示 PowerShell 中状态的屏幕截图。

  • 启用连接测试,并检查 WSL 中 Defender for Endpoint 的连接情况。 如果连接测试失败,请将运行状况检查工具的输出提供给支持团队。

在运行状况检查中,连接测试报告“无效”

如果连接测试报告 invalid,请使用以下检查来诊断问题:

  • 如果计算机具有代理设置,请运行命令 healthCheck --extendedProxy。 这将提供有关计算机上设置了哪些代理 () 以及这些配置是否对 WSL defender 无效的信息。

    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
    

连接问题仍然存在

按照以下步骤收集网络日志:

  1. 打开提升的(管理员)PowerShell 提示符。

  2. 下载并运行: .\collect-networking-logs.ps1

    Invoke-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
    
  3. 打开新的命令提示符并运行以下命令: wsl

  4. 以管理员身份打开命令提示符,并运行以下命令:wsl --debug-shell

  5. 在调试 shell 中,运行: mdatp connectivity test

  6. 允许完成连接测试。

  7. 停止步骤 2 中运行的 .ps1 脚本。

  8. 分享生成的 .zip 文件,以及通过从 healthcheck.exe --supportBundle 运行 %ProgramFiles%\Microsoft Defender for Endpoint plug-in for WSL\tools 收集的支持包。

收集支持包

若要收集支持诊断信息,请使用以下步骤生成支持捆绑包:

  1. 如果遇到任何其他挑战或问题,请打开终端。 首先,导航到 Defender for Endpoint WSL 插件工具目录,然后运行 healthcheck.exe 工具以生成支持包:

    cd "%ProgramFiles%\Microsoft Defender for Endpoint plug-in for WSL\tools"
    

    然后运行以下命令,生成一个支持捆绑包,用于收集诊断信息进行故障排除:

    .\healthcheck.exe --supportBundle
    

    可以在上一个命令提供的路径中找到支持捆绑包。

    显示 PowerShell 输出中的状态的屏幕截图。

WSL1 与 WSL2

适用于 WSL 的 Microsoft Defender for Endpoint 插件支持在 WSL 2 上运行的 Linux 发行版。 如果这些 Linux 分发版与 WSL 1 相关联,可能会遇到问题。 因此,建议禁用 WSL 1。 若要使用Intune策略执行此操作,请执行以下步骤:

  1. 转到Microsoft Intune管理中心

  2. 依次转到 设备>配置文件>创建>新建策略

  3. 选择Windows 10及更高版本的>“设置目录”。

  4. 为新配置文件创建一个名称,并搜索适用于 Linux 的 Windows 子系统以查看和添加可用设置的完整列表。

  5. “允许 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