被C2了?看 Defender for Endpoint 如何识别并阻断

在当今网络安全威胁日益复杂的环境中,命令与控制(Command and Control, C2)攻击已成为攻击者渗透企业网络、窃取敏感数据的主要手段之一。攻击者通常会入侵互联网服务器并将其转化为C2服务器,便通过C2服务器与受控主机建立秘密通信,实现数据窃取、远程控制、横向移动等关键攻击步骤。接着利用这些服务器隐藏恶意流量并部署恶意机器人程序,进而感染企业终端设备。当终端被C2恶意软件感染后,会在用户毫无察觉的情况下与C2服务器通信,使攻击者获得对设备的完全控制权,甚至可能导致恶意软件在网络中扩散,形成 “僵尸网络” 感染。

基本概念:C2Command and Control)通信,在信息安全和网络攻击领域,指的是黑客或攻击者与受感染设备(如被攻击的计算机、网络设备或机器人网络中的设备)之间的通信方式。通过这种通信,攻击者能够远程控制受害者的设备、发起进一步的攻击、窃取数据、或执行其他恶意操作。简单来说,C2 是指攻击者与受控系统之间的“命令和控制”通信链路。

 

C2通信并非总是明显的HTTP beacon或DNS回传数据。现代攻击者采用加密协议(如HTTPS)、数据编码技术,甚至隐藏在云服务流量或正当业务应用中,极力避免被检测。C2通信的常见方式:

  • HTTP/HTTPS:许多攻击者会通过 HTTP 或 HTTPS 协议来建立 C2通信,因为这些协议常用于合法网站的流量,容易绕过防火墙和安全检测。
  • DNS隧道:攻击者通过 DNS 查询来传输数据,因为 DNS 请求通常不被安全监测工具检测。这使得攻击者能够通过 DNS 协议进行隐秘的 C2通信。
  • ICMP隧道:通过利用 ICMP 协议(通常用于网络设备的ping测试)来传输命令和控制信息。由于 ICMP 通常被用作诊断工具,它常常会被忽视或允许通过防火墙。
  • Peer-to-Peer (P2P) 网络:在这种方式下,感染的设备彼此之间建立直接的通信网络,减少了对中心化服务器的依赖,从而使得 C2通信更难以追踪。
  • 即时消息和社交媒体:某些攻击者可能使用公共聊天应用程序(如 Slack、Telegram、微信等)来作为命令和控制渠道,利用它们的通信加密特性和隐蔽性。

 

C2通信的主要目的是允许攻击者远程控制受害系统,并实施多种恶意活动,如:

  • 远程执行恶意代码:攻击者可以远程命令受感染设备执行恶意操作,例如下载、上传或执行病毒、勒索软件等。
  • 数据窃取:攻击者可以通过 C2通信定期获取受害者的敏感数据,如文件、凭证或加密密钥等。
  • 扩大攻击范围:攻击者可以通过感染的设备作为跳板,进行网络蔓延,感染更多的设备。
  • DDoS攻击:攻击者可以通过控制的设备发起分布式拒绝服务攻击(DDoS),通过大量的请求淹没目标服务器或网络。

Defender for Endpoint 推出的网络层C2检测与修复功能,为企业提供了从网络层拦截 C2攻击的强大能力,帮助安全运营团队更早地检测到C2攻击,快速阻止攻击传播,并轻松移除恶意二进制文件,从而缩短漏洞缓解时间。微软安全团队指出,攻击者常利用如下技巧提升隐蔽性:

  • 域前置(Domain Fronting):利用CDN绕过安全检测。
  • 动态DNS(DDNS):频繁更换C2服务器地址。
  • 合法证书滥用:掩盖恶意流量的真正意图。
  • 端口滥用:在非标准端口上建立反向连接。

因此,仅依赖传统特征匹配或静态规则早已无法有效识别C2通信。本文将探讨如何借Defender for Endpoint(MDE)及其网络层防护能力,深入检测、响应并切断C2攻击路径,从而构建零信任时代的终端防御纵深。

Microsoft Defender for Endpoint 在网络层防护(Network Protection)上的进化,为检测C2攻击提供了新的突破口。MDE不仅能识别恶意文件,还能检测终端设备上的异常网络行为,并将可疑通信上报至Microsoft Threat Intelligence Cloud进行实时分析。关键防护机制:

  • 网络流量检测(Traffic Inspection)
    • 识别异常的出站连接尝试(如不常见国家IP、大量DNS请求、短周期HTTPS握手等)。
    • 结合设备上下文(用户登录、进程来源)提高精准度。
  • 基于行为的检测(Behavioral-based Detection)
    • 利用ML模型检测周期性beacon信号、数据包长度模式、重试行为等C2通信特征。
  • 设备风险评分(Device Risk Scoring)
    • 将通信行为、登录事件、进程行为等数据整合,评估终端被控风险。
  • 主动阻断(Automatic Remediation)
    • 自动封锁已知或高风险C2地址、域名。
    • 联动Defender XDR快速响应,进行端点隔离或流程终止。

要使用Defender for Endpoint的网络层 C2 检测与阻断功能,需要满足以下前提条件:

  • 操作系统要求
    • Windows 设备:Windows 10 版本 1709 或更高版本
    • Windows 服务器:Windows Server 1803、Windows Server 2019 或更高版本
    • macOS 版本:Big Sur (11) 或更高版本
    • 非Microsoft Web 浏览器,例如 Brave、Chrome、Opera 和 Safari
    • Microsoft Edge for macOS 浏览器
    • Linux
  • 安全设置要求
    • 组织使用启用了实时保护和云交付保护的 Microsoft Defender 防病毒软件
    • Microsoft Defender for Endpoint 处于活动模式
    • 网络保护已启用为阻止模式
    • 引擎版本为1.17300.4 或更高版本
New mapping Response category Sources
phishing Phishing SmartScreen
malicious Malicious SmartScreen
command and control C2 SmartScreen
command and control COCO SmartScreen
malicious Untrusted SmartScreen
by your IT admin CustomBlockList  
by your IT admin CustomPolicy  

使用有权限账户登录Microsoft Defender门户页面,选择“ 终结点>配置管理>终结点安全策略 ”,然后根据操作系统平台选择“ 创建新策略”,选择Microsoft Defender防病毒安全策略设置

 

 

配置以下策略选项:

Windows 客户端上的网络保护:

状态 模式 数值
Disabled = 关 0
已启用 = 块模式 1
Audit = 审核模式 2

 

说明 Setting
启用网络保护 选项:
– 启用 (块模式) 阻止模式需要阻止 IP 地址/URL 指示器和 Web 内容筛选。
– 已启用 (审核模式)
– 禁用 (默认)
– 未配置

 

Windows Server 2012 R2 和 Windows Server 2016 上的网络保护,请使用下表中列出的其他策略:

说明 Setting
允许网络保护下一级 选项:
– 网络保护将启用下层。
– 网络保护将在下层禁用。 (默认)
– 未配置

禁用设置 Allow Datagram Processing On WinServer 。 对于生成大量 UDP 流量的任何角色(例如域控制器、Windows DNS 服务器、Windows 文件服务器、Microsoft SQL 服务器、Microsoft Exchange 服务器等),这一点非常重要。 在这些情况下启用数据报处理可能会降低网络性能和可靠性。 禁用它有助于保持网络稳定,并确保在高需求环境中更好地使用系统资源。

说明 Setting
允许在 Win 服务器上处理数据报 – 启用Windows Server上的数据报处理。
– 建议) 默认禁用Windows Server上的数据报处理。
– 未配置
禁用 DNS over TCP 分析 – 禁用基于 TCP 的 DNS 分析。
– 默认启用基于 TCP 的 DNS 分析。
– 未配置
禁用 HTTP 分析 – HTTP 分析已禁用。
– 默认启用 HTTP 分析。
– 未配置
禁用 SSH 分析 – SSH 分析已禁用。
– 默认启用 SSH 分析。
– 未配置
禁用 TLS 分析 – TLS 分析已禁用。
– 默认启用 TLS 分析。
– 未配置
[已弃用]启用 DNS 接收器 – DNS Sinkhole 已禁用。
– 已启用 DNS Sinkhole。 (默认)
– 未配置

 

之后,创建的策略将被显示

 

策略生效情况

 

在Windows客户端的安全中查看策略生效情况:

 

或者使用以下命令行检查策略生效状态

Windows平台:Get-MpPreference

 

macOS/Linux:mdatp health --field network_protection_status

 

之后,我们可以在Microsoft Defender门户中查看相关警报和事件

 

网络层级 – 可疑的外联连接行为:检测主机尝试连接到已知 C2 域名、IP 或通信特征异常的外部主机(端口、协议、重复连接等)

DeviceNetworkEvents
| where RemoteUrl has_any ("ngrok.io", "examplec2.com", "onion", "pastebin.com")
    or RemoteIP in ("45.66.33.7", "185.220.101.1")  // 可替换为已知 C2 IP
    or RemotePort in (4444, 1337, 8081)
| where ActionType == "ConnectionSuccess"
| extend IOCType = iif(RemoteUrl has "onion", "Tor", "Known_C2")
| project Timestamp, DeviceName, RemoteIP, RemoteUrl, RemotePort, Protocol, InitiatingProcessFileName, InitiatingProcessCommandLine, IOCType

行为层级 – 命令行注入或内存加载攻击: 检测常用于 Sliver、Cobalt Strike、Metasploit 等工具的命令行行为或恶意进程加载DLL执行C2通信的情况

DeviceProcessEvents
| where InitiatingProcessCommandLine has_any ("powershell", "IEX", "System.Net.WebClient", "DownloadString", "Invoke-Expression", "Invoke-WebRequest")
| where ProcessCommandLine matches regex @"(?i)http(s)?://[^\s]+"
| where FileName !endswith ".exe"  // 排除常见可执行文件
| extend SuspiciousCommand = tostring(ProcessCommandLine)
| project Timestamp, DeviceName, AccountName, FileName, SuspiciousCommand, InitiatingProcessFileName

持久化或隐蔽通信行为 – 注册表、计划任务或WMI启动: 检测使用注册表、计划任务、WMI 作为隐藏启动点,维持 C2 通信持久化的痕迹

DeviceRegistryEvents
| where RegistryKey has_any (
    @"HKCU\Software\Microsoft\Windows\CurrentVersion\Run",
    @"HKLM\SYSTEM\CurrentControlSet\Services",
    @"HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"
)
| where RegistryValueData has_any (".bat", ".ps1", "http", "cmd", "powershell")
| extend Indicator = "Persistence via Registry"
| project Timestamp, DeviceName, RegistryKey, RegistryValueName, RegistryValueData, Indicator

Linux 平台 C2 活动检测脚本:

DeviceProcessEvents
| where OSPlatform == "Linux"
| where (
    ProcessCommandLine has_any ("bash -i", "/dev/tcp/", "0>&1", "1>&2", "curl", "wget", "ncat", "nc", "socat", "python -c", "nohup", "rm -rf") or
    FileName in~ ("bash", "sh", "curl", "wget", "nc", "ncat", "python", "perl", "php", "socat")
)
| extend SuspiciousType = case(
    ProcessCommandLine has_all ("bash", "/dev/tcp/"), "Reverse Shell via /dev/tcp",
    ProcessCommandLine has_any ("curl", "wget") and ProcessCommandLine has "http", "Payload Download",
    ProcessCommandLine has_any ("nc", "ncat", "socat"), "Netcat-like C2 Communication",
    ProcessCommandLine has "python -c" and ProcessCommandLine has_any ("socket", "popen"), "Python Reverse Shell",
    ProcessCommandLine has_all ("bash", "-i") and ProcessCommandLine has_any ("tcp", "udp"), "Interactive Bash Shell",
    "Other"
)
| project Timestamp, DeviceName, InitiatingProcessAccountName, FileName, ProcessCommandLine, SuspiciousType, InitiatingProcessFileName

以下是一个可疑网络连接 – 供应链攻击的Advanced Hunting

let lookback = 14d; 
// Generate list of all Servers
let server_list = 
    DeviceInfo
    | where Timestamp > ago(lookback)
    | where isnotempty(OSPlatform)
    | where DeviceType <> "Workstation" and OSPlatform <> "macOS"
    | summarize make_set(DeviceName)
    ;
// Generate list of servers that have 3rd party software installed.
// Criteria: if a software is installed on less than 10 servers, it's probably a 3rd party software.
// There are probably(hopefully) just a few servers or server groups that have privileges across the whole domain.
// You can change the threshold according to your environment.
let ServersWithThirdPartyApps = materialize (
    DeviceNetworkEvents
    | where Timestamp > ago(lookback)
    | where DeviceName in (server_list)
    | where ActionType <> "ListeningConnectionCreated"
    | where RemoteIPType !in ("Private","Loopback") and (not (RemoteIPType == "FourToSixMapping" and RemoteIP startswith "::ffff:"))
    | summarize dcount(DeviceName) by InitiatingProcessVersionInfoCompanyName
    | where dcount_DeviceName < 10
    | join kind=inner (
        DeviceNetworkEvents
        | where Timestamp > ago(lookback)
        | where DeviceName in (server_list)
        | where ActionType <> "ListeningConnectionCreated"
        | where RemoteIPType !in ("Private","Loopback") and (not (RemoteIPType == "FourToSixMapping" and RemoteIP startswith "::ffff:"))
        )
        on InitiatingProcessVersionInfoCompanyName
        | summarize make_set(DeviceName)
        )
        ;
// Get network connection statistics
let baseline = materialize (
    DeviceNetworkEvents
    | where Timestamp > ago(lookback)
    | where DeviceName in (ServersWithThirdPartyApps)
    | where ActionType <> "ListeningConnectionCreated"
    | where RemoteIPType !in ("Private","Loopback") and (not (RemoteIPType == "FourToSixMapping" and RemoteIP startswith "::ffff:"))
    | summarize hint.strategy=shuffle Count=count(), starttime = min(Timestamp), endtime = max(Timestamp) by DeviceName, RemoteIP, RemotePort
    )
    ;
// Get destination IP 
let Destinations = baseline | summarize make_set(RemoteIP);
// Filter connections that was not seen before last 1d 
// Generate prevalence info, URL info(if available) and enrich results
// Filter based on prevalence and URL information and display everything by hostname
baseline
| where starttime > ago(1d)
| lookup kind=leftouter (
    DeviceNetworkEvents
    | where Timestamp > ago(5d)
    | where RemoteIP in (Destinations)
    | summarize hint.strategy=shuffle Prevalence = dcount(DeviceId), URLs=make_set(RemoteUrl) by RemoteIP
    )
    on RemoteIP
| where Prevalence < 6 or isempty( Prevalence)
// If you want to see all the events in distinct rows, remove the below 2 lines
// filter out results based on trusted URLs if you like. 
| extend Details = pack('RemoteIP',RemoteIP, 'RemotePort',RemotePort, 'Count',Count, 'Prevalence',Prevalence, 'URLs',URLs)
| summarize make_set(Details) by DeviceName

Defender for Endpoint 的网络层 C2 检测与阻断功能为企业提供了一种强大的工具,帮助安全运营团队在 C2 攻击的早期阶段就检测到威胁,并迅速采取措施阻止攻击传播。通过在网络层拦截 C2 连接,企业可以有效减少 C2 攻击带来的风险,保护终端设备和敏感数据的安全。

同时,针对 Command and Control(C2)攻击的安全防护,需从流量监控、终端防护、网络架构、策略管理等多维度构建防御体系,以下是一些防护建议:

一、强化流量监控与异常检测

  • 部署多层流量分析工具
    • 入侵检测 / 防御系统(IDS/IPS):通过规则库识别 C2 通信特征(如异常 DNS 查询、加密流量中的特定协议模式),实时阻断可疑连接。
    • 深度包检测(DPI)设备:分析流量内容,识别 C2 工具常用的通信协议(如 HTTP/S、DNS、ICMP)中的异常模式(如高频小数据包、非标准端口通信)。
    • 用户和实体行为分析(UEBA):监控用户与设备的网络行为,标记异常流量模式(如深夜高频外连、突然访问陌生域名)。
  • 加密流量监控与解密
    • 对 HTTPS 流量部署 SSL/TLS 解密网关,检测加密流量中隐藏的 C2 通信(部分 C2 工具会利用加密通道规避检测),但需注意合规性与隐私保护。
  • DNS 安全防护
    • 部署 DNS 防火墙(如 OpenDNS、Cisco Umbrella),阻断指向已知恶意域名的请求,过滤含异常字符(如长随机字符串)的 DNS 查询。
    • 启用 DNSSEC(域名系统安全扩展),防止 DNS 缓存污染和恶意域名解析。

二、终端与端点安全加固

  • 部署高级终端防护软件
    • 使用 EDR(端点检测与响应)工具(如微软 Defender for Endpoint),实时监控进程行为,阻断可疑程序的网络连接和命令执行。
    • 启用行为分析功能,识别 C2 工具的典型行为(如进程注入、异常注册表修改、横向移动尝试)。
  • 严格应用程序白名单
    • 通过组策略或第三方工具(如 AppLocker)限制非可信程序运行,阻止 C2 Agent(如 Metasploit Payload、Empire 脚本)的执行。
  • 系统与软件漏洞管理
    • 及时更新操作系统、中间件和应用程序补丁,修复可能被 C2 工具利用的漏洞(如永恒之蓝漏洞 MS17-010)。
    • 对老旧系统或未打补丁的设备隔离部署,减少 C2 攻击的入口点。

三、网络架构与访问控制优化

  • 分段与隔离网络
    • 通过 VLAN、防火墙将网络划分为不同安全区域(如办公区、服务器区、DMZ),限制跨区域通信,防止 C2 攻击的横向移动。
    • 对工业控制网络(ICS)、物联网设备(IoT)单独组网,避免与办公网络直接互联。
  • 严格控制出站连接
    • 在边界防火墙设置白名单策略,仅允许必要的业务流量出站(如 HTTP/HTTPS、SMTP),阻断非标准端口(如 4444、8080)的外连请求。
    • 对远程桌面协议(RDP)、SSH 等服务限制源 IP 访问,启用多因素认证(MFA)。
  • 代理与 VPN 访问管理
    • 使用正向代理统一管理出站流量,便于监控和审计;远程访问必须通过 VPN 接入,且 VPN 服务器仅暴露必要端口。

四、日志审计与事件响应

  • 全面日志收集与分析
    • 收集终端、网络设备、服务器的日志(如系统日志、安全日志、DNS 日志),通过 SIEM(安全信息和事件管理)工具关联分析,识别 C2 攻击的蛛丝马迹(如异常进程启动、高频外连)。
  • 建立 C2 攻击响应流程
    • 制定预案:发现 C2 连接后,立即隔离受感染设备,阻断其网络通信,防止数据泄露或进一步扩散。
    • 取证分析:使用内存取证工具(如 Volatility)、网络流量分析工具提取 C2 Agent 的特征(如通信协议、命令参数),追溯攻击源。
    • 恢复与加固:清除恶意程序后,更新防护策略,对同类资产加强监控。
  • 集成威胁情报源
    • 将 EDR、防火墙等设备对接外部威胁情报平台(Microsoft Defender Threat Intelligence),实时更新恶意 IP、域名、文件哈希库,自动阻断已知 C2 基础设施的连接。

五、员工安全意识培训

  • 定期开展钓鱼演练
    • 通过模拟钓鱼邮件、恶意链接测试员工警惕性,教育员工不点击未知附件、不访问可疑网站,避免成为 C2 攻击的入口(如钓鱼邮件植入 Agent)。
  • 普及 C2 攻击原理
    • 培训员工识别 C2 攻击的常见迹象(如设备异常卡顿、不明进程占用网络带宽),发现异常及时上报安全团队。

六、特殊场景下的防护建议

  • 针对 DNS C2:限制递归 DNS 服务器的使用,监控 DNS 查询中的长域名(如随机字符串域名),部署 DNS sinkhole(黑洞)将恶意域名解析到陷阱地址。
  • 针对云环境 C2:使用云安全服务(如 AWS GuardDuty、Microsoft Defender for Cloud)监控云主机的异常行为,限制云主机对互联网的直接访问,通过 API 网关统一管理出站流量。

随着网络安全威胁的不断演变,企业需要不断更新和完善其安全防护措施。C2 攻击的防护需结合 “检测 – 阻断 – 响应 – 优化” 的闭环体系,通过技术工具、管理策略和人员意识的协同,实现对 C2 通信的全生命周期防御。同时,持续关注新兴 C2 技术(如基于物联网协议、加密信道复用的 C2),及时更新防护策略,提升对抗能力。Microsoft Defender for Endpoint 的这一创新功能,为企业提供了一种主动防御 C2 攻击的有效手段,有助于提升企业的整体网络安全防护水平。