0x00 介绍
网络爬虫,常又被称呼为Spider,网络机器人,主要模拟网络交互协议,长时间,大规模的获取目标数据。
普通爬虫会从网站的一个链接开始,不断收集网页资源,同时不断延伸抓取新获取的URL以及相应的资源。 在对抓取目标内容结构分析的基础上,还会有目的性更强的聚焦型爬虫。
爬虫对网站的抓取,最直接的影响就是增加服务器负载,影响正常业务的使用。 但是仅仅限制爬虫的抓取频次是远远不够的。 更重要的是对网站资源的保护,比如房产类信息中的小区名称、户型、建造年代、房型图、视频、面积、总价、单价等。 同样的,在58招聘,黄页,二手车等业务线中,也存在着大量可用资源。 更有甚者,利用业务逻辑漏洞或系统漏洞,爬虫也可大量获取平台内用户、商户信息,平台信息,其间不乏敏感数据,从而导致涉及信息泄露的各种群体及法律相关事件。
0x01 搜索引擎
在网络中实际上也会存在大量的如Google,百度,360,微软Bing等搜索引擎的爬虫,一般这些搜索引擎都会对请求的浏览器UA进行定义,如百度PC端: PC UA:
Mozilla/5.0(compatible;Baiduspider/2.0;+http://www.baidu.com/search/spider.html)
众所周知,浏览器信息都可以被伪造和篡改,所以单凭UA头信息来识别是不够的,反查HOST是识别搜索引擎的一种方法,但由于一些搜索引擎无法查明HOST,所以单一的识别方法并不十分有效。 行为类的判别方法或许将更加重要。
Robots协议
这里顺便提一句Robots协议,Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol)。
即使是正规的搜索引擎的爬虫,也可能对一些网站造成负载压力,或网站并不期望搜索引擎抓取一些页面,这时Robots协议就会起到作用了。 文件“Robots.txt”将告诉不同的爬虫能访问的页面和禁止访问的页面,但是这个协议因为不强制爬虫遵守,而起不到防止爬虫的功能。
0x02 一些典型的爬取手段
在了解基本的爬取手段前,我们来看看,目前网络中,哪些人是爬虫的生产者(或搬运工)。
我们先来对他们进行一下分类:
Ø 学生,初级兴趣爱好者,初级爬虫程序员,数据分析师
Ø 数据公司
Ø 商业对手
Ø 失控的爬虫和搜索引擎
一些爱好者或者初级爬虫程序员,可能会通过网络搜集可用的脚本或者框架,其中python无疑是用的最多最广的,并且诞生了很多优秀的库和框架,如scrapy、BeautifulSoup 、pyquery、Mechanize等。
网络上也存在着大量的数据公司,他们提供数据交易平台,用户可以购买定制数据,定制爬虫等。
商业竞争对手也会互相抓取对方数据,获取对方平台资源或为己用,或用于进行商业数据分析,相信这里的爬虫工程师已不再是搬运工的水平,他们有着明确的目的性和专业技能。
除了搜索引擎外,网络上还存在着失控的爬虫,他们可能存在于一些云服务器上,也可能存在于被入侵的电脑,这些程序可能已无人管理,但是在持续运行着抓取程序。
下面介绍一些典型的抓取手段
设置频率
防爬一方面是为了防止服务器的高负载,那么那些真正想获取网站资源的爬虫,就不会轻易触碰这条底线,所以设置爬虫频率是一个不错的方法,爬虫会试探网站的规则,每爬取一次数据就会设置一定的SLEEP时间,这个时间都有可能是随机变化的,从而绕过平台策略。 不过换一个角度考虑,一天算下来,是86400秒,那么在时间有限又不能触碰网站策略的前提下,如何更高效的抓取数据呢? 办法应该还是挺多的,后文会略有涉及。
代理IP
因为网站的浏览很多情况下并不存在账户属性,所以拦截爬虫最直接的手段,就是对IP的封禁。 但是爬虫为了高效的获取网站数据,会使用多线程,分布式,多IP进行抓取,他们可以轻易的从网上获取免费的代理IP,如果担心代理IP的稳定性,可以购买付费代理IP库,现在很多数据网站,也提供了付费的代理IP服务。
代理IP只是一种手段,其实爬虫只要更换了IP,往往就可以继续抓取任务。 最简单的例子比如我们在浏览一些网站时,可能会触发网站的机器人挑战,用户在挑战成功后(例如正确输入了图片验证码的文字,或准确的滑动了滑块)就可以继续浏览。 对于爬虫来讲,这里要突破验证码,在验证码无法突破的情况下,就需要更换IP,哪怕是重启一下路由获取新的IP地址。
伪造浏览器
部分网站会针对浏览器(user-agent)做爬虫判断,对于一些初级爬虫,可能会存在非法的浏览器描述,比如python,phantomjs,pyspider等,这类UA会被直接封禁。 针对浏览器也会有计数类策略,但因为浏览器信息很容易被篡改,所以只要维护一个浏览器库随机调用,就会绕过计数类策略。
还有爬虫使用内置浏览器,比如一些数据公司发布的数据采集器,八爪鱼,火车头等,这已经不是简单的篡改浏览器信息,他们支持各种新的css渲染特性和js运行时语法,这种方式主要在对抗对浏览器特征的检查。
设备模拟
设备指纹作为目前反欺诈的利器,被很多企业使用,WEB端的JS或者APP端的SDK,用于唯一标识用户设备。 反抓取会利用IP结合设备指纹来制定一些策略,比如计数等。 我们先不谈设备指纹碰撞或者被破解的问题,单就指纹的申请,已经可以模拟真实设备信息进行批量请求,指纹入库等待后续使用。 所以单独针对指纹的策略,也不一定有效。
破解验证码
一般反抓取策略的初步拦截会以人机挑战为主,例如各种验证码,对于爬虫来讲,验证码的破解就会成为关键一环。 根据验证码形态的不同,破解方式会存在人工打码,机器算法识别,接入打码平台等。 这个环节的对抗也是相当激烈的,每一次的验证码升级,都有一定的时效性,只有不断升级挑战方式,才能有效的对抗爬虫。
网络协议参数的伪造
因为爬虫本身就是程序在模拟用户与网站的交互,所以理论上来讲,当模拟程度足够高时,很难区分机器行为。 初级爬虫可能会忽略cookie,refer等信息,高级一点的爬虫就会对cookie进行设置或者对refer进行伪造。
0x03 反抓取常用的对抗方法
针对一些典型的爬取方法,自然会有一些基本的对抗方法,下面简单描述一下常用的反抓取手段:
IP
最容易想到的就是针对IP的频率类或次数累积限制,但是针对抓取的特点,可以进一步进行细分,如结合时段,城市,网站页面类型,访问间隔,跨度,以及一些协议参数的变化情况等。
浏览器检测
对浏览器描述信息的检测是最基础的,在此基础上,可以进一步针对浏览器特性进行检查,基于浏览器的 UserAgent 字段描述的浏览器品牌、版本型号信息,对js运行时各个原生对象的属性及方法进行检验,观察其特征是否符合该版本的浏览器所应具备的特征,如Plugin,language,webgl,hairline等。
网络协议参数检测
进行基本的参数检测,如cookie,refer是否为空,是否合法,refer是否正确等。 同时需要结合用户终端进行判断,如区分WEB,APP,移动平板; 以及入口应用的特性进行判断,如主站,微信小程序,QQ及其他入口渠道等。
验证码
验证码产品提供多种人机识别方式,包括传统字符验证码,滑动拼图验证码,点选验证码,短信验证码,语音验证码等,以及结合生物特征的用户鼠标、触屏(移动端)等行为的行为验证技术。
设备指纹
APP设备指纹SDK,用户设备环境检测,如是否为模拟器,是否ROOT等; M端,PC端设备指纹JS环境检测等。
服务端检测请求设备指纹是否合法。
APP,M,PC端设备标记,保证设备唯一性的基础上进行如计数统计、行为分析等。
WEB端
JS埋点,JS网页加密,JS代码混淆等;
Ajax/Fetch异步请求,Noscript标签的结合使用;
CSS字体库等渲染,FONT-FACE拼凑式,BACKGROUND拼凑式,字符穿插式,伪元素隐蔽式,元素定位覆盖模式,IFRAME异步加载,Flash、图片或者pdf来呈现网站内容等;
假链接,如在网页多处放几个一个像素的随机图片名假链; 网页多处放几个随机不可见的假链; 网页多处放几个随机的前景色和背景色相同的假链; 网页多处放随机的位置超出屏幕的假链。
因为数据平台定向抓取会分析网站结构,所以定期更改模板算一个应对方法,其余还有例如动态变换html标签,网页使用压缩算法输出内容,网页内容不定时自动截断等;
假数据,返回假数据,实际在防守的同时对抓取方的一种进攻,对抓取方恨之入骨可采用此方法,问题是可能带来误伤,或者当抓取方发现被无情欺骗时,激起对方的愤怒进而升级抓取手段,甚至蓄意的破坏。 当然针对竞品公司,应该予以无情的打击。
行为分析
通过爬虫与正常用户的一些行为差别进行的分析,如:
对localStorage的访问,一般爬虫不存储localStorage数据,所以每次会访问;
正常用户访问会在较短时间里完成某一时间周期的总请求数的绝大部分,映射到总用户上,确定的一段时间里,正常用户访问的总页数会在某个量级时开始骤减;
识别通过修改参数如ID等的遍历行为。
API防刷
其实网络数据的交互都是通过API实现的,那么针对API接口的一些防护措施也能有效的控制爬虫,比如同IP/指纹对API接口频率调用设置阈值; 使用接口加密服务,多套算法随机使用,算法周期更新等; 根据API接口的深度,在触达路径进行数据埋点,识别请求路径等。
账户
一些网站信息必须用户登录后才可访问,这样反抓取除了通用方法外,还可以结合账户维度制定一些策略,比如同账户访问次数、频率限制; 同账户多设备限制; 同账户次数累积; 同账户多浏览器访问; 同账户访问城市切换,访问多业务线等。
安全画像
安全画像是58信息安全的一项重要服务,58自主研发的基于大数据的威胁情报系统,该服务是一个分析型安全防控管理系统,可基于风控系统实现统一的信息安全风控管理,帮助业务方实现事前的情报预警,事中的风险识别,事后的案件追溯,并与第三方数据有效集成,最终帮助业务线实现精准风险打击和智慧运营的效果。
在反抓取对抗中,我们也使用了IP类,设备类,账号类,手机号类等各种画像标签,效果显著。
0x04 58反抓取系统概要介绍
58反抓取SCF服务,为各业务线提供反抓取能力,接入成本低,时间短,目前日均处理接近10亿次请求,系统处理能力平日在每秒1W次左右,系统服务处理时间为单次0.5ms。 目前已基本覆盖58房产、招聘、黄页、二手车; 赶集房产、招聘; 安居客新房、二手房等各大业务线。
58反抓取系统示意图:
各接入方通过SCF服务接入反抓取系统; 策略管理系统为各接入方配置策略集; 分析单元执行策略集,并将命中目标送至判决单元进行后续处理; 通过实时监控和大数据平台进行数据分析。
反抓取策略管理系统,是整个反抓取能力的核心,是新反抓取技术方案,新能力,新风控工具的体现,目前可实现通用策略集的批量自动化配置。
反抓取实时监控系统,通过服务调用量监控,识别风险,并对异常流量进行预警。
风险的处罚,处罚的数据维度包括UID,cookie,IP,设备指纹等:
处罚的拦截方式包含通过,验证码(图片验证码、滑动验证码、短信验证码、语音验证码),返回假数据,拦截页中断操作等。
0x05 反抓取流量分析平台介绍
反抓取信息的重要来源,在于对流量的判断,包括流量变化,协议特征等。 通过对流量变化趋势,机器特征的识别和聚类,往往可以发现现存问题,并且可以通过对个别业务线的风险识别,进而对其他业务线进行预警,达到态势感知的效果。
基于nginx日志,针对反抓取进行的流量分析,可分析判断来自PC,M端,APP等恶意爬虫、自动机、模拟器等伪造真实用户发起的恶意机器流量; 可根据恶意机器流量判断攻击目标,攻击行为和攻击趋势,并进行恶意流量预警; 可对业务方进行流量热度排名,域名热度排名,接口热度排名等。
域名排名,可以了解当前时期域名流量热度以及时间内流量变化情况:
对域名下基本特征的分析,可以识别机器行为等:
流量离散度分析,在于判断流量的变化程度,并与历史情况进行比对
同时还有对IP,UA,URL的排名和具体分析。
后续将增加更细致的分析,更多维度的统计,并提供风险输出能力。
0x06 结语
上文主要介绍了一些爬虫的基本概念、爬取方法、对抗方法,以及概要介绍了58反抓取服务能力,在反爬虫领域,能做和要做的事情还有很多。 无论对于爬虫还是反爬虫,非常多新技术、新思路都在不断涌现,这就要求产品、技术人员,紧跟科技发展潮流,勇于突破固有思维,进行创新,并紧密结合公司业务场景,为公司发展保驾护航。