王星凯 吴复迪 童明凯 薛见新 张润滋
1(绿盟科技集团股份有限公司 北京 100089)2(清华大学信息科学技术学院 北京 100084)
随着网络攻防对抗的升级,安全研究人员提出多种类型的威胁检测引擎用于检测各种网络威胁[1].在网络安全运营中,由于攻击产生的数据包往往与正常活动产生的数据包较为相似,如果攻击检测规则较为敏感,会产生大量告警误报[2].在实际生产环境中,安全运营人员需要对各种防护系统的告警进行排查.为了过滤低价值告警,运营人员通常会在长期的监控值守工作中,基于自身的专家知识梳理并形成一套基线,基于基线进行告警的分类分级,从而减轻自身的运维工作量,如脚本代码、运营系统的自定义配置或者专有的操作文档和流程等.但是建立此类基线高度依赖于运营人员的自身技术水平和运营场景的环境复杂度,要求运营人员具备大量的专业知识,对企业正常业务特征能进行识别,并且需要耗费较长时间才能完成.
因此,为了应对上述问题,本文提出一种智能的算法用于生成可解释的网络安全告警降噪基线.为了对告警载荷进行数据挖掘,本文提出一种告警载荷攻击意图特征提取方法,对告警载荷中的编码块进行递归识别和解码,通过分组消重和计数统计得到统计特征向量,使用潜在狄利克雷分配(LDA)聚类方法选出具有代表性的样本,训练支持向量回归(SVR)模型提取告警载荷攻击意图向量.结合变种SimHash算法生成向量化表示,一方面表示告警载荷的攻击意图,另一方面对告警载荷相似度进行评估.为了智能地生成告警降噪基线,将向量输入深度自编码器中,标注重构误差较大的原始告警为异常,按原始告警的结构化特征分组,确保在不匹配异常告警的前提下寻找生成过滤规则中匹配最多告警的规则集合,通过规则矫正器后得到降噪基线,以提升网络安全运营效率.
面向网络攻击检测/防护系统产生的原始告警日志,安全运营中心(security operations center, SOC)通过多种攻击行为聚合规则、告警类型过滤基线以及各种机器学习算法模型等方案对告警进行处理.但是信息过载导致的告警疲劳现象仍然是SOC所面临的普遍问题之一[3],研究人员对此提出不同的解决方案.文献[4]提出一种基于全流量的网络安全基线生成方法,对网络全流量数据进行预处理,将处理后的数据进行聚合等操作生成网络安全基线,降低网络安全基线生成的技术门槛;文献[5]提出一种基于安全基线模型的网络数据安全检测方法,针对不同的时间窗口长度分别构造不同的安全基线模型,通过生成基线之间的对比发现网络环境异常状态的告警.上述2种方案均以原始网络流量作为模型输入,且不包含专家知识的输入,从而导致误报较多,在复杂真实的工业场景中应用效果并不好.文献[6]提出一种基于用户行为和实体分析技术(UEBA)进行异常行为事件判断的方法,通过对用户的异常行为进行判断,缓解数据灾难的发生.基于UEBA建立基线的方案,容易受到正常业务波动的影响.针对告警的UEBA方案,大多都只考虑包括告警规则在内的结构化特征,然而网络攻击检测系统的误报率普遍较高,很多告警的类型和描述与对应的实际网络行为不符,导致面向告警的UEBA方案通常性能较低.在CPU等故障运维[7]领域,通常基于黄金指标等进行特征工程,构建模型来缓解告警疲劳.由于多种网络协议和业务类型混合的网络攻击告警领域存在高危告警标签少且告警指标定义困难等因素,导致其他领域的方案[8-12]无法应用.在紧迫的安全应急事件中,如果未能提前在对应领域提取有效的特征,则无法人工建立有效的基线,面对海量的告警数量会影响攻击的检出率,进而导致响应速度降低.本文所提出的方法可以帮助网络安全运营人员在不了解公司环境和业务的情况下智能地生成告警降噪基线,过滤无用告警,减少待研判的低价值告警数量,缓解SOC面临的数据灾难,提升告警管理的有效性和及时性.
智能化网络安全告警降噪基线流程如图1所示.首先,采集一定时间的原始告警,通过预设的规则组进行过滤,如剔除不直接指示任何攻击行为的告警(故障告警、日志类告警等),此类告警通常属于低价值的告警.然后,对数据进行预处理,采用攻击意图评估方法和变种SimHash算法处理载荷得到向量表示.将向量输入智能化基线生成模型中得到降噪基线,经后处理模块研判后生成有效的告警降噪基线,原始告警输入基线得到过滤后的告警,提供给运营专家研判.
图1 降噪基线流程
由于基线的生成需要挖掘告警载荷,提取向量表示,因此,删除告警载荷为空的告警.此外,OSI传输层及以下的协议包的告警载荷通常与具体的应用攻击方法无关,需要删除告警载荷中对应内容.
2.1.1 载荷攻击意图提取
在真实的场景中,攻击意图较为复杂,本文通过试探性和利用性2个方面衡量各种攻击意图[13],攻击意图量化表示如图2所示,其中,试探性分值表示确定漏洞是否存在的攻击行为,利用性分值表示构成实际危害的攻击行为,如第二象限(低试探性、高利用性)的告警为高危类型的告警,即需要运营人员高度关注的告警.
图2 攻击意图量化表示
首先,去除无法评估攻击意图的告警(如故障告警、日志类告警等)和有明显的攻击意图的告警(如扫描器告警、蠕虫告警等),并对告警载荷中的编码块进行递归识别和解码,对解码前后内容中的常见模式(如文件路径、IP地址等)进行分组消重和计数统计,将计数结果作为统计特征向量.对统计特征向量执行LDA聚类,在输出的每个主题中选取概率最高的若干个样本,对其试探性和利用性分值进行人工标注,得到标注训练集A.对已知攻击行为的告警标注试探性和利用性分值,得到标注训练集B.将标注训练集A和B合并,训练SVR模型.将实时告警数据产生的统计特征向量输入该模型,得出告警的试探性和利用性分值的估计值,经专家验证分值有误的进行修改加入标注集,并重新训练模型.最终,将统计特征向量作为训练好的SVR模型的输入得到表示攻击意图的特征向量.
2.1.2 变种SimHash算法
为了使向量表示能反映数据的相似度,需计算告警载荷的相似度.由于有些告警载荷是二进制,无法使用基于切词的文本相似度计算方法.本文提出一种变种SimHash提取告警载荷的哈希值.SimHash算法[14]是Google提出用于解决亿万级别的网页去重任务的算法.在告警载荷处理中,如果按标准SimHash算法,滑动窗口步长为1,告警载荷长度为L,滑动窗口大小为W,则每次计算SimHash含L-W+1次常规哈希计算.原始告警数量庞大,且K≫W,该算法无法实时处理告警.如果滑动窗口步长大于1,设步长为S(S>1),虽然能够提升计算效率,但当原始数据中插入或移除N个字节,且N不是S的倍数时,可能会导致变更点之后的哈希值发生变化,无法有效地评估告警载荷数据相似性.因此,本文提出一种基于RSync和CRC32的变种SimHash算法[15],可快速有效地进行告警载荷相似度评估.
首先,设定超参数RSync窗口大小为W,平均切片大小为P.然后,在输入数据上运行RSync算法,当某个位置的RSync校验和除以P的余数为0时,在该位置进行切片.再对每2个相邻切片合并计算CRC32校验和,对每个校验和按位展开为32维向量,并将0替换为-1.这样处理后向量叠加则不需要进一步的标准化处理,且向量的模与数据原始长度成正相关.最终,将展开后的所有向量相加,作为变种SimHash算法输出的向量表示.其中,P值越大,计算速度越快,SimHash精度越低.
首先,采用无监督学习的稀疏深度自编码器[16]进行异常检测,将告警载荷攻击意图的特征向量和SimHash向量拼接,作为训练样本的矩阵X输入到自编码器中.如式(1)所示,通过编码函数Enc()把数据映射到低维特征空间中,再利用解码函数Dec()重构特征空间的表示,在编码解码过程中多层网络和激活函数能捕获高维输入数据的非线性信息,当自编码器输出的重构误差大于预设重构误差阈值时,则确定所述告警载荷对应的告警为异常.其中,自编码的参数和阈值均应根据实际场景中业务复杂程度进行调整.由于告警载荷的分布并不均匀,按告警载荷的SimHash向量分组,并统计次数,将次数的对数作为权重,形成自监督学习样本.例如,将相同的待训练的哈希值分为一组,该组中包括n个哈希值,则该组的训练权重为lgn.
minE[dist(X,Dec((EncX)))].
(1)
由于业务变化,任何模型在不同的攻击场景中都无法做到异常告警召回率为100%.为了得到更有效且具备可解释性的降噪基线,本文将告警按可识别特征字段的组合进行分组,从告警数据字段中选取一些可直接识别的特征字段(如源地址、目的地址、目的端口、告警规则ID等),假设特征字段共有M个,记为F={f1,f2,…,fM},统计每个分组内的总告警数以及是否包含异常告警,得到一个列表A0,其中,每个元素都是三元组(特征字段列表及其取值的字典,告警数,是否包含异常告警),搜索最佳的告警过滤规则集,具体步骤如下:
1) 初始化.设定超参数最大基线规则数为N,最小特征数为m,m≤M.
2) for eachfiinA0
删除A0中每个三元组的fi字段,将其余特征相同的三元组合并,“告警数”取和,是否包含异常告警取或,合并后的三元组列表记为A1i;
end for
3) 合并A0和步骤2)中得到的所有列表,合并结果记为AS,删除AS中所有是否包含异常告警为真(即包含异常告警)的三元组.
4) 将AS中其余的三元组按(告警数,特征数)降序,取TopN的三元组,其特征组合即为基线规则匹配条件.由于真实的攻击告警属于少数,可解释告警过滤规则算法可以将其映射在AS三元组的末端.
为了应对不同的业务场景,增强告警降噪基线效果的鲁棒性,需要设计后处理模块.例如:开发不规范的Web应用可能会在正常业务的请求参数中包含形似SQL代码的内容,并不断引起SQL注入告警,当此类告警的试探性和利用性均不高且大量出现时,则有可能导致真实攻击者发起的SQL注入攻击被过滤.因此,针对上述自动化生成的可解释告警过滤基线还需要进一步处理,以生成有效的告警过滤基线.因此,本文设计一种规则矫正器(如图3所示)修正告警过滤基线,确保基线上线运行后,能够匹配的告警所指示的实际行为不会超出基线生成时的预期.
图3 规则矫正器
为了搭建模型分类器,首先统计告警过滤基线所匹配的原始告警的SimHash值去重后的数量C.若C值较小,则将对应SimHash值包装为哈希集合,新告警命中规则匹配条件(特征组合)后,其告警载荷SimHash值必须位于该哈希集合中,才认为基线规则匹配成功.若C值较大,则以对应SimHash值为样本训练一个分类器,弥补上述方法中采用结构化特征进行匹配的欠拟合问题.由于单类支持向量机(OCSVM)仅针对一类样本可以训练异常检测模型,在噪声样本数据中能快速进行训练,并具有一定的鲁棒性,利用该方法对上述告警过滤基线进行修正.通过模型分类器进行修正告警过滤规则会基本排除无效的告警过滤规则,再由运营人员人工对过滤规则进行分析,最终,确保不存在无效的告警过滤规则.
为了使数据贴近于真实的企业生产环境,本文研究团队在某公司生产环境中利用几种网络侧安全防护产品采集网络侧告警.期间确保公司各种业务正常开展,采集到的告警由多数正常业务行为和少数恶意攻击行为构成.在对抗期间部署在该公司的网络安全设备每日产生的原始日志数量为千万级别,告警数量为10万级别.高危恶意攻击告警的标注以网络对抗中得分攻击队伍的攻击报告和自述为主,高危告警和日志数量占比为0.0883%.由于并未有任何公开包含载荷的网络侧告警数据,因此,本文仅采用上述数据来评估效果.
通过载荷攻击意图提取方法得到特征向量的条件期望分布如图4所示(横轴为试探性分值,纵轴为利用性分值).从图4可以看出攻击意图特征向量能根据试探性和利用性的维度将攻击告警和无用告警分到不同簇中,同时,也存在一些无法分类的告警簇.并且还可以看出载荷攻击意图提取方法可以有效提取载荷的攻击特征,并能够用于后续模型的检测.
图4 攻击意图向量均值分布
表1 告警过滤规则效果
图5 累计基线过滤比
由于本文研究是首个以自编码器等黑盒模型为基础方法生成可解释告警过滤基线的方案,因此,并没有能进行对比的方法,所以通过在实际运营中的效果来佐证上述方法的有效性.针对其中1天的规则过滤进行人工分析,如图6所示,横轴为过滤规则ID,纵轴为该规则的过滤告警比,包括3部分:规则矫正器之前的过滤规则、经过矫正器后的告警过滤规则以及人工排查确定有效的告警规则.从图6可以看出经过矫正器后的告警过滤规则相比规则矫正器之前的过滤规则过滤数量有所减少,将减少的告警筛选出来,经专家排查后,发现均为告警载荷明显不同于其他告警的情况,这表明规则矫正器可以修正载荷类型不一致告警的过滤,以免导致载荷变动的告警中存在真实攻击.此外,通过图6对比人工排查确定有效的告警规则和规则矫正器之前的过滤规则可以看出,规则ID为14和规则ID为30的过滤规则被专家删除,该2条规则均为Web业务开发不规范引起的SQL注入告警,并非由算法误判而生成.由此可以看出本文提出的网络安全告警降噪基线的智能生成方法能有效地针对不同场景建立智能的告警过滤基线,从而提升安全运营效率.
随着全球数字经济的蓬勃发展,如何打造智能化的网络安全防护成为学术界和工业界的研究热点.基于人工智能的安全运营技术方案(AISecOps)[17]将大幅提升威胁检测、风险评估、自动化响应等关键运营环节的处理效率,大幅减少对专家经验的依赖[18],助力网络安全运营产业的技术升级,其中,缓解网络安全领域海量告警的问题是AISecOps所面临的关键问题之一.
本文提出一种智能化网络告警降噪基线的生成方法,帮助网络安全运营人员在不了解公司环境和业务的情况下建立降噪基线过滤告警,以此减轻运营人员的工作量,降低威胁分析与响应的周期,对于提升重大网络安全事故预警和风险防控水平具有重要的科学意义和应用价值.