一、概述
随着网络空间的不断扩大,易受攻击的网站数量也随之增加。最新的行业统计结果[1]显示,由bot产生的网络流量占总数的37.2%,其中由恶意bot产生的流量约占65%。通过使用大量的恶意bot,攻击者可以发现并破坏这些易受攻击的网站,从而获取重要的用户信息。然而,由于合法的运营商(如搜索引擎等)会使用bot爬取网站上的信息,且大型研究项目也会使用bot收集数据,所以如何通过bot的行为对其进行判别变得十分重要。
本文介绍了一项使用浏览器指纹、TLS指纹和IP行为分析等方式识别良性/恶意bot的工作,这一工作来自于2021年IEEE symposium on security and privacy的一篇论文[2]。通过搭建Aristaeus平台,该工作共计接收到287K多个IP地址发出的请求,并从中标注了76396个具有明显恶意的bot。
二、Aristaeus平台的设计和部署
为了采集bot流量,作者构建了一个用来配置和管理honeysite的Aristaeus平台,如图1所示,由honeysite、日志收集系统和分析模块三部分组成。Aristaeus可以在公有云上配置任意数量的honeysite,广泛地收集访问者的信息,并使用多个指纹模块进行数据分析。平台的中央服务器会定期从honeysite提取收集到的信息,并将数据进行关联和聚合。为了确保honeysite上接收到的请求均来自bot,Aristaeus平台注册的均为未使用过的域名,且不对外公布,从而避免个人用户访问。为了吸引网络上的bot流量,Aristaeus选择了五个易受漏洞攻击的开源web应用程序(WordPress、Joomla、Drupal、PHPMyAdmin和Webmin)进行安装,并进行了为期7个月的大规模研究。为了避免不同实体使用同一地址而产生的误报,作者使用了浏览会话的概念将同一IP地址的请求进行分组。在收到一个IP的请求后会启动会话,如果该IP地址在30分钟后不再发出请求则结束会话。
图1 Aristaeus平台的整体架构
由于bot加载和执行某些资源(如支持的JavaScript API、CSS方面)的能力是由其底层平台和配置决定的,所以通过分析这些功能和行为可以识别bot的类型,具体的设计思路如图2所示。
1. Aristaeus平台可以使用Fingerprintjs2提取web浏览器的35个特征,包括屏幕分辨率、时区等,以构建bot的浏览器指纹特征。然而,基于JavaScript的指纹技术仅适用于支持JavaScript的bot,所以具有一定的局限性。此外,Aristaeus可以通过发送明显违背安全策略的请求来检查是否支持Content-Security-Policy 和X-Frame-Options,这也是首次将安全策略用于指纹识别。
2. Aristaeus使用fingeprinTLS库来收集TLS握手的指纹信息,包括每次连接时的TLS版本、加密套件和压缩长度等信息,使用TLS指纹可以实现在网络层对底层浏览器和操作系统的识别。由于FPTLS将所有发出过请求的客户进行TLS握手的细节都记录在日志中,所以这一方法可以全面地覆盖所有请求。
3. 在分析bot行为时,Aristaeus可以通过是否尊重robots.txt来区分bot的意图。恶意bot通常不会遵从robots.txt,并且会使用robots.txt来识别他们可能忽略的端点。为了消除网站缓存的影响,Aristaeus平台使用“no-cache”的请求头,而且会在URL的末端增加一个动态的cache-breaking令牌,这一令牌是将发出请求的客户IP地址加随机nonce进行加密得到的。因此当IP地址-1发出请求时,若提供的cache breaker指向IP地址-2,则表明出现了多个IP地址共享资源的情况。
图2 Honeysite的设计思路
三、Bot行为分析
根据bot发出请求的意图可以将其分为三类:良性、恶意和灰色。良性的bot不会发送未经请求的POST或利用漏洞进行攻击。相反,恶意bot则会向身份验证端点发送未经请求的POST或无效的请求,从而试图利用漏洞。除了上述两类之外,还有一些bot与honeysite的交互有限,因此无法清晰识别被标记为灰色。在实验期间,Aristaeus平均每个月会接收超过37K个请求,而在实验后期接收到的请求数目相对前期显著增加,如图3所示,经分析可知这一数据的增加是bot在对Word-Press的honeysite进行暴力破解。
图3 每日访问honeysite的新增IP数目(上)和请求数目(下)
此外,Aristaeus平台在实验后期每天通常会监测到约1000个新的IP地址。在Aristaeus平台监测到的IP地址中,共有76396个IP发出的请求为具有明显的恶意,但只有13%出现在当前流行的恶意IP黑名单中,这表明黑名单对此次实验发现的IP地址覆盖率较低。如图4所示,大多数恶意IP属于residential IP,即多数请求来源于感染的个人用户或使用代理的个人设备,这一操作可以避免被黑名单过滤。此外,69.8%的IP地址生存周期少于一天,并且不会再次发出请求,这表明bot会经常切换新的IP地址,也大大削弱了静态IP黑名单的效果。
图4 IP地址的分布情况
图5中列出了接收请求最多的端点及相应的web应用,颜色越深表示这类web应用接收相应请求的概率越高。通常情况下,与登录相关的端点接收的请求最多,如wp-login.php或/user/login等。接收请求的端点和web应用间存在一定的特异性,例如向Wordpress程序请求xmlrpc.php、wp-login.php的概率超过97%,远远超过其他四种web应用。这一具有应用程序特异性的攻击模式表明bot可以对应用进行指纹识别,从而发现易受攻击的web应用,而不是盲目地发出攻击载荷。
图5 常见的请求URI和web应用程序间关联的热图
值得注意的是,作者并未发现bot发出的请求违背robots.txt的现象,同时只有少于1%的bot违背了CSP。在1253590个含有效cache breaker的请求中,作者发现42.8%的客户端在使用与本机IP不同的cache breaker。这一结果表明,大多数bot的操作者首先使用爬虫从一组IP地址中识别出感兴趣的URL,然后将爬虫任务分配到不同的机器上,已知Googlebots也存在这种行为模式。值得注意的是,Aristaeus平台识别到的恶意bot并没有表现出这种行为模式,其cache breaker都与IP地址一一对应。上述分析结果表明bot采取的策略中已明确避免出现上述行为,因此这类方式难以有效地判定bot的行为意图。
四、识别恶意bot
作者在此次实验中共收到了347386个良性请求,占Aristaeus收到请求总数的1.3%。其中搜索引擎bot发出的请求约占84.4%。搜索引擎的bot会在用户代理字段明确表明自己的身份,而通过搜索引擎提供的反向DNS查找机制可以验证bot的来源,从而排除伪装成搜索引擎的恶意bot。学术和工业界的扫描约占0.12%,除此之外,还存在部分匿名的扫描器。
Aristaeus平台将请求并不存在的资源的无效请求标记为侦察行为,属于恶意请求。类似地,作者将向其他端点(如登录页)发出未经请求的POST请求的bot也标记为恶意。在此次实验中,共标记了15064878个恶意请求,占总请求数的57%。其中,来自47667个IP地址的13,445,474 个请求(50.8%)对Aristaeus网站的登录页面尝试进行暴力破解。
Aristaeus平台构建了web应用指纹识别、渗透测试、web后门利用、敏感文件扫描等多个指纹库,以识别bot发送请求的意图。作者使用BlindElephant[3]和WhatWeb47[4]两个开源指纹工具提供的文件路径,对Aristaeus服务器上的日志进行匹配,来判断是否为恶意bot在尝试进行指纹识别。常见的指纹识别请求的文件路径如表1所示。
表1 常用的指纹识别请求
此外,作者使用exploit-db.com上的数据生成了针对渗透请求的指纹库,然而由于漏洞报告的格式不同,所以基于公开的漏洞描述自动生成指纹较为困难。因此Aristaeus合并了一个人工辅助的自动化工具,这个工具可以从候选的指纹中选取URL供人工分析验证, 其中常用的渗透请求如表2所示。
表2 常用的渗透请求
Aristaeus平台使用了一个包含485个著名的PHP、ASP、Perl、Java和bash后门的列表来提取已知web后门的指纹[5],并使用两个web shell的存储库来扩充这一列表。这类web后门的指纹共匹配了6721个IP地址对42个web shell(如shell.php、cmd.php和up.php)的144082次请求。与此同时,由于部分恶意bot会猜测敏感文件的名称(如backup.sql)或利用管理员的行为(如使用.old后缀保存敏感文件的工作副本)和特定编辑器导致的泄漏(如vim留下的临时文件),所以Aristaeus平台使用当前流行的单词列表构建出了扫描敏感文件的指纹库。
根据访问的时长和频率,Aristaeus平台将bot分为单次扫描器和全网范围扫描器。在honeysite的访问者中,约50.04%的IP地址只发送了一个请求,没有表现出明显的恶意,因此被划分为单次扫描器。由于浏览器bot通常会发出后续请求,因此这些只发出一次请求的bot大概率是在搜集数据或搜索特定内容。本次实验中观测到的全网范围扫描器包括Masscan (21.4%) and Zgrab (73.1%),这些请求背后的意图尚不清楚。此外,作者还观察到一个IP地址使用不同的用户代理或者不同的自动化工具生成HTTP请求头的现象。这一现象可能是良性bot使用NAT或者代理造成的,但也可能是恶意bot在进行欺骗行为,其中UA的改变包括更改操作系统、浏览器版本等。
为了进一步识别bot的请求中是否存在欺骗行为,作者使用了TLS指纹进行分析,例如Chrome,Chromium和基于Chromium的浏览器都支持GREASE这一与TLS握手相关的IETF标准,而这一标准并未在Firefox, Edge, and Safari浏览器中使用,因此这一特征可以用于区分这两类浏览器。Aristaeus平台接收到的所有请求中仅包含558个唯一的TLS指纹,这表明大多数请求都是由少量的工具和TLS库生成的。为了将bot的TLS指纹与已知工具相匹配,作者手动提取了Gohttp客户端、wget、curl、Chrome、Firefox、Opera、Edge和IE浏览器的TLS指纹。表3中列出了目前流行的工具中包含了14个工具的113个指纹,这些工具产生了9879326个请求,覆盖率为97.2%。在28011个自称是Googlebot的请求中,作者通过TLS指纹匹配到了27833个(99.4%)真正的Googlebot。对于那些声明为Googlebot但未能生成预期的反向DNS结果的bot,则被标记为恶意bot。通过将请求中声明的用户代理与其TLS指纹进行匹配,也可以发现进行身份欺瞒的bot,在30233个自称是Chrome Firefox的客户端中有27860个(86.2%)欺瞒了其真实身份,这些bot大多是基于简单的HTTP库和命令行工具构建的。
表3 常见的TLS指纹分布
五、结论
在这一工作中,Aristaeus总共记录了76000个IP地址发出的请求,其中87%的地址都未被当前流行的IP黑名单覆盖,因此使用静态黑名单很难达到较好的过滤效果。根据分析结果可知,恶意bot发送的请求主要包括暴力破解凭证、对web应用程序进行指纹识别、渗透测试、扫描可能存在的敏感文件等,并且会快速实施对最新报告漏洞的探测和攻击。为了判断bot的真实身份是否与其声明一致,Aristaeus通过识别TLS、JavaScript等指纹发现多数自称是浏览器的bot实际是通过Python和Go实现的,其中TLS指纹在识别恶意bot方面具有非常好的效果。Aristaeus平台不仅帮助研究人员深入了解了当前滥用恶意bot的现状,还提供了一个动态的bot流量数据集,有助于设计更精确的bot检测算法。在后续的研究工作中,有望通过实现对bot的动态响应收集更多的攻击和渗透的payload,尤其是对只进行了初步探测的单次扫描器而言。
参考文献
参考文献
[1] Imperva, “Bad bot report 2020: Bad bots strike back.” [Online]. Available: https://www.imperva.com/resources/resource-library/reports/2020-bad-bot-report/
[2] Li X, Azad B A, Rahmati A, et al. Good bot, bad bot: Characterizing automated browsing activity. 2021 IEEE symposium on security and privacy (sp). IEEE, 2021: 1589-1605.
[3] “The blindelephant web application fingerprinter.” [Online]. Available:https://github.com/lokifer/BlindElephant
[4] “Whatweb.” [Online]. Available: https://github.com/urbanadventurer/WhatWeb
[5] O. Starov, J. Dahse, S. S. Ahmad, T. Holz, and N. Nikiforakis, “No honor among thieves: A large-scale analysis of malicious web shells,” in Proceedings of the 25th International Conference on World Wide Web, ser. WWW ’16, 2016, p. 1021–1032.
内容编辑:创新研究院 员 苗
责任编辑:创新研究院 陈佛忠
本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。