如何在香港服务器运行 Windows 系统时,通过 Microsoft Defender for Endpoint(原 Windows Defender ATP)实现持续威胁检测

我坐在一台 2U 的服务器前,屏幕上是刚装好的 Windows Server 2022 Datacenter,iDRAC 的小黄灯一闪一闪,除了管理网还有两条 10GbE 业务网口。香港这边线路有时候挺“皮”,出海带宽充足但出口策略很严,我们的目标是:把所有裸金属与虚拟化宿主统一纳入 Microsoft Defender for Endpoint(MDE)持续威胁检测体系,在不牺牲性能的前提下,做到“装得上、连得出、看得清、打得准、控得住”。
下文我都用现在的名字 Microsoft Defender for Endpoint(MDE),它就是过去的 Windows Defender ATP。服务器端授权要用 Defender for Servers(Defender for Cloud 的 P1/P2 计划)或专用的 Server 许可,这点微软官方文档有明确说明。
1)我的现场环境与边界条件
1.1 服务器与网络(示例)
| 项目 | 配置/说明 |
|---|---|
| 机型 | Dell PowerEdge R650(混部虚拟化与应用服务器) |
| CPU | 2 × Intel Xeon Gold(28c) |
| 内存 | 512 GB DDR4 |
| 存储 | 2 × 1.92TB NVMe(系统盘RAID1),4 × 3.84TB NVMe(数据盘) |
| 网卡 | 2 × 10GbE(业务),1 × 1GbE(管理/OOB) |
| OS | Windows Server 2019/2022 Datacenter(少量 2016) |
| 管理 | AD 域 + GPO;个别裸机/边缘节点仅本地策略与脚本 |
| 出口 | 严格代理与 HTTPS 检查,少量直出白名单 |
| 目标 | 连通 MDE 云端,开启持续检测、ASR、自动化响应,接 SIEM |
许可模型:面向服务器建议使用 Defender for Cloud 的 Defender for Servers P1/P2(集成 MDE 的 EDR 能力,P2 还包含漏洞管理、FIM 等),或购买专用 Server 许可;桌面/用户侧的 E5/E3 与服务器许可是不同维度。
2)先把“能连上”解决:香港机房的代理与出站策略
MDE 的传感器(SENSE/EDR)默认走 WinHTTP 出站。在有代理且做 HTTPS 检查的环境,务必对白名单域名放行并绕过 TLS 检查,否则你会看到设备“Onboard 成功但沉默”或“时连时断”。微软官方对“网络连通性与代理”的要求写得很清楚:放行 MDE 服务域名并绕过 HTTPS 检查。
2.1 代理的正确打开方式(两招)
A)静态 WinHTTP 代理(推荐在机房/服务器场)
:: 以管理员命令行
netsh winhttp set proxy 10.10.10.10:8080
:: 回退
:: netsh winhttp reset proxy
微软文档明确支持通过 注册表/WinHTTP 设置静态代理(适合拓扑稳定的服务器),不要指望用户态的 WinINET。
B)注册表静态代理(配合 GPO 批量下发)
在组策略“数据收集与预览版本”里配置静态代理条目(TelemtryProxyServer 等),用于设备到云服务的遥测与上报(同类配置适用于端点 DLP/MDE 组件)。
血泪坑:香港某托管机房要求用户身份认证代理,结果 SENSE 在无人登录时根本过不去,Live Response、AIR、EDR 遥测都跪。微软与社区都强调:认证代理不适合此场景,服务器请用静态代理并跳过 TLS 检查。
3)安装与 Onboarding:让服务器真正“进入编制”
3.1 支持与路径
Windows Server 2019/2022/2025:门户选择对应 OS,下载 WindowsDefenderATPOnboardingScript.cmd,脚本/Intune/GPO/SCCM 任一方式下发。
Windows Server 2016/2012 R2:使用“统一代理/统一解决方案”包(告别旧 MMA),按官方迁移与安装指引执行。
单机脚本上机(少量边缘节点时特别省心)
微软建议脚本只用于少量设备/手工场景,生产大规模请走 GPO/Intune/ConfigMgr。
GPO 下发的关键点:计划任务触发 WindowsDefenderATPOnboardingScript.cmd,UNC 路径用 FQDN,保证计算机账户有读取权限。
3.2 我用的“最小可行”Onboarding 步骤(脚本法)
门户 security.microsoft.com → Settings → Endpoints → Onboarding,选 Windows Server 2019/2022/2025,下载脚本包。
推送静态代理/白名单(见第2节),确认 netsh winhttp show proxy 正确。
以管理员运行脚本,几分钟后在 Device inventory 看到新设备上线。
立刻跑一次 检测测试(官方提供),验证设备会产生告警并回传到云端。
4)入编后的“战斗准备”:打开持续检测与防护
4.1 基础开关(建议的金三角)
云提供的保护(Cloud-delivered protection/MAPS):打开。
实时保护、自动样本提交:打开。
篡改防护(Tamper Protection):在门户 Settings → Endpoints → Advanced features 打开(新租户默认 ON/内网老租户可选择启用),防止任何人/进程私自改掉安全设置。
4.2 EDR in Block Mode(什么时候开)
如果你的主杀软不是 Defender Antivirus(比如第三方 AV),才建议开启 EDR in block mode,它用于“补刀”那些被主 AV 漏掉的后渗透恶意行为;如果主 AV 就是 Defender,通常不需要开。
4.3 攻击面缩减(ASR)规则
ASR 是把一系列高价值的风险动作“事先拦住”的规则集。先 Audit 再 Block 是王道:
先用 Audit 模式观察一到两周,收集命中与业务影响;
按需加白/排除后再逐步切到 Block。
规则与部署方式(Intune/GPO/PowerShell)与支持平台详见官方参考。
5)性能与排除:别把服务器“卡秧子”了
- Windows Server 2016+ 的很多角色(AD、DNS、Hyper-V、WSUS 等)已有自动排除,不必重复“人为排除”;除非有特定工作负载(如大型 DB/高频 I/O 程序)确实被误伤。
- SQL Server 等特定产品仍建议对其数据/日志路径做有针对性的排除(优先参考微软官方 SQL 排除清单)。
- 真的要自定义排除,统一用策略集中下发、记录变更。
6)健康检查与日常巡检(我常用的“口袋命令”)
6.1 PowerShell 一键体检
# 1. 防病毒与引擎状态
Get-MpComputerStatus | Select AMRunningMode,AMServiceEnabled,AntispywareEnabled,AntivirusEnabled,IoavProtectionEnabled,NISEnabled,RealTimeProtectionEnabled,EngineVersion,AntivirusSignatureVersion
# 2. 当前策略与排除
Get-MpPreference | Select AttackSurfaceReductionRules_Ids, AttackSurfaceReductionRules_Actions, ExclusionPath, ExclusionProcess
# 3. 近 24 小时检测事件(示例)
Get-WinEvent -LogName "Microsoft-Windows-Windows Defender/Operational" -MaxEvents 50 |
Where-Object {$_.TimeCreated -gt (Get-Date).AddHours(-24)} |
Select TimeCreated, Id, LevelDisplayName, Message
Get-MpComputerStatus 是最常用的体检 cmdlet,能直接看引擎与签名版本、实时保护、云保护等多项状态。
6.2 该看哪些事件日志
EDR/SENSE 日志:Applications and Services Logs > Microsoft > Windows > SENSE > Operational(排查 Onboarding/心跳问题首选)
Defender AV 日志:Microsoft > Windows > Windows Defender > Operational(查本地扫描/拦截/签名更新)
7)验证闭环:两种“无害”测试
官方检测脚本(门户文档提供,一键验证设备是否正确上报到 MDE)
EICAR 测试文件(标准化“假病毒”,可触发杀软告警,用于链路与响应验证)
建议在隔离的测试服务器上做,完成后清理残留文件,确认门户产生告警、时间线有事件、自动化调查能拉起。
8)把“看见”变成“会用”:狩猎、自动化与响应
8.1 高级狩猎(Advanced Hunting)常用 KQL
// 近24小时所有进程创建
DeviceProcessEvents
| where Timestamp > ago(24h)
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine
// 常见横向工具/可疑命令行
DeviceProcessEvents
| where FileName in~ ("psexec.exe","wmic.exe","rundll32.exe","powershell.exe","certutil.exe")
| project Timestamp, DeviceName, FileName, ProcessCommandLine, InitiatingProcessParentFileName
// 出站到非常见国家/可疑高端口
DeviceNetworkEvents
| where Timestamp > ago(24h) and RemotePort > 1024
| summarize cnt=count() by DeviceName, RemoteIP, RemoteUrl, RemotePort
| top 50 by cnt desc
DeviceProcessEvents、DeviceNetworkEvents 等表是日常排查的主力。
8.2 自动化与响应动作
自动化调查与修复(AIR):在门户开启后,可对部分告警自动取证/处置。
设备隔离、收集调查包、Live Response:告警页或设备页一键触发,调查包包含 Autoruns、网络、进程、注册表等信息。
9)我踩过的那些坑(以及当场怎么解)
| 坑点 | 现象 | 定位 & 解决 |
|---|---|---|
| 认证代理 + TLS 检查 | Onboarding 成功但设备长期“Inactive”或不产生日志 | 改成 WinHTTP 静态代理,对 MDE 域名放行并绕过 HTTPS 检查;必要时直接白名单 *.endpoint.security.microsoft.com(仍需保留其余服务域名/服务标签)。 |
| 只开了 WinINET 代理 | 用户登出后 SENSE 断流 | 服务器不要依赖 WinINET,改走静态代理。 |
| ASR 直接全量 Block | 业务批处理脚本被拦 | 先 Audit 观察 → 按需排除 → 分批切 Block。 |
| EDR in block mode 乱开 | 与 Defender AV 冲突、重复拦截 | 若主 AV 就是 Defender AV,不建议开 EDR Block。 |
| 2016/2012 R2 旧栈 | 功能缺失、依赖 MMA | 升级到 统一解决方案,按官方迁移指引替换。 |
| 设备“看得见、控不住” | Live Response/隔离失败 | 99% 是网络/代理没放全,按第2节核对白名单与服务标签,确认 WinHTTP 代理生效。 |
10)可直接拿去用的“落地清单”
10.1 门户与策略
打开 Tamper Protection、确认 Cloud-delivered protection 开启、(如需)EDR in Block Mode(仅与第三方 AV 并存时)。
ASR:先 Audit,两周后按业务分群 Block。
10.2 网络与代理(机房侧)
为 MDE 服务域名放行并绕过 HTTPS 检查;服务器统一下发 WinHTTP 静态代理。
10.3 安装与 Onboarding
2019/2022:脚本/GPO/ConfigMgr 均可;2016/2012 R2:统一解决方案包。
完成后立刻做 官方检测测试 或 EICAR 验证闭环。
10.4 运维巡检
PowerShell 体检:Get-MpComputerStatus / Get-MpPreference;
查看日志:SENSE/Operational 与 Windows Defender/Operational。
11)附:我常用的 GPO/脚本片段(示例)
(1)GPO 下发 Onboarding 脚本(计划任务)关键项
动作:Start a program
程序/脚本:\\filesrv.contoso.com\mde$\WindowsDefenderATPOnboardingScript.cmd
(确保计算机帐户可读)
(2)ASR 规则 PowerShell(先审计再分批阻断)
# 示例:块“Office 子进程”(审计)
$ruleId = "D4F940AB-401B-4EFC-AADC-AD5F3C50688A" # 仅示例,GUID 请以官方文档为准
Add-MpPreference -AttackSurfaceReductionRules_Ids $ruleId -AttackSurfaceReductionRules_Actions AuditMode
具体规则/ID 以微软 ASR 参考为准,部署流程见官方“启用与部署 ASR”。
(3)一键生成“上线健康”报表
$svrs = Get-Content .\hk_servers.txt
$report = foreach($s in $svrs){
Invoke-Command -ComputerName $s -ScriptBlock {
$st = Get-MpComputerStatus
[pscustomobject]@{
Hostname = $env:COMPUTERNAME
AMRunningMode = $st.AMRunningMode
RTP = $st.RealTimeProtectionEnabled
Cloud = $st.IsCloudProtectionEnabled
Engine = $st.EngineVersion
Sig = $st.AntivirusSignatureVersion
Tamper = $st.IsTamperProtected
Time = (Get-Date)
}
}
}
$report | Export-Csv .\mde_health_hk.csv -NoTypeInformation -Encoding UTF8
字段说明参考 Get-MpComputerStatus 文档。
12)收尾:清晨 6:10 的面包店
从机房出来天已经泛白。第二天的“端到端测试”里,我们在一台隔离段的测试服务器上跑了官方检测脚本和 EICAR,MDE 门户里时间线、告警、自动化调查、取证包一切正常;ASR 在 Audit 模式下命中了几条内部脚本,我们加了排除后,业务没被打扰。最关键的是:那几台一直“沉默”的服务器在改成静态代理、白名单绕检之后,心跳稳定了。
这就是我最喜欢的感觉——不是部署某个“安全产品”,而是把“持续威胁检测”真正变成“能用、好用、稳用”的工程体系。
如果你也在香港或其它严格出海环境里上线 MDE,按这套步骤走——先网络、后入编、再策略、最后自动化——基本就能一次通过。需要,我也可以把这套 GPO 和脚本按你的机房口径再“抠细”一版