奥义用图算法练就威胁猎捕机器人

奥义资深研究员CK在台湾安全大会上,分享自家团队如何打造威胁猎捕(Threat Hunting)系统。他们从零开始,用事件资料训练一套ML模型,经过4次改版,克服命令行(Command line)信息不足、训练资料不均衡、缺乏标注资料和没有攻击时序图(Storyline)等4大难题,打造出能自动揪出异常事件,还能顺藤摸瓜掌握完整攻击来龙去脉的威胁猎捕机器人Fuchikoma。

为何选择威胁猎捕?怎么用机器学习自动猎捕威胁?

“我们想用机器学习做到自动威胁猎捕,而不是传统的IR,”CK说。IR(Incident response)是指安全事件应变,着重于事件后的分析、调查和鉴定;有别于事后作业,威胁猎捕聚焦于预防,通过每天、每周定期分析,来找出可疑活动、描绘黑客攻击的完整时序图。这个做法比IR更全面,更能找出恶意程序的来源全貌,而非只揪出单支恶意程序。

但,为何要用机器学习来做威胁猎捕呢?CK表示,机器学习可自动排除大量错误警示,只筛选出严重的安全事件,来给人类专家分析。不过,团队尝试时发现,威胁猎捕十分复杂,不可能只靠单一机器学习模型完成,而是要集成不同机器学习算法、“兜成一个ML Pipeline,才能解决问题。”

从零打造机器学习系统Fuchikoma,自建资料集来训练

于是,CK团队开始设计这个威胁猎捕机器人Fuchikoma。他指出,会取名为Fuchikoma,是因为这个名字符合奥义的设计哲学;Fuchikoma是日本动画攻壳机动队中的AI机器人,它与人类合作后战斗力大增,因此,“这套系统就是来辅助人类,要帮助专家更快找出威胁。”

在这个研究中,CK团队将Fuchikoma要侦测的问题,锁定在Windows新处理序事件上(也就是Process creation events,事件识别码4688),并辅以命令行信息作为训练资料。

接下来,团队利用2套攻击场景脚本来创建了2套资料集来训练Fuchikoma。第一个脚本Playbook APT3,利用Empire等渗透攻击工具,依据MITRE ATT&CK安全框架所定义的APT 3阶段攻击场景来产生大量模拟的攻击事件,再加上MITRE ATT&CK Evaluation第一回合所产生的资料,一共有6,786个新处理序事件资料。

再来,第二套攻击场景脚本Playbook Dogeza Metasploit,则是用渗透攻击框架Metasploit模拟APT攻击,来创建第2个人信息料集,内有近6万9千个事件。 (如下图)

Fuchikoma v.0诞生,但有4大问题要解决

于是,团队用这些资料训练一个分类器,来从事件日志中(log)分辨该事件是否为恶意。Fuchikoma第0版因此诞生,但CK发现,这个方法还有4大问题。

首先,每个事件中的信号(Signal)十分微弱。因为,每个事件由每个命令行组成,但每个命令行只含少量消息,难以判断是否为恶意,“不像恶意程序,光是一支就含有大量消息。”

而且,在不同场景下,命令行的消息也有可能不是恶意。CK举例,像whoami或netstat这种命令,很难一概而论是否为恶意,得看上下文才行。

第2个问题是训练资料不均衡。CK解释,和正常资料相比,只有非常少量资料与恶意攻击有关。这个特性,让纯监督式机器学习模型没法有效判断。

比如,在一次测试中,团队统计发现,正常资料多达1万多笔,而恶意攻击相关资料只有100多笔,整整差了100倍。再来,就算团队将重复的资料删除,还是发现正常资料将近2,000笔,而恶意相关资料只有35笔,差距太大。 (如下图)

第3个问题是缺乏高品质标签。这是因为,标注资料十分耗时耗力,而且,标签通用性不足,比如在某个环境下产生的标签,很难在另一个环境应用。

最后一个问题则是缺乏时序图,“我们希望不只抓出一个恶意程序,而是找出完整的攻击时序和原因,”如此才能让分析人员掌握更多信息。

以上这些问题,都是Fuchikoma第0版无法解决的。因此CK团队着手改善,开发出第1版。

Fuchikoma v.1:集成分群和分析单元两大概念

第1版Fuchikoma的特性是分析单元分群(Clustering analysis units),也就是将事件信息分群。简单来说,Fuchikoma会先聚合不同事件的信息,再由一个分析单元创建器(Analysis unit builder),将这些事件重组为一个个分析单元。

再来,Fuchikoma将性质类似的分析单元分群,并加入相关的命令行信息,当作补充参考消息。分群后,系统会发出通知,让分析员来标注这些群。

如此一来,通过连接不同分析单元中的命令行、增加参考信息,就解决了单一事件中信号微弱的问题。而且,通过分群识别相似事件,分析员就不必一一手动检查每个事件,连带改善标注资料缺乏的问题。

在分析单元方面,团队参考人类分析师经验,设计一套进程树(Process Tree)方法,让系统自动搜索特定命令行邻近的命令行,接着将这些命令行信息汇集整理为一篇文本档,再用自然语言处理(NLP)算法TF-IDF,将这些文本转换为矢量,然后分群。

因此,第1版的系统运行就会是:事件输入系统后,转换为分析单元,接着再转换为矢量来分群,最后由安全人员从分群中找出恶意事件。 (如下图)

虽然第1版解决了每个事件中信号微弱的问题,但仍有3个问题待解决,像是不均衡的训练资料、缺乏攻击时序图,以及难以取得标注资料。CK解释,虽然第1版能产出分群后的事件,来让分析员标注,但仍需要人工作业来分析。

Fuchikoma v.2:用异常侦测来提高侦测准确度

为此,团队进一步改良,开发出第2版Fuchikoma。这个版本采用了异常侦测(Anamoly detection),来提高侦测准确度。这是因为,攻击事件占训练资料集的少数,因此与正常资料相比,它的特性就是异常。这一点解决了原本训练资料不均衡的问题。此外,这个特性也改善了标注人力问题,分析员只需查看系统产出的异常事件即可。

在这个版本中,团队还用3种算法来进行异常侦测,包括孤立森林(Isolation forest)、DBScan和离群点(Local Outlier Factor,简称LOF)。其中,CK认为DBScan效果最好,甚至在奥义后续的研究中,表现依然突出。

DBScan的特点是,假设给定距离ε,它能将在ε范围内的每个节点,视为一个群(Cluster)。要是不在ε范围内,就会视为异常。 (如下图)

因此,第2版Fuchikoma会是这样运行:当事件资料输入系统后,会转换为分析单元,再转换为矢量来分群。有别于第1版,转为矢量后会执行2个步骤的运算,一是异常侦测,二是分群。其中,异常侦测标示出的异常事件,会显示在矢量分群中,分析员再分析这些异常事件即可。 (如下图)

这个版本解决了每个事件中信号微弱的问题,也解决了训练资料不均衡的问题。接着,就只剩下难以取得标注资料和缺乏时序图的问题待克服。

Fuchikoma v3:用图算法补足恶意攻击的来龙去脉

接下来,团队用图算法(Graph algorithm)来进行社群侦测(Community detection),要从社群中找出与异常事件相关的事件,并用这个特性来构建时序图。但图分析怎么发挥作用呢?

简单来说,由于攻击者一开始只能控制少数处理序,因此势必会在这些处理序下,做出大量行为,因此形成一个高度密集的图社群(Graph community) 。这种特性,就十分适合社群侦测。 (如下图)

接着,团队使用一种图算法Louvain,来将图中相对密集的处理序框起来,形成一个社群。

因此,Fuchikoma第3版的运行,就会是:输入事件后,形成不同的图,再分为3个运算步骤。首先是从图中归纳出分析单元,再转换为矢量,接着进行异常侦测;第2是进行攻击分数计算;第3是进行社群侦测,再通过主题模型找出每个社群的关键字,再结合步骤1和步骤2产生的异常侦测结果、攻击分数计算结果,来标注异常的社群,最后再交给分析人员确认是否为恶意攻击。 (如下图)

不过,CK也坦言,光是利用资料本身,模型难以区分出正常或恶意,只能分辨正常事件和异常事件(也就是较少出现的事件)。 “这种异常事件可能是攻击,也有可能是环境更新。”因此,要准确分辨正常和异常事件,还是需要外部资料辅助,特别是外部标签。

而在测试上,Fuchikoma第3版能将APT 3资料集中的6,786个处理序事件,分类为540个社群,并从这540个社群中,找出223个含有异常消息的社群,再从中分析出异常风险过半的176个社群,交给人类分析员确认。 (如下图)

总的来说,Fuchikoma v.3融合了机器学习、图算法、NLP和异常侦测,已能解决奥义团队最初面临的4个难题,也能有效猎捕威胁。CK指出,开发者也能用开源工具,轻易开发这种威胁猎捕ML模型,来辅助人类分析员揪出恶意事件。