一、EDR 核心概念
1.0 EDR 攻击检测流程总览
1.1 为什么需要 EDR
传统安全的问题:
- 边界失陷:攻击者通过社工、漏洞绕过边界
- 内网盲区:东西向流量无法检测
- 响应滞后:日志分析时已太晚
1.2 EDR 能力矩阵
| 能力 | 说明 |
|---|---|
| 终端可视化 | 进程、网络、文件、注册表全量采集 |
| 行为检测 | 基于 ATT&CK 的行为分析 |
| 威胁狩猎 | 主动发现隐蔽威胁 |
| 威胁情报 | IOC/IOA 关联分析 |
| 自动化响应 | 隔离、阻断、取证 |
二、深信服 aES(EDR)架构
2.1 产品架构
2.2 Agent 部署模式
# 深信服 aES Agent 配置agent: install_path: /opt/sangfor/
capabilities: process_monitor: true network_monitor: true file_monitor: true registry_monitor: true memory_monitor: true dll_injection_detect: true
upload: buffer_size: 1000 # 事件缓冲 flush_interval: 5s compress: true encryption: aes256三、事件采集
3.1 进程事件
// 进程创建事件struct process_event { uint64_t event_id; uint64_t timestamp;
// 进程信息 pid_t pid; pid_t ppid; uid_t uid; char path[PATH_MAX]; char cmdline[ARG_MAX]; char cwd[PATH_MAX];
// 父进程信息 pid_t parent_pid; char parent_path[PATH_MAX];
// 血统信息 char lineage[1024]; // 进程链
// 哈希 char md5[32]; char sha256[64];};3.2 网络事件
// 网络连接事件struct network_event { uint64_t event_id; pid_t pid;
// 连接信息 uint8_t family; // AF_INET/IPv4/IPv6 uint16_t protocol; // TCP/UDP
// 地址 ip_addr_t src_ip; uint16_t src_port; ip_addr_t dst_ip; uint16_t dst_port;
// 连接状态 uint8_t state; // ESTABLISHED/TIME_WAIT/etc
// TLS 信息 char sni[256]; // TLS Server Name char tls_version[8]; char cipher_suite[16];
// 威胁指标 uint8_t is_proxy; uint8_t is_tunnel; char threat_category[32];};3.3 文件事件
// 文件操作事件struct file_event { uint64_t event_id; pid_t pid;
// 文件操作 enum file_operation { OP_CREATE, OP_OPEN, OP_WRITE, OP_DELETE, OP_RENAME, OP_ATTR_MODIFY } op;
// 文件路径 char path[PATH_MAX]; char old_path[PATH_MAX]; // rename 操作
// 文件属性 uint64_t size; char md5[32]; char owner[64];
// 敏感操作 uint8_t is_credential_access; uint8_t is_exfiltration;};四、行为检测引擎
4.0 行为检测流程详解
4.1 ATT&CK 映射
# ATT&CK 技战术覆盖attack_coverage: # 初始访问 T1566: - T1566.001 钓鱼附件 - T1566.002 钓鱼链接
# 执行 T1059: - T1059.001 PowerShell - T1059.003 Windows 命令外壳 - T1059.004 Unix Shell
# 持久化 T1547: - T1547.001 启动项 - T1547.006 注册表 Run key
# 权限提升 T1068: - 内核漏洞利用 - Sudo 提权4.2 行为序列检测
// 多步攻击序列struct attack_sequence { struct event_node *events[10]; // 最多10步 int count;
// 序列评分 float similarity_score; float confidence;
// 匹配到的 ATT&CK 技术 char technique_id[16]; char tactic[32];};
int detect_sequence(struct event_stream *stream) { // 1. 事件归一化 normalize_events(stream);
// 2. 时间窗口过滤 struct event_window *window = sliding_window(stream, 3600); // 1小时
// 3. 序列匹配 for each pattern in attack_patterns { if (sequence_match(window, pattern)) { alert(pattern.id); } }
// 4. AI 异常检测 if (ai_score(window) > threshold) { alert(ALERT_ANOMALY); }}4.3 机器学习检测
# 异常行为检测模型class EDRAnomalyDetector: def __init__(self): self.process_embedding = ProcessEmbedding() self.network_encoder = NetworkEncoder()
def detect(self, event_batch): features = self.extract_features(event_batch)
# 1. 进程异常 if self.process_model.predict(features.process) > 0.9: return ALERT_PROCESS_ANOMALY
# 2. 网络异常 if self.network_model.predict(features.network) > 0.85: return ALERT_NETWORK_ANOMALY
# 3. 文件异常 if self.file_model.predict(features.file) > 0.8: return ALERT_FILE_ANOMALY
return OK五、威胁情报
5.1 IOC 与 IOA
| 类型 | 说明 | 示例 |
|---|---|---|
| IOC | 妥协指标 | IP、域名、哈希 |
| IOA | 攻击行动指标 | 进程行为、API 调用序列 |
| IOA | TTP | 战术、技术、过程 |
| YARA | 规则匹配 | 恶意代码特征 |
5.2 情报关联
// 事件与情报关联struct intel_match { struct event *evt; struct ioc_record *ioc;
// 命中信息 char ioc_type[32]; // ip/domain/hash char ioc_value[512]; int confidence; // 置信度 0-100 int severity; // 严重度 1-10 char threat_actor[64]; // 归属组织 char malware_family[64]; // 恶意家族};
// 批量查询优化struct intel_cache { // LRU 缓存 struct hash_table *cache; uint32_t cache_ttl; // 默认5分钟
// 批量查询 int batch_lookup(struct ioc **iocs, int count);};5.3 威胁狩猎
# 威胁狩猎查询示例class ThreatHunter: def suspicious_process_tree(self, hostname): """查找可疑进程树""" query = """ MATCH (p:Process)-[r:PARENT]->(parent:Process) WHERE p.hostname = $hostname AND p.path NOT LIKE '%Program Files%' AND p.path NOT LIKE '%Windows%' AND parent.powershell_usage > 0.8 RETURN p.pid, p.path, p.cmdline """ return self.graph_db.query(query)
def beaconing_detection(self, hostname): """C2 心跳检测""" query = """ SELECT dst_ip, COUNT(*) as count FROM network_events WHERE hostname = $hostname AND protocol = 'TCP' GROUP BY dst_ip HAVING variance(timestamp) < 10 -- 心跳间隔稳定 AND count > 100 """ return self.timeseries_db.query(query)六、响应处置
6.0 自动化响应流程
6.1 自动化响应动作
# 响应动作配置response_playbooks: # 挖矿检测 - name: "挖矿程序处置" trigger: process: - path_contains: "miner" - cpu_usage > 0.8
actions: - isolate_endpoint - kill_process - block_hash - alert_soc - collect_forensics
# 横向移动 - name: "横向移动检测" trigger: network: - internal_scan - pass_the_hash
actions: - block_src_ip - isolate_endpoint - force_password_reset6.2 终端隔离
// 网络隔离struct isolation_request { char hostname[128]; enum isolation_level { ISOLATION_FULL, // 完全隔离 ISOLATION_NETWORK, // 网络隔离 ISOLATION_PROCESS // 仅限异常进程 } level;
char reason[256]; uint64_t isolation_id;};
int isolate_endpoint(struct isolation_request *req) { // 1. 下发隔离策略到 Agent send_to_agent(req->hostname, CMD_ISOLATE, req->level);
// 2. 记录审计日志 audit_log(ISOLATION, req->hostname, req->reason);
// 3. 联动防火墙 联动防火墙封禁 IP 联动 802.1X 禁用网络访问}七、内存安全
7.0 内存威胁检测流程
7.1 恶意进程检测
// 进程内存扫描struct memory_scan { struct process_handle *handle; uint8_t *memory_regions[MAX_REGIONS]; int region_count;
// 扫描配置 struct yara_rule *rules[100]; int min_confidence;
// 检测结果 struct match_result { char rule_name[64]; uint64_t offset; uint8_t *matched_data; } results[50];};
int scan_process_memory(struct memory_scan *scan) { for each memory_region in scan->process { if (!is_code_region(region)) continue;
// 扫描内存 for each rule in scan->rules { if (yara_match(rule, region) > scan->min_confidence) { add_result(scan->results, rule); } } }}7.2 恶意 API 调用检测
// API Hook 检测struct api_monitor { // 监控的 API const char *monitored_apis[] = { "NtCreateProcess", "NtCreateThread", "VirtualAllocEx", "WriteProcessMemory", "RegSetValueEx", "HttpSendRequest" };
// 行为评分 struct behavior_score { int process_injection_score; int credential_access_score; int network_exfil_score; } score;};
int monitor_api_call(struct api_event *evt) { if (is_monitoring_target(evt->api_name)) { update_score(&evt->process->score, evt->api_name);
if (evt->process->score > THRESHOLD) { alert(ALERT_SUSPICIOUS_BEHAVIOR); trigger_response(evt->process); } }}八、产品对比
| 厂商 | 产品 | 核心优势 | 覆盖平台 |
|---|---|---|---|
| 深信服 | aES(EDR) | AI 驱动、云端联动 | Windows/Linux/信创 |
| 奇安信 | 天眼新一代威胁感知系统 | NDR 威胁检测、实战攻防 | Windows/Linux/国产系统 |
| 阿里云 | 云安全中心 | 云原生集成 | Linux |
| 腾讯云 | 主机安全 | 轻量化、云原生 | Linux/Windows |
| 亚信安全 | 信端终端检测与响应系统 | 终端检测响应 | 全平台 |
九、业内实践:EDR 产品设计与实现
9.0 EDR 产品架构总览
业内主流 EDR 产品普遍采用 Agent-Server-Cloud 三层架构,实现端点数据采集、集中分析决策与云端情报协同的分层治理。
三层架构的职责划分:
| 层级 | 核心职责 | 关键特性 |
|---|---|---|
| Agent 层 | 事件采集、端侧检测、策略执行 | 轻量、低延迟、离线可用 |
| Server 层 | 数据汇聚、关联分析、告警管理、策略编排 | 多租户、高吞吐、可扩展 |
| Cloud 层 | 威胁情报、模型训练、全局态势感知 | 时效性、跨组织协同、规模化 |
9.1 Agent 部署与通信
Agent 是 EDR 产品的数据底座,其部署方式、通信机制和断连策略直接影响整体检测效果。
部署方式对比:
| 部署方式 | 适用场景 | 优势 | 不足 |
|---|---|---|---|
| 安装脚本 | 小规模/紧急部署 | 快速、灵活 | 不易规模化 |
| 组策略推送 | AD 域环境 | 统一管理、可审计 | 依赖域基础设施 |
| 镜像预装 | 云主机/虚拟桌面 | 开箱即用、零干预 | 更新需重新制镜像 |
| 配置管理工具 | Ansible/SaltStack | 可复用、可版本化 | 依赖 CM 基础设施 |
# Agent 配置文件示例agent: # 基础标识 tenant_id: "tenant-001" group: "production-servers" agent_id: "${HOSTNAME}"
# 采集能力开关 collectors: process: enabled: true include_cmdline: true track_child_processes: true network: enabled: true capture_dns: true capture_tls_sni: true file: enabled: true watch_paths: - "/etc" - "/tmp" - "/var/log" ignore_paths: - "/proc" - "/sys" registry: enabled: true watch_hives: - "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run" - "HKLM\\SYSTEM\\CurrentControlSet\\Services" memory: enabled: true scan_interval: 3600 max_scan_duration: 300
# 通信配置 communication: server_url: "https://edr-server.internal:8443" heartbeat_interval: 60 event_upload_interval: 5 max_batch_size: 500 compression: zstd encryption: tls_1_3 retry_max: 3 retry_backoff: exponential
# 断连缓存策略 offline_cache: enabled: true max_size_mb: 512 eviction_policy: "priority_aware" high_priority_retention: 72h low_priority_retention: 24h flush_on_reconnect: true
# 端侧推理 local_inference: enabled: true model: "lightweight_behavior_v3" max_cpu_percent: 5 max_memory_mb: 128 inference_interval: 10// Agent 通信协议结构struct agent_heartbeat { uint32_t version; // 协议版本 char agent_id[64]; // Agent 唯一标识 char tenant_id[64]; // 租户标识 uint64_t timestamp; // 时间戳
// Agent 状态 struct agent_status { uint8_t cpu_usage; // CPU 占用百分比 uint16_t memory_mb; // 内存占用 MB uint32_t event_count; // 缓存事件数 uint32_t alert_count; // 本地告警数 uint8_t connectivity; // 0=离线 1=在线 2=弱网 } status;
// 校验 uint32_t crc32;};
// 事件批量上传协议struct event_batch { uint32_t batch_id; uint16_t count; uint8_t compression; // 0=none 1=zstd 2=lz4 uint8_t encryption; // 0=none 1=aes256 2=tls
struct event_header { uint8_t event_type; // 进程/网络/文件/注册表 uint8_t priority; // 0=低 1=中 2=高 3=紧急 uint64_t timestamp; uint32_t data_len; } headers[];
uint8_t payload[]; // 压缩加密后的事件数据};
// 配置下发协议struct config_update { uint32_t config_version; uint8_t config_type; // 0=全量 1=增量 uint32_t data_len; uint8_t data[]; // YAML 格式配置 uint8_t signature[64]; // Ed25519 签名};断连缓存策略是 Agent 可靠性的关键。业内实践通常采用优先级感知的淘汰策略:高优先级事件(如进程注入、凭证访问)保留 72 小时,低优先级事件(如常规文件读写)保留 24 小时。网络恢复后,Agent 按优先级倒序回传缓存事件,确保关键告警不丢失。
9.2 管理平台设计
管理平台是 EDR 产品的运营中枢,承载多租户管理、资产分组、策略编排和告警处置等核心功能。
多租户架构是管理平台的基础能力。业内主流方案采用租户隔离的数据模型:逻辑隔离(共享数据库,租户 ID 过滤)适用于中小规模部署,物理隔离(独立数据库实例)适用于安全等级要求高的场景。资产分组支持按业务线、网段、操作系统、标签等多维度灵活组织,策略可按组粒度差异化下发。
告警工作台的核心挑战是降噪。业内实践包括:同类告警聚合(5 分钟内同主机同类型告警合并)、告警富化(关联资产责任人、历史告警、威胁情报)、优先级排序(综合威胁等级、资产价值、扩散风险评分)。高质量告警工作台的目标是将安全运营人员的日均告警处理量从数百条压缩到数十条可操作的告警。
9.3 AI 检测引擎
AI 检测引擎是 EDR 产品差异化的核心。业内主流产品普遍采用端云协同的推理架构:端侧部署轻量模型实现毫秒级初筛,云端部署复杂模型进行深度分析。
特征工程是模型效果的基础,三大类特征各有侧重:
| 特征类别 | 典型特征 | 检测目标 |
|---|---|---|
| 进程行为特征 | 进程链深度、命令行熵值、API 调用序列、异常父子关系 | 提权、注入、持久化 |
| 网络流量特征 | 连接频率方差、DNS 请求熵、TLS 指纹、流量时序模式 | C2 通信、数据外发、隧道 |
| 文件操作特征 | 敏感路径写入、文件熵值突变、批量加密行为、隐藏属性修改 | 勒索软件、凭证窃取 |
# 特征提取伪代码class FeatureExtractor: """EDR 多维度特征提取器"""
def extract_process_features(self, process_event): """进程行为特征""" return { # 进程链特征 "lineage_depth": len(process_event.lineage.split("->")), "has_unusual_parent": self._check_parent_anomaly(process_event), # 命令行特征 "cmdline_entropy": self._shannon_entropy(process_event.cmdline), "has_encoded_payload": self._detect_base64(process_event.cmdline), "suspicious_keywords": self._count_suspicious_keywords(process_event.cmdline), # 行为序列特征 "api_sequence": self._encode_api_sequence(process_event.api_calls), "privilege_escalation_score": self._calc_privesc_score(process_event), }
def extract_network_features(self, network_events, window=300): """网络流量特征(滑动窗口聚合)""" return { # 连接模式特征 "conn_frequency_var": self._time_variance(network_events, window), "unique_dst_ratio": self._unique_dst_ratio(network_events), # DNS 特征 "dns_query_entropy": self._domain_entropy(network_events.dns_queries), "newly_registered_ratio": self._check_domain_age(network_events.dns_queries), # TLS 指纹 "tls_ja3_hash": network_events.tls_ja3, "tls_sni_mismatch": self._check_sni_mismatch(network_events), # Beaconing 检测 "beaconing_score": self._detect_beaconing(network_events, window), }
def extract_file_features(self, file_events, window=300): """文件操作特征""" return { # 敏感路径操作 "sensitive_path_writes": self._count_sensitive_writes(file_events), "credential_access": self._detect_credential_access(file_events), # 熵值突变(勒索检测) "entropy_delta": self._calc_entropy_delta(file_events), "mass_encrypt_score": self._detect_mass_encrypt(file_events, window), # 隐藏行为 "hidden_attribute_count": self._count_hidden_mods(file_events), "extension_rename_count": self._count_extension_renames(file_events), }
def _shannon_entropy(self, data): """计算香农熵""" if not data: return 0.0 freq = {} for ch in data: freq[ch] = freq.get(ch, 0) + 1 length = len(data) return -sum((c / length) * math.log2(c / length) for c in freq.values())模型部署采用端云协同架构:
- 端侧轻量推理:量化后的决策树或小型 Transformer 模型,参数量通常在 1M 以内,CPU 占用控制在 5% 以下,推理延迟小于 50ms。端侧模型负责初筛,将高置信度威胁直接在本地阻断,减少对云端的依赖。
- 云端复杂推理:大规模 Transformer 或图神经网络模型,利用全量数据和全局上下文进行深度分析。云端模型可访问跨租户的匿名化统计数据,发现单点无法识别的慢速攻击和高级威胁。
- 模型更新机制:云端训练完成后,通过差分更新(只下发变更的模型参数)推送到 Server,Server 再分发到 Agent。更新过程支持灰度发布、A/B 测试和一键回滚,确保模型更新不影响检测稳定性。
9.4 联动响应场景
EDR 的价值不仅在于检测,更在于与周边安全产品的联动响应能力。业内主流产品通常支持与防火墙、IAM、SIEM、SOAR 四类系统的深度联动。
联动场景详解:
| 联动对象 | 典型场景 | 联动动作 | API 方式 |
|---|---|---|---|
| 防火墙 | C2 通信、横向扫描 | IP/端口封禁、ACL 下发 | REST API / Syslog |
| IAM | 凭证泄露、异常登录 | 账号锁定、强制改密、MFA 挑战 | SCIM / REST API |
| SIEM | 攻击链还原、合规审计 | 日志汇聚、关联查询、合规报告 | Syslog / CEF / Kafka |
| SOAR | 复杂攻击自动化响应 | 触发剧本、编排多系统动作、闭环验证 | REST API / Webhook |
联动设计的关键原则是最小权限和双向确认:EDR 只推送必要的上下文信息(如 IP、哈希、用户名),不传输原始事件数据;联动动作执行后,目标系统需返回确认结果,EDR 据此更新告警状态并记录审计日志。
9.5 部署最佳实践
EDR 部署不是简单的 Agent 安装,而是一个分阶段、持续调优的工程过程。业内实践总结为三阶段部署模型。
# EDR 部署 checklistdeployment_phases: # 第一阶段:观察期(1-2 周) phase1_observe: objective: "了解环境基线,不产生阻断动作" steps: - item: "部署 Agent 到 10% 终端(非核心业务优先)" status: pending - item: "开启全部采集能力,响应模式设为仅告警" status: pending - item: "收集 7 天基线数据,建立行为画像" status: pending - item: "评估 Agent 对业务应用的性能影响" status: pending - item: "梳理现有白名单(已知合法工具、脚本、内部应用)" status: pending
# 第二阶段:调优期(2-4 周) phase2_tune: objective: "降低误报率,建立响应流程" steps: - item: "扩展部署到 50% 终端" status: pending - item: "基于基线数据调优检测规则阈值" status: pending - item: "配置白名单,消除已知误报" status: pending - item: "建立告警分级与响应 SOP" status: pending - item: "开展联动响应演练(防火墙/IAM/SIEM)" status: pending - item: "验证断连缓存与重连回传机制" status: pending
# 第三阶段:运营期(持续) phase3_operate: objective: "全面部署,持续运营优化" steps: - item: "部署到 100% 终端" status: pending - item: "开启自动化响应(高危告警自动隔离)" status: pending - item: "建立威胁狩猎常态化机制" status: pending - item: "定期回顾检测规则,更新威胁情报" status: pending - item: "每季度评估 Agent 性能影响,优化采集策略" status: pending
# 性能影响评估基准performance_baseline: cpu_overhead_max: "5%" memory_overhead_max: "200MB" disk_io_overhead_max: "2%" network_bandwidth_max: "50KB/s" boot_time_delay_max: "3s"白名单调优是部署过程中最耗时的环节,也是决定 EDR 运营效率的关键。业内实践建议:
- 分类管理:将白名单分为系统级(操作系统自带进程)、业务级(企业内部应用)和临时级(短期项目脚本),分别设置过期时间。
- 最小化原则:白名单粒度尽量细化到路径+哈希,避免按目录或通配符过度放行。
- 定期审计:每季度审查白名单条目,清理过期和冗余规则,防止白名单成为攻击者的隐蔽通道。
- 灰度验证:新增白名单前,先在观察模式下验证不会产生漏报,再正式生效。
十、总结
EDR 是终端安全的核心,通过行为检测、威胁情报、自动化响应三位一体,实现从检测到响应的高速闭环。
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
部分信息可能已经过时






