第229篇:终端检测与响应(EDR)在网络侧联动
关键词:EDR、终端检测、威胁响应、网络联动、SOAR、威胁狩猎、IOC、自动化响应
一、引言
EDR(Endpoint Detection and Response,终端检测与响应)专注于终端层面的威胁检测和响应。然而,仅靠 EDR 无法解决网络层面的安全问题。当 EDR 检测到终端感染时,网络侧设备(防火墙、交换机、WAF)需要快速联动,对威胁进行隔离和阻断,形成"检测-响应-处置"的完整闭环。
EDR 与网络侧设备的联动,是将终端安全与网络安全打通的关键。
二、核心概念
2.1 EDR 核心能力
| 能力 | 说明 | 实现方式 |
|---|---|---|
| 数据采集 | 采集终端进程、文件、注册表、网络连接等数据 | 内核驱动/ETW |
| 行为分析 | 分析进程行为链、父子进程关系 | 规则引擎/ML |
| 威胁检测 | 识别恶意行为、攻击链 | 签名+行为+AI |
| 事件关联 | 关联多终端事件发现横向移动 | 图分析 |
| 响应处置 | 隔离终端、终止进程、删除文件 | Agent 下发指令 |
| 取证调查 | 保留事件证据、时间线重建 | 日志归档 |
2.2 EDR 与网络设备联动架构

2.3 IOC 类型与联动
| IOC 类型 | 示例 | 网络侧处置 |
|---|---|---|
| 恶意 IP | 185.220.101.1 | 防火墙阻断出站/入站 |
| 恶意域名 | evil-c2.com | DNS 拦截、域名黑名单 |
| 恶意 URL | evil.com/payload.exe | URL 过滤阻断 |
| 恶意文件哈希 | SHA256:abc123... | 防火墙文件过滤 |
| 恶意邮箱 | attacker@evil.com | 邮件网关拦截 |
| 恶意证书指纹 | SSL 证书 SHA1 | SSL 检测阻断 |
三、技术细节
3.1 EDR 事件到网络响应的自动化流程

3.2 SOAR Playbook 编排
| Playbook 名称 | 触发条件 | 自动化动作 |
|---|---|---|
| 勒索软件响应 | EDR检测到勒索行为 | 隔离终端、阻断C2 IP、通知管理员 |
| C2 通信阻断 | EDR检测到C2连接 | 防火墙阻断IP/域名、DNS拦截 |
| 横向移动处置 | EDR检测到SMB暴力破解 | 隔离源终端、阻断目标端口 |
| 数据外泄响应 | EDR检测到大量数据传出 | 阻断外联、隔离终端、取证 |
| 钓鱼邮件处置 | EDR检测到恶意宏执行 | 邮件撤回、终端隔离、用户通知 |
3.3 网络侧联动接口
| 接口类型 | 协议 | 用途 |
|---|---|---|
| REST API | HTTPS | 防火墙策略下发 |
| Syslog | UDP/514 | EDR 日志上报 |
| STIX/TAXII | HTTPS | 威胁情报共享 |
| SNMP Trap | UDP/162 | 网络设备告警 |
| Netconf | SSH | 交换机策略配置 |
| RADIUS CoA | UDP/3799 | 动态端口隔离 |
四、实战配置/案例分析
4.1 华为 iMaster SecoManager 联动配置
# 1. 在防火墙上配置威胁情报联动
# 启用威胁情报功能
threat-intelligence
enable
# 配置EDR平台地址(接收IOC同步)
source edr_platform
server 10.1.1.160
protocol rest
auth-mode token
token cipher EDR@Token@2024
sync-interval 60
# 同步的IOC类型
ioc-type ip domain url file-hash
quit
quit
# 2. 配置防火墙自动策略更新
# 当收到EDR的恶意IP时自动添加阻断策略
security-policy
rule name Auto_Block_EDR_IP
source-zone any
destination-zone any
# 动态地址对象,由EDR平台更新
destination-address dynamic-edr-malicious-ip
action deny
log-action enable
statistics enable
quit
rule name Auto_Block_EDR_Domain
source-zone any
destination-zone any
destination-domain dynamic-edr-malicious-domain
action deny
log-action enable
quit
quit
# 3. 配置交换机端口隔离联动
# 当EDR判定某终端感染时,通过RADIUS CoA隔离端口
# (需要在交换机上启用RADIUS动态授权)
radius
scheme edr_radius
primary accounting 10.1.1.200
# 启用CoA支持
coa enable
coa key cipher CoA@2024
quit
quit
aaa
domain edr_isolation
radius-server scheme edr_radius
quit
quit
interface GigabitEthernet0/0/1
# 支持RADIUS动态授权变更
port-authen dot1x enable
port-authen radius coa enable
quit
# 4. 配置防火墙与EDR的事件上报
# 防火墙将安全事件上报到EDR平台
security-log
server-group edr_log_server
server 1
address 10.1.1.160
protocol syslog
port 514
format cef
quit
quit
quit
4.2 SOAR 自动化编排脚本(Python)
#!/usr/bin/env python3
"""
EDR-网络联动自动化响应脚本
当EDR检测到高威胁事件时,自动在网络侧执行阻断
"""
import requests
import json
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# 配置
FW_API_URL = "https://10.1.1.10:8443/api/v2"
FW_TOKEN = "firewall_api_token"
SW_API_URL = "https://10.1.1.11:8443/api/v2"
SW_TOKEN = "switch_api_token"
EDR_API_URL = "https://10.1.1.160:8443/api/v1"
EDR_TOKEN = "edr_api_token"
def get_threat_details(edr_event_id):
"""从EDR获取威胁详情"""
headers = {"Authorization": f"Bearer {EDR_TOKEN}"}
resp = requests.get(
f"{EDR_API_URL}/events/{edr_event_id}",
headers=headers
)
return resp.json()
def block_ip_on_firewall(ip_address, reason):
"""在防火墙上阻断IP"""
headers = {
"Authorization": f"Bearer {FW_TOKEN}",
"Content-Type": "application/json"
}
payload = {
"rule_name": f"EDR_Block_{ip_address}",
"source_zone": "any",
"destination_zone": "any",
"destination_address": ip_address,
"action": "deny",
"description": f"EDR联动阻断: {reason}",
"auto_generated": True
}
resp = requests.post(
f"{FW_API_URL}/security-policy/rules",
headers=headers,
json=payload
)
logger.info(f"防火墙IP阻断: {ip_address}, 状态: {resp.status_code}")
return resp.status_code == 200
def block_domain_on_firewall(domain, reason):
"""在防火墙上阻断域名"""
headers = {
"Authorization": f"Bearer {FW_TOKEN}",
"Content-Type": "application/json"
}
payload = {
"domain": domain,
"action": "block",
"description": f"EDR联动阻断: {reason}",
"auto_generated": True
}
resp = requests.post(
f"{FW_API_URL}/dns-filter/blacklist",
headers=headers,
json=payload
)
logger.info(f"防火墙域名阻断: {domain}, 状态: {resp.status_code}")
return resp.status_code == 200
def isolate_switch_port(mac_address, reason):
"""在交换机上隔离端口"""
headers = {
"Authorization": f"Bearer {SW_TOKEN}",
"Content-Type": "application/json"
}
payload = {
"mac_address": mac_address,
"action": "isolate",
"vlan_id": 999, # 隔离VLAN
"description": f"EDR联动隔离: {reason}"
}
resp = requests.post(
f"{SW_API_URL}/port-isolation",
headers=headers,
json=payload
)
logger.info(f"交换机端口隔离: {mac_address}, 状态: {resp.status_code}")
return resp.status_code == 200
def edr_auto_response(edr_event_id):
"""EDR事件自动化响应主流程"""
# 1. 获取威胁详情
threat = get_threat_details(edr_event_id)
logger.info(f"威胁事件: {threat.get('event_type')}, "
f"终端: {threat.get('endpoint_name')}, "
f"严重度: {threat.get('severity')}")
# 2. 仅处理高严重度事件
if threat.get('severity') not in ['high', 'critical']:
logger.info("严重度不足,跳过自动响应")
return
results = {}
# 3. 阻断恶意IP
for ip in threat.get('malicious_ips', []):
results[f"fw_block_{ip}"] = block_ip_on_firewall(
ip, threat.get('event_type')
)
# 4. 阻断恶意域名
for domain in threat.get('malicious_domains', []):
results[f"fw_block_{domain}"] = block_domain_on_firewall(
domain, threat.get('event_type')
)
# 5. 隔离受感染终端
mac = threat.get('endpoint_mac')
if mac:
results["switch_isolate"] = isolate_switch_port(
mac, threat.get('event_type')
)
logger.info(f"联动响应结果: {results}")
return results
if __name__ == "__main__":
event_id = "edr_event_20240101_001"
edr_auto_response(event_id)
4.3 故障排查案例:EDR 联动隔离误伤正常终端
故障现象:EDR 检测到一台终端存在可疑行为并触发自动隔离,但后续调查确认该终端运行的是合法的系统更新程序,属于误报。被隔离的终端影响了正在进行的生产维护工作。
排查步骤:
- 查看 EDR 告警详情
# 登录EDR管理平台查看告警
# 事件ID: EDR-2024-0115-0023
# 终端: PC-WinAdmin-015
# 检测类型: 可疑PowerShell执行
# 行为: 执行PowerShell下载远程脚本
# 严重度: High
# 处置: 已自动隔离
- 分析根因
- 管理员使用 PowerShell 执行了系统补丁批量下载脚本
- EDR 的行为检测规则将"PowerShell + 远程下载"判定为潜在的恶意脚本执行
- 该行为模式与常见的恶意软件下载载荷相似
-
自动响应 Playbook 判定为高威胁,直接执行了网络侧隔离
-
解决方案
# 方案1: 将合法管理员终端加入EDR白名单
# 在EDR管理平台:
# 终端白名单添加:PC-WinAdmin-015
# 白名单规则:排除PowerShell远程下载检测
# 方案2: 调整Playbook,高威胁需要人工确认
# 在SOAR平台修改Playbook:
# 严重度=High 的事件改为"人工确认后自动响应"
# 仅严重度=Critical 的事件执行自动隔离
# 方案3: 配置EDR告警分级联动
# 在SecoManager联动配置中:
# - Critical: 自动隔离+网络阻断
# - High: 通知管理员+网络限速(不隔离)
# - Medium: 仅记录+通知
# - Low: 仅记录
# 方案4: 在防火墙上配置白名单策略(管理员IP优先放行)
security-policy
rule name Admin_White
source-zone trust
destination-zone any
source-address admin-server-group
action permit
log-action enable
quit
rule name EDR_Auto_Block
source-zone any
destination-zone any
destination-address dynamic-edr-malicious-ip
action deny
log-action enable
quit
quit
# 紧急恢复被误隔离的端口
# 在交换机上手动恢复
interface GigabitEthernet0/0/15
port-authen dot1x re-enable
quit
五、总结
| 知识点 | 要点 |
|---|---|
| EDR 能力 | 终端行为检测、事件关联、响应处置 |
| 联动架构 | EDR → SOAR → 防火墙/交换机 |
| IOC 联动 | IP、域名、URL、文件哈希同步 |
| 自动化响应 | SOAR Playbook 编排 |
| 联动接口 | REST API、Syslog、STIX/TAXII、CoA |
| 误报处理 | 白名单、分级联动、人工确认 |
| 华为方案 | iMaster SecoManager + CSF + USG |
思考
- EDR 自动联动网络侧隔离终端可能误伤业务,如何设计"安全但可控"的自动化策略?
- 当 EDR 和网络侧设备(如防火墙)对同一事件给出不同判定结果时,应该以哪个为准?
- 在没有 SOAR 平台的中小型企业,如何实现 EDR 与防火墙的基本联动?
下篇预告:第230篇:数据防泄漏(DLP)的网络侧实现