浅析EDR架构 - 以Windows平台为例

‌‌

背景

作为终端安全上最火的概念之一,EDR相信很多人都听到过,但是EDR是什么呢,它和我们熟知的杀毒软件又有什么区别呢?
从名字上看EDR(Endpoint detection and response)是指端点检测和响应产品。
端点即终端,很好理解,我们日常使用的手机,笔记本,PC等都是端点设备。
检测也好理解,对于一款安全产品,检测恶意行为是最基本的功能。
但什么是响应?做过应急响应的朋友应该知道,应急响应一般是客户现场遇到安全事件时帮助客户找出安全事件的原因,对恶意文件进行清除,安全加固,溯源取证等一系列操作。
但一款安全产品如何做到这一点?
要理解EDR,先让我们来看看终端安全产品的历史发展。

历史发展

  • AV:终端上最被人熟知的即AV(Anti-virus)杀毒软件,早期的杀软通常是通过集成病毒库来扫描识别恶意文件的。厂商发现一个病毒,然后对该病毒进行分析,提取特征码,加入病毒库。现在还在用,即静态扫描,但这种方法只能识别已知的恶意文件,不能识别未知的恶意文件(现在因为有了机器学习方案,很多时候第一次静态扫描是白的,第二次就是黑的了)。所以后来杀软发展出来启发式查杀,HIPS,主动防御和云查。
  • 启发式查杀:启发式主要是因为加壳技术的发展,导致特征码不好用,杀软里有一个虚拟环境,即沙盒,让病毒在沙盒里跑一会儿再扫描特征,且很多沙盒都有自动脱壳的功能。沙盒是模拟环境,受性能影响,很多时候只能模拟执行很短的时间。所以有些厂商的沙盒对于大文件病毒直接就放过了。
  • HIPS:基于主机的入侵防御系统。HIPS会对进程行为进行监控,本质上是基于规则的一套东西,如发现写入注册表自启动项时,会提示某某软件有写入自启动项行为,选择允许或拒绝。但缺点也明显,经常弹框比较烦人。而且需要自己设定很多规则,不适合小白用户。
  • 主动防御:因为HIPS的问题,发展出来了智能HIPS及主动防御,这两个东西区别不大。主动防御会收集进程的前后行为,设置权重值,如果权重值超过某个点,即标注为恶意,结束进程,查杀文件。
  • EDR:对于端点安全来说,通常杀软主要提供主动防御功能,遇到已知或未知的恶意文件,进行查杀。重点在防,但是如果杀软没有防护到的,则无法进行保护,如使用系统提供的程序或白文件进行敏感行为操作,因为杀软的白名单机制导致不会对这些操作判定为恶意,且多数杀软不提供行为日志存储,导致如果不能第一时间发现恶意攻击的话后续无法进行回溯。EDR重点是信息采集功能。主要进行行为收集,将行为日志发送到云端,进行模式匹配,进而阻断。通常检测能力较弱,可以引入威胁情报来增强检测能力。EDR收集的日志在云端存储,方便进行回溯进而还原攻击链路。给系统加固,安全审计分析提供数据支撑。
  • 其他还有防火墙,数据防泄漏(Data leakage prevention,DLP),邮件防护,网页防护,漏洞管理/补丁,移动设备防护等,这些都是拓展的产品,以上这些可以统称为EPP(Endpoint Protection Platform)。

EDR的功能

基于杀软的缺陷引入的EDR,主要需求在:

  • 行为收集(知道什么时候,发生了什么,如何发生的):等保合规,安全审计,溯源取证
  • 预先阻截已知和未知的威胁:检测及响应
  • 轻量化:不影响性能,如磁盘资源,CPU资源,内存资源,特别是按量计费的云主机中

数据采集

根据EDR产品定位的不同导致不同厂家使用了不同的采集方法

  • ETW模式
    • Windows® 事件跟踪 (ETW) 是操作系统提供的一个高速通用的跟踪工具。ETW 使用内核中实现的缓冲和日志记录机制,提供对用户模式应用程序和内核模式设备驱动程序引发的事件的跟踪机制。
    • 应用层可以直接调用ETW的API,某些厂商的EDR是基于ETW来做的
    • 可以不用开发驱动程序,只需要一个Agent,不需要硬件特性,高速
    • ETW收集的事件过多,目前支持上万种事件记录,数据量非常大
    • 收集哪些事件,如何存储数据,如何处理数据都是问题
  • 驱动模式
    • 即下一节介绍的,厂商自主开发驱动模块,可以主动阻断,开发成本高,需要数字签名,兼容性测试,容易出安全性问题
    • 通常会使用ETW + 自主驱动的模式
  • Sysmon模式
    • Windows提供的免费的端点数据采集工具
    • 轻量化,不提供主动阻断,没有自保护,某些厂商的数据采集使用该工具,云端负责对日志进行分析,告警
    • 其主要使用ETW,内核回调(process,reg,image,thread)和Minifilter文件过滤驱动来收集
    • 收集进程创建、销毁,网络通信,服务程序状态更改,驱动加载,镜像加载,远程进程创建,进程访问,文件创建、删除,注册表添加、删除、重命名,命名管道创建、通信,WMI事件,DNS查询,剪切板等事件

架构参考

通过某厂商的半开源EDR产品来看一下EDR的基本架构:

  • R0 驱动模块:
    • 进程监控组件
      • 用于向进程注入DLL模块
      • 对于恶意的行为进行阻断
    • 系统监控组件
      • minifilter文件过滤用于监控文件I/O
      • 系统回调监控进程的创建与退出
      • 系统回调监控注册表的访问
      • 自保护组件
    • 网络监控组件
      • WFP、TDI网络过滤,监控系统网络活动
  • R3 应用模块:
    • Agent Service
      • R0,R3交互及日志导出
    • DLL
      • 注入到进程,进行API Hook并收集日志
        • 内存操作函数:因为系统回调没有提供内存扫描功能,所以HOOK的时候会对内存操作的API进行HOOK,如Read、Write等
        • 键盘操作函数:同上,对键盘操作进行HOOK,如剪切板,GetKeyState等
        • 屏幕操作函数:同上,对屏幕操作进行HOOK,通常远控的屏幕截图或监控会使用BitBlt等函数
        • 其他函数:任务计划操作,远程登陆操作,横向移动操作等
  • 云端模块:
    • 日志存储
    • 日志分析
      • 主要用于处理端点上采集的日志。对其按照时间顺序创建进程树,工作流。之后进行ATTCK匹配或人工分析。
    • 日志查询

ATT&CK

因为轻量化的需求,数据采集并不是越多越好,很多时候只能进行关键点采集。常用的体系化的威胁框架是ATT&CK。
该框架也被用来做为安全产品能力的验证指标之一。事实上绝大多数厂商都没有做到该框架的完整覆盖。

EDR的缺点

EDR因为和杀软的需求不同,导致其在终端的防御上缺点也很明显:

  • 检测能力差:通常会引入威胁情报或集成杀软的病毒库、引擎来解决
  • 主动防御功能差:同上
  • 成本高:数据存储,威胁情报,第三方的病毒库,额外的分析人员等,都需要很高的成本
  • 人员需求高:需要具有丰富经验的分析人员

一些规避方法

  • EDR采集数据后通常需要进行分析,分析框架使用ATT&CK,但大多数都不会完整覆盖ATT&CK,攻击者可以通过对ATTCK中的技术进行变形来规避检测
  • 使用摘除回调的方法来规避,需要提权
  • 使用摘除HOOK的方法规避R3中的API HOOK
  • 直接使用系统调用规避R3的HOOK,如Syswhispers2、FreshyCalls等
  • 使用一些没公开的方法,如偏门的API等
  • 使用攻击ETW的提供程序来规避,需要提权
  • 使用系统提供的程序来规避,通常EDR有白名单机制
  • etc