阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

教你用 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:018883
用户头像

发布了 138 篇内容, 共 74.4 次阅读, 收获喜欢 190 次。

关注

评论 1 条评论

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

STM32配合W5500网卡连接MQTT服务器

DS小龙哥

6 月 优质更文活动

PoseiSwap 即将在 6 月 18 日开启 IDO,白名单申请者超 14000 人

鳄鱼视界

PoseiSwap 即将在 6 月 18 日开启 IDO,白名单申请者超 14000 人

西柚子

大牛一次带你彻底搞懂Spring核心容器的动态代理机制与SpringAOP

互联网架构师小马

PoseiSwap 即将在 6 月 18 日开启 IDO,白名单申请者超 14000 人

威廉META

一次性搞懂springweb服务构建轻量级Web技术体系:Spring WebMVC

互联网架构师小马

Kubernetes Scheduler原理分析

穿过生命散发芬芳

k8s 6 月 优质更文活动

某大厂工作3年,被劣驱良了。。。

Jackpop

软件开发人员必须阅读的20本书

越长大越悲伤

架构 微服务 软件开发

Spring核心容器:AOP代理机制对性能的影响案例分析

互联网架构师小马

【Netty】「萌新入门」(六)ByteBuf 的基本使用

sidiot

Java 后端 Netty 6 月 优质更文活动

PoseiSwap 即将在 6 月 18 日开启 IDO,白名单申请者超 14000 人

EOSdreamer111

难得可贵的Spring依赖注入实战经验,是程序员就该吸收一下!

互联网架构师小马

Java spring

革新DeFi:Hover赋能Cosmosphere的金融自由

股市老人

【Netty】「萌新入门」(七)ByteBuf 的性能优化

sidiot

Java 后端 Netty 6 月 优质更文活动

还没毕业,就“被毕业”,太惨了!

Jackpop

MegEngine 动态执行引擎 Imperative Runtime 架构解析

MegEngineBot

深度学习 开源框架 MegEngine

PoseiSwap 即将在 6 月 18 日开启 IDO,白名单申请者超 14000 人

股市老人

PoseiSwap 即将在 6 月 18 日开启 IDO,白名单申请者超 14000 人

大瞿科技

语音社交源码知识语音房间功能的实现

山东布谷科技

源码 软件开发 源码搭建 语音社交软件 语音厅平台搭建

横看Dubbo-微服务治理之流量防护

K

原创 微服务 dubbo sentinel

3年经验程序员终于把Spring核心容器的面向切面与Spring AOP搞懂了

互联网架构师小马

Easysearch 跨版本兼容性测试,还原 Elasticsearch 各版本快照数据

极限实验室

搜索引擎 elasticsearch INFINI Labs easysearch 快照恢复

Nestjs+Vue实现阿里云OSS服务端签名直传

昆吾kw

Vue OSS 文件上传 nest

深入理解Spring核心容器面向切面概念和实践:AOP实战经验

互联网架构师小马

入职新公司,水土不服该怎么破?

Jackpop

PoseiSwap 即将在 6 月 18 日开启 IDO,白名单申请者超 14000 人

BlockChain先知

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