Web攻击检测机器学习深度实践
副标题[/!--empirenews.page--]
一、概述 1. 传统WAF的痛点 传统的WAF,依赖规则和黑白名单的方式来进行Web攻击检测。该方式过分依赖安全人员的知识广度,针对未知攻击类型无可奈何;另一方面即使是已知的攻击类型,由于正则表达式天生的局限性,以及shell、php等语言极其灵活的语法,理论上就是可以绕过,因此误拦和漏拦是天生存在的;而提高正则准确性的代价就是添加更多精细化正则,由此陷入一个永无止境打补丁的漩涡,拖累了整体性能。 针对上述问题,目前主流安全厂商的研究方向大体分为两个阵营:语义解析和AI识别。 2. 语义解析 从http载荷中提取的疑似可执行代码段,用沙箱去解析下看是否可以执行。 对于常见的shell命令cat来说,如果用shell的语法去理解,cat c’a't c”’a”’t ””c’a’t””都是一回事。语义理解理论上可以解决部分正则漏报误报问题,不过也存在一些难点。比如http协议中哪部分是疑似可执行的代码段,http协议中如何截断和拼接才能保证正常解析,这些是比较麻烦的;另外sql语法、sehll语法、js语法还需要分别实现。 就Libinjection语义解析库的来看,就有很多情况的绕过和漏拦,并且它本身也使用到了规则,在传统WAF规则的基础上做了一层抽象,换了一种规则的判别方式。其实市面上已经出现了一些基于语义的WAF口号也很响亮,究竟前景如何目前还不是很明朗。 3. AI识别 有些AI的拥趸者,乐观地认为机器学习、深度学习是解决传统WAF痛点的终极解决方案,额…或许吧,或许只是现在还没发明出一个比较完美的AI解决方案。即便如此,单纯就机器学习为WAF赋能方面来看,还是有一片广阔天地。 在安全识别领域,人类利用AI技术,以数据为媒介,将构造出的具有区分能力的特征进行数学表达,然后通过训练模型的方式使之具备区分好坏的能力。 因此,模型的好坏最终取决于数据的质量和特征的好坏,它们决定了模型所能够达到的上界,而算法则是为了让模型去尝试不断触碰这个上界。 特征提取就是一个“挖掘大自然美好规律的过程”,某一类特征能够区分相对应具备该类特征的攻击类型,核心是这一类特征如何选取既能让模型有较好的区分能力,同时又具备良好的泛化能里和通用性,甚至是对未知攻击类型的区分能力。 相对于图像识别、语音识别等领域,AI在Web安全领域的应用起步略晚,应用也不够深彻。究其原因,机器学习对Web安全的识别准确度和可维护性尚不能完美替代传统的WAF规则;基于正则匹配的安全防护,所见即所得,维护即生效。因此,利用AI进行Web攻击识别若要提高其适用性需从以下几个方向入手:
二、Web攻击特征分析 先来看下攻击样例: XSS跨站脚本:
SQl注入:
命令执行:
可以看出Web攻击请求的特征大体上分为两个方向:
1. 基于状态转换的结构特征提取 我们普遍的做法是将具有相似属性的字符泛化为一个状态,用一个固定的字符来代替。如:字母泛化为’N’、中文字符泛化为’Z’、数字泛化为’0’、分隔符泛化为’F’等。其核心思想是,用不同的状态去表达不同的字符属性,尽可能让在Web攻击中具有含义的字符与其他字符区分开来,然后将一个payload转换成一连串的状态链去训练出一个概率转换矩阵。 常用的模型是隐马尔可夫链模型。如果用黑样本训练HHM模型,可以实现以黑找黑的目的,这样的好处是误判较低;用白样本训练HHM模型,则能发现未知的攻击类型,但同时会有较高的误判。在利用收集好的训练样本测试的时候发现,针对部分XSS攻击、插入分隔符的攻击变种这类在请求参数结构上存在明显特征的Web攻击参数,该方式具备良好的识别能力;而对无结构特征的SQL注入或者敏感目录执行无法识别,这也完全符合预期。 然而,该方式存在一个知名的缺陷:从请求参数结构异常的角度去观察,结构体异常不一定都是Web攻击;结构体正常不保证不是Web攻击。 (1)结构异常xss攻击 ——> 识别
(2)结构异常变形xss攻击 ——> 识别
(编辑:甘孜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |