加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘孜站长网 (https://www.0836zz.com.cn/)- 运维、物联设备、数据计算、智能推荐、云管理!
当前位置: 首页 > 运营中心 > 建站资源 > 经验 > 正文

Web攻击检测机器学习深度实践

发布时间:2019-06-26 09:58:11 所属栏目:经验 来源:月亮与六便士
导读:一、概述 1. 传统WAF的痛点 传统的WAF,依赖规则和黑白名单的方式来进行Web攻击检测。该方式过分依赖安全人员的知识广度,针对未知攻击类型无可奈何;另一方面即使是已知的攻击类型,由于正则表达式天生的局限性,以及shell、php等语言极其灵活的语法,理论
副标题[/!--empirenews.page--]

一、概述

1. 传统WAF的痛点

传统的WAF,依赖规则和黑白名单的方式来进行Web攻击检测。该方式过分依赖安全人员的知识广度,针对未知攻击类型无可奈何;另一方面即使是已知的攻击类型,由于正则表达式天生的局限性,以及shell、php等语言极其灵活的语法,理论上就是可以绕过,因此误拦和漏拦是天生存在的;而提高正则准确性的代价就是添加更多精细化正则,由此陷入一个永无止境打补丁的漩涡,拖累了整体性能。

针对上述问题,目前主流安全厂商的研究方向大体分为两个阵营:语义解析和AI识别。

Web攻击

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跨站脚本:

  1. <script>alert(0)</script>  
  2. <img src=0 onerror=alert(0)> 

SQl注入:

  1. +and+(select+0+from+(select+count(*),concat(floor(rand(0)*0),  
  2. union all select null,null,null,null,null,null,null,null# 

命令执行:

  1. ${@print(eval($_post[c]))} 
  2. exec xp_cmdshell('cat ../../../etc/passwd')# 

可以看出Web攻击请求的特征大体上分为两个方向:

  • 威胁关键词特征:如
    1. select,script,etc/passwd 
  • 不规范结构特征:如
    1. ${@print(eval($_post[c]))} 

1.  基于状态转换的结构特征提取

我们普遍的做法是将具有相似属性的字符泛化为一个状态,用一个固定的字符来代替。如:字母泛化为’N’、中文字符泛化为’Z’、数字泛化为’0’、分隔符泛化为’F’等。其核心思想是,用不同的状态去表达不同的字符属性,尽可能让在Web攻击中具有含义的字符与其他字符区分开来,然后将一个payload转换成一连串的状态链去训练出一个概率转换矩阵。

常用的模型是隐马尔可夫链模型。如果用黑样本训练HHM模型,可以实现以黑找黑的目的,这样的好处是误判较低;用白样本训练HHM模型,则能发现未知的攻击类型,但同时会有较高的误判。在利用收集好的训练样本测试的时候发现,针对部分XSS攻击、插入分隔符的攻击变种这类在请求参数结构上存在明显特征的Web攻击参数,该方式具备良好的识别能力;而对无结构特征的SQL注入或者敏感目录执行无法识别,这也完全符合预期。

然而,该方式存在一个知名的缺陷:从请求参数结构异常的角度去观察,结构体异常不一定都是Web攻击;结构体正常不保证不是Web攻击。

(1)结构异常xss攻击 ——> 识别

  1. var _=i[c].id;u.test(_)&&(s=(s+=(__=_.substring(0))+"#@#").replace(/|/g," "))}""!==s?(ss=s.substring(0,s.length-0),_sendexpodatas 

(2)结构异常变形xss攻击 ——> 识别

  1. /m/101/bookdetail/comment/129866160.page?title=xxx<marquee onstart="top[`ale`+`rt`](document['cookie'])"> 

(编辑:甘孜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读