写点什么

教你用 5 步检测出企业网络中的恶意爬虫

  • 2021-02-24
  • 本文字数:3272 字

    阅读完需:约 11 分钟

教你用5步检测出企业网络中的恶意爬虫

恶意爬虫(bot)在企业网络的安全漏洞中起到至关重要的作用。这已经不是什么秘密。爬虫经常被恶意软件利用,在企业网络中传播。但检测和移除恶意爬虫却很复杂,这是由于操作环境中的许多日常进程,诸如软件更新,用的都是爬虫。


直到最近,一直都没有什么有效的方式让安全团队能区分出“好爬虫”和“坏爬虫”。开源源码和社区规则声称它们可以辨别爬虫,但收效甚微;误报太多。最后,安全分析专家会因为追踪分析“好爬虫”触发的无关紧要的安全警报而疲于奔命。


在 Cato,我们保护客户网络时也面临相同问题。为解决这个问题,我们发明了一种新方法,在我们的安全即服务中实施的多维度方法论,可以比单纯使用开源源码或社区规则多鉴别 72%以上的恶意事件。


最重要的是,你可以在自己的网络中采用类似策略。您的工具将会是任何网络工程师的交易手段:访问您的网络,像分接传感器一样捕获流量,保留足够的磁盘空间来存储一周的数据包。下面是如何分析这些捕获的数据包,以便更好地保护你的网络。

辨别恶意爬虫和流量的五项原则


在这篇文章中,我们将引入多维度的方法来分辨恶意爬虫。仅凭一条规律或许并不能让我们准确辨别出恶意爬虫,但综合多条规则并加以分析利用,将让这些爬虫无所遁形。方法并不难懂,是常见的逐步缩小狩猎范围,从人们日常产生的会话缩小到危害网络安全的那部分会话。


具体步骤如下:


  • 区分人类与爬虫

  • 区分浏览器与其他用户客户端

  • 找出浏览器中的爬虫

  • 分析 payload

  • 确定目标威胁程度


下面,让我们一步一步地看:

根据对话频率区分人类与爬虫


爬虫的本质决定了它们会更倾向于与对象进行连续不断的会话。这是由于它们需要接收命令、发送 KeepAlive 信号,或者是渗出数据。区分爬虫与人类行为的第一步便是要揪出这些与目标机械性的重复对话。


我们需要找到那些与多个目标有规律且不间断对话的主机,过往经验告诉我们,收集一周左右的流量便足以判断这些客户端与目标间对话的本质。从统计学的角度来看,这些会话越是有规律,他们越有可能是由爬虫生成的(见图一)。



图中所示为今年五月中旬时收集的爬虫对话频率,对话产生的流量均匀分布,基本可以确定是爬虫流量。

区分浏览器与其他用户客户端


仅仅是分辨出爬虫寄居的主机并没有太大的用处,如我们之前提到的,大多数的主机都可能产生爬虫流量,因此我们还需要搞清楚网络中客户端的通信类型。一般来说,良性爬虫存在于浏览器之中,而恶意爬虫则相反。


操作系统中有很多种客户端和库都会产生流量,像是“Chrome”、“WinINet”,以及“Java Runtime Environment”都是客户端类型。乍一看这些客户端产生的流量可能大同小异,但通过一些方法,我们还是可以将他们区分开来的。


首先是应用层的头。因为大多数防火墙都会在设置里允许 HTTP 和 TLS 访问任意 IP,许多爬虫都会利用这些协议与他们的目标进行对话。我们只需要辨别客户端设置中的 HTTP 和 TLS 特征群组,便可轻易揪出在浏览器外运行的爬虫。


每一个 HTTP session 都有请求头来定义请求,以及服务器端的应对方法。这些头的序列、值,都是在生成 HTTP 请求的时候就设定好的(见图二)。类似的,TLS 的 session 属性,例如加密套件、扩展列表、ALPN(应用层协议协商)和椭圆曲线等,这些都是在初始的 TLS 消息中确定的。这条初始的消息又被称作“ClientHello”消息,也是未经过加密处理的。根据 HTTP 和 TLS 属性种类的不同进行聚类,可以在一定程度上将爬虫进行分类。


举例来说,如果我们捕获到了加密套件不相符的 TLS 流量,那么我们基本就可以确定这些流量是在浏览器外生成的了,这种非人为行为也就意味着是爬虫在制造流量。



图中的例子是某条由 Windows 加密库生成的消息的头。通过查看与设置不相符的 seq、key 以及 value 可以辨别出爬虫的存在。

找出浏览器中的爬虫


判定恶意爬虫的另一种方法则是通过观察 HTTP 头中的一些特定信息:网络浏览器的 HTTP 头通常都是规范且清晰的。在正常的浏览 session 中,点击浏览器中的链接后生成的请求头中会包含 Referer,标明这个链接的来源。爬虫流量则相反,直接访问链接的请求头中 Referer 会为空,部分恶意访问甚至可以仿造 Referer。因此,在所有信息流中都长得一模一样的请求,大概率是爬虫流量。



图中显示的是在浏览 session 中包含 Referer 的头的示例


User-Agent(UA)这个字符段代表了程序在发起对话请求,一些诸如 fingerbank.org 这类的第三方服务会将 UA 里的程序版本号与已知版本相对应,并试图通过这条信息检测异常爬虫。


举例来说,最新版本浏览器会在 UA 字段使用“Mozilla/5.0”,低于这个版本的 Mozilla 或者缺失这条信息的请求基本意味着会是异常爬虫。有信誉的浏览器产生都流量不会不携带 UA 值。

Payload 分析


但是,我们并不希望异常爬虫的检查被局限在 HTTP 和 TLS 协议上,所有我们需要将更多的协议纳入考虑范围。以 IRC 协议为例,IRC 上的爬虫为僵尸网络贡献了不少有生力量。我们可以通过观察在已知端口上,使用固定未知协议的现有恶意软件样本,利用应用识别来标记恶意爬虫。


而流量的方向(入方向或出方向)在鉴别爬虫时同样有重要价值。直连到互联网的设备通常会被暴露在扫描操作中,因此,我们可以将这些爬虫看作是入站扫描器。另一方面,出站扫描行为则代表了该设备已被扫描器感染。感染的后果则是目标可能会被袭击,降低企业的 IP 地址信誉。


下图显示了在某一时间段内的流量图,这样的活动轨迹很可能是扫描机器人的杰作。这种类型的图可以通过计算流量/秒来进行数据分析。


高频率出站扫描活动示例

目标分析:了解你的目的地是什么


在了解过从客户端-服务器的通信频率以及客户端类型判断恶意爬虫后,我们将引入另一判定维度:爬虫的目标或者说目的地。判定恶意爬虫的目标需要考虑两种因素:


  • 一是目标的信誉

  • 二是目标的受欢迎度


目标信誉可以从各种渠道中收集来的经验,判断一个域受到恶意攻击的可能性而计算得出。信誉的判定需要由第三方服务给出,或者是通过收集用户反馈的受到攻击的报告得出。


然而,通常情况下,仅仅是凭借着对目标信誉、URL 信誉的判断,并不足以标记恶意爬虫。每个月都要有数以百万计的新域名注册成功,在没有充足背景调查下的域名信誉判定系统并不能很好地给出该域名是否可信的判断,由此带来的高误判率也证明了这一点。

总而言之


将文中的方法总结后,可以发现,如果 session 满足以下条件,其为恶意爬虫的可能性很高:


  • 由计算机生成而非人为

  • 产生于浏览器之外,或是带有异常元数据的浏览器流量

  • 与低人气目标沟通,目标如果被标记为恶意或未归类,那么将更可疑。正常或良性爬虫不应当与低人气目标对话。

练习:揭开仙女座恶意软件的网络面纱


通过综合这几种判定手段,我们可以找出网络中的各类危险因素。光说不练假把式,下面我们将通过“仙女座爬虫”这个经典例子来练习。“仙女座”是其他恶意软件的常用下载器,而通过文中介绍的四种手段进行数据分析,我们将揭露“仙女座”爬虫的真面目。

目标声誉


多家高信誉的网站均判断“disorderstatus.ru”为恶意域名,他们给这个域名打上的标签大多是:“已知感染源”,“僵尸网络”之类。然而,仅凭如此,我们并不能直接判定与该域名对话的主机感染了仙女座病毒:用户可能只是访问过这个网站而已。更何况,这个 URL 大概率只会被归类为“未知”或“非恶意”。

目标受欢迎度


访问某个目标的用户万中无一,这个“一”很不寻常,也为该贡献了“低人气”分数。

对话频率


在一周的数据收集中,我们注意到了客户端与目标在连续三天内均有流量产生。重复的对话意味着爬虫的存在。



用户与 disorderstatus.ru 在三天内均有持续一小时的 client-target 对话流量产生

头分析


请求头中的“User-Agent”值为“Mozilla/4.0”,无效的服务器版本信息意味着该 UA 多半是爬虫制造。


图中是我们在与 disorderstatus.ru 对话时捕获的 HTTP 头。值得注意的是,在我们捕获的所有请求中,没有一个头包含“Referer”。另外,UA 值为“Mozilla/4.0”。这两点都指向了 Andromeda 会话。

总结


IP 网络中的爬虫检测正在逐渐成为检测恶意软件的基本组成部分之一,虽然不易,但我们相信,通过文中介绍的这五种手段的组合变种,爬虫检测将会更加有效。


原文链接:


https://www.catonetworks.com/blog/how-to-identify-malicious-bots-on-your-network-in-5-steps

2021-02-24 11:019865
用户头像

发布了 239 篇内容, 共 163.0 次阅读, 收获喜欢 227 次。

关注

评论 1 条评论

发布
用户头像
专家老师您好,我是Ryan Ding来自亮数据。我们是品牌方,寻求付费商业合作。请加我微信联系 ryanding-brd
2024-03-18 11:19 · 美国
回复
没有更多了
发现更多内容

ipfs矿机最新消息?星际联盟矿机怎么样?

区块链 fil ipfs矿机 星际联盟

万万没想到,阿里巴巴被挂后,还能获得内推名额,五面口碑一举拿下offer

Java 编程 程序员 架构 面试

iOS底层面试题(下篇)

程序员 面试 ios开发

一条SQL语句执行得很慢的原因盘点

北游学Java

Java MySQL

解决方案| 全民抗“灾”- 实时音视频在应急指挥场景的应用

anyRTC开发者

音视频 WebRTC 指挥调度

幸福的人在当下就活出了幸福的样子|靠谱点评

无量靠谱

被转载10W次的:Java小白系统资料和职业规划路线

java小李

java基础

最新流行的6大优秀DevOps工具

java小李

java 14 puppeteer

详解TCP协议与UDP协议的区别

Linux服务器开发

网络协议 Linux服务器开发 Linux后台开发 TCP协议 UDP协议

左晖:凭一己之力改变了一个行业

石云升

思维模型 诚信 7月日更

当面试官问到:《MySQL数据库的锁机制》该如何拿分?

java小李

spring Boot Starter

GitHub标星139K的:“嵌入式Linux系统开发教程”

白亦杨

这款开源软件绝了!1分钟即可打造了一个”黑客范“终端~

编程菌

Java 编程 程序员 项目 计算机

数字化成潮流,运维为啥也热了?

ToB行业头条

科技互联网

使用Docker在无网络环境下搭建深度学习环境

基于 Java Spring Security 的关注微信公众号即登录的设计与实现ya

哈德韦

spring security 微信公众号 Apache Pulsar SSO

如何借用第三方APM工具, 为移动应用保驾护航

APM

《MyCat数据库的基础配置及使用》

java小李

java 14 mycat

技术解码 | GB28181协议简介及实践

腾讯云音视频

腾讯云 ffmpeg 流媒体 视频监控系统

他是因为什么,能在半年内从菜鸟学生成为大厂收割机?

Java架构师迁哥

FBI 警告称,网络犯罪分子可能以 2021 年东京奥运会为目标!

郑州埃文科技

《分享几道高频 Redis 高频面试题,面试不用愁》

java小李

Redis Stream

四面字节跳动,终于拿下1-2级offer :Redis+分布式+微服务+算法+网络

Java 程序员 架构 面试 计算机

深度融合,云管理平台助推政府实现“最多跑一次”改革

BoCloud博云

云计算 云管理平台 云管理

编辑器看看

strive

编辑器

“普通本科Java程序员,如何五年存够80万买房?就靠这选择!”

java小李

java 14

MySQL高频面试题的灵魂拷问

java小李

MySQL

降低“美丽成本”,区块链助力化妆品行业数字化转型

旺链科技

区块链 数字化转型 化妆品行业

Git提交信息规范化

admin

git flow git cherry-pick Git Commit git 规范

架构训练营模块3课后作业-学生管理系统详设文档

喻高咏        

教你用5步检测出企业网络中的恶意爬虫_安全_Avidan Avraham_InfoQ精选文章