学海荡舟手机网
导航

主页 > 论文知识 > 最新论文资料 > 信息 > > 详细内容

具有时间多样性的JavaScript代码保护方法


  0 引言

  Web 2.0的提出使用户对Web应用交互能力的要求不断提高,Web应用的逻辑已逐渐由服务器端向浏览器端转移。同时,HTML5引入的许多本地特性加剧了这一趋势。作为Web应用的默认脚本语言,JavaScript被越来越多地用于实现程序的核心功能。JavaScript作为解释型语言,程序以源码形式发布且具有良好的可读性,攻击者可轻易对代码进行查看、分析和篡改。这使得由JavaScript承载核心算法或关键业务流程等重要信息的Web应用面临逆向分析的安全威胁:一方面,程序知识产权遭受侵犯,将影响互联网产业的健康发展;另一方面,程序机密性的破坏,使攻击者能够针对Web应用的逻辑漏洞展开进一步网络攻击[1]。如何有效对JavaScript代码进行保护成为亟待解决的问题。

  目前,JavaScript代码保护主要有混淆和加密两种方法[2],可在一定程度上抵御逆向分析,但存在以下缺陷:1)难以抵御动态分析;2)保护后的程序是静态对象(即每次运行时代码相同),且执行过程对攻击者完全可见[3]。这使得保护者在与攻击者博弈时处于劣势地位。对此,本文从抑制逆向分析过程中的经验累积出发,引入了一种具有时间多样性的JavaScript代码保护(JavaScript Code Protection based on Temporal Diversity, TDJSP)方法。该方法一方面以多样化的攻击对象和路径空间模糊为基础,提高逆向分析的难度,延长被保护程序的安全周期;另一方面,通过在程序中插入环境监测代码,对非正常的执行环境进行感知及响应,以达到抵御动态分析的目的。

  1 程序多样性与累积攻击

  1.1 程序多样性

  Cohen[4]提出代码变形可用于创建程序的多样性集以降低同构程序的易攻击性。在随后的发展中,程序多样性技术讨论了一系列不改变程序语义的代码变形技术,如等价指令变换、函数内联和外联、垃圾代码注入、模拟和运行时代码生成等[5-6]。目前,程序多样性技术被用于抵御多种形式的MATE(Man-At-The-End)攻击,如非法逆向、篡改以及非法分发[7]203-209等,代码混淆也已成为构建程序多样性的主要方法。Collberg等[8]通过在可信服务器端设置变异进程,把经过混淆的代码块派发给客户端,以抵御攻击者对客户端的篡改。JShadObf混淆器则通过对JavaScript程序施加不同的变形算法序列产生代码种群,然后利用进化算法选取符合条件的个体以达到提升混淆质量的目的[9]。

  2011年,Collberg等[10-11]提出程序在时间和空间上的多样性是持久保护数字资产的三个必要条件之一。时间多样性是指程序在不同时间执行时,其执行路径不同,但功能相同,主要用于抵御累积攻击;而空间多样性是指同一保护对象经多次保护所生成的不同版本具有不同的形态,通过降低程序的同构性来确保软件的安全,主要用于抵御共谋攻击[12-13]。

  1.2 累积攻击

  程序的逆向分析过程可分为若干阶段,并以黑盒阶段、动态分析阶段和静态分析阶段作为基础[7]68-72。逆向分析过程中,上述阶段交织进行,实际是一个不断对攻击目标进行学习并累积经验的过程。攻击者需要不断进行各种尝试,多次运行程序并重复上述过程以积累相应阈值的攻击知识。

  在黑盒阶段,攻击者为程序给出不同的输入,并观察程序输出,继而推测程序行为与外部环境间的依赖关系;在动态分析阶段,攻击者运行程序并记录程序的某些运行时信息,对程序的内部逻辑展开分析;在静态分析阶段,攻击者则会按照局部分析、过程内分析及过程间分析三个步骤对代码直接展开阅读以更好地理解程序。

  综上,攻击者的非法逆向过程可抽象为对攻击目标展开学习并进行知识累积的过程。当知识累积到一定阈值,便可顺利达到相应的攻击目的。

  定义1 累积攻击。对于逻辑复杂的程序,攻击者无法通过仅一次性执行程序获得足够的攻击知识,而必须反复运行目标程序,进行多次攻击以累积知识来达到相应的攻击目的。攻击者对应于上述过程所展开的攻击叫作累积攻击。

  累积攻击的攻击场景可由函数p=Attack(n,k,δ)描述,如图1所示。

  图1中:p代表攻击进度,n代表攻击次数,k代表对于指定程序达到某一攻击目的所需积累的知识阈值,δ代表程序的时间多样性能力。从图1中可以看出,当δ为0时,由于程序不具备时间多样性能力,随着攻击次数的增加,攻击者所累积的相关攻击知识持续增长并逐渐逼近阈值。而当δ大于0时,由于程序具有时间多样性能力,攻击者先前获取的攻击知识无法在后续新的攻击过程中得到有效利用。此时,攻击进度与攻击次数不再具有某种正相关的关系。

相关文章