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