一、告警载荷分析的困境

在此前关于告警载荷分析的研究中,我们最终选用人类专家所编写的正则表达式等特征模式,从告警载荷中提取关键字段信息,再通过监督学习方法找到这些信息与告警实际危害程度之间的关系(参考:【攻击意图评估】系列文章:【攻击意图评估:总集篇】手把手教你搭建告警筛选系统)。

但当前实验表明,这种做法存在两个比较关键的问题:

1.1关联信息的丢失

考虑以下两段告警载荷片段:

第一个载荷片段是一段无害的JavaScript代码片段:

const result_loader="JSON.parse";

$.ajax(…).success((data)=>{

var hash=$.md5(eval(result_loader)(data)["$_POST"]);

});

第二个片段则是某种PHP WebShell的恶意代码片段:

if(md5($_POST["pwd"])=="b38acde3f02a889e5cad5ae33cfe80ef")

eval($_POST["script"]);

可见,第一个载荷片段是一段无害的JavaScript代码,而第二个片段则是某种PHP WebShell的恶意代码。

当人类专家看到第一个载荷片段时,能够理解代码内容的具体含义,知道eval函数的执行对象是常量字符串“JSON.parse”,是无害的;类似地,看到第二个载荷片段时,也能够理解eval函数的执行对象是POST参数,可以认定为是恶意攻击。

但如果通过特征模式对以上两个载荷进行提取,会得到非常相似的结果(“eval”、“md5”、“$_POST”、…),导致后续模型处理无论如何也无法作出有效区分。追根究底,这种特征提取方法会损失掉特征对象之间的关联信息,例如函数名与实参、关键字与标识符、被赋值变量与表达式、等等。

从这个角度看来,依赖特征模式的告警载荷信息提取方法是远远不够的。

1.2迁移能力差

在使用监督模型对告警进行评估时,训练数据的标注值(也是模型的输出值)通常是“告警的实际危害程度”。然而实践表明,告警的实际危害程度受众多主观和客观因素影响。

不同的专家、在不同的时间、不同的网络环境中、不同的评估背景下,对同一个告警的危害程度评定结果都不尽相同。

例如,在日常运营中,内网蠕虫活动通常是需要关注并处置的;但到了红蓝对抗中,由于先验地认为“攻击方不允许使用蠕虫”,因此往往会暂时忽略蠕虫相关的告警。

这就导致,在一个网络环境中训练完成的模型,拿到另一个网络环境中就很难使用;某位专家标注训练出来的模型,其他专家可能会觉得很差;甚至是在同一个环境中,样本的标注值也会被反复修改。

也许我们从一开始就搞错了方向:模型可能需要先明确告警内在的性质,才能推断出告警对外部的影响?

二、告警载荷特征提取问题的理解和探讨

2.1对问题的理解

上面提出的两个问题,可以更进一步地理解为:

1、如何验证某个特征提取器的有效性(既然特征规则用于特征提取的效果不好,那一个“好”的特征提取器应该是怎样的)?

2、告警载荷中的关键特征应当如何组织和表示(既然“实际危害程度”作为标注值并不妥当,那一个“好”的特征提取器应该输出什么样的结果)?

2.2对问题的探讨

经过反复研讨和尝试,我们得出初步结论如下:

1、告警载荷特征提取器的有效性评估应当包括两方面:

a)完整:提取器的输出(经过解析后)能够代替告警载荷,帮助人类专家作出所有必要的判断;

b)准确:在前者的基础上,提取器输出的信息量应当尽可能地小;

时至今日,我们并没有什么自动方法被证明在告警评估上的效果强过人类专家。因此,特征提取器的有效性,目前还是需要通过人类专家进行评判。

2、自然语言是告警载荷特征的良好表示形式之一:

a)大多数告警载荷都是对网络流量或其片段的记录,它们本质上是对网络活动的一种观测。因此,对告警载荷关键特征的表示,等价于对网络活动中关键特征的表示;

b)现代信息系统中的业务包罗万象,网络活动关键特征的内容和结构也因此高度复杂。如果用有限维度的特征去表示这样的信息,是非常局限的;

c)既容易被人类专家所理解和表述,维度又可以扩展的表示形式,大概非自然语言莫属了。

基于以上考虑,告警载荷特征提取器应当将二进制字节流输入转换成自然语言输出。

三、告警载荷摘要生成

我们暂时将这种新型的特征提取器称为“告警载荷摘要生成器”,因为人类专家遵循上述需求给出的标注,看上去大多都很适合作为告警的标题,例如这样的:

告警名称:

[中风险]webshell common_webshell_connection

标注:

WebShell代理访问*第二受害者*的22端口SSH服务

请求报文(解码后):

POST /xiao/shell.jsp HTTP/1.1

Host: *第一受害者*:8080

User-Agent: 1

Content-Length: 135

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip

Remoteserver=http://127.0.0.1:38964/&SENDDATA={"sa":"127.0.0.1:59854","da":"*第二受害者*:22"}

响应报文(解码后):

HTTP/1.1 200

Set-Cookie: JSESSIONID=*已脱密*; Path=/xiao; HttpOnly

Content-Type: text/html;charset=utf-8

Content-Length: 68

Date: *已脱密*

{"d":"SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3"}

或者这样的:

告警名称:

[高风险]路径穿越 xml_resource_scan

标注:

读取HP打印机功能列表XML

请求报文(解码后):

GET /DevMgmt/DiscoveryTree.xml HTTP/1.1

Accept-Encoding: gzip, deflate

Host: *已脱密*:8080

Connection: Keep-Alive

响应报文(解码后):

TTP/1.1 200 OK

Content-Type: text/xml

Server: Mrvl-R1_0

Cache-Control: no-cache

Connection: keep-alive

Transfer-Encoding: chunked

SVN.2730

/DevMgmt/ConsumableConfigCap.xml

ledm:hpLedmConsumableConfigCap

…(后面还有很长,此处省略)…

摘要生成是NLP领域的一项经典任务,相关技术已有众多成熟实现可供参考,其算法大致可以分为抽取式和生成式两种[1]

理想的告警载荷摘要生成,应当一并完成抽象归纳和翻译,并非单纯地在原始告警载荷中选择子序列,因此抽取式方法在此场景中并不合适,暂时排除。

四、摘要生成算法可行性分析

具体何种生成算法实现告警载荷摘要生成任务的效果最佳,目前的研究仍在进行中。本文仅以Seq2Seq为例进行可行性分析。

严格来说,Seq2Seq泛指一大类输入输出均为序列的方案,而不是某个具体的模型实现[2]。经典的Seq2Seq以各种递归单元(LSTM、GRU等)为核心,将输入序列的信息不断叠加,最终编码为固定长度的向量;而解码过程刚好相反,同样使用递归单元将这个固定长度的向量不断提取成为输出序列[3]

(Seq2Seq在告警载荷摘要生成任务上的应用示例)

这种模型的优势在于,它可以用恒定数量的模型参数,处理不定长度的输入/输出。但由于整个输入序列的信息都要被编码到固定维度的中间向量上,当输入序列很长时,就难免会损失一些信息[4]

因此就有了带“注意力”机制的改良版本[3]。即在编码器递归过程中,保留每一步的状态值;随后在解码器递归的每一步中,寻找相关状态值并加权得到“注意力向量”;随后将“注意力向量”叠加/拼接到原本的解码器输入中。如下图所示:

(带注意力机制的Seq2Seq,其中权重的计算方法本文不详细讨论)

2017年Google团队发表了一个名为“Transformer”的经典机器翻译模型[5],该模型随后于2019年成为BERT模型的一个关键构成单元[6]。后者及其各种改良版本目前广泛应用于各类NLP任务,并取得了良好的效果。

与经典Seq2Seq方法不同,Transformer中彻底抛弃了递归单元,使用“位置编码”+“多头注意力层”的方法构造编码器和解码器[5],完全依靠注意力机制实现输入到输出的转换。

(Transformer模型的整体结构[5]

现有实验表明,注意力机制不仅能够捕捉到距离较远的相关信息,大幅提高模型的性能,还能提供额外的解释性[7]

(机器翻译任务中,注意力机制的可解释性[7]

这种可解释性对于信息安全领域来说至关重要。如果模型作出误判,依靠注意力机制的可解释性,我们就能确定是告警载荷中的哪些部分导致了误判,从而针对性地补充训练样本或调整模型。

受限于主题和篇幅,本文不详细介绍更多模型实现细节。

五、后记

由此看来,告警载荷摘要生成任务,从原理上应该是可行的。人类专家显然能够完成这项任务;机器学习领域也已经有非常成熟的算法模型来解决非常相似的问题,也具有充分的可解释性以应对信息安全工作中的决策需要。

不过如果具体到告警评估场景中,目前还有包括词嵌入、序列嵌入、性能优化、标注规范制订等很多问题需要解决。要真正地在实时告警评估工作中使用它,依然还有漫长的路要走。

更多前沿资讯,还请继续关注绿盟科技研究通讯。

如果您发现文中描述有不当之处,还请留言指出。在此致以真诚的感谢~

参考文献

[1] Louis Teo. Report is too long toread? Use NLP to create a summary[EB/OL]. [2020-10-29].https://towardsdatascience.com/report-is-too-long-to-read-use-nlp-to-create-a-summary-6f5f7801d355.

[2] Wikipedia.Seq2seq[EB/OL]. [2021-03-27]. https://en.wikipedia.org/wiki/Seq2seq.

[3] ChristianVersloot. From vanilla RNNs to Transformers: a history of Seq2Seqlearning[EB/OL]. [2020-12-29].https://www.machinecurve.com/index.php/2020/12/21/from-vanilla-rnns-to-transformers-a-history-of-seq2seq-learning/.

[4] 白裳. 完全解析RNN, Seq2Seq, Attention注意力机制[EB/OL].[2018-12-12]. https://zhuanlan.zhihu.com/p/51383402?edition=yidianzixun.

[5]Vaswani, Ashish, Shazeer N, et al.Attention Is All You Need[J]. Proceedings of the 31st International Conferenceon Neural Information Processing Systems, 2017, 30:5998-6008.

[6] Devlin, Jacob, Chang M, et al. BERT:Pre-Training of Deep Bidirectional Transformers for Language Understanding.[J].In Proceedings of the 2019 Conference of the North American Chapter of theAssociation for Computational Linguistics: Human Language Technologies, 2018,1.

[7] Bahdanau D , Cho K , Bengio Y . Neural MachineTranslation by Jointly Learning to Align and Translate[J]. Computer Science,2014.

声明:本文来自绿盟科技研究通讯,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。