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

一、概述

1.1 传统WAF的痛点

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

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

1.2 语义解析

从http载荷中提取的疑似可执行代码段,用沙箱去解析下看是否可以执行。

对于常见的shell命令cat来说,如果用shell的语法去理解,cat c’a’t c”’a”’t ””c’a’t””都是一回事。语义理解理论上可以解决部分正则漏报误报问题,不过也存在一些难点。比如http协议中哪部分是疑似可执行的代码段,http协议中如何截断和拼接才能保证正常解析,这些是比较麻烦的;另外sql语法、sehll语法、js语法还需要分别实现。

就Libinjection语义解析库的来看,就有很多情况的绕过和漏拦,并且它本身也使用到了规则,在传统WAF规则的基础上做了一层抽象,换了一种规则的判别方式。其实市面上已经出现了一些基于语义的WAF口号也很响亮,究竟前景如何目前还不是很明朗。

1.3 AI识别

有些AI的拥趸者,乐观地认为机器学习、深度学习是解决传统WAF痛点的终极解决方案,额…或许吧,或许只是现在还没发明出一个比较完美的AI解决方案。即便如此,单纯就机器学习为WAF赋能方面来看,还是有一片广阔天地。

在安全识别领域,人类利用AI技术,以数据为媒介,将构造出的具有区分能力的特征进行数学表达,然后通过训练模型的方式使之具备区分好坏的能力。

因此,模型的好坏最终取决于数据的质量和特征的好坏,它们决定了模型所能够达到的上界,而算法则是为了让模型去尝试不断触碰这个上界。

特征提取就是一个“挖掘大自然美好规律的过程”,某一类特征能够区分相对应具备该类特征的攻击类型,核心是这一类特征如何选取既能让模型有较好的区分能力,同时又具备良好的泛化能里和通用性,甚至是对未知攻击类型的区分能力。

相对于图像识别、语音识别等领域,AI在Web安全领域的应用起步略晚,应用也不够深彻。究其原因,机器学习对Web安全的识别准确度和可维护性尚不能完美替代传统的WAF规则;基于正则匹配的安全防护,所见即所得,维护即生效。因此,利用AI进行Web攻击识别若要提高其适用性需从以下几个方向入手:

  • 提高准确度

  • 优化逻辑,提高性能

  • 模型的高效自我更新迭代

  • 对未知攻击类型的识别
    二、Web攻击特征分析

先来看下攻击样例:

1.XSS跨站脚本

<script>alert(0)</script>

<img src=0 onerror=alert(0)>

2.SQl注入

+and+(select+0+from+(select+count(*),concat(floor(rand(0)*0),

union all select null,null,null,null,null,null,null,null#

3.命令执行

${@print(eval($_post[c]))}

exec xp_cmdshell('cat ../../../etc/passwd')#

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

威胁关键词特征:如

select,script,etc/passwd

不规范结构特征:如

${@print(eval($_post[c]))}

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

我们普遍的做法是将具有相似属性的字符泛化为一个状态,用一个固定的字符来代替。如:字母泛化为’N’、中文字符泛化为’Z’、数字泛化为’0’、分隔符泛化为’F’等。其核心思想是,用不同的状态去表达不同的字符属性࿰

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值