基于深度学习的网络入侵检测系统(DL-NIDS)得到了显著的探索,并显示出卓越的性能,但存在两个问题:
根本原因在于DL-NIDS的可解释性不足,没有能力处理结构化数据的历史输入和复杂的特征依赖。
说人话就是,深度学习方法一般只能给一个检测结果,没办法提供中间过程。同时,异常检测通常需要更多的上下文信息来描述一个异常行为用以给安全人员提供参考。比如:是什么样的异常、什么行为导致了异常等等问题。因此,不独立的特征和输入的历史性使得因果关系不如普通的分类那样好解释。比如一个图像里面出现了绿色纹路的椭圆体,那自然很容易知道是西瓜,绿色、花纹、椭圆都是相互独立的,也不包含历史数据。而一个恶意文件的植入,一般与一个异常连接有关,并且可能触发创建新进程。特征之间并不是独立的,存在因果依赖关系,且顾名思义,异常就是异于平常,依赖历史数据。这就是所谓的,可解释性不足。这个问题在第二节作者自己也有解释。
在本文中,我们介绍了 xNIDS,一种通过解释 DL-NIDS 来促进主动入侵响应的新型框架。我们的解释方法突出了:
XNIDS 在保真度、稀疏性、完整性和稳定性方面优于以前的解释方法。此外, XNIDS 可以有效地生成实用的防御规则,帮助理解 DL-NIDS 行为,并解决检测错误。
已有的几种方法都无法DL-NIDS,原因是现有的解释方法:
(1)不足以将历史输入样本考虑在内。
用于图像分类或恶意软件检测的深度学习模型基于单个输入样本做出决策,例如图像、一段二进制文件代码等。这样的模型可以表示为 y t = f ( x t ) y_t = f (x_t) yt=f(xt)。然而,DL-NIDS 的输入样本,例如网络包头,形成一个时间序列并且相互依赖,模型一般是根据当前输入样本以及 k 个历史输入做出决策,表示为 y t = f ( x t , x t − 1 , . . . , x t − k ) y_t = f (x_t,x_{t−1}, ...,x_{t−k}) yt=f(xt,xt−1,...,xt−k)。然而,现有的解释方法不足以将历史输入样本考虑在内,这些方法中用于局部探索的典型采样方法仅对 x t x_t xt 附近的实例进行采样,而忽略 x t − 1 、 . . . x_{t−1}、... xt−1、... 和 x t − k x_{t−k} xt−k 附近。
(2)不足以捕捉特征之间的复杂依赖关系
现有的方法在解释的过程中,要么假设输入中的特征是独立的,要么假设相邻特征具有相似的贡献。这些假设适用于图像分类任务(图像中的每个字节独立地代表像素的颜色)以及恶意软件检测任务(一段二进制代码可以被解释为指令的开头)。然而,DL-NIDS 输入样本的网络包头中的字段具有明确的含义和复杂的依赖关系。例如, T C P . f l a g TCP.flag TCP.flag 是 TCP 的子特征,这意味着如果 T C P . f l a g TCP.flag TCP.flag 特征有效,则 TCP 特征也有效,这两者并非独立关系。此外,相邻的特征也不一定具有相似的贡献。例如,TCP 和 UDP 的特性是相邻但又互斥的。
此外,目前还没有研究利用DL-NIDS的解释结果来生成主动入侵响应的防御规则生成准确的防御规则。现有的方法过于严格且只支持特定的防御工具。事实上,生成准确的防御规则至关重要,因为过于具体的防御规则可能会导致入侵响应中的漏报,而过于笼统的防御规则可能会导致入侵响应中的误报。此外,生成可供异构防御工具使用的实用防御规则具有挑战性,例如 iptables 和 Pfsense,它们具有不同的规则语法和粒度。
大概就是说,现有方法生成的规则没法同时兼顾漏报率和误报率,且通用性不高
对于上述挑战,xNIDS中的解释方法通过两个方法来解决:
xNIDS中的防御规则生成器通过引入防御规则范围、安全约束和统一的防御规则表示来生成准确实用的防御规则,从而实现主动入侵响应。生成的规则兼容iptables、OpenFlow、Pfsense和Squid等入侵检测工具。
所以综上,文章主要贡献如下:
评估部分我就不写了,作者用的是:
(1) 基于自动编码器的Kitsune;
(2) 基于长短期存储器(LSTM)的机器人检测系统ODDS;
(3) 基于递归神经网络(RNN)的RNN-IDS
(4) 基于深度自动编码器(AE)的AE-IDS。
工作机制大概如上图所示,xNIDS对DL-NIDS的检测结果进行解释,帮助DL-NIDS消除误报,同时结合重要特征和安全约束生成防御规则用于第三方检测工具,帮助其实现主动入侵响应。
语义差距。解释DL-NIDS可以弥合检测结果和可操作解释之间的语义鸿沟。尽管DL-NIDS可以检测各种攻击,但由于检测结果和可操作解释之间的语义差距,DL-NIDS缺乏对发现的内容做出积极响应的能力。DL-NIDS的检测结果通常以数值或甚至更简单的标签表示,但网络运营商需要解释这些分数背后的原因,以便做出正确的响应(例如,网络运营商需要知道要对哪个网络实体采取行动),以详细和人类可理解的方式解释检测结果(例如,哪些特征更重要,可以让网络运营商对检测结果充满信心,并为他们提供可用于构建相应响应的解释)。
错误修正。解释DL-NIDS检测结果有助于排除分类错误。DL-NIDS中错误分类的成本非常高,其中攻击者可以通过单个假阴性穿透网络,而假阳性因为需要通过进一步的人工分析而使网络运营商失去响应能力。然而,因为这些模型对人类来说越来越复杂和难以理解,所以对DL-NIDS进行故障诊断很困难。解释有关具有重要功能的输入的检测结果可以减少故障排除的人力。
其实就是修正模型减少漏报和误报,对应了上文。
主动响应。主动入侵响应有助于及时阻止或分流恶意流量。DL-NIDS检测到广泛的攻击要求网络运营商在做出正确响应之前进行耗时的手动分析。然而,延迟的被动入侵响应代价高昂,因为攻击者可能已经侵入网络。因此,必须基于DL-NIDS的检测结果和相应的解释来启用主动入侵响应。
这个我接触比较少就不说了,贴张图,感兴趣的自己找原文引的文献去了解。
(1)如何考虑历史输入?
现有的解释方法通过突出对检测结果有显著贡献的特征来解释检测结果。但是不足以解释关于历史输入的检测结果。Schlegel等人在固定输入数量的时间序列上评估所选解释方法的质量。实验表明,当应用于时间序列时,所有评估的解释方法的精度都会显著降低。因此,有必要在时间序列上设计更合适的解释方法,以获得更好的解释。因此确定了两个问题:
(2)如何在结构化数据中捕获复杂的特征依赖关系?
大多数现有方法,如IG、LRP和LIME,都不足以通过假设特征在输入中是独立的来利用数据中的结构信息,这导致了较差的解释保真度。其他工作,如SHAP,具有特征组(例如,超像素)设置,但假设组内的每个特征具有相等的信用。LEMNA通过假设相邻特征对检测结果有类似贡献来解决这个问题。然而,DL-NIDS的输入结构良好,例如IP帧,具有复杂的特性依赖性。
即现有方法依据的假设都不适用于DL-NIDS,相反会使检测丢失精度。
(3)如何在实际防御规则生成中平衡精度和泛化?
即使解释方法可以识别重要特征,例如IP地址,但利用这些特征生成准确的防御规则仍然具有挑战性。如果生成的规则过于细粒度,例如,仅匹配特定流,则会导致过度拟合和大量防御规则。另一方面,如果生成的规则过于通用,它们可能会扰乱现有的流量。例如,解释方法将IP地址、协议和端口号标识为重要特征。阻止来自特定协议(例如TCP)的所有数据包的超通用规则可能有效,但具有破坏性。
(4)如何为不同的防御工具生成普遍适用的防御规则?
尽管网络防御工具(如防火墙和入侵响应系统)的功能相似,但它们使用不同的格式和规则粒度。例如,为了阻止TCP.SYN泛滥,OpenFlow的规则看起来像是 < n w _ s r c = 192.168.1.10 , t c p , t c p . s y n , a c t i o n s = d r o p , p r i o r i t y = 1 , h a r d _ t i m e o u r t = 60 >
在本节中,我们首先介绍解释方法的目标。然后:
最后,我们将上述技术集成到适当的解释模型中,通过近似DL-NIDS的检测结果来导出解释结果。
这节略过吧,公式太多的东西实在看不来,我也不是这个方向,有需要再回来补课。
XNIDS通过定义防御规则范围以限制规则应适用的地方来解决Ch3;分析解释以确定规则范围;以及考虑安全约束以提高防御规则的适应性。XNIDS还通过定义统一的防御规则表示来处理Ch4,以抽象不同防御工具中的通用实体和规则操作。
翻译一下图片描述。
一个示例说明了XNIDS如何生成防御规则。其关键思想是:
①通过分析解释结果来确定防御规则的范围,
②修改有关封锁策略的操作,
③通过创建具有重要特征值的相应实体来生成统一的防御规则。
最后,XNIDS自动将统一的防御规则转换为可操作的防御规则(例如OpenFlow规则和iptables规则)。
(不是很懂啊,大概意思就是从解释出来的输入信息里面提取端口、IP等,根据各检测工具的规则规范生成其对应的检测规则,往下看吧)
精度度量要求防御规则只影响恶意流量,而不影响良性流量。一般化度量要求防御规则应警告攻击中涉及的所有恶意流量。为了平衡精确性和通用性,我们引入了防御规则范围来限制规则应适用的范围。
定义规则范围
防御规则的范围可以定义为三个级别:
解释结果分析
我们通过分析相应的解释来确定防御规则的适应范围。将统计信息定义为 S S S,其中包含 I P _ p o o l 、 I P _ n 、 M A C _ n 、 P o r t _ n IP\_pool、IP\_n、MAC\_n、Port\_n IP_pool、IP_n、MAC_n、Port_n和 P r o t o c o l _ n Protocol\_n Protocol_n五个字段。
通过检查统计信息 ( S ) (S) (S)中哪个字段的值最大来确定单个主机范围和多主机范围。例如,如果Protocol_n或Port_n值最大,则表示异常流量属于同一协议,而不是来自同一台主机。换句话说,这次攻击可能涉及多个主机。因此,防御规则应该具有多主机作用域。否则,如果异常流量来自同一台主机,则对应的防御规则应该是每个主机或每个流的作用域。在这种情况下,如果重要特征包含多个协议或端口,即主机使用多个协议发起攻击,则防御规则的作用域为per-host,否则防御规则的作用域为per-flow。
大概意思是,如果在所有统计值中,IP字段比较大,说明有可能是同一台主机在发起各种各样的攻击,英雌构建针对单机的防御规则;如果protocol或者port字段值大,就说明有可能是不同主机发起的同一种攻击方式,应该构建多主机规则。
网络环境通常因站点而异,网络运营商往往对其网络环境的安全要求不明确。因此,在一个站点上工作良好的防御规则可能在另一个站点上完全不可用。为了使防御规则适应不同的网络环境,我们引入了网络运营商可配置的安全约束。我们分别设计了白名单和阻断策略两种机制来保证网络的可用性和保持适当的块率。
阻断策略 该机制是网络运营商与XNIDS之间的交互通道。网络运营商可以根据自身的需求和知识,选择合适的阻断策略进行统一防御规则生成过程。我们进一步定义了三个主要选项:
该策略的目标是快速消除网络环境中的恶意主机。
其实就是根据生成规则细粒度向网络运营商提供了三种不同程度的选择。一种是放得比较宽,只阻止恶意流量;第二种是完全信任该模型自己的度量,流量主机都混合酌情阻止;第三种是最严的,容不得任何可疑行为,直接禁掉可疑的主机。
为了支持使用不同规则语法的各种防御工具,我们引入了统一的防御规则表示,作为解释和可操作防御规则之间的桥梁。
每个统一的防御规则由四个主要组件组成: ⟨ e n t i t y , a c t i o n , p r i o r i t y , t i m e o u t ⟩ ⟨entity, action, priority, timeout⟩ ⟨entity,action,priority,timeout⟩,描述了基于一组网络属性对网络流量子集执行的动作。实体是应用防御动作的目标(例如连接);动作是针对实体的所有网络流量执行的特定防御操作; t i m e o u t timeout timeout字段用于控制防御规则的有效时间。当一个网络流量实例命中多条统一防御规则时,只应用优先级最高的统一防御规则。在此场景中,优先级组件(默认情况下由增量顺序决定)可以显式指定操作顺序,以便从一组统一的防御规则中解决潜在的冲突。统一规则表示的语法见附录B。
实体、动作、优先级和超时限制等属性比较好理解就不说了。这些都是一条规则大概会包含的内容,通过在这些属性之间选择元素组合成一条条规则。比如drop某个IP或者MAC的流量包(阻断策略)、allow某个重要协议或者端口(白名单)。
生成统一防御规则
为了生成防御规则,我们需要根据防御规则范围和安全约束,用来自重要特性的匹配值填充相应的字段,从而创建实体。为了将防御规则作用域与防御动作联系起来,我们定义了两个基本操作: d r o p _ f l o w drop\_flow drop_flow和 d r o p _ h o s t drop\_host drop_host
为了配合不同的块策略,我们分别修改了操作。
最后,我们可以基于操作创建一个实体。例如,当使用 d r o p _ f l o w drop\_flow drop_flow操作生成多主机规则时,我们需要递归地创建流实体。为了防止规则冲突,我们将优先级设置为一个增量数字。 t i m e o u t timeout timeout参数可针对不同的部署环境进行配置。
实验部分就不看了
由于本人对深度学习接触不多,更不知道目前对于深度学习算法的解释方法发展如何,没法过多评价结果解释部分。就本文来看,解释方法原理不是很复杂,通过加权评估历史输入、通过聚类合并有关联的特征,这些方法都是比较容易想到的。而且对DL-NIDS进行解释,针对性有点过于强了,有一点点简单技术换个应用场景强行创新的嫌疑。
就生成统一规则这一部分来说的话,理论上是非常可行的。传统基于规则的入侵检测没法检测未知攻击,规则编写依赖人工参与。而这篇文章的方案能够直接根据解释结果生成通用的防御规则,进而做到主动响应,很大程度上解决了传统方案依赖人工和响应不及时的问题。此外,作者还提供了源码地址,将会在论文评审结束之后开源,值得关注一下。