最近,在一篇2020年文章(Dos and Don'ts of Machine Learning in Computer Security)中读到了机器学习在网络安全领域的局限性,或者说注意事项,这里来简单总结一下。
实际上,在尝试使用机器学习解决某些网络安全问题时,例如题目描述中谈到的恶意样本识别,网络恶意流量识别,风控安全、渗透测试、二进制代码分析等时,机器学习有时确实不是那么的尽如人意。
为什么会不尽人意呢?是什么导致了这些问题?
这篇文章里,对过去10年的安全顶会[1]中的30篇Paper做了调查,证实了一些普遍性的问题,其可能导致一系列的性能和解释性问题,进而影响我们对于安全问题的理解。
文章首先将ML解决安全问题的流程划分为六大步骤
掐头去尾,主要的问题出现在中间的四步中:
这个问题在于,如果收集的数据不足代表底层安全问题的真实数据分布,如果没有有效地表示输入空间甚至遵循相似分布,则无法从训练数据中汲取任何有意义的结论。
安全问题的一大难点在于数据的获取特别具有挑战性,而且通常需要使用不同质量的多个来源,因此会导致严重的样本偏差问题。
分类任务需要的人工标注标签是不准确的,不稳定的,或错误的,严重影响了基于学习的系统的整体性能。对于许多相关的安全问题,例如检测网络攻击或恶意软件,通常无法获得正确的标签,从而导致了先有鸡还是先有蛋的问题。
一旦收集到足够的数据,就可以训练基于学习的安全系统。 这个过程包括从数据预处理到提取有意义的特征和构建有效的学习模型。 在这些步骤中的每一步都可能引入缺陷或偏差。
机器学习通常的做法是在生成学习模型之前,将收集的数据拆分为单独的训练和测试集。
尽管拆分数据看起来很简单,但测试数据(或其ta通常不可用的背景信息)会以许多微妙的方式影响训练过程,从而导致数据泄露。常见的泄露类型有如:训练集、时间顺序、选择性规则导致数据泄露。这会导致模型实际部署和在测试集上的表现差异较大。
训练集泄露指的是可能在训练时混入了测试集的信息导致性能异常,这包括确定有用特征、参数和学习算法的准备工作。
感兴趣可以读读下面这篇回答:
时间顺序指的是在训练时忽视了数据内部的时间特征,例如针对恶意软件数据集进行k-folds验证时,训练集中可能包括每个恶意软件家族的样本,但是对于老的软件家族来说,属于新家族的恶意软件相关数据应是未知的,因此不应该将未来的知识整合进来进行训练。如果忽略数据内的时间相关性,则会发生时间侦听。 这是一个常见的陷阱,因为许多与安全相关的问题的底层分布都在不断变化。
选择性泄露指的是在训练前将一些数据通过规则过滤掉,这种做法基于实践中不可用信息的数据清理。 一个例子是基于完整数据集(即训练和测试)的统计数据去除异常值,这些数据通常在训练时不可用。
更详细的划分见下图:
安全任务时常会使用具有不可解释的特征空间来构建复杂学习模型,从而导致产生了错误的因果关系。
例如下面这个:
考虑一个网络入侵检测系统的例子,其中数据集中的大部分攻击将会来自某个网络区域,因此该模型可能会学习检测特定的 IP 范围,而不是一般的攻击模式。
同样,检测系统可能会从与恶意活动无关的合成攻击中提取工件。
机器学习方法的最终参数在训练时并不完全固定,而是间接依赖于测试集。
在整个学习过程中,通过改变超参数来生成不同的模型是常见的做法,一般会选取在测试集上性能最好的模型。虽然这种设置看起来很合理,但它仍然存在偏见。例如,使用未校准的评价指标/标准或使用测试集指导参数设定可能会产生误导性的结果,进而导致在实际环境下的差异性,这被称为是参数选择的偏差。
评估是在不使用或使用有限的基线方法的情况下进行的,因此,无法证明对现有技术和其他安全机制的改进。
首先,科学进步的核心在于能够证明一种新方法在给定的利益衡量标准下优于现有技术。在选择基线时,尽管在其他领域取得了巨大的进步,但在机器学习中,没有一种通用的算法可以超越所有其它的方法。因此,只能为所提出的方法提供结果,或者仅将其与密切相关的方法进行比较,而没有提供足够的背景来评估其影响。
其次,过于复杂的学习方法不仅会增加过拟合的可能性,还会增加运行时开销、攻击面以及部署时间和成本。有时,简单分类器在漏洞和网络入侵检测等任务方面也可能优于最先进的深度学习模型。
最后,机器学习不一定能够用来解决某些安全问题,或者不一定是解决某些安全问题的唯一方法以及最合适的方法。
性能测量不考虑应用场景的约束,例如不平衡的数据或保持低假阳性率的需要。但在实际场景的部署中,需要考虑许多复杂的因素。
就安全而言,这类问题最常见的在于实际场景中恶意样本的极少量,导致了严重的数据不平衡问题,使得模型实际检测性能大大降低。例如下图,仅从ROC曲线来看,模型性能表现出色,但精度问题却暴露了分类器的真实水平。
关于这一类问题可以了解下小样本学习的内容:
在解释性能度量时忽略了大的类数量的不平衡,从而导致对性能的过高估计。例如,99%的真阳性和1%的假阳性情况下,如果我们考虑1:100的分类比率,这实际上相当于每99个真阳性对应100个假阳性。
还有个有趣的例子来自 @桔了个仔 ,详见回答:
以学习为基础的系统仅在实验室环境中进行评估,而不讨论其实际局限性。
许多基于学习的系统的不安全性仅在实验室环境中进行评估,夸大了它们的实际影响。一个常见的例子是仅在多样性有限且不考虑非平稳性的封闭环境中评估检测方法。
例如,大量的网站指纹攻击仅在封闭的环境下进行评估,时间跨度有限。同样,大多数基于学习的恶意软件检测系统在现实环境中也没有得到充分的检验。
没有考虑机器学习的安全性,使系统暴露于各种攻击,如中毒和逃避攻击。
对抗性学习的先前工作已经揭示了,机器学习本身在工作流程的所有阶段引入的相当大的攻击面。例如,成员推理攻击(membership inference attacks)破坏了模型的隐私,允许攻击者通过利用深度神经网络中的过度拟合来泄露训练示例的信息;预处理攻击(preprocessing attacks)针对特征提取步骤向系统注入任意输入,从而影响之后的步骤;中毒和后门攻击篡改数据以修改模型的行为;模型窃取允许近似模型,泄漏知识产权并加速进一步攻击;最后,还有对抗样本攻击,允许对手控制最终预测的输入。
因为写这篇回答久了,就有点太过无聊了
所以,我扔了很多好康的图片上去
打扰阅读的话
我很抱歉
最后——再来一张