POIROT
Poirot: Aligning Attack Behavior with Kernel Audit Records for Cyber Threat Hunting
概要 | ABSTRACT
POIROT 使用内核审计日志 (Kernel Audit Log) 为数据源构建起源图 (Provenance Graph, Gp),通过与用威胁情报构建的查询图 (Query Graph, Gq) 进行匹配来检测系统是否存在威胁。作者使用了三种不同类型的数据集,三种不同的操作系统对 POIROT 的性能进行评估。评估结果表明,POIROT 能在几分钟之内,从百万数量级的节点中发现闭关指出攻击行为。
简介| INTRODUCTION
- 威胁追踪存在的挑战
- 查找规模庞大
- 如何准确探测威胁和复盘攻击过程
- 如何高效匹配
- POIROT
- 使用单独的存储设备和日志服务器来保证内核审计日志的完整性
- 使用 Graph Pattern Matching(GPM) 算法,根据 IOCs 之间的依赖关系进行匹配
- 根据攻击成本/攻击者能力来选择攻击流程
相关研究 | RELATED WORK
- Log-based Attack Analytics
- Opera et al.: DNS/web proxy log
- Disclosure: 使用NetFlow logs检测C&C服务器
- Hercule: 社区发现算法(Community Detection)重构攻击过程
- Provenance Graph Exploration
- 使用内核审计日志(kernel audit log)构建起源图(provenance graph)
- 分析方法
- 动态二进制分析(dynamic binary analysis)
- 源码注释(source code annotation)
- 建模推理(modelling-based inference)
- 记录回放(record-and-play)
- 并行执行(parallel execution)
- 分析来源
- 警报类别(alert triage)
- 攻击路径识别(0-day attack path identification)
- 攻击分析重构(attack detection & reconstruction)
- Query Processing Systems
- SAQL: 从系统活动中识别异常行为
- AIQL: 从历史审计日志中分析攻击
- CamQuery: 实时分析,重点在预防数据丢失、攻击检测、违规检测
- Shu et al.: 使用工具进行人工辅助分析
- Behavior Discovery
- Christodorescu et al.: 动态追踪
- Kolbitsch at al.: 根据恶意样本的执行过程生成行为模型、
- TGminer: 从审计日志中查找明显不同的行为模式
- Graph Pattern Matching
- Fan et al.: 在多项式时间里,只能用
- NeMa: 邻近子图匹配
- G-Ray, Mage: 基于随机游走(Random-walk),但不能分析包含混淆的攻击行为
方法概述 | APPROACH OVERVIEW
构建起源图 | Provenance Graph Construction
- 结点:文件/进程等
- 边:信息流/因果关系
构建查询图 | Query Graph Construction
- 从威胁情报中提取IOC(OpenIOC, STIX, MISP, etc.)、行为模式
- 结点和边可添加name/type
图的匹配 | Graph Alignment
- GPM(Graph Pattern Matching)存在问题
- 无法检测带属性的有向图
- 无法处理大量结点
- 穷举查找
- 匹配流程
- 找出所有匹配的结点对
- 从相似度最高的结点开始扩展,沿着与其类似的攻击流程查找结点
- 使用影响因子(influence score)判断攻击者的攻击能力,排除无关或低相关性路径,缩小查找规模
- 根据攻击影响力、攻击路径长度(length)和攻击成本(cost)评分,为攻击流程(flow)设置设置优先级
- 对匹配到的图进行评分,高于阈值将发出预警并生成报告,否则继续寻找新的匹配
算法 | ALGORITHMS
Alignment Metric
Influence Score
Cmin(i→j):结点 i 到 j 的执行流程中的 ancestor 数量最小值,值越小表示越有可能是攻击流程。大多数攻击的都源于一个或一组 entry point(eg. 钓鱼邮件)Alignment Score
计算所有执行流程的 influence score 的均值Threshold
alignment score 超过阈值 τ 将自动发出预警
Best-Effort Similarity Search
- 查找所有候选结点(Find all Candidate Node Alignment)
- 根据结点属性初筛,不考虑流程/路径
- 选择起始结点(Select Seed Nodes)
- 攻击行为通常是从一个小的切入点出发,正常活动一般是重复进行的。所以此处首先应选择匹配数最少的结点作为起始结点
- 扩大搜索范围(Expand the Search)
- 从起始节点开始往下级/上级结点开始,沿着/逆着路径方向遍历其它可达结点,influence score 等于或接近 0 时停止遍历,以提升遍历性能。
- 选择匹配的图(Graph Alignment Selection)
- 从起始节点开始出发,在Gp中选择能使 alignment score 最大化的节点,并建立连接
- 贡献度计算
- j, l 两点建立连接,则1{j:l}的值为 1,未建立连接时为 0
- 第一项表示从节点 i 流出时的 influence score,第二项表示流入节点 i 时的 influence score。
- 若节点已连接,则不继计算其他连接的 influence score
- 选出贡献度最大的节点建立连接
评估 | EVALUATION
预设 Cthr=3(会影响 false postitve/negative)
Exp 01: DARPA TC Dataset
- DARPA Transparent Computing program red-team vs. blue team adversarial engagement(模拟企业网络)
- 环境:Windows, BSD, Linux(启用内核审计报告)
- BSD 1-4:FreeBSD_11.0_x64 + 带后门的Nginx
- Win 1-2:Windows_7_Pro_x64 + 带有恶意宏的Excel文件 / 有 漏洞的Firefox
- Linux 1-4:Ubuntu_12.04_x64 / Ubuntu_14.04_x64 + 浏览器的内存漏洞 / 恶意浏览器扩展
- 结果
- 第一轮循环时,所有环境中的 alignment score 均超过阈值,20轮重复后,7台机器的 alignment score 最大值仍然是第一轮的结果,其余的在第4/5轮得到最大值。
Exp 02: Public Attacks
- 在隔离的环境中运行恶意样本,收集内核审计日志(模拟真实环境下的攻击)
- 变种检测评估
- njRAT、DustySky:与威胁情报中的样本不同
- Carbanak:从威胁情报中的109个样本中随机抽取
- HawkEye:其他来源
- 与现成工具比对
- RedLine/Loki/Splunk:基于独立的 IOC 检测,没有检测 IOCs 之间的依赖性和关联性
- POIROT:基于 IOCs 之间的信息流和因果关系检测
- 检测结果
- B, F, H, P, R for Behavior, File name, Hash value, Process name, Registry
- S, PE for alarms from Windows Security Mitigation and PE-Sieve
- 所有的检测中 POIROT 的结果都超过了阈值 1/3,
- POIROT 匹配到了 DustySky 的完整攻击流程,其余之匹配到了部分
- Splunk 检测到当 Windows Security Mitigation 禁止 svchost 生成动态代码时,与 Carbanak 相关的 ETW 事件
- Loki 的 PE-Sieve 组件检测到部分样本尝试进行代码植入
- 结论
- 当使用了很多 IOCs 时,检测结果优于 POIROT
- 攻击者的攻击模式不变时,POIROT 能更好地检测到攻击行为
Exp 03: Benign Datasets
- 无攻击行为的绿色环境
- 从威胁情报中提取了不同的攻击模式,从不同的起始节点开始进行了20次重复实验,选择最高的 alignment score 。结果显示,在计算 influence score 时,POIROT跳过掉了许多执行流程(flow),最终的 alignment score 最高只有 0.16,远低于阈值。
选择合适的阈值
- 当阈值设定在 [0.17, 0.54] 时,F-score 取得最大值。在此区间上去取中间值如 0.35 时,能最大化区分恶意攻击行为和正常行为。
高效性
横向比较
- RedLine、Loki:离线工具,运行时间基于进程数和磁盘空间
- POIROT、Splunk:在线查找,运行时间基于收集系统运行日志的时间、日志大小和系统活动数,实验中可在一分钟内检测出结果
- Apache benchmark:衡量服务器响应时间 (web server responsiveness)
- JetStream:衡量浏览器运行时间 (browser execution times)
- HDTune:衡量磁盘工作时间 (heavy hard drive transactions)
POIROT 性能(8-core 2.5GHz CPU, 150GB RAM)
- 审计日志消耗
- 比较磁盘(第2列)和内存(第4列)消耗可得,日志的平均压缩率在25%左右
- 图的分析
- 最后一列的时间表示图分析所消耗的时间,从提交Gq开始计时,alignment score 达到阈值后停止计时
- POIROT 的性能瓶颈
- 扩大搜索范围时的时间消耗
- Gq节点名称和图的形状对性能也有影响,候选连接节点越多,运行时间也会相应增加
- 审计日志消耗