颠覆传统安全方式,AI重新定义Web安全(3)
对于所有行业来讲,获取样本(标注样本)都不容易,而安全领域尤为困难。如对人脸识别的标注,初中生甚至小学生就可以完成,但对于一次安全的威胁事件,就需要极具经验的安全人员才可以完成,两者的成本差距十分巨大。 某个注入攻击 如上图所示,这个注入攻击经多次复杂编码,非专业人事很难进行样本标注。所以目前在通用场景下,安全领域的深度学习落地并不多,主要原因也是很难获取海量的标注数据。 02、安全领域的场景特点更加明显 判断攻击的标准会随着业务特点的不同而不同。以最简单的 CC 攻击为例,600 次/ 分钟的访问对于某些企业可能意味着破坏性攻击,但对其他企业则属于正常访问范围。 所以,即便有大量的标注样本,某一企业的标注样本可能对于其他企业毫无用处,这也是导致安全领域应用机器学习较为困难的另一个重要原因。 03、针对传统的文本型攻击,传统思维认为简单的特征工程,甚至直接的正则匹配更有效 我们把 Web 攻击分为行为型攻击和文本型攻击两类:
当特征的维度空间较低,且有些维度的区分度很高时,通过简单的线性分类器,就可以实现不错的准确率。 例如我们简单的制定一些 SQL 注入的正则规则,也可以适用于很多场景。但是,这样的传统思维却忽略了召回率问题,实际上也很少有人知道,通过 SQL 注入的正则规则,可以达到多少的召回率。 同时,在某些场景,假如业务的正常接口通过 JSON 传递 SQL 语句,那么这种基于正则规则的分类器就会产生极高的误判。 04、传统安全人员并不了解机器学习 大量传统安全公司的安全人员精于构造各种漏洞探测、挖掘各种边界条件绕过,善于制定一个又一个的补丁策略,却并不擅长 AI 机器学习方面的内容,这也说明了这种跨界人才的稀缺和重要。 机器学习重新定义 Web 安全 如何解决安全领域的样本标注问题呢?机器学习分为两大类:
01、无监督学习 无监督学习无需事先准备大量标注样本,通过特征聚类就可以将正常用户和异常用户区分开,从而避免大量样本标注的难题。 聚类的方式有很多,如距离聚类、密度聚类等,但其核心仍是计算两个特征向量的距离。 在 Web 安全领域,我们获得的数据往往是用户的 HTTP 流量或 HTTP 日志,在做距离计算时,可能会遇到如下问题。 例如:每个维度的计算粒度不一样,如两个用户的向量空间里 HTTP 200 返回码比例的距离是两个 float 值的计算,而 request length 的距离则是两个 int 值的计算,这就涉及粒度统一归一化的问题。 在这方面有很多技巧,比如可以使用 Mahalanobis 距离来代替传统的欧式距离,Mahalanobis 距离的本质是通过标准差来约束数值,当标准差大时,说明样本的随机性大,则降低数值的权值。 反之,当标准差小的时候,说明样本具有相当的规律性,则提高数值的权值。 无监督的聚类可以利用 EM 计算模型,可以把类别、簇数或者轮廓系数(Silhouette Coefficient)看成 EM 计算模型中的隐变量,然后不断迭代计算来逼近最佳结果。 最终我们会发现,正常用户和异常聚成不同的簇,之后就可以进行后续处理了。当然,这只是理想情况,更多情况下是正常行为与异常行为分别聚成了很多簇,甚至还有一些簇混杂着正常和异常行为,那么这时就还需要额外的技巧处理。 02、学习无监督聚类的规律 无监督聚类的前提是基于用户的访问行为构建的向量空间,向量空间类似: [key1:value1,key2:value2,key3:value3...] 这里就涉及两个问题:“如何找到 key”以及“如何确定 value”。 找到合适 key 的本质是特征选择问题,如何从众多的特征维度中,选择最具有区分度和代表性的维度。 为什么不像某些 Deep Learning 一样,将所有特征一起计算?这主要是考虑到计算的复杂度。请注意:特征选择并不等同于特征降维,我们常用的 PCA 主成分和 SVD 分解只是特征降维,本质上 Deep Learning 的前几层某种意义上也是一种特征降维。 特征选择的方法可以根据实际情况进行。实验表明在有正反标注样本的情况下,随机森林是一个不错的选择。如果标注样本较少或本身样本有问题,也可以使用 Pearson 距离来挑选特征。 最终,用户的访问行为会变成一组特征,那特征的 value 如何确定?以最重要的特征——访问频率为例,多高的访问频率值得我们关注?这需要我们对于每个业务场景进行学习,才能确定这些 key 的 value。 (编辑:ASP站长网) |