WAF实现扫描器识别
- 目前安全测试的软件越来越多,也越来越强大,越来越多的人成为[黑客],今天在网上看到一个文章说拦截wvs的扫描,勾起了我写这篇文章的欲望。
因为公司的三大业务之一就有一个云waf,每天拦截的日志里面,有将近90%的请求是扫描器发出,waf接收到请求会解析数据包,然后过一遍规则,过完成百上千条规则必定对性能有一定的影响。如果能识别出来是人还是扫描器的请求,就可以在这方面节省很大的资源。
下面的分析介绍只针对web安全扫描器。
目前全能型的扫描器主要是wvs(Acunetix Web Vulnerability
Scanner)、AppScan、WebInspect,国内的像aisec、bugscan等等…还有国内那些老安全厂商的扫描器就不说了,主要提一
下像wvs这种使用率比较高的。另外还有目录文件型的扫描器、注入工具(类似sqlmap、Havij)等等。
扫描器识别主要从以下几点来做:
一、 扫描器指纹(head字段/请求参数值等)
二、 单IP+ cookie某时间段内触发规则次数
三、 隐藏的链接标签(<a>)
四、 Cookie植入
五、 验证码验证
六、 单IP请求时间段内Webserver返回http状态404比例
一、扫描器指纹(head字段/请求参数值等)
目前最常见的手法就是收集扫描器的指纹特征来做识别,不同的扫描器都有自己的一些特征,比如发出的请求会加一些特定的head 字段,测试漏洞的请求参数的值会带上自己扫描器的名称等。
下面通过抓网络数据包来看常见扫描器的指纹特征:
wvs(Acunetix Web Vulnerability Scanner):
下面是我抓到的一个wvs的请求
12345678910111213GET /help/website-performance-settings/x HTTP/1.1Pragma: no-cacheCache-Control: no-cacheReferer: http://www.anquanbao.com/helpAcunetix-Aspect: enabledAcunetix-Aspect-Password: 082119f75623eb7abd7bf357698ff66cAcunetix-Aspect-Queries: filelist;aspectalertsCookie: xxxxxxxxxxxxHost: www.anquanbao.comConnection: Keep-aliveAccept-Encoding: gzip,deflateUser-Agent: Mozilla/5.0(Windows NT6.1; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/28.0.1500.63Safari/537.36Accept: */*请求头里面有三个很明显的标志:
Acunetix-Aspect: enabled
Acunetix-Aspect-Password: 082119f75623eb7abd7bf357698ff66c
Acunetix-Aspect-Queries: filelist;aspectalerts
另外在请求的参数值,比如URL跟POST数据中都有很明显的acunetix_wvs_security_test特征,下图是我从waf拦截中调取到的结果。

根据以上抓取到的特征,我们可以把这个作为wvs的一个指纹,在waf中进行过滤。
Appscan:
同样的,appscan也有自己的一些特征,如下

Bugscan:
关于Bugscan,我咨询了一下作者,作者给了XSS模块的扫描源码我看了下,主要特征是:
-->'"><H1>XSS@HERE</H1>,另外还有一些特征就不一一列举。

注意:并不是所有的请求都会带有扫描器的特征,比如下面的一个包也是wvs发出的,但是没有带上面我们说的特征,扫描器指纹特征只能抵挡住一部分的扫描,但是我们可以利用这些信息识别出扫描器然后干掉IP等。

二、单IP+ cookie某时间段内触发规则次数
根据某个IP+ cookie某时间段内触发waf拦截规则的次数大于设定的某个阀值,比如在20秒内,某个IP+cookie触发waf拦截规则10次。
数据证明如下图:

另外还可以根据IP+user angent等,或者更多维度。
三、隐藏的链接标签等(<a>)
扫描器的爬虫会把页面里面的所有链接都抓出来去做漏洞探测,特别是现在基于webkit一类的扫描器,能够渲染css跟js,可以爬出更多的链接测试。
下面贴出一个百度百科关于webkit的介绍
WebKit 是一个开源的浏览器引擎,与之相对应的引擎有Gecko(Mozilla Firefox 等使用)和Trident(也称MSHTML,IE 使用)。同时WebKit 也是苹果Mac OS X 系统引擎框架版本的名称,主要用于Safari,Dashboard,Mail 和其他一些Mac OS X 程序。WebKit 前身是 KDE 小组的 KHTML,WebKit 所包含的 WebCore 排版引擎和 JSCore 引擎来自于 KDE 的 KHTML 和 KJS,当年苹果比较了 Gecko 和 KHTML 后,仍然选择了后者,就因为它拥有清晰的源码结构、极快的渲染速度。Apple将 KHTML 发扬光大,推出了装备 KHTML 改进型 WebKit 引擎的浏览器 Safari。
隐藏的标签链接是指人看不见的链接,如<a href="http://www.cnseay.com/"></a> 形式,人是点击不到的,只有软件能够匹配出这个地址,我们新建一个网页,抓扫描器数据包测试。<html> <head> <title>test</title> </head> <body> <a href="http://localhost/1.php?id=1"></a> </body> </html>
通过抓取wvs的数据包可以看到,扫描器很快的捕获了http://localhost/1.php?id=1这个链接,并进行漏洞测试。

当然如果在正常情况下也给所有用户植入这种代码是非常令人反感的,用户体验也会大打折扣,可以在前期先做一些条件限制,比如固定时间段内触发waf拦截规则到达预定阀值,再给这个用户单独植入一个隐藏链接。
四、Cookie植入
Cookie植入的方式跟上面讲的隐藏链接植入大同小异,实现原理是:当一个IP+user angent在固定时间段内触发规则的次数到达一定阀值,给发起请求的这个人植入一个cookie,如果下次再请求没有携带这个cookie,则说明是扫描器。
cookie植入有利有弊,优点是更直接,种下cookie马上就能根据下一个请求判断。缺点是这个方式在基于webkit的扫描器上面行不通。
五、验证码验证
验证码验证的方式跟上面的cookie植入也大同小异,不过是把cookie换成了验证码的方式,这种方法也被用于防CC攻击。
六、单IP请求时间段内Webserver返回http状态404比例
这种方法主要用来应对探测敏感目录和文件的扫描器,这类的扫描器都是基于字典文件,通过对字典内的url进行请求获得的返回信息来进行判断目录或者文件的是否存在。
如果某个IP在一段时间内请求频率过快,这时候waf可以进行收集一段时间内webserver返回404状态数目,到达一定阀值后进行封杀。
看过上面几种方法的介绍,应该大部分人都会想到两个问题,
1. 一大拨人使用同一个公网IP,怎么判断谁是攻击者?
2. 一大拨人使用同一个公网IP,怎么才能保证不误杀?
第一,对于怎么判断攻击者,当然不能单纯的从一个IP判断,一般一个完整的http请求都会带有
user angent、cookie等信息,我们可以结合ip+user angent来判断请求的人,或者再加一个cookie的维度,当然在给这个攻击者植隐藏链接、cookie或者验证码之前,需要它触发一些规则阀值,以免影响用户体验。
第二,说到怎么保证不误杀,也就是怎么去封杀的问题,关键在于怎么二次判断攻击者,目前最好的方法也是利用ip+user
angent,在判断是扫描器请求后,根据IP+user
angent进行封杀,另外也是靠cookie封杀,关键在于是携带某个cookie键的封杀掉还是不带的封杀掉。PS:如果误杀太大,如果刚好哪个妹纸在线看小电影到激情片段,这是多伤人妹纸的心啊
WAF实现扫描器识别的更多相关文章
- 深入理解SQL注入绕过WAF和过滤机制
知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...
- 深入了解SQL注入绕过waf和过滤机制
知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 ...
- 深入理解SQL注入绕过WAF与过滤机制
知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...
- WAF指纹探测及识别技术<freebuf>
Web应用防护系统(也称:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HT ...
- WAF指纹探测及识别技术
Web应用防护系统(也称:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HT ...
- WAFW00F waf识别工具 源码学习
我实习工作的第一个任务根据已有的java waf识别工具 实现了一个python的waf识别工具 代码结构非常乱 仅仅达到了能用的水平. 顶头svp推荐这个项目当时我已经写好了开始用了自己的 稍微看了 ...
- Scanners-Box:开源扫描器大全 2017-04-22
Scanners-Box:开源扫描器大全 2017-04-22 Scanners-Box是一个集合github平台上的安全行业从业人员自研开源扫描器的仓库,包括子域名枚举.数据库漏洞扫描.弱口令或信息 ...
- sql注入100种姿势过waf(一):waf 了解
仅供学习交流如果你有更好的思路可以一起分享,想一起学习的进我主页 首先WAF(Web Application Firewall),俗称Web应用防火墙,主要的目的实际上是用来过滤不正常或者恶意请求包, ...
- WAF绕过的各种姿势
主要思路: 根据WAF部署位置,针对WAF.WEB服务器.WEB应用对协议解析.字符解析.文件名解析.编码解析以及SQL语法解析的差异,绕过WAF,将payload送至服务器执行. 常用绕过方法: 1 ...
随机推荐
- Codeforces 707C Pythagorean Triples(构造三条边都为整数的直角三角形)
题目链接:http://codeforces.com/contest/707/problem/C 题目大意:给你一条边,问你能否构造一个包含这条边的直角三角形且该直角三角形三条边都为整数,能则输出另外 ...
- POJ-2594
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 7035 Accepted: 2 ...
- Django如何使文件在django自动执行
1. Django admin源码中 admin.py from django.contrib import admin # Register your models here. 在admin源码中 ...
- Python五子棋的小程序
代码是在开源中国上看到的,源代码网址:http://www.oschina.net/code/snippet_2365439_48010 需要安装graphics模块,下载地址:http://mcsp ...
- 【转】Jmeter-----函数引用和函数重定向
详见内文
- 使用JAXB读写xml
1.注解 在Java模型中的创建与 xml 文件对应的节点和属性需要用注解来表示 @XmlRootElement 作用:将一个Java类映射为一段XML的根节点参数: name 定义这个根节点 ...
- 关于在C#中对函数重载理解
函数重载是个什么概念,才接触的这个概念的时候我也是完全昏了,还在自己看看了书后就理解了.那什么是函数重载呢?我个人理解的是在同一个作用域下有多个同名的函数,但是他们的形参的类型是不同的,或者参数个数是 ...
- lvm笔记
安装LVMyum -y install lvm* 创建PV# pvcreate /dev/md5 /dev/sdf1 /dev/sdg 查看PV# pvdisplay 还可以使用命令pvs 和pvsc ...
- ThinkPHP 多数据库自动连接设计
配置文件 database.php <?php return array( 'dbname1'=>'mysql://root:root@localhost/dbname1#utf8', ' ...
- centos6.5 宽带连接
Centos默认不会建立本地连接,至少在虚拟机里是这样,自己新建一个就行了:1.cd /etc/sysconfig/network-scripts/2.vi ifcfg-eth0 DEVICE=eth ...