一. 简介
海量告警数据分析已经成为安全运营中心的头号问题,为了实现对高危告警的识别的,安全运营中心普遍都有一套自己运营维护的“高置信规则”列表,通过大量的专家经验不断对该列表进行更新,最终只需要研判在该列表内的告警的即可。该方式一方面能部分解决“告警疲劳”的问题,将待研判告警压缩到人工可处理的量级,另一方面通过不断地修整完善,该列表也能覆盖大部分高危攻击行为。
但是该方式依然有两个比较严重的问题:
- 残余风险。高置信规则列表之外的告警不会被运营人员分析,遗留了残余风险,根据一次内部红蓝对抗的经验,攻击队产生的告警都在该列表之外,而这部分告警又不会被分析,造成了风险残余。
- 依然费时费力。如图1所示,高置信度规则列表涉及的告警依然包含大量的噪声、误报,需要人工处理。
图1. 运营规则对告警的覆盖情况
为了解决高置信度列表带来的上述问题,本文认为:一方面,告警应该进行全量分析,以免遗漏重大风险,另一方面,误报应该通过自动化的方式进行去除,最后低层次的告警应该通过一定的方式进行融合,在压缩告警数量的同时,提供更多的高层次信息。
二. 告警全量分诊要点分析
2.1
告警组成分析
类似医院的分诊,只有了解人体的组成部分,才能分门别类的设置各种诊室一样,为了实现告警全量分诊,就必须知道告警的组成部分。
我们将告警大致分为如下4类:
- 误报。造成误报的主要原因有:正常业务(如公司业务)、正常internet访问(如微信聊天)、爬虫等。
- 低危告警。基本无任何威胁的告警,如:对外的渗透测试、来自于科研机构、安全厂商的漏洞扫描等。
- 中危告警。一定威胁的事件,如:僵木蠕、低级的攻击者发动的攻击等,该类型的事件绝大部分都是失败的攻击,攻击成功的可能性很低,我们姑且认为是中危险事件。
- 高危告警。如:APT攻击、已经或者将要成功的渗透测试等。
需要特别说明的是,以上分类都是相对高层级的分类,与原始告警类型并无明显相关性,需要借助一定方式进行识别。
2.2
案例1——Google Cloud云服务漏洞
告警分析实际上是一种后处理技术,如图2所示,告警来源于流量又高于流量,但依然包含流量中的涉及到的各种网络行为。网络流量分析中,我们经常会使用各种数据分析的方法,如:分类、聚类、异常检测等,那么流量分析中的各种算法如何有机的作用到全量分诊当中呢?笔者在这里分析出如下要点。
图2. 告警处理在安全安全运营流程的位置
2.2.1
要点1:误报过滤
实际上大量误报可以通过自动化的方式进行过滤,如:爬虫、内部常用的业务等,我们分析4种主要误报类型以及识别方法。
- 无法分类的告警
无法分类的告警有多种形式,如:无法关联分析的加密流量告警、无法关联分析的登录类告警、信息缺失类告警。之所以加上无法关联分析的限定条件是因为大部分此类告警可以通过关联分析进行分类。如:10:00~11:00 之内出现100条SSH登录,但是前10天内,每天都有这种现象,我们可以大概率认为该行为不是攻击行为造成的,如:误配置。
对于此类告警,由于组成多样,检测算法也会不尽相同,如可以通过基于熵值的加密检测算法检测加密告警。
- 正常业务访问
这里的正常业务指企业内部或者对互联网提供的正常业务,这些业务往往复杂性高,不可避免会匹配一些IPS规则,触发大量误报。
由于正常业务千奇百怪,检测方法也应做到不尽相同,重点在于捕获正常业务告警间的共同特性。如:对于payload较相似的业务,可以基于载荷进行检测;对于payload差别较大,但URL比较固定的业务,可以通过URL建立基线进行检测等等。
- 正常通信
这里的正常通信与正常业务有一定区别,指的是企业对互联网的正常访问行为,如对百度、微信等的通信。
对于互联网场常见的业务,可以通过构建特征库、IP库的方式进行检测,相信也不会太过于繁琐。
- 爬虫
爬虫是一类比较特殊的行为,在这里我们认为该行为风险性低,当做误报处理。
由于爬虫在行为上具有一些通用特征,如请求频率高、主要访问静态资源等,可以基于响应包内容、请求的资源类型、请求频率等特征设计爬虫检测算法。
2.2.2
要点2:攻击聚合
同一攻击行为往往会触发大量告警,若能将这些告警统一聚合起来并归因为高层的攻击事件,便可进一步减少待分析告警数量,提升运营效率。
这里我们总结主要的4种攻击场景,占据了绝大多数告警数量。每种场景都需要设计检测算法进行检测。
- 漏洞扫描
可以根据不同的扫描行为对扫描告警做聚合。如通用扫描一般由同一个源IP向同一个目的IP测试大量不同漏洞,专项扫描一般针对某个或某几个特定漏洞对一定范围内的主机进行扫描等等,并且扫描往往具有一些通用特征,如:高失败率、高频等,可以设计扫描检测算法将告警中的扫描行为做高层聚合。
- 爆破
爆破行为也有较明显的特征,如:频率高、高失败率、用户名变化多、密码变化多等,可以设计爆破行为检测算法将告警中的爆破行为做高层聚合。
- 渗透测试
渗透测试过程中,经常采用已有工具,如sqlmap等,自研工具对目标网站进行渗透,触发大量告警,需要进行融合。可以根据渗透测试告警的特征,如:URL不同、参数不同、大量尝试等特征设计渗透测试检测算法。
- 僵木蠕告警
可以基于已有的僵木蠕特征库进行检测。
经过高层聚合,告警中大量的攻击告警被归并,形成基本可运营的、直观的攻击事件。这种形式对运营人员更友好,并且进一步降低了底层告警的数据量,提升运营效率。
2.2.3
要点3 告警聚合
告警聚合是IDS告警研究中的常见话题,目标是:将同质的告警融合到一类中,达到类中相似,类间不同的效果。与攻击聚合不同的是,告警聚合不针对特定攻击类型,是纯聚类算法。
目前业界主要采用“Alert throttling”的方式进行告警聚合,即在一定时间范围内(如:15min),看某几条告警来判断这段时间内所有告警的属性,显然这种仅按照时间进行告警聚合的方式存在一定问题,而相关的研究在学术界从未间断,如2022年的一篇安全文章以告警类型用深度学习的方法进行告警聚合[1]。
笔者认为,告警聚合是一个复杂任务,跟网络行为的不同,要考虑的属性也不尽相同,因此需要结合多种告警属性设计聚合算法:如时间、告警类型、IP网段、payload等。
三. 总结
本文指出目前安全运营中心普遍基于“高置信规则”的运营方法并不完善,并提出全量分诊的设想,勾勒了全量分诊中可能涉及到的功能要点,目前这些要点正在也在内部研究验证。欢迎读者朋友交流心得、批评指正。
参考文献
[1] van Ede, Thijs, et al. "DEEPCASE: Semi-Supervised Contextual Analysis of Security Events." IEEE Security and Privacy (2022).
内容编辑:创新研究院 童明凯
责任编辑:创新研究院 董炳佑
本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。