英语原文共 8 页,剩余内容已隐藏,支付完成后下载完整资料
2015第三届先进云计算和大数据国际会议
发现与阻止针对HTML5应用程序的代码注入攻击
摘要
移动设备的安全性变得越来越重要。HTML5开发的移动应用程序由于其可移植性被广泛应用在各个平台,然而它也允许通过web技术将数据和代码混合在一起。基于html5开发的应用程序很容易受到类似XSS的代码注入攻击。在这篇文章,我们首先引入一种更加隐蔽的代码注入攻击,基于编码攻击。在这种新类型代码注入攻击中,javascript代码被编译成人们无法阅读的形式,于是我们使用机器的分类算法学会去确定应用程序是否患有代码注入攻击。实验结果表明,我们的检测方法的精度达到了95.3%,与其他方法相比,我们的检测方法在速度上有明显提高而在精度上几乎没有什么改变。另外,一种更加先进的访问控制模型被提出以减轻攻击造成的危害,除此之外,各种过滤器被运用以去除来源于数据的javascript代码从而阻止攻击,这些措施的有效性以及合理性通过广泛的模拟实验被证实。
关键词:注射;分类算法;机器学习;访问控制模型;过滤器
第1节 介绍
移动设备越来越受欢迎,许多攻击者开始把注意力放到移动应用程序(apps),移动设备上的安全更加重要[1,2]。HTML5[3]技术因为它的可移植性广泛应用在各个平台。基于HTML5,CSS和JavaScript开发的应用程序越来越多。特别是中间件(如PhoneGap)的
到来,,许多开发人员采用HTML5技术开发移动应用程序,它们具有与本地应用一样的接口。但从web技术上而言,它允许数据和代码混合在一起的。因此基于html5应用程序可以很容易地遭受代码注入攻击[4,5],例如跨域脚本(XSS)。IndexedDB技术在HTML5规范中被介绍,可以引出一个新的分布式方法处理大数据,所以解决基于html5开发的应用程序的安全问题有益于大数据的安全。
在所有的中间件中,PhoneGap是典型代表,并且被广泛使用。这是一个免费和开源框架,允许我们针对开发者关心的平台实现具有标准化的web API[6]的手机应用,开发人员可以使用PhoneGap通过web技术编程使其运行在各个平台上。由于安卓操作系统是开源的并且广泛运用于数以万计的智能手机中,我们将在这篇文章针对安卓系统进行分析,当然技术思路可以扩展到其他平台。PhoneGap的源代码包括两个部分:javascript框架以及java原生框架,其中,java原生框架包含桥接部分以及组件部分,并且它是基于原生语言开发,拥有访问设备资源的能力,例如联系人、短信、照相机等。
代码注入攻击与XSS相似。XSS是一种通常存在于web应用程序中的计算机安全漏洞。XXS使攻击者可以将客户端JavaScript代码注入可以被其他用户访问的网页中[7]。当用户浏览这些网页,注入的JavaScript代码将被执行。通过XSS,攻击者可以收集客户端环境信息、窃取用户的cookie、重定向到其他网页等等。XSS大多发生在web应用程序中,而代码注入攻击发生在移动应用程序中。攻击者可以将恶意代码注入到联系人、短信、条形码以及文件的元信息中,一旦信息被由PhoneGap开发的应用程序显示,代码注入将被触发,代码注入攻击就是以这种方式发生的。
虽然代码注入攻击首先被提出于[4],但是Javascript代码是基于纯文本样式注入的。在这种情况下,注入代码不是隐藏的并且应用程序用户可以很容易认出注入代码。[5]提出了一种检测方法使用静态分析发现调用函数序列。但是时间复杂度非常高。检测一个应用程序是否容易遭受攻击平均需要15.38秒。
为了解决上述问题,首先,我们介绍了基于编码的代码注入攻击,它将Javascript代码编译成人们难以阅读的形式。接着,我们将相关的权限、PhoneGap JavaScript框架中的JavaScript函数以及不安全的JavaScript api作为特性提取出来。然后使用九种机器学习算法的计算确定应用是否是脆弱的。从谷歌商店下载的app测试数据表明,其中的578个应用是正常的,其他408个属于易受攻击的。从相关实验结果来看,我们的方法成本不超过2秒一个应用程序,精度却高达95.3%。另外,我们改进了现有的访问控制模型以减轻损失,过滤器也被采用以删除数据中的JavaScript代码从而防止应用程序攻击。我们的工作主要有三个贡献。首先,我们提出一个基于代码编译的代码注入攻击,它比现有的代码注入攻击更具隐蔽性;其次,我们提出一种新的检测方法可以识别应用程序是否容易遭受代码注入攻击,与[5]的其他方法相比,我们的方法在保持精度几乎不变的情况下很大改善了检测速度。第三,通过在HTML文件添加权限并在安卓源码中添加过滤器改善了现有的访问控制模型。该方法的有效性和合理性已经通过广泛的模拟得到验证。
机器学习广泛应用于大数据。我们在本文中也使用了机器学习分类器。本文的其余部分的结构如下:在第二节中,我们审查现有的代码注入攻击并,提出一种新的代码注入攻击类型;检测代码注入攻击将在第三节讨论。在第四节,我们提出方法以防止代码注入攻击。第五节我们会提供相关文献的概述,并在第六节得出结论。
第2节 代码注入攻击
A代码注入攻击早已被提出
首先提出代码注入攻击是在[4]中,它允许通过web技术将代码和数据混合在一起。使用PhoneGap框架或其他中间件开发的应用程序将可能遭受代码注入攻击。攻击者将恶意代码添加到数据,并通过文本框提交数据到移动应用程序,由于是基于HTML5技术开发的应用程序,它确实是一个web页面并能实现提交。注入的代码将被Web视图引擎解析并执行。结果,代码注入攻击就发生了。
让我们举一个例子来展示代码注入攻击如何发生。我们使用PhoneGap框架开发一个应用程序并以ShowContacts命名。应用程序可以写入三个测试数据到系统联系人并显示所有联系人的记录。
如图1所示,应用程序的主界面有两个按钮,一个按钮用于写入测试数据,另一个用于显示所有联系人记录。我们添加了一个联系人并且显示名称是“lt;scriptgt;alert(Attacked!)lt;/scriptgt;”,然后我们使用应用程序显示所有联系人。这次试验中,注入的代码,例如显示名称将被触发,这个应用程序将弹出一个窗口显示“攻击!”。这展示了代码注入是如何工作的。
图1 代码注入实例
存在很多代码注入通道[5]。移动设备等可以得到数据从许多外部渠道例如相机扫描条形码,、收到短信、接收近距离无线通信。攻击者也可以将恶意代码注入到多媒体文件的元数据,比如歌曲或视频的标题、艺术家专辑。WIFI的SSID(服务器标示符)和蓝牙设备的id 也可以用于注入恶意代码。
B 基于编码的代码注入攻击
XSS中存在许多种编码类型,类似,代码注入攻击也具有很多种编码类型。有两种基于JavaScript代码注入的编码类型分别是JavaScript编码和HTML编码。
HTML编码。HTML编码包括HTML实体编码和HTML n型编码。例如,JavaScript代码如下所示:
document.write('lt;scriptgt;alert(Attacked)lt;/scriptgt;');
它的长度是53,经过HTML实体编码后变成了:
document.write(amp;quot;amp;lt;scriptamp;gt;alert(amp;#39;Attackedamp;#39;)amp;lt;/scriptamp;gt;amp;quot;);
编码后长度变成了83。
HTML n型编码通常包含HTML十进制编码和HTML十六进制编码。HTML实体编码则是一种包含字符形如“amp;lt;amp;quotamp;gt;”的编码格式。对于HTML十进制编码,如果你知道一个字符的ASCII码值并在它前面加上amp;#,那你就会得到HTML的十进制编码。例如下列代码所示:
lt;img src='x' onerror='alert(lsquo;Arsquo;)'gt;
它的长度是34,在经过HTML十进制编码后变成了
lt;imgsrc='x'onerror='amp;#97;amp;#108;amp;#101;amp;#114;amp;#116;amp;#40;amp;#39;amp;#65;amp;#39;amp;#41;'gt;
它的长度是78。
如果使用HTML十六进制编码,代码变成了
lt;imgsrc='x'onerror='amp;#x61;amp;#x6C;amp;#x65;amp;#x72;amp;#x74;amp;#x28;amp;#x27;amp;#x41;amp;#x27;amp;#x29;'gt;
它的长度是84
我们做了大量实验,发现所有的代码经过HTML实体编码或HTML n型编码都能导致代码注入攻击。
JavaScript编码。JavaScript编码主要有五种类型:Unicode编码、十六进制编码,八进制编码,转义编码和Base64编码。例如,下列JavaScript代码:
lt;scriptgt;alert(Attacked)lt;/scriptgt;
它的长度是34。经过Unicode编码,代码转变成:
u003cu0073u0063u0072u0069u0070u0074u003eu0061u006cu0065u0072u0074u0028u0027u0041u0074u0074u0061u0063u006bu0065u0064u0027u0029u003cu002fu0073u0063u0072u0069u0070u0074u003e
它的长度是34。经过十六制编码,代码转变成:
u003cu0073u0063u0072u0069u0070u0074u003eu0061u006cu0065u0072u0074u0028u0027u0041u0074u0074u0061u0063u006bu0065u0064u0027u0029u003cu002fu0073u0063u0072u0069u0070u0074u003e
它的长度是34。经过八制编码,代码转变成:
741631431621511601647614115414516216450471011641641411431531451444751745716314316215116016476
它的长度是34。经过转义编码,代码转变成:
lt;scriptgt;alert(Attacked)lt;/scriptgt;
它的长度是34。经过Base64编码,代码转变成:
PHNjcmlwdD5hbGVydCgnQXR0YWNrZWQnKTwvc2NyaXB0Pg==
它的长度是48。
我们的实验结果表明,JavaScript代码在编码后可以执行除了通过base64编码的方式。
适合代码注入的编码类型。接下来,我们将研究某种编码类型是否适合代码注入。首先,对于注入的代码,它是用来完成特定功能的,长度越小越好。所以对于三种HTML编码类型,由于使注入的代码长度变得更大,不利于注入代码。第二,JavaScript代码编码后需要一个函数来触发,也就是说,你不能完全编码注入的代码。例如,对于这样的JavaScript代码
document.write('lt;scriptgt;alert(Attacked)lt;/scriptgt;'),
我们只能编码'lt;scriptgt;alert(Attacked)lt;/scriptgt;'部分,因为因为“document . write()”是一个触发条件,如果对触发条件函数也进行编码,代码注入攻击不会发生。因此,三种类型的HTML编码不适合代码注入。
至于五种JavaScript编码,JavaScript代码经过base64编码后无法执行,所以这种编码类型不适合代码注入。虽然经过转义编码后,代码长度没有改变,JavaScript代码不能被隐藏,一些用户或开发人员能够轻松理解代码意味着什么。因此转义编码不适合代码注入。虽然其他三种类型的编码同样长度没有改变,但是代码在编码后更加隐蔽。因此JavaScript Unicode编码、JavaScript十六进制编码和JavaScript八进制编码适合代码注入。
代码注入攻击是如何发生的。为了触发代码注入,注入的代码和数据必须显示在HTML页面中。有两个条件实现代码注入攻击。首先,应用程序需要从外部通道读取数据,其次,从外部通道读取的数据必须显示在HTML页面中。当然要显示数据必须使用不安全的JavaScript api[5],应用程序从外部渠道读取数据需通过PhoneGap框架的插件。下表显示了流行的PhoneGap插件,以及它们从外部通道读取数据的函数和在安卓系统下需要的权限。
表1 流行的PhoneGap框架插件
lt;
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[150453],资料为PDF文档或Word文档,PDF文档可免费转换为Word
插件包名 |
插件函数 |
插件权限 |
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。