APP下载

一种非干扰的动态防御网络机器人方法*

2019-11-06黄晔华

火力与指挥控制 2019年9期
关键词:密钥网页页面

黄晔华,朱 倩

(1.无锡工艺职业技术学院信息中心,江苏 无锡 214200;2.江苏大学计算机科学与通信工程学院,江苏 镇江 212001)

0 引言

网站通过提供信息搜索、社交和网络游戏等丰富的网页服务来吸引用户。然而攻击者可以伪装成普通用户,利用网络机器人对这些网站发起攻击,消耗宝贵的资源,如内存和带宽。文献[1]中指出51%的网站流量是“非人为”的,主要是来自各种各样的自动黑客工具和网络机器人。

XRumer、Magic Submitter 和SENuke 等网络机器人已经被开发出来,用于在黑帽搜索引擎优化(Search Engine Optimization,SEO)技术中创建反向链接,在网络服务器上创建内容,通过识别特殊HTML 元素的含义和功能来批量注册免费服务。其中,XRumer[2]作为最强大和最受欢迎外链工具之一,可以被用来自动注册虚假论坛帐号,创建浏览历史,发送垃圾邮件,提升搜索引擎排名等[3-4]。XRumer 还能够规避论坛管理员常用的垃圾邮件预防机制(例如:验证码机制)。

现有的解决办法主要有两种类型,一是基于机器学习技术,通过检测机器行为特征来识别网络机器人[5]。Shin et.al.[4]研究了论坛垃圾邮件的特点,并开发了轻量级的特性来检测垃圾邮件。Brewer etal.[6] 使用链接混淆来检测和防御网络机器人。Gundy[7]等人通过比较博客文章中所使用的语言模型、评论和相关的页面来检测评论垃圾信息。二是验证码技术。然而,安全性并不是设计验证码的唯一关注点,所有的验证码系统都是人类互动形式,需要用户的参与。目前的验证码系统可以分为基于文本的验证码[8-9]和基于图像的验证码[10-11]。基于文本的验证码系统要求用户识别字母或数字,复杂的验证码会带来较差的用户体验。由于智能网络机器人可以击败基于文本的验证码系统,于是设计了基于图像的验证码,验证码的鲁棒性取决于挑战人工智能的难度,难度越高,抵御网络机器人的复杂性越大,对合法用户识别带来的困难也相应增加,可用性越低,用户体验性更差。

为了在不影响用户体验的前提下有效防御网络机器人,借鉴移动目标防御(Moving Target Defense,MTD)的思想,设计了一种非干扰的动态防御方法(Non-Intrusive Dynamic Defense System,NIDDS)。MTD 作为美国近年来提出的网络空间“改变游戏规则”的革命性技术之一,受到了美国白宫的高度重视。它完全不同于以往的网络安全研究思路,它并不追求建立一种完美无瑕的系统来对抗攻击,而是构建多样的、不断变化的评价和部署机制及策略[12]。这种不断变化的机制和策略可以增加攻击者执行探测和攻击的不确定性和复杂性,有效限制脆弱性暴露及被攻击的机会,提高系统的鲁棒性[13]。具体到网络应用来说,网络机器人需要通过识别HTML 元素来获取相应参数的语义,达到伪造正常用户请求的目的。NIDDS 主要针对这些能够通过模拟真实用户行为(填写HTML 表单并点击提交按钮)向远程服务器自动提交大量请求的网络机器人,通过随机化HTML 元素来阻止网络机器人对其识别,从而达到防御目的。这一点与验证码技术不同,它对用户是完全透明的,不需要合法用户通过人为操作来验证自己。

1 问题描述

网络机器人是一种针对特定网站浏览行为的自动化程序。对很多网站来说,它们已经成为一个巨大的威胁,造成很多安全问题,比如:网络钓鱼和垃圾邮件,消耗服务器资源,降低用户体验。以下来介绍NIDDS 所针对的网络机器人及其主要威胁。

1.1 威胁模型

当前,网络机器人主要分为固定式机器人和自学式机器人两大类。固定式机器人是用固定的脚本语言写好的,发送一些简单和固定的HTTP 请求,一旦目标网络应用改变其内容时,这类机器人一般就会失效。社交网络上的给用户反复发送垃圾邮件的跨站点脚本蠕虫就属于这类机器人。自学式机器人比固定式更高级、更智能、更复杂。它可以通过分析目标网络应用的变化来自我进化,还可以通过模仿用户浏览行为来发送数据提交请求(包含用户信息,比如用户身份验证请求包含用户名和密码)。XRumer 就是一种典型的自学式机器人,它可以收集HTML 表单旁边的用户名,数据类型和标签文本,然后填充这些输入表格,向服务器提交相应的HTTP 请求。本文所防御的主要是以上两种网络机器人,尤其是第2 种。

1.2 网络机器人的威胁

网络机器人主要有以下几种攻击方式:1)大量注册/登录帐户[14];2)滥发评论。利用网络机器人来发布定制信息(例如:在论坛、博客等在线社交网络上的评论栏里发布恶意链接;3)发送垃圾邮件[4]。利用邮件服务器向受害者发送垃圾邮件,并利用网络机器人自动提交网站表单的电子邮件内容;4)在线投票作弊。投票机器人是一种特殊的网络机器人,它可以篡改在线投票结果[15];5)基于网络的游戏自动化。网络游戏机器人是为了在游戏中自动化某些重复性的任务而开发的,违反了在线游戏公平竞争的政策。

2 系统设计

2.1 系统整体框架

如2.1 节所述,网络机器人在发起攻击之前需要预先识别HTML 表单元素的唯一id/name 参数值,以实现自动访问远程服务器。由于name/id 参数在服务器端逻辑层中使用,因此,这些参数通常为常量,网络机器人便可以利用这些常量值自动生成大量请求。NIDDS 就是通过随机化HTML 元素的name/id 值实现将其隐藏的目的,以此来防御网络机器人。

通过修改网络应用的源代码,可以在服务器端部署NIDDS。此外,NIDDS 还可以作为服务器和客户端之间的第三方中介,以避免增加服务器端逻辑层的复杂性。NIDDS 作为第三方中介还可以普遍应用于不同的网络应用和客户端技术(例如:不同的浏览器和插件)中。此外,NIDDS 不需要随机化所有的网页,只需要随机化用户可以提交数据里的一小部分HTML 表单页。

NIDDS 的中介方案主要由3 部分组成,如图1所示:元素标记模块、随机数发生模块和去随机化模块。其工作流程如下:一旦远程服务器回复客户端与HTML 表单相关的网页源代码响应,如HTML、Javascript 和CSS,NIDDS 将拦截这些响应,并利用元素标记模块在源代码中标记这些HTML 元素供去随机化模块进行识别。这些元素可以是网页中的HTML 元素或用于实现网络服务功能的特定元素类型,比如在特定网页上发布的内容(评论、帖子、博客等),收集用户的电子邮件地址等等。然后,随机数发生模块使用新的随机值替换源代码中标记元素的参数值,并将随机的HTTP 表单页传递给客户端。一旦客户端接收并提交随机表单页,去随机化模块将恢复这些被标记元素的原始参数值,并将其传递给服务器。以下详细描述NIDDS 系统的设计。

图1 NIDDS 系统框架示意图

2.2 元素标记模块

元素标记模块是用来标记受NIDDS 保护和随机化的元素。NIDDS 根据需要随机化一个关键HTML 元素子集而忽略其他元素(例如:按钮和链接等导航元素很难被攻击者利用)。关键HTML 元素包括:1)允许用户在网页中发布内容的元素;2)远程服务器用来生成电子邮件标题的元素;3)服务器用来修改或更新其他服务器资源(如数据库、文件和内存状态)的元素;4)作为请求中参数一部分的元素。

在知道哪些元素需要随机化之后,就可以对网页源代码中的那些元素进行标注,以供随机数发生模块识别。既可以通过给那些参数添加一个独特并且特定的前缀,也可以指定新的参数值来实现标注功能。本文选择第一个方法,即通过添加一个特殊的前缀字符串(名为“P-tag”)来标注元素的“name/id”参数值,本文使用_EaRmN_字符串(通常不会在网页源代码中使用)作为P-tag。例如:如果一个带有“提交”id 值(例如:“< button type = button id =submit>”)的提交按钮需要随机化,元素标记模块会将此元素标注为“< button type = button id =_EaRmN_submit>”。

2.3 随机数发生模块

随机数发生模块会将带有P-tag 标记的元素随机化,为了保证NIDDS 不需要保存原始值就能去随机化,该模块使用对称加密机制。整个随机化过程可以分为4 个主要步骤,如图2 所示。

图2 随机化过程示意图

1)生成主密钥。系统每隔T(试验中T 取值为30 min)时间周期性地生成一个主密钥来加密带标注的参数。生成主密钥应该既快速又高效,因为网络服务器每天可能响应数百万个请求。因此,本文采用Xorshift 随机数发生器[16],通过对种子数进行“xor”操作移位生成随机数序列。种子数可以是一个随机计数器,也可以是服务器的特定系统状态值,例如系统时间和当前进程数。会话中主密钥的更改可能导致去随机化的错误,一旦服务器和客户机之间建立了会话,NIDDS 将加载当前主密钥并使用它来保护整个会话的网络资源。这样,即使在会话期间生成了新的主密钥,当前会话也不会被破坏。

2)生成客户端会话密钥。对于每个会话,在生成主密钥之后,随机数发生模块将主密钥和特定客户端标识符(如IP 地址)通过哈希计算,生成为特定的客户端会话密钥。使用客户端标识符可以保证网页和java 脚本是由同一个客户端会话密钥随机生成。

3)生成随机参数值。在获取客户端会话密钥后,就可以用该密钥在P-tag 标记的参数值上使用任意加密密码(例如AES)来计算随机参数值。尽管服务器在传输HTML 页面后可能会将一些java 脚本传输给客户端,但是NIDDS 能将java 脚本和相应的网页请求之间的关系记录下来,然后用同一个客户端密钥和主密钥将java 脚本(去)随机化。

4)添加P-tag。为了表示那些应该去随机化的元素,随机数发生模块再次为随机参数值添加Ptag 标记。最后,NIDDS 将随机的网络资源传给客户端。

上述过程结束时,所有HTML 元素都被混淆了,网络机器人无法识别正确的参数,也就无法向服务器发送大量的、正确的HTTP 请求。

2.4 去随机化模块

服务器一旦收到请求,将会根据所收到的随机化网页源代码,用P-tag 前缀将这些“name/id”参数值去随机化,变成原来的参数值,具体步骤如图3所示。

图3 去随机化过程示意图

1)找出P-tag 标记的参数值。当去随机化模块接收到用户的请求时,首先找出所有包含P-tag 前缀的HTML 元素的参数值。

2)去除参数值中的P-tag 标记。

3)计算客户端会话密钥。去随机化模块恢复出当前主密钥并使用客户端标识符信息来计算客户端会话密钥。使用哈希函数计算客户端会话密钥的方法与在随机数发生器中使用的方法类似。由于主密钥和这些标识符信息在会话期间不会发生变化,因此,可以获得与随机化参数值相同的客户端会话密钥。

4)生成初始参数值。去随机化模块利用客户端会话密钥来解密随机参数值。然后删除P-tag 前缀,生成原始参数值,并将其发送回服务器。

3 有效性评估

3.1 实现

如第2.1 节所述,NIDDS 作为服务器和客户端之间的第三方中介的设计方案,可以避免增加网络应用的服务器端逻辑层的复杂性。文中采用代理的方式来实现上述系统的搭建。

对Privoxy[17]的源代码进行修改,通过添加一个NIDDS 模块来生成可以实现NIDDS 功能的代理。Privoxy 是一个具有高级过滤功能的开源和非缓存网络代理,允许修改网页和HTTP 头信息。在Privoxy 中用C 语言实现perl 兼容的正则表达式,使用Pcre 模块[18]来搜索和替换内容。Pcre 模块允许使用正则表达式对P-tag 标记的参数进行搜索,并使用随机值替换它们。然后在Privoxy 的请求或者响应处理模块中连接NIDDS,缓冲并修改HTTP 表单页,最终发送给客户端。

3.2 实验参数设置

在3 个流行的网络平台(phpBB,BuddyPress,WordPress)上对NIDDS 的安全性和开销进行评估。phpBB 是最受欢迎的开源论坛平台之一。WordPress已经发展成为一个强大的网站设计和内容管理系统平台[19]。BuddyPress 是一个建立在WordPress 之上的,提供建立网站和社交网络功能的开源平台。

针对三大平台上的3 种常见网络机器人(如表1 所示)对NIDDS 的性能进行评估。XRumer 是使用最广泛网络机器人[2]。Magic Submitter 允许用户在博客和社交网络上自动提交大量信息。SENuke 是主要为SEO 而设计的商业网络机器人。

表1 平台上常见网络机器人列表

3.3 安全性评估

NIDDS 在论坛和流行的开源系统上进行安全性评估。XRumer、Magic Submitter 和SENuke 可以在网站上自动创建文章、评论或填充Web 表单。使用NIDDS 来保护“门户页面”,如登录页面、帖子页面、评论页面和注册页面。然后,运行这3 个机器人,在装有NIDDS 的网站上尝试注册、登录、发帖或者发表评论。实验结果显示,NIDDS 可以在不同平台上成功防御3 个机器人。

下面详细介绍一个NIDDS 抵御XRumer 的实例。XRumer 试图在phpBB3 平台上自动创建新线程。当不使用NIDDS 时,XRumer 可以成功地发布一个phpBB 帖子,如下页图4(a)所示。具体地说,XRumer 首先发出一个请求,并验证该帖子是否创建成功。然后,当启用NIDDS 时,P-tag 被附加到线程创建表单元素中,XRumer 无法识别这些HTML元素,导致一个空的请求体,帖子创建失败,如图4(b)所示。“Uknow”状态表示XRumer 无法被识别该未知页面。

图4 XRumer 创建帖子成功、失败图

3.4 NIDDS 开销性能评估

根据以下两个指标来评估NIDDS 的性能开销:页面加载时间和页面大小。在3 个网络平台(phpBB、Wordpress、Buddypress)上的5 种不同类型的网页(发帖页面(NT)、回复页面(Post)、帐户登录页面(Log)、评论页面(Comt)和注册页面(Reg))来评估NIDDS。这些网络平台和网页类型如表2 所示,其中“P-tag”表示在网页中随机化的HTML 元素的数量。

表2 网页类型表

1)页面加载时间。页面加载时间(Page loading time,PLT)是指发送请求与浏览器完全加载一个网页的时间间隔。本文使用Mozilla Firefox 的addon LORI[20]来计算加载和显示网页的时间,PLT 越高表示使用NIDDS 带来的开销越高。图5 显示了在3 个网络平台上不同网页类型的PLT 值。T1 表示保护整个网页所需要的PLT 值(s);T2 表示保护一个P-tag元素所需要的平均PLT 值(s)。

图5 不同网页类型的PLT 值表

从图5 中可以看出,NIDDS 所带来的PLT 增加量小于0.3 s,平均增加量为14.29%,最高增加百分比小于30 %,但是这仅在少量HTML 表单页上产生,而不是用户浏览的大多数常规网页。此外,由于上述评估基于一个具有有限处理能力的虚拟机环境,在真正的网络服务器上,使用代码优化后的NIDDS 性能会更好。而且,每个PLT 值都是由带有空缓存的浏览器测得,所以在真实的带有缓存存储的通信场景下开销会下降更多。

2) 页面大小。依然使用Mozilla Firefox 的addon LORI[20]来测量网页的大小。phpBB3 上未使用NIDDS(标记为Ori)和使用NIDDS(标记为NID)之后不同类型页面的大小如表3 所示。所有网页都有6 个P-tag 标记的元素。从表3 中可以看出,NIDDS 所带来的网页大小的开销相对较小,平均增加量只有0.225 kB。原因在于这些开销主要来自于P-tag 标记元素值的前缀。

表3 网页大小表

从评估结果可以看出,NIDDS 可以较低的页面加载时间和页面大小开销来有效防御现有的网路机器人。

4 结论

本文提出了一种非侵入式的动态防御系统来针对网络机器人,它不需要用户参与识别被标记的元素,是一种隐式的防御方法来使网络机器人的攻击行为失效,而验证码方法则需要降低用户体验来应对攻击行为。当然,如果服务器和客户端之间通过SSL 加密通信,NIDDS 的中介方案将会失效。但这只是部署方法的局限性,在服务器端部署NIDDS,通过直接修改Web 应用程序可以解决这一问题。从评估结果可以看出,NIDDS 可以在多个流行网络平台上击败大部分网络机器人,并且带来的网页加载时间和网页大小开销较低。

猜你喜欢

密钥网页页面
刷新生活的页面
幻中邂逅之金色密钥
幻中邂逅之金色密钥
答案
基于HTML5与CSS3的网页设计技术研究
让Word同时拥有横向页和纵向页
Android密钥库简析
基于HTML5静态网页设计
搜索引擎怎样对网页排序
一种新的动态批密钥更新算法