APP下载

基于XGBoost和社区发现的主机攻击行为检测①

2022-01-05朱元庆李赛飞李洪赭

计算机系统应用 2021年12期
关键词:复杂度日志进程

朱元庆, 李赛飞, 李洪赭

(西南交通大学 信息科学与技术学院, 成都 611756)

根据赛门铁克在2019年发布的互联网安全报告[1]来看, “Living off the land, Lotl”的攻击技术存在上升的趋势, 已然成为目前网络安全威胁中的主流模式. 此外根据该报告所述的情况, 这种类型的攻击在2018年飙升了78%. 报告中还提到2018年发现的4个新的威胁群体中, 有两个是使用Lotl技术被发现的. 近些年来越来越多的威胁群体喜欢使用这类技术[1]. Lotl技术将其活动隐藏在合法的系统进程中, 让攻击者保持足够的隐匿, 例如大量使用PowerShell、Cmd等工具. 这些程序作为系统工具存在, 其本身并不具有主动攻击性, 攻击者利用其两面性来进行威胁. 2017年Petya的变种勒索软件大规模袭击世界各国组织. 其利用的漏洞与勒索软件WannaCry利用的漏洞相同, 区别是Petya通过使用Windows管理工具WMI、命令行等工具远程执行一系列系统级的命令来实现相关功能[2]. 在此过程中攻击者使用系统工具执行既定策略达到目的, 将恶意行为隐藏在系统活动中逃避了现有安全产品的检测.虽然这些行为不会被安全产品探测到, 却被系统日志记录了起来. 研究从主机日志提取恶意行为的模型对现有安全问题极具现实意义.

1 引言

虽然分析用户系统日志中的威胁和入侵不是新的趋势, 却是入侵检测中研究最多的领域之一. 现阶段针对主机日志中的恶意行为研究主要集中在以下的几种研究方向. 研究方向一是通过构造检测规则或使用启发式的算法来检测日志数据. 近年来MIRTE公司推出了ATT & CK模型, 其目标是创建网络攻击中已知的攻击策略、战术与技术的详尽列表, 对每一种战术的意义影响、利用方式以及检测数据来源做了详尽阐述[3].研究人员可以根据该框架的知识制定每种技术的检测规则[4]. 文献[5]中利用检测规则提取出日志中的恶意活动, 映射到攻击策略, 抽象出策略层的场景图. 使用祖先节点覆盖的概念来评估节点之间依赖强度, 实现了不同攻击技术之间的关联, 进而提取出其中的攻击序列. 文献[6]中利用系统日志构建起源图, 使用规则检测出攻击的及其所处阶段, 通过信息流之间的相关性, 在图中将恶意事件关联成攻击路径.

上述文献中基于规则来发现多步攻击的研究, 检测精度高, 误报率低, 但基于规则的检测对于未知威胁的检测能力受限. 因此, 主机日志中的恶意行为研究方向二, 对事件日志压缩找出其中攻击序列. 文献[7]通过对系统日志进行压缩, 删除其中未对系统造成持久影响的事件, 例如进程运行时产生的没有被其他进程访问的临时文件, 提取出日志中的重要行为. 文献[8]进一步提出动态污点分析的日志压缩方案, 通过追踪污点在主机中的扩散, 将此过程中的调用保存下来达到压缩目的, 分析后可得到恶意行为[9].

研究方向三: 有研究人员将机器学习与日志分析结合, 利用机器学习强大的分类能力寻找日志中潜在的恶意模式. 文献[10]中利用逻辑回归等机器学习算法给日志社区中的恶意行为提取特征, 通过社区检测算法发现日志中的恶意社区, 完成攻击序列的发现. 机器学习的研究方法拥有对异常威胁模式强大的发现能力, 对于新型威胁有更好的检测能力.

综上机器学习方法的优势, 本文利用机器学习在Sysmon[11]日志的基础上提出一种基于来源图的框架,关注日志中事件行为. 将多种事件日志统一提取解析[10],具体提取内容第2节所述. 以进程为实体建立无向图,结合图中进程与文件操作等事件, 使用分类效果更好的XGBoost算法进行有监督分类, 预测恶意事件概率值作为图中边的权重, 进而得到一个无向加权图, 使用社区发现算法找出其中的恶意攻击社区[12-14]. 最后在MIRTE ATT & CK提供的评估数据集[15,16]上进行验证. 实验显示使用XGBoost结合社区发现的模型, 检测结果更稳定, 效果更好, 具体实验如下文详述.

2 攻击行为检测模型

对于Lotl类型的攻击行为, 其使用的是就地取材式的战术策略, 传统以恶意文件为载体的安全检测不再奏效, 因此研究的重点应转移到攻击行为上来. 对于每一条日志来讲, 其记录的是单一的动作行为或事件信息. 为了关注攻击行为的上下文关系, 我们使用基于图的模型来表达这种关系. 所以日志中提取的事件数据以图的数据模型进行存储, 其示意图如图1所示.

图1 日志实体无向图示意图

节点(node): 正在建模的日志对象实体(例如: 进程名、文件名等);

边(edge): 对象实体之间关系特征向量(例如: 父子进程、文件操作等);

元数据(matedata): 节点、边的特性或参数(例如:进程ID、命令行、哈希值等).

2.1 日志解析与关联

整个算法模型的基础是日志中事件数据建立的社区网络图, 之后的边权重分配与社区发现也是在此基础上对数据进行处理. Sysmon作为一款微软官方提供的日志工具[11], 监控系统的动态行为, 生成事件日志.从Sysmon日志数据中解析出图中节点所需字段如表1所示. 主要包括进程创建(process creation)、进程终止(process termination)、文件创建(file create)与删除(file delete)等事件记录. 在所有事件的类型中又可以划分为关联事件与信息事件, 其中的关联事件是指提供两个实体之间联系的事件, 主要包括内容如表2所示.

表1 预定义日志实体格式

表2 关联事件列表

表2的关联事件中Event ID1与Event ID 11的日志格式如图2所示, 更多类型日志详细格式可查阅官方文档[11]. 其中Event ID 1记录的是进程创建事件, 主要的日志字段包括进程ID (ProcessGuid)、父进程ID(ParentProcessGuid)、创建时间戳(UtcTime)、进程映像(Image)、父进程映像(ParentImage)、进程原始文件名(OriginalFileName)、命令行(CommandLine)以及进程哈希值(Hashes)等字段; EventID 11跟踪的是文件创建事件, 其主要字段包括进程ID (ProcessGuid)和目标文件名(TargetFilename)等.

图2 EventID 1和EventID 11的日志格式

根据表2中列出的关联事件日志类型及其关联字段, 将表2中的关联事件提取出统一的日志实体格式,模型以ProcessGuid字段作为日志实体的节点字段, 其他提取的相关日志字段作为该节点的元数据. 提取出如表1的预定义日志实体字段及该字段的来源.

多类型的日志格式经过统一提取后, 形成表1所示日志实体格式, 此时的日志实体集合作为无向图G0中的节点集合V.

日志解析之后通过观察节点集合V中任意两个日志实体 (Nodea,Nodeb)的元数据字段之间存在的关系, 例如两个实体是否存在父子进程、兄弟进程的关系, 进程映像文件是否相同, 路径是否存在关联等等特征, 选取出如表3中所示的20维关系特征. 迭代产生节点之间的关系向量集合, 作为无向图G0中的边集合E. 在Sysmon日志中ProcessID字段存在复用情况, 使用唯一值ProcessGuid来表示进程实体.

关于表3中实体间的关系向量,f0和f19表示事件时间关系, 实体a、b之间的时间差是否小于间隔Δ,是则该项为1, 否则为0.f1-f4项表示实体a和b之间的进程关系, 以f1、f2为例, 当实体a的ProcessGuid等于实体b的ProcessGuid, 说明两个实体属于同一个进程,f2表示实体a、b属于同一个父进程创建的兄弟进程, 如果成立该项为1, 否则为0; 同理f5表示两个日志实体是否来自同一主机;f6-f9表示实体中进程映像的关系;f10-f13表示两个实体之间进程命令的关系;f14表示进程实体的原始文件名, 该项可以检测进程重命名情况;f15表示当前日志实体所在路径, 对于恶意活动中的文件扫描行为, 提取文件操作之间的关系;f16表示实体间的哈希值是否一致;f17、f18表示文件创建过程中路径与文件名的关系.

表3 日志实体间关系特征

经过上述过程的关联, 我们将实体集合V中的任意两个实体间关系提出, 作为两个实体(Nodea,Nodeb)之间的边. 所以该图可表示为式(1), 其示意如图1所示.

其中,

2.2 恶意社区发现

日志解析之后生成了事件关联图G0, 其中包括正常良性日志社区与恶意日志社区. 因为恶意行为与良性行为在父子进程、兄弟进程、文件操作等行为上存在差异, 受到社交网络分类的启示, 在事件关联图G0上使用社区发现算法发现G0中的恶意行为社区.

社区检测Louvain算法[17]适用于大规模网络结构中快速发现其中的社区模块. 该算法社区发现效果较好, 复杂度较低和计算速度更快. Louvain算法本身是一种基于模块度的社区发现算法. 其中模块度的概念由Newman[18]提出, 作为一种在复杂网络图中评估社区划分情况的数学指标, 其定义为式(3):

其中,Ai,j表示顶点i与j之间的权重,ki与kj分别表示连接到点i与点j的权重和,m是图中所有节点的边权重总和, δ (ci,cj)的ci与cj表示顶点i和j所属的社区,其中如果ci=cj, 则δ (ci,cj)=1, 反之δ (ci,cj=0)[17]. 之后进一步将式(3)化简, 可以得到式(4)所示形式, 其中Σin表 示为网络图社区内部边权值总和, Σtot为与网络图社区内节点相连的外部边的权值总和.

算法过程主要分为两个阶段: 首先算法初始化认为网络中每个节点都是一个独立的模块. 在第一阶段的迭代过程中, 对于每一个顶点i, 将其依次分配到相邻顶点j, 计算式(5)所示的分配前后模块度变化 ΔQ.如果此过程中最大的 ΔQ>0, 则将顶点i分配到最大ΔQ对应顶点j的社区, 否则不做任何变化, 直到所有节点所属的社区不再发生变化.

算法的第二阶段迭代之前, 先将第一阶段中的子社区整体看作一个超节点, 该社区内的节点到其他社区内节点的连接看作为超节点的边. 由此创建出新的图后, 将算法第一阶段应用于新图. 直到整个图的模块度不再发生变化后, 算法结束, 此时就产生了最终的社区. 上述过程如算法1所示.

算法1. 社区发现Louvain算法输入: network G=(V, E)输出: network G′=(V′, E′)1. G.V:{node 0, node 1,…, node n}2. for i in G.V do 3. for j in iadjacent_node do 4. 根据式 (5)计算Max (ΔQ)5. if Max (ΔQ)>0 do⇒6. icommunity of j 7. if G change do 8. G.V={community 0, …, community m}9. goto step 2 10. else do 11. G′=G

2.3 权重生成

由式(4)可知, 社区内的权重越大于社区间的权重时, 模块度越大. 如果将良性日志和恶意日志分为不同的社区, 社区内部边的权重越大于社区间边的权重, 两种不同社区的发现效果才会越好. 但如果直接在2.1节中生成的无向图中使用社区检测时. 社区检测算法此时认为图中每一条边的权重都是1. 观察发现恶意行为社区与良性社区之间存在着很多边的连接, 这种情况降低了社区内的集群密度, 影响到了社区发现算法的有效性. 针对这种情况我们对边的特征向量应用分类算法, 得出向量隶属于恶意社区的概率, 以此概率作为该边的权重, 将2.1节生成的无向图G0转换为无向加权图G1. 使得图中边满足式(6)所示条件:

其中,win表示的是社区内边ein对应的权重,wtot表示的是社区之间边etot对应的权重. 在使用XGBoost算法对事件关联图G0中 的边进行分类训练之前, 假设G0共有n条边, 记为ei=xi,yi,i∈[1,n], 其中xi作为边的特征向量,yi为该边对应的标签, 其取值如式(7)所示:

XGBoost是一个树集成模型, 将多个弱分类器一起组合成一个强分类器, 这也是其相比传统模型分类能力更强的原因. 将多颗树的预测结果进行结合, 获得比单一的树更加优越的泛化能力. 在XGBoost中的目标函数如式(8)表示:

目标函数由第一部分训练损失和第二部分正则化组成, 式中是第t次的预测值, 其与t-1次预测值存在式(9)所示关系, Ω (f)是正则化部分, 定义了每棵树的复杂度, 其具体定义参考文献[19]:

目标函数通过二阶泰勒展开沿着梯度下降的方向优化损失, 优化速度大大加快. 将损失函数关于的一阶偏导和二阶偏导带入进一步化简[19], 最终得到的目标函数为:

式(10)也被称为打分函数, 是衡量树结构好坏的标准, 其值越小, 表示这样的树结构越好. 有了上述的打分函数, 最终就可以求出树的最佳结构. 在本次实验中的二分类问题使用对数损失函数, 如式(11)所示:

对式(7)所示标记的n条训练边采用k折交叉验证的方式进行学习, 以此提高学习效果, 最终将XGBoost算法对于每条边属于社区内部边的预测作为该边的权重, 从而完成无向加权图G1的 建立. 此时G1将作为社区发现的输入, 利用社区发现Louvain算法发现G1存在的恶意社区.

2.4 复杂度分析

上述模型的整体复杂度分析分为3步. 首先, 在日志解析与关联阶段中需要提取任意两个日志之间特征关系, 其时间复杂度为 O (M2), 其中M为日志实体数.紧接着在权重分配过程中, XGBoost使用精确贪心算法建树的时间复杂度是O (Kd‖x‖0log2n), 但可以将特征项排序并存储为Block结构对算法进行优化, 在计算过程中复用该结构, 而不用每次都对特征项排序. 经过这样的优化后, 特征项排序复杂度将会均分到权重分配过程中, 此时该部分时间复杂度变为 O (Kd‖x‖0). 上述中K为XGBoost中树的总数,d为树的最大深度,‖x‖0表示训练边集中非缺失值样本的数量. 模型最后的恶意社区发现中, 算法中先将节点合并为社区相当于对图中边进行遍历, 时间复杂度为O (n), 之后为得到最大模块度不断迭代k次, 所以算法总复杂度为O (nk). 上述n表示图中边向量个数. 整个模型复杂度为3个阶段的复杂度叠加所得O (M2+Kd‖x‖0+nk). 作为对比实验使用SVM、逻辑回归与XGBoost在权重生成阶段进行对比, 其时间复杂度对比使用算法运行时间指标来衡量, 具体实验对比如第4节所述.

3 实验

实验使用Python实现, 利用已有的科学计算库对MITRE ATT & CK提供的APT29以及APT3的仿真攻击结果进行检测. 在ATT & CK提供的日志数据集[15,16]中, 主要是使用Sysmon采集的主机日志数据. 实验的整体流程如图3所示.

图3 关键阶段与工作流程图

在实验的阶段1中, 从如图2中所示的原始日志中将实验涉及的关联事件日志解析为表2的日志实体格式. 此时原始日志清洗预处理之后, 所有的日志实体格式统一. 为了阶段2的关联特征提取, 经过多次实验确定了表3中的实体间关系, 其中具体每条关系的意义如上文所述. 由于特征提取过程中只关注于实体间关系并归一化, 所以提取到的特征已进行了泛化. 解析到的日志实体与提取到的特征关系向量, 组成了实验阶段2的输入数据无向图G0, 其结构如图1所示.

实验阶段2中主要是解决无向图G0中边权重分配G0经过权值分配生成无向加权图G1, 如图4所示.问题. 为了提高社区内的集群聚集度, 减少社区间的联系. 将阶段1中提取到的特征向量作为输入, 利用2.3节中XGBoost算法进行分类. 实验关注XGBoost算法对于特征向量的预测值, 以此预测值作为边的权重. 为了提高XGBoost的学习效果, 使用10折交叉验证的学习方法对训练集进行优化. 作为对比, 实验使用传统的学习算法逻辑回归和SVM算法[20]与之对比, 具体实验效果对比如下文所示. 在实验阶段2之后, 无向图

图4 无向加权图G 1示意图

实验阶段3中, 将社区检测Louvain算法应用在图G1上, 利用2.2节中所述的模块度对图中存在的社区进行发现. 找出原始日志中隐藏的恶意日志社区. 阶段3的输出为图5所示实体名与所属社区的对应表.

图5 阶段3输出格式

4 评估

根据在实验过程的最终输出的实体名与所属社区的对应表, 对于分类结果通常有以下几种评价标准, 准确率(Accuracy)、精确率(Precision)、召回率(Recall)以及F1分数, 但F1分数指标综合算法的精确率指标和召回率指标, 评价更为全面. 上述指标的计算公式如式(12)到式(15)所示:

实验采用F1分数对实验结果进行评估, 其中XGBoost算法最终社区发现效果最好,F1分数明显高出另外两种算法, 受表3中特征提取时间间隔Δ 影响不明显, 性能稳定, 可以有效的检测出恶意社区中父子进程及文件操作行为. 另外逻辑回归和SVM算法最后的社区检测效果不是很好, 在APT29与APT3模拟数据集的实验过程中F1分数受特征提取时间间隔Δ 的影响波动较大. 具体数据如图6, 图7所示.

图6 APT29社区发现F1分数图

图7 APT3社区发现F1分数图

在对3种不同的权重分配算法最后的社区检测精度进行评估之后, 考虑到算法复杂度的对比, 实验采用运行时间指标来对比评估本文模型与另外两种算法的复杂度. 控制模型日志预处理与社区发现阶段相同,所以复杂度的差距在于权重分配阶段. 因此实验在APT29数据上对比了不同的特征提取间隔下3种权重分配算法的运行时间. 如2.4节所述, 由于XGBoost算法使用Block块对特征项排序优化, 在运行上相比于另外两种算法更高效. 对比数据如图8所示, 时间单位为秒.

图8 APT29权重分配算法运行时间对比图

最后在实验中发现的部分恶意行为序列. 例如,(1)双击带有恶意负载的3aka3.doc文档, 生成3aka3.scr恶意进程, 之后派生出Cmd与Powershell进程建立C2通道连接到192.168.0.5, 完成对受害主机1的初始登录. (2)在受害主机上进行文件收集等工作, 利用Powershell执行文件收集与压缩命令对后缀为xlxs、doc、pdf、png等的文件进行遍历、加密和压缩生成Draft.Zip与working.zip. (3)生成新的更高权限的Powershell进程, 执行文件与进程的发现任务, 利用Get-Process等命令发现主机中的进程, 加载Netapi32.dll来探测系统接口. (4)删除上述过程中生成的Draft.Zip与working.zip文件, 销毁收集活动痕迹. 之后结合横向移动等一系列步骤完成对主机的侵害.

5 结论

通过实验评估证明了XGBoost与社区检测算法结合在检测主机日志恶意行为中的价值. 关注父子进程链及其文件等操作, 提取出日志实体之间的社区图关系, 通过社区发现算法检测其中恶意社区. 在边权重分配过程中使用XGBoost集成学习算法与逻辑回归、SVM算法对比, 结果表明基于XGBoost与社区发现的主机攻击行为检测模型具有良好的检测效果, 对于Lotl技术有更好的检测能力. 但是, 在实验过程中日志关系之间的生成与训练过程可以进一步优化, 使得模型运行更加快速和高效.

猜你喜欢

复杂度日志进程
数字经济对中国出口技术复杂度的影响研究
一名老党员的工作日志
毫米波MIMO系统中一种低复杂度的混合波束成形算法
读扶贫日志
有效把握政治新形势 积极推动党建工作进程
Kerr-AdS黑洞的复杂度
债券市场对外开放的进程与展望
非线性电动力学黑洞的复杂度
雅皮的心情日志
雅皮的心情日志