探索如何防御恶意bot流量
互联网安全公司 Imperva Incapsula 公布的《2016年机器流量报告》(Bot Traffic Report 2016)显示恶意 bot 流量( bot :即“机器人”流量,即自动化程序流量)占整体网络流量的比例高达 28.9% 。
恶意 bot 流量造成的业务网站平台服务不可用、用户体验降低、网站漏洞安全问题、业务故障等问题,导致企业数据被爬、接口被刷、CC攻击导致服务不可用等,给企业带来极高的风险及难以估计的损失。
那么为了保障网站平台的正常运行,企业要如何防御恶意 bot 流量?
一.运营人员采用的方案
作为一个网站的运营技术人员,当网站受到恶意 bot 的攻击时,例如爬虫或者扫描类行为,一般有以下 2 种解决方法:
查看请求日志,如 apache 的 access 日志,人工扫描分析日志内容并发现异常,可识别出恶意 bot 。
限制源 IP 的请求速度。方案简单,但对阈值的设置要求很高,不适用于以下 4 种场景:
1)秒杀、抢购等业务导致的瞬间请求激增;
2)代理模式,如大多数高校机构以及手机运营商的网关;
3)存在大量的资源文件的页面,会导致请求该页面时的关联请求激增;
4)复杂业务本身会提供一些接口给其他服务,速率方面的浮动范围很大。
因此在没有理想阈值的条件下,限制源 IP 请求速度会导致较高的误报率,相比恶意 bot 带来的危害,高误报引起的后果对企业而言或许更加严重。
l 钓鱼。正常的 bot 会请求 robots.txt 文件,然后遵循 robots.txt 描述进行后续的 bot 行为(robots.txt是一种君子协议,对允许和不允许 bot 访问的内容进行标记)。借用此机制,如果在robots.txt中将一个不存在的url标注为拒绝,然后在网页中,内嵌这个隐藏的url连接,隐藏意味着human不会点击到这个连接,但是恶意的bot有很大概率会访问。事情变得简单很多,只需要在日志里过滤访问这个url的ip即可。但是这种防御方法仅能对抗低级的恶意bot,攻击者绕过此检测机制,仅需一行代码控制bot不请求上面提到的那个url即可。
l IP 白名单。攻击者一般会将 ua 伪造成正常的搜索引擎的 ua 或者普通的浏览器的 ua 。白名单机制对前面一种伪造方式有效果。建立起一套 ua 和 ip 的白名单库,即可识别出伪造的ua。但是成本会提高很多,需要维护ua和ip的白名单库。而且对第二种伪造的普通的ua无效。
优点:成本低廉,操作简单,能抵御绝大多数低级的恶意 bot 。
缺点:适用性较差。
二.技术人员采用的方案:
作为技术人员,采用的方法则多依赖技术特征的局限性生效,一般有以下 5 种技术解决方案:
1. cookie支持
bot 是一个网络程序,如果这个程序写的简单,它往往不支持cookie,但 cookie 是浏览器支持的特性。利用这个特性可以通过在服务端写入 cookie ,然后检查请求所带来的 cookie 的方式来查证是否是bot,但由于让 bot 支持 cookie 的时间成本很低,所以这个方法的效果比较有限。
2.javaScript支持
由于 cookie 门槛低,所以大家想到的就是浏览器支持的 js 技术。如果一个普通的 bot 程序支持 js ,问题则会复杂很多,但也可以实现
3.设备指纹技术(浏览器指纹)
设备指纹技术会计算关于浏览器的 50+ 以上属性参数的 hash 值,甚至更高级的收集客户端的动作,比如鼠标点击信息、返回等。近期流行的画布 (canvas) 指纹技术,基本含义就是调用设备接口生成一个复杂定义的图像,由于硬件配置、软件版本等因素的影响,生成的图像在像素级别存在一定区别,以此可作为一种指纹。
bot 支持 js ,但不是浏览器,或者 bot 的 ua 和指纹不匹配,这种都很容易识别。但对于一些高级的 bot ,这个方案也有局限性:
l 很多 bot 作为浏览器插件方式工作,或者通过修改浏览器而实现,因此同样会返回正确的设备指纹来伪造成一个真实的浏览器或者移动终端;
l bot 篡改指纹信息返回,服务器端无法校验指纹信息的伪造性。这种机制很容易被开发 bot 的团队绕过,因为目前 ssl 体系主要用的是服务器的身份校验,绝大多数网站还没使用 https ,如果引入非对称体系的加密通信,或客户端的身份校验,在现阶段还无法实现。当然,如果有一天客户端身份都能被验证,安全问题就简单多了;很多公司拥有专门的爬虫团队和反爬虫团队,用于爬取竞争对手数据和反竞争对手爬自己的数据;
l 设备指纹冲突概率较高,代理机器很多是云主机或者其他方式统一装机的机器。完全相同的硬件,操作系统版本,软件版本导致算出来的指纹是一样的,因此会使得误报率增高。
4.行为分析技术
上面提到,bot 会使用浏览器插件模拟人的请求行为,例如鼠标的点击等,单纯的判断鼠标是否点击不足以判断恶意 bot 。恶意 bot 最终都会请求 web 服务。恶意表现的是在“行为”上,行为是一个抽象概念,因此难度也很高。
恶意 bot 访问目标的 url 资源,以及它提交的这些参数构成本质上的“恶意行为”,上面提到的很多恶意 bot 的技术都是为此目标服务的。越来越多的移动终端,对服务请求的表现本身就已经不是浏览器行为,如果不使用行为分析技术,这些都会触发误报。
行为分析技术一般都是安全类公司的实现方案,具体方案上存在一定区别。有简单分析客户点击节奏、时间等属性的,也有比较复杂的学习模型。作为乙方公司,一般难以实现到行为分析模型这个级别,主要是成本和技术上的考量。
互联网安全公司 Imperva Incapsula 公布的《2016年机器流量报告》(Bot Traffic Report 2016)显示恶意 bot 流量( bot :即“机器人”流量,即自动化程序流量)占整体网络流量的比例高达 28.9% 。
恶意 bot 流量造成的业务网站平台服务不可用、用户体验降低、网站漏洞安全问题、业务故障等问题,导致企业数据被爬、接口被刷、CC攻击导致服务不可用等,给企业带来极高的风险及难以估计的损失。
那么为了保障网站平台的正常运行,企业要如何防御恶意 bot 流量?
一.运营人员采用的方案
作为一个网站的运营技术人员,当网站受到恶意 bot 的攻击时,例如爬虫或者扫描类行为,一般有以下 2 种解决方法:
查看请求日志,如 apache 的 access 日志,人工扫描分析日志内容并发现异常,可识别出恶意 bot 。
无奈人生安全网
限制源 IP 的请求速度。方案简单,但对阈值的设置要求很高,不适用于以下 4 种场景:
1)秒杀、抢购等业务导致的瞬间请求激增;
2)代理模式,如大多数高校机构以及手机运营商的网关;
3)存在大量的资源文件的页面,会导致请求该页面时的关联请求激增;
4)复杂业务本身会提供一些接口给其他服务,速率方面的浮动范围很大。
因此在没有理想阈值的条件下,限制源 IP 请求速度会导致较高的误报率,相比恶意 bot 带来的危害,高误报引起的后果对企业而言或许更加严重。
l 钓鱼。正常的 bot 会请求 robots.txt 文件,然后遵循 robots.txt 描述进行后续的 bot 行为(robots.txt是一种君子协议,对允许和不允许 bot 访问的内容进行标记)。借用此机制,如果在robots.txt中将一个不存在的url标注为拒绝,然后在网页中,内嵌这个隐藏的url连接,隐藏意味着human不会点击到这个连接,但是恶意的bot有很大概率会访问。事情变得简单很多,只需要在日志里过滤访问这个url的ip即可。但是这种防御方法仅能对抗低级的恶意bot,攻击者绕过此检测机制,仅需一行代码控制bot不请求上面提到的那个url即可。
l IP 白名单。攻击者一般会将 ua 伪造成正常的搜索引擎的 ua 或者普通的浏览器的 ua 。白名单机制对前面一种伪造方式有效果。建立起一套 ua 和 ip 的白名单库,即可识别出伪造的ua。但是成本会提高很多,需要维护ua和ip的白名单库。而且对第二种伪造的普通的ua无效。
优点:成本低廉,操作简单,能抵御绝大多数低级的恶意 bot 。
缺点:适用性较差。
二.技术人员采用的方案:
作为技术人员,采用的方法则多依赖技术特征的局限性生效,一般有以下 5 种技术解决方案:
1. cookie支持
bot 是一个网络程序,如果这个程序写的简单,它往往不支持cookie,但 cookie 是浏览器支持的特性。利用这个特性可以通过在服务端写入 cookie ,然后检查请求所带来的 cookie 的方式来查证是否是bot,但由于让 bot 支持 cookie 的时间成本很低,所以这个方法的效果比较有限。
2.javaScript支持
由于 cookie 门槛低,所以大家想到的就是浏览器支持的 js 技术。如果一个普通的 bot 程序支持 js ,问题则会复杂很多,但也可以实现
3.设备指纹技术(浏览器指纹)
设备指纹技术会计算关于浏览器的 50+ 以上属性参数的 hash 值,甚至更高级的收集客户端的动作,比如鼠标点击信息、返回等。近期流行的画布 (canvas) 指纹技术,基本含义就是调用设备接口生成一个复杂定义的图像,由于硬件配置、软件版本等因素的影响,生成的图像在像素级别存在一定区别,以此可作为一种指纹。
bot 支持 js ,但不是浏览器,或者 bot 的 ua 和指纹不匹配,这种都很容易识别。但对于一些高级的 bot ,这个方案也有局限性:
l 很多 bot 作为浏览器插件方式工作,或者通过修改浏览器而实现,因此同样会返回正确的设备指纹来伪造成一个真实的浏览器或者移动终端;
l bot 篡改指纹信息返回,服务器端无法校验指纹信息的伪造性。这种机制很容易被开发 bot 的团队绕过,因为目前 ssl 体系主要用的是服务器的身份校验,绝大多数网站还没使用 https ,如果引入非对称体系的加密通信,或客户端的身份校验,在现阶段还无法实现。当然,如果有一天客户端身份都能被验证,安全问题就简单多了;很多公司拥有专门的爬虫团队和反爬虫团队,用于爬取竞争对手数据和反竞争对手爬自己的数据;
l 设备指纹冲突概率较高,代理机器很多是云主机或者其他方式统一装机的机器。完全相同的硬件,操作系统版本,软件版本导致算出来的指纹是一样的,因此会使得误报率增高。 本文来自无奈人生安全网
4.行为分析技术
上面提到,bot 会使用浏览器插件模拟人的请求行为,例如鼠标的点击等,单纯的判断鼠标是否点击不足以判断恶意 bot 。恶意 bot 最终都会请求 web 服务。恶意表现的是在“行为”上,行为是一个抽象概念,因此难度也很高。
恶意 bot 访问目标的 url 资源,以及它提交的这些参数构成本质上的“恶意行为”,上面提到的很多恶意 bot 的技术都是为此目标服务的。越来越多的移动终端,对服务请求的表现本身就已经不是浏览器行为,如果不使用行为分析技术,这些都会触发误报。
行为分析技术一般都是安全类公司的实现方案,具体方案上存在一定区别。有简单分析客户点击节奏、时间等属性的,也有比较复杂的学习模型。作为乙方公司,一般难以实现到行为分析模型这个级别,主要是成本和技术上的考量。
本文来自无奈人生安全网