发明内容
本发明总体上旨在提供用于使web应用在非原生执行环境中的执行变得安全的保护技术。通常,客户端设备应当支持在线(连接互联网)或离线(未连接互联网)运行应用。使这样的应用的执行变得安全应当是持续性的,不论其是在线还是离线运行。本发明提供了允许应用的在线或离线安全执行的一般框架,尽管该保护技术可能利用在线或离线执行的具体方面。
本发明的第一方面涉及一种用于使web应用的执行变得安全的方法。该方法包括:在客户端设备的处理器上引用web应用的函数。该方法接着在客户端设备的处理器上在web应用的函数的执行期间引用部分执行存根(PES, Partial Execution Stub)函数。该方法然后从PES函数继续发送具有与web应用有关的当前执行信息的消息调用。消息调用被发送到受信任模块。此后通过PES函数从与消息调用有关的受信任模块接收验证结果。
可选地,该方法还可包括通过PES函数与受信任模块建立通信连接。在该选项中,经由socket(套接字)连接发送消息调用并且经由该通信连接接收验证结果。该通信连接可以是本地或远程socket连接或者是可以用于本地和远程连接两者的websocket连接。受信任模块可以在服务器节点上执行或在客户端设备中本地执行。
在一个选项中,将具有与web应用有关的另外当前执行信息的第二消息调用从PES函数发送到第二受信任模块。例如,第二受信任模块可以提供未由受信任模块提供的至少一个函数。PES函数此后可以接收来自与第二消息调用有关的第二受信任模块的第二验证结果。
在另一选项中,PES函数可响应于该验证结果,将具有与web应用有关的当前执行信息的消息调用转发到第二受信任模块。例如,第二受信任模块可提供由该受信任模块提供的至少一个函数,并且该验证结果可指示所需要的处理未被第一受信任模块执行或者指示接收到来自受信任模块的超时作为验证结果。PES函数此后可以接收来自与转发的消息调用有关的第二受信任模块的第二验证结果。
可选地,验证结果可指示web应用的篡改,在该情况下,该方法可进一步包括从PES函数引用缓和动作。缓和动作可以变化并可以涉及:例如,返回不正确的下一函数信息,返回无效的函数定义,或者返回标准错误函数或结果,使应用行为立即失败、逐步失败或不正确地执行。
验证结果可以可替代地包括待针对web应用引用的下一函数信息。在该后者情况下,该方法可接着引用下一函数。该方法还可接着返回函数给web应用,以用于注入到web应用中或用于随后的引用。
本发明的第二方面涉及一种在网络节点中执行的用于将web应用转换为安全的web应用的方法。该安全的web应用可通过应用静态和/或动态处理技术来获得。处理技术的何种组合的确定取决于实施选择是web应用。在该第二方面中,处理器被例示为以静态方式使web应用变得安全。例如,在部署web应用之前将该处理应用到web应用。
该方法包括在网络节点处从存储器单元读取web应用的代码。该代码包括多于一个函数。此后,该方法继续根据web应用的函数调用图确定至少从该多于一个函数中的第一函数到第二函数的调用依赖性需要被保护。因此通过将包括用于与受信任模块建立通信连接的代码的至少一个部分执行存根(PES)函数添加到该web应用的代码,来将该web应用修改为安全的web应用代码。PES函数需要与受信任模块的交互。通过修改web应用的代码来将该web应用进一步修改为安全的web应用代码,修改web应用的代码是通过以从第一函数引用PES函数替代从第一函数引用第二函数并且从函数调用依赖图生成一组规则以定义从PES函数到第二函数的调用依赖性来进行的。此后,该方法接着在网络节点处将安全的web应用存储到存储器单元中并且将该组规则存储到存储器单元中。一旦获得安全的web应用,则可以将其递送到一个或多个客户端设备。
可选地,可能存在多个PES函数,并且那些PES函数中的每一个可能与调用依赖性有关。
可选地,通过生成用符号表示的部分执行流图(PEFM, Partial Execution Flow Map)来执行生成该组规则,并且通过将用符号表示的PEFM存储到存储器单元中来执行将该组规则存储到存储器单元中。生成该组规则可进一步包括考虑与安全动作和缓和动作有关的安全要求。
作为另一选项,第一函数和第二函数可存在于web应用的代码中作为单个函数。该方法可因此进一步包括基于在该单个函数中被处理的资产将该单个函数分离为第一和第二函数。
该组规则(或用符号表示的PEFM)可包括记录,该记录包括:当前调用者元素,其标识第一函数作为在引用第二函数之前要求询问的当前调用函数;当前PES元素,其标识PES函数作为引用受信任模块以触发该询问;下一函数元素,其标识第二函数并且提供第二函数的引用所必需的信息;受信任函数的元素,其标识与受信任模块链接且可通过受信任模块内的引用机制执行的一组函数;以及安全动作元素,其标识受信任模块在返回询问的结果之前能够执行的一组安全特征。
该方法还可以可选地包括在存储之前签署该安全的web应用以及在存储之前对该组规则进行加密。
本发明的第三方面涉及一种用于使在客户端设备上执行的web应用的执行变得安全的受信任模块。该受信任模块包括连接模块、函数调用模块和验证模块。
连接模块用于从web应用的部分执行存根(PES)函数接收通信连接请求。该函数调用模块用于经由通信连接从PES函数接收消息调用。消息调用包括与web应用有关的当前执行信息。验证模块用于基于当前执行信息来确定待针对该web应用执行的下一函数并且将确定的结果经由通信连接发送到PES函数。
受信任模块可在远离执行web应用的客户端设备的服务器节点上或者在客户端设备上执行。受信任模块可进一步包括安全模块,该安全模块包括安全的函数和预定义的缓和动作。
可选地,确定的结果可指示web应用的篡改。可替代地,确定的结果可包括待针对该web应用引用的下一函数信息。
连接模块可以可选地进一步与第二受信任模块建立连接以便获得验证结果。第二受信任模块可提供由受信任模块提供的至少一个函数和/或未由受信任模块提供的至少一个函数。
本发明的第四方面涉及一种包括网络接口模块和执行web应用的处理器的客户端设备。该网络接口模块打开部分执行存根(PES)函数和受信任模块之间的通信连接。处理器通过引用web应用的函数、在执行web应用的函数期间引用PES函数、将具有与该web应用有关的当前执行信息的消息调用经由通信连接从PES函数发送到受信任模块并且从与消息调用有关的受信任模块接收验证结果来执行web应用。
可选地,受信任模块可在远程服务器节点上执行。
验证结果可指示web应用的篡改,在该情况下,处理器可进一步执行缓和动作。可替代地,验证结果还可包括待针对web应用引用的下一函数信息,在该情况下,处理器进一步引用下一函数。
本发明的第五方面涉及一种用于将web应用转换为安全的web应用的网络节点。该网络节点包括存储器单元和用于使web应用变得安全的处理器。
存储器单元用于存储web应用的代码,该代码包括多于一个函数。
处理器用于通过从至少包括从该多于一个函数中的第一函数到第二函数的调用依赖性的web应用的函数调用图确定从第一函数到第二函数的调用依赖性需要被保护并且将web应用修改为安全的web应用代码,来使该web应用变得安全。通过将包括用于与受信任模块建立通信连接的代码的部分执行存根(PES)函数添加到web应用的代码,来执行将web应用修改为安全的web应用代码。PES函数要求与受信任模块的交互。通过修改web应用的代码来进一步执行将该web应用修改为安全的web应用代码,修改web应用的代码是通过以从第一函数引用PES函数替代从第一函数引用第二函数并且从函数调用依赖图生成一组规则以定义从PES函数到第二函数的调用依赖性来进行的。处理器进一步通过将安全的web应用和该组规则存储到存储器单元中来进一步使web应用变得安全。在第五方面中,处理器被例示为以动态方式使web应用变得安全。例如,在发送web应用到客户端设备之前但在将web应用安装在网络节点上之后,应用该处理。
可选地,生成该组规则可进一步包括考虑与安全动作和缓和动作有关的安全要求。
可选地,通过生成用符号表示的部分执行流图(PEFM)来执行生成该组规则,并且通过将用符号表示的PEFM存储到存储器单元中来执行将该组规则存储到存储器单元中。
作为另一选项,第一函数和第二函数存在于web应用的代码中作为单个函数。该处理器进一步基于在该单个函数中被处理的资产将该单个函数分离为第一和第二函数。
处理器可进一步在存储之前签署安全的web应用并且在存储之前加密该组规则。
具体实施方式
计算机程序通常以某种抽象语言来表达。可使用一系列编译和链接步骤将该语言翻译成可由计算机(或其他处理设备)执行(或解释)的二进制代码。还可将程序编译成可在虚拟机解释器上执行的虚拟机指令集。一些编程语言不需要编译和链接步骤,而是通过语言专用解释器来解释。
保护经解释的代码是困难的问题,因为应用的源代码在客户端处可用,并且应用不具有对机器硬件的直接访问权。
已知的攻击技术是分析应用的控制或逻辑流。为了防止攻击者分析应用的逻辑流,可以从程序移除控制流并且将其替换为对地址服务器的运行时访问,该地址服务器向应用提供继续执行所需的信息。这样的可能性当前仅针对原生执行环境可用,且针对非原生语言和环境不可用。
可以在具有不能被容易地和/或高效地传输到客户端的特殊资源的远程计算机处执行一些函数。远程函数的细节不能被攻击者容易观察到。该技术的一些示例是远程过程调用(RPC)、公共对象请求代理架构(CORBA)和简单对象访问协议(SOAP)。
信任模块在各个应用中使用,并采取智能卡、电子狗和密码学模块的形式。这些被普遍用于执行一些攻击敏感函数。将这些函数移动到更加抗攻击的环境提高了在更加开放的执行环境中执行的应用的安全性。数字版权管理(DRM)客户端使用软件来实施类似的信任模块函数。可以使软件应用实施针对压缩视频流的标准解码器,其中标准解码器中的一些数据结构需要由在更加抗篡改的环境中执行的软件来适配。
在使非原生应用的执行变得安全的方面存在安全问题。例如,诸如网页浏览器、JVM和其他脚本环境之类的非原生执行环境比原生执行环境不安全得多。示例性原因包括:
1、在经解释的语言中,攻击者可以访问对应用的高级语言描述,并修改底层代码以及包括控制流和决策信息的执行逻辑。
2、非原生应用被屏蔽免于底层硬件或操作系统的细节。非原生应用不直接访问由计算平台提供的安全资源且不使用由原生计算平台实现且在原生计算平台上构建的强保护。
3、应用引擎、虚拟机(运行时环境)或脚本引擎通常不被设计和实施有对白盒安全性和自保护来说必要的要求。尽管它们可能引入某种安全性,但是它们通常仅解决了某些中间人易损性。对于希望非法侵入应用的攻击者来说,基本的安全性弱点通常是很好的起点。
4、被设计为保护原生代码的许多良好开发或商业化的软件安全和保护技术不能直接被适配于非原生执行环境。
涉及使非原生应用的执行变得安全的安全问题的另一示例是非原生应用的执行通常涉及不同段的软件。不同段的软件通常以不同的形式提供,并在不同执行阶段处执行交互。例如,相比于原生可执行文件,通常更容易对非原生执行逻辑做出剪断和欺骗攻击。维持非原生应用的执行的完整性很可能是更困难的。
涉及使非原生应用的执行变得安全的安全问题的又一示例是很多安全特征和保护机制需要从非原生应用的受保护的执行触发或涉及。如果安全特征未被紧密地与非原生应用的原始函数执行逻辑集成和交织,则它们可能被容易地略过或从受保护的执行移除,导致来自这样的保护的总体安全性被损害。因此,使执行变得安全以防受保护的执行中的任何攻击应当导致受保护的非原生应用在执行上失败,由此防止攻击者实现目标并访问受保护的资产。
可以使用受信任模块来扩展其安全服务到非原生应用。受信任模块应当是受良好保护的部件,并提供一组保护。受信任模块可以提供受信任的区域作为通过非原生应用代码和受信任模块之间的执行使能机制扩展到非原生应用的可信任根。
本发明旨在通过将控制流决策和敏感函数从实际应用移动到生成需要被受信任模块处理的经适配的应用和受保护的数据的受信任模块来使应用变得安全。通常,该目的是通过下述操作来实现的:通过使用部分执行依赖性将应用代码(非原生侧)和受信任模块(可以是原生侧,或非原生的,或以其他形式,包括以硬件实施)交错,该部分执行依赖性由工具静态或动态地处理和生成。在该处理之后,新的经适配的应用代码仅包含不完整执行逻辑。剩余的执行逻辑和某些敏感函数被表示在可仅由受信任模块管理和访问的部分执行依赖性中,且不直接来自受保护的非原生应用代码。
例如,在执行期间,经适配(例如安全)的应用连接到受信任模块并传输其当前执行点和一些上下文信息。受信任模块基于当前执行点和受保护的数据(其可以包括用于受信任模块的代码)来处理上下文数据。利用该机制,可通过使用部分执行依赖性通过与受信任模块进行交互来动态地构造受保护的应用的实际执行。由此,经适配的应用获得经修改的上下文信息以及经适配的应用继续其执行所在的新控制点。
不存在由受保护的应用代码完全呈现的执行逻辑的静态视图。在执行的任何状态处,仅当前部分执行变得在非原生执行环境内可见。
通过受信任模块内的执行来保护原始执行流。可以使用受保护的应用和受信任模块之间的执行使能机制(例如,应用编程接口(API)(例如, Java和原生代码之间的JNI)或用于连接受保护的应用和受信任模块的诸如socket或远程连接之类的通信信道来连接受信任模块。在HTML5环境的示例中,Websocket可提供连接来服务于应用和受信任模块之间的本地和远程通信两者。可以使用WebSocket API将HTML5 web应用与本地和/或远程受信任模块相连接或将本地受信任模块与远程受信任模块相连接。这样的通信能力可授权、简化和标准化本发明的某种实施方式。将受到攻击(例如非法侵入)(诸如,尝试略过经由受信任模块的执行)的安全应用可能因此引起原始应用的错误行为或不完整执行。因此,与当前机制相比,该技术能够改进分布式应用执行的可信赖度。
用于桥接受保护的应用和受信任模块之间的执行的连接方法可要求部分执行依赖性的设计和实施。如果存在非原生和原生之间的执行扩展接口,诸如JNI,则部分执行依赖性可以被以代码形式直接表示或经由更高级的保护而表示。如果不存在这样的执行接口,诸如kJava环境或网页浏览器环境中的HTML5 Websocket,则部分执行依赖性需要被表示为可通过通信信道传递的用符号表示的形式。在HTML5中,可通过在执行期间提供函数解密使得函数非加密且被动态加载到网页浏览器页面中来进一步增强保护。
本发明利用可信任根和安全能力扩展外部信任模块的函数。受信任模块计算执行/解释的下一执行点并且处理允许受信任应用实施一些安全敏感操作的上下文信息并返回经修改的上下文信息。
因为攻击者不再能够容易地观察到经适配的应用和受信任模块两者中的功能处理,所以该应用更加难以反向工程。
从编程观点看,函数(例程)是软件的最基本和重要的功能构造之一。通常,应用代码的调用依赖性包含对作为功能部件的不同函数之间的结构关系进行布局的最重要执行逻辑之一。可执行代码本质上自包含这样的依赖性。因此,通过修改调用依赖性更改执行以篡改原始执行是相对容易的。从安全要求看,某些函数是关键的,因为它们涉及需要必要保护的有价值数字资产,诸如密码密钥、IP算法、银行账号、登录密码、专有商业逻辑等。从攻击目的看,这些函数变成攻击的主要目标。使执行变得安全是为了保护那些函数和那些函数之间的调用依赖性以保证该应用的原始执行的完整性。
现在参考附图,其中图1示出经由动态部分执行来使执行变得安全的示例性概述。图1示出非原生执行环境100、受信任模块110、非原生执行环境100和受信任模块110之间的通信(例如socket)连接120、和安全的存储器130。在分析了非应用代码的调用图时,可以将特定函数(例如可由用户识别和指定)的一些调用依赖性替代为用符号表示的部分执行流图(PEFM)。然后利用可经由受信任模块110桥接受保护的函数代码104之间的引用关系的部分执行存根(PES)102a……102c来替代原始调用。在受保护的应用104的运行时期间,当执行意图引用也受保护的下一函数F2的受保护函数F1时,F1实际引用特定的PES 102a,使得其保存当前执行并将具有当前执行信息的消息调用经由通信连接110发送到受信任模块120以询问待执行的下一方法。受信任模块120将使用当前执行信息来从安全的PEFM 132搜索待执行的下一函数。如果搜索成功,则受信任模块120可在返回待引用的下一函数信息作为经由通信连接110回到PES 102a的结果之前执行一些安全特征,例如完整性验证和反调试。如果搜索失败,则其指示当前调用依赖性被篡改并且攻击被检测到。因此,可由受信任模块采取指定的缓和动作。在PES 102a接收到下一函数信息之后,PES 102a传递必要的参数并相应地引用特定的函数,以便继续该受保护的应用104的执行。
下面的列表包括可由本发明的不同实施例提供的示例性优点:
· 受保护的应用代码静态地包含仅部分执行信息。在不知道受信任模块120内被动态移除的部分执行流信息的情况下,整个应用不能完整且正确地执行。
· 该安全执行交错在执行期间利用受信任模块129(或其他第三方安全模块)来扩展应用执行。其提供了供各种附加保护特征被受信任模块120部署的机会。
图2示出了根据本发明的示例性函数分离。可通过例如用于安全目的的必要函数分离来增强原始执行。可通过引入新的引用关系来将函数分离成两个或多于两个较小函数。例如存在两个函数F1和F2。我们可将F1分离成三个较小函数F11、F12和F13。这是可在源代码水平、中间代码水平或二进制代码水平中应用的技术。在源代码水平上,其可利用某种安全代码指南来手动完成。
对于安全要求,如果函数包含一些重要代码段内处理的多个资产,则将函数分离成较小函数以便利用使用动态部分执行交错的交错能力很可能是更安全的。很可能需要保护的资产的示例包括密码密钥、IP算法、银行账号、登录密码和专有商业逻辑。
PEFM 132的记录被格式化有四个元素:
1、当前调用者:指定需要针对待调用的下一函数的询问的当前调用函数的名称。
2、当前PES存根:指定用于引用受信任模块以触发询问的当前PES存根的名称。
3、下一函数:指定将被当前调用者引用的下一函数的必要信息。对于不同非执行环境,该信息可以是不同的。例如在JVM中,下一函数的信息可包含类名和方法名,而在HTML5中,其可包含网页的页面或文档对象模型和javaScript函数名。
4、受信任函数:指定已与受信任模块链接且可通过引用受信任模块内的机制而执行的一组函数。通常,这些函数是由受信任模块提供的一些特殊函数,或者已经以可被加载到受信任模块中的方式实施的一些原始函数。可利用受信任模块在安装时间处部署受信任函数,和/或受信任函数可在运行时与受信任模块动态链接。受信任函数的类型的本质和如何部署它们可取决于受信任模块实施方式。示例性受信任函数包括密码学操作和完整性验证函数。此外,在处理web应用时,分析网页内容并提取用于受信任函数引用的敏感函数可以是可能的。这些受信任函数可以以加密形式被递送到受信任模块,且由受信任模块加载、解密和执行。
5、安全动作:指定受信任模块在返回搜索结果之前可作出的一组安全特征。其是可选的且取决于在构建时期间用户的请求。而且,其可由安全策略来驱动。
现在同时参考图3和4,图3和4分别示出示例性原始函数依赖性和具有不完整部分的示例性受保护应用代码。图3和4的示例在更详细图示部分执行流方面是有用的。
处理工具可采取以下步骤来生成仅具有部分执行和用符号表示的PEFM的受保护的应用代码:
步骤1:如果必要的话,基于一些安全要求来进行函数分离。该步骤在本示例中不是必需的。
步骤2:分析调用图并通过作为输入选项和对工具的配置的来自用户的请求来识别重要函数及其针对保护的调用依赖性。在本示例中,我们将想要保护F1和F2以及F1调用F2、F1调用F3和F2调用F3的调用依赖性。
3、步骤3:对于要保护的每个函数并且对于需要保护的每个调用依赖性
a、创建PES函数。PES函数可以接受来自调用者函数的实际参数并将它们传递到将被动态确定的被调用者函数。而且,PES函数需要利用与受信任模块的通信(例如socket)连接来促进通信。例如,对于F1调用F2,我们创建F1pes2存根函数。
b、通过引用PES存根函数来替代原始引用。例如,通过引用F1pes2存根函数来替代F1调用F2。
c、利用填充必要信息来创建PEFM的记录。例如,在F1调用F2时,PEFM的记录可被如下设定:
i、当前调用者:F1p
ii、当前PES存根:F1pes2
iii、受信任函数:对于该示例忽略
iv、下一函数:F2p
v、安全动作:在我们选择该选项的情况下,完整性验证。
步骤4:处理受信任函数。
步骤5:生成仅包含不完整执行依赖性的受保护的应用代码。
步骤6:生成用符号表示的PEFM并且然后通过使用白盒密码学方法来对其进行加密。
步骤7:执行对非原生应用的受保护代码的签署并且生成完整性验证(IV)凭证。
步骤8:使用白盒密码学方法来对PEDM和IV凭证进行加密并且将它们打包成容易部署的封装。
在该示例性处理之后,生成具有受保护的部分执行依赖性的受保护的应用代码(如图4中所示)和PEFM的记录(如下表1中所示)。
当前调用者 |
当前PES存根 |
受信任函数 |
下一函数 |
安全动作 |
F1p |
F1pes2 |
IV 和AD |
F2P |
完整性验证 |
F1p |
F1pes3 |
IV 和AD |
F3 |
反调试 |
F2p |
F2pes3 |
IV 和AD |
F3 |
完整性验证 |
表1:PEFM的示例。
应用的整个调用关系不需要用符号表示。取而代之,仅应当用符号表示最需要的函数之间的某些调用依赖性和可由受信任模块实行的必需安全特征。
取决于商业模型,存在典型的四个部署模型:
1、将受保护的应用代码、受信任模块和部分执行封装都部署到客户端环境中。受保护的应用代码应当看起来像正常的应用。其仍然可以通过像正常应用之类的其他保护技术而应用。例如,你可以仍然应用安全加载器保护。部分执行封装必须被存储到受信任模块能够访问的本地安全存储器中。
2、将受保护的应用代码和受信任模块部署到客户端环境中并且将部分执行封装部署到远程受信任存储器中。该模型和上面的模型之间的关键区别是:部分执行封装需要被部署到可由受信任模块经由远程访问设施访问的远程存储服务器中。
3、将受保护的应用代码部署到客户端环境中,并且将受信任模块和部分执行封装部署到远程受信任存储器中。该模型和其他模型之间的关键区别是:受信任模块和部分执行封装可被远程地部署,并且部分执行封装可被存储在可由受保护的应用经由远程访问设施访问的远程存储服务器中。
4、将上述3个模型组合在一起以将受保护的应用代码部署到客户端环境中,具有以下可能的特性:
a、在客户端环境中,存在一个或多个受信任模块并且一些部分执行封装被存储在本地安全存储器中。
b、在远程服务器或云环境中,存在一个或多个受信任模块并且一些部分执行封装被存储在远程受信任存储器中。
c、将通过不同受信任模块之间的相关性本地地或远程地协调动态执行依赖性。
d、保护可以是在线的或离线的或者在本地地或远程地之间切换,使攻击变得困难。
本发明并非意在限于上述情形中的任一个,而是可以是非常灵活的且被应用以实现强保护和灵活可再生性。
在部署受保护的应用及其部分执行封装之后,当受保护的应用在设备上运行时,该保护可发生其作用。再次使用图3和4的示例以参考图5(a)、(b)、(c)和(d)来讨论通过使用动态部分执行使执行变得安全。
当从非原生执行环境500执行受保护的函数(F1p)时,首先利用一组真实参数引用特定的PES函数(F1pes2),该参数是原始F1将用以引用原始F2的参数。F1pes2函数接受输入且然后发送具有当前执行信息的向下调用信息,其中F1p被标识为当前调用者并且F1pes2被标识为当前PES。向下调用信息经由通信(例如socket)连接510而被发送到受信任模块520以询问待执行的下一方法。
受信任模块520将使用该当前执行信息来从位于安全存储器530中的安全PEFM搜索待执行的下一函数。受信任模块520内的搜索部件,PE处理机,可以通过使用白盒密码机安全地解密和访问PEFM并搜索当前执行信息是否能够匹配PEFM的记录。如果搜索失败,则这指示:当前调用依赖性被篡改并且攻击被检测到,从而当前执行将被搁置并进入缓和阶段。否则,搜索是成功的,并且这指示当前执行可以继续。考虑到匹配,受信任模块520得到下一函数和安全动作的调查结果。接着,受信任模块520的安全代理可执行那些安全动作,例如完整性验证和反调试。如果那些安全特征是成功的,则受信任模块520将经由通信连接510发送响应消息给F1pes2,该响应消息具有待作为结果返回而引用的下一函数信息。否则,受信任模块520将通过使用那些安全特征来检测其他攻击,并且当前执行应当进入缓和阶段。
在F1pes2从受信任模块520接收到下一函数信息后,F1pes2引用F2p并传递接收到的必要参数,同时相应地调用F1p,以便继续该受保护的应用的执行。
此后,当前执行扩展到受保护的函数(F2p)。当引用F2pes3时,其利用一组真实参数来与F1pes2类似地作用,该组真实参数是原始F2将用以引用原始F3的参数。F2pes3函数接受这些参数且然后经由通信连接510发送具有当前执行信息的消息给受信任模块520,其中F2p被标识为当前调用者并且F2pes3被标识为当前PES,以询问待执行的下一方法。类似地,受信任模块520使用新的当前执行信息来从安全的PEFM搜索待执行的F2p的下一函数。为了简名的目的,不重复上面的处理。
假设受信任模块520将F3作为下一函数返回给F2pes3,则其然后传递接收到的参数给F3并引用F3。
在F3的执行完成后,当前执行返回到F2pes3且然后返回到F2p,并且然后返回到F1pes2且最终返回到F1p,这在图5(c)上特别图示。
然后,示例以F1p经由F1pes3引用F3继续,如图5(d)中特别图示的那样。
图6示出KJava应用解决方案架构的示例性模块化表示和功能图。
图7示出HTML5 web应用保护架构的示例性模块化表示和功能图。再次使用上文参考HTML5 web应用提出的技术。利用Websocket,部分执行保护的一般架构可以在受信任模块和部分执行信息的部署策略方面更加灵活。
下面是经由部分执行的HTML5 web应用保护架构与经由部分执行的KJava应用解决方案架构之间的一些示例性区别:
· 利用HTML5,可在执行期间动态地改变页面,从而函数代码可被存储在受信任模块中且在页面执行时间处被检索/解密,并且也可被从页面移除。
· 最初当加载web app时(假定其来自某远程服务器),引入过滤器,该过滤器在其到达客户端浏览器之前将动态变换应用到页面。例如,这将必须解析和变换http响应。
· 过滤器引入将要求页面响应,实施诸如添加部分执行存根、对函数进行加密和利用特定安全存储API(基于websocket)替代标准存储API之类的变换技术。部分执行存根可以由信任模块请求或者被预先规定。
· 因为websocket能够在两个本地应用部件之间或在本地和远程应用部件之间进行连接,所以可以引入多个受信任模块。
· 当web客户端在线时,这还允许信任模块与web应用通信来管理变换、检索页面代码、共享的密钥、认证等。
使用可选的HTML5 web应用的一些所标识的示例性安全优点是明显的:
· 受保护的HTML页面仅包含部分执行信息。在不具有受信任模块内被动态移除的部分执行信息的认知的情况下,整个应用不能工作。
· web应用或不同的web应用可以本地地或/和远程地连接到一个或不同的受信任模块。不同的受信任模块可提供重叠或不同的安全特征来使攻击变得困难。而且,由多个受信任模块本地地或远程地或以这两种方式引入的必要冗余可使可再生性和保护变得有效或灵活。
· 该安全执行互锁在执行期间利用受信任模块扩展应用执行。这给各种附加保护特征提供了机会。
在其他示例性使用情况当中,本发明预期对使使用脚本语言、解释语言和虚拟机实施的应用变得安全来说是有用的。受信任模块可以是软件模块或硬件模块。还考虑在机顶盒(STB)中虚拟机(例如,BD+ VM)的采用,以便改进STB中的CA客户端的更新。除了处理之外,智能卡还可实施如在本发明中描述的动态控制流函数。本发明还可以以更好的保护使得能够将受信任模块解决方案部署到宽得多的非原生执行环境,来使非原生应用的执行变得安全。
图8示出根据本发明的教导的web应用的安全执行的示例性流程图。在客户端设备的处理器上,引用web应用的函数810。在web应用的函数的执行期间引用部分执行存根(PES)函数820。PES函数可以可选地与受信任模块(未示出)建立通信(例如socket)连接。然后从PES函数830发送具有与web应用有关的当前执行信息的消息调用。将消息调用发送到受信任模块。可经由通信连接发送消息调用。此后通过PES函数从与消息调用有关的受信任模块接收验证结果840。可经由通信连接发送消息调用和验证消息。该通信连接可以是本地或远程socket连接或用于处理本地或远程连接的websocket连接。
受信任模块可以在服务器节点上执行或者在客户端设备中本地地执行。
验证结果可指示web应用的篡改,在该情况下,PES函数可引用缓和函数(未示出)。缓和动作可变化并可涉及例如返回不正确的下一函数信息,返回无效的函数定义,或返回标准的错误函数或结果,使应用行为立即、逐步地失败或不正确地执行。
验证结果可以可替代地包括待针对web应用引用的下一函数信息。这可进一步不包括由下一函数要求的参数或包括由下一函数要求的某个或某些函数。在该后者情况下,该方法接着引用下一函数(未示出)。
可将具有与web应用有关的另外的当前执行信息的第二消息调用(未示出)从PES函数发送到第二受信任模块。例如,第二受信任模块可提供未由受信任模块提供的至少一个函数。PES函数此后可以从与第二消息调用有关的第二受信任模块接收第二验证结果(未示出)。PES函数还可以可替代地响应于验证结果将具有与web应用有关的当前执行信息的消息调用(未示出)转发给第二受信任模块。例如,第二受信任模块可提供由受信任模块提供的至少一个函数,并且验证结果可指示所要求的处理未被第一受信任模块执行,指示从受信任模块接收了超时作为验证结果等。PES函数此后可以从与转发的消息调用有关的第二受信任模块接收第二验证结果(未示出)。
图9示出将web应用转换为安全web应用的示例性流程图。可通过应用静态和/或动态处理技术来获得安全的web应用。处理技术的何种组合的确定取决于实施选择是web应用。在网络节点处,从存储器单元(未示出)读取web应用的代码。该代码包括多个函数。函数调用图包括至少从多个函数中的第一函数到第二函数的调用依赖性。然后确定从第一函数到第二函数的调用依赖性需要被保护(910)。因此,通过将包括用于与受信任模块建立通信(例如socket)连接的代码的部分执行存根(PES)函数添加到web应用的代码来将web应用修改为安全的web应用(920)。PES函数要求与受信任模块的交互以便执行先前由第二函数采取的动作。通过修改web应用的代码来进一步将web应用修改为安全的web应用代码,修改web应用的代码是通过利用从第一函数引用PES函数替代从第一函数引用第二函数(940)并且生成用于定义从PES函数到第二函数的调用依赖性的一组规则(950)来进行的。将安全的web应用和该组规则存储到存储器单元中。一旦获得安全的web应用,则可以将其递送到一个或多个客户端设备。
可选地,可通过生成用符号表示的部分执行流图(PEFM)来执行生成该组规则,并且通过将用符号表示的PEFM存储到存储器单元(未示出)中来执行将该组规则存储到存储器单元中。生成该组规则可进一步包括考虑与安全动作和缓和动作有关的安全要求(未示出)。
作为另一选项,第一函数和第二函数可存在于web应用的代码中作为单个函数。可能必须基于在该单个函数中被处理的资产将该单个函数分离为第一和第二函数(未示出)(例如,该单个函数可从存储器单元读取,被分离且被存储到存储器单元作为第一和第二函数,这在从其中读取第一和第二函数之前发生)。
用符号表示的PEFM可包括记录,该记录包括:当前调用者元素,其标识第一函数作为在引用第二函数之前要求询问的当前调用函数;当前PES元素,其标识PES函数作为引用受信任模块以触发该询问;下一函数元素,其标识第二函数并且提供第二函数的引用所必需的信息;受信任函数元素,其标识与受信任模块链接且可通过受信任模块内的引用机制执行的一组函数;以及安全动作元素,其标识受信任模块在返回询问的结果之前能够执行的一组安全特征。
可选地,还可以在存储之前签署该安全的web应用以及在存储之前对该组规则(或用符号表示的PEFM)进行加密。
图10示出了用于使在客户端设备上执行的web应用的执行变得安全的受信任模块1000。受信任模块包括网络接口模块1010、函数调用模块1020和验证模块1030。受信任模块还可包括安全模块(未示出)。
网络接口模块1010用于从web应用的部分执行存根(PES)函数接收通信(例如socket)连接请求。函数调用模块1020用于经由通信连接从PES函数接收消息调用。消息调用包括与web应用有关的当前执行信息。验证模块1030用于基于当前执行信息来确定待针对web应用执行的下一函数并且将确定的结果经由通信连接发送给PES函数。
受信任模块1000可在远离执行web应用的客户端设备的服务器节点(未示出)上执行,或在客户端设备(未示出)上执行。安全模块(未示出)可包括安全函数和预定义的缓和动作。
可选地,确定的结果可指示web应用的篡改。可替代地,确定的结果可包括待针对web应用引用的下一函数信息,并可进一步不包括由下一函数要求的参数或包括由下一函数要求的某个或某些参数。
图11示出用于将web应用转换为安全的web应用的网络节点1100。网络节点1100包括存储器单元1140和用于使web应用变得安全的处理器1150。
存储器单元1140用于存储web应用的代码,该代码包括多个函数。
处理器1150用于通过从web应用的函数调用图确定至少从web应用的第一函数到第二函数的调用依赖性需要被保护来使web应用变得安全。处理器1150还用于将web应用修改为安全的web应用代码。通过将包括用于与受信任模块(未示出)建立通信(例如socket)连接的代码的部分执行存根(PES)函数添加到web应用的代码,来执行将web应用修改为安全的web应用代码。PES函数要求与受信任模块的交互,以便执行原先由第二函数采取的动作。通过修改web应用的代码来进一步执行将该web应用修改为安全的web应用代码,修改该web应用的代码是通过利用从第一函数引用PES函数替代从第一函数引用第二函数并且生成一组规则以定义从PES函数到第二函数的调用依赖性来进行的。处理器1150进一步用于通过将安全的web应用和该组规则存储到存储器单元1140中来使web应用变得安全。
可选地,可以通过生成用符号表示的部分执行流图(PEFM)来执行生成该组规则,并且可以通过将用符号表示的PEFM存储到存储器单元中来执行将该组规则存储到存储器单元1140中。生成该组规则可进一步包括考虑与安全动作和缓和动作有关的安全要求(未示出)。
作为另一选项,第一函数和第二函数可存在于web应用的代码中作为单个函数。处理器1150可然后进一步基于在该单个函数中被处理的资产将该单个函数分离为第一和第二函数。
处理器1150可以进一步在存储之前签署该安全的web应用以及在存储之前对该组规则(或用符号表示的PEFM)进行加密。
处理器1150可表示具有一个或多个处理器核的单个处理器或者处理器的阵列,每个处理器包括一个或多个处理器核。存储器单元1140可包括各种类型的存储器(不同的标准化或类型的随机存取存储器(RAM)模块、存储卡、只读存储器(ROM)模块、可编程ROM等)。存储设备模块(未示出)可进一步被呈现为一个或多个逻辑或物理的以及本地或远程的硬盘驱动器(HDD)(或其阵列)。存储设备模块可进一步表示被使得对网络节点1100来说通过标准化或专有接口可访问的本地或远程数据库。可选的网络接口模块1110表示可以用于与其他网络节点通信的至少一个物理接口。可选的网络接口模块1110可被使得对网络节点1100的其他模块来说经由一个或多个逻辑接口可见。可选的网络接口模块1110的物理网络接口和/或逻辑网络接口所使用的实际协议栈并不影响本发明的教导。本发明的上下文中可使用的处理器1150、存储器单元1140、网络接口模块1110和存储设备模块的变型对于本领域技术人员来说将是显而易见的。同样地,即使贯穿本示例的描述未明确提到存储器模块1140和/或处理器1150,本领域技术人员也将容易认识到,与网络节点1110的其他模块结合使用这样的模块来执行例程以及与本发明有关的创新步骤。
图12示出包括网络接口模块1210和执行web应用的处理器1250的客户端设备1200。网络接口模块1210打开部分执行存根(PES)函数和受信任模块(未示出)之间的通信(例如socket)连接。通信连接可以是本地或远程socket连接或者websocket。处理器1250通过引用web应用的函数、在web应用的函数的执行期间引用PES函数、经由通信连接从PES函数发送具有与web应用有关的当前执行信息的消息调用到受信任模块并且从与消息调用有关的受信任模块接收验证结果,来执行web应用。
可选地,受信任模块可以在远程服务器节点(未示出)上执行。
验证结果可指示web应用的篡改,在该情况下,处理器1250可以进一步执行缓和动作。可替代地,验证结果还可包括待针对web应用引用的下一函数信息,并可在适用时包括由下一函数要求的一个或多个参数。处理器1250进一步引用下一函数。
处理器1250可表示具有一个或多个处理器核的单个处理器或者处理器阵列,每个处理器包括一个或多个处理器核。可选的存储器单元1240可包括各种类型的存储器(不同的标准化或类型的随机存取存储器(RAM)模块、存储卡、只读存储器(ROM)模块、可编程ROM等)。存储设备模块(未示出)可进一步被呈现为一个或多个逻辑或物理的以及本地或远程的硬盘驱动器(HDD)(或其阵列)。存储设备模块可进一步表示被使得对客户端设备1200来说通过标准化或专有接口可访问的本地或远程数据库。网络接口模块1210表示可以用于与其他网络节点通信的至少一个物理接口。网络接口模块1210可被使得对客户端设备1200的其他模块来说经由一个或多个逻辑接口可见。网络接口模块1210的物理网络接口和/或逻辑网络接口所使用的实际协议栈并不影响本发明的教导。本发明的上下文中可使用的处理器1250、可选的存储器单元1240、网络接口模块1210和存储设备模块的变型对于本领域技术人员来说将是显而易见的。同样地,即使贯穿本示例的描述未明确提到可选的存储器模块1240和/或处理器1250,本领域技术人员也将容易认识到,与客户端设备1200的其他模块结合使用这样的模块来执行例程以及与本发明有关的创新步骤。
根据本发明,为了部署一个或多个web应用,可使用多个不同的部署模型。可通过例如web应用的功能性质和安全要求来影响所选择的部署模型。提供了除了别的之外以下四个示例性部署模型。
第一部署模型可以是将具有PES函数的安全web应用、一个或多个受信任模块和PEFM部署到客户端环境中。可将PEFM存储到对受信任模块来说本地可访问的本地安全存储器中。部署模型的该第一示例可提供对离线的安全web应用执行的支持。
第二部署模型可以是将具有PES函数的安全web应用和一个或多个受信任模块部署到客户端环境中并且将PEFM部署到可由受信任模块经由远程连接和访问设施访问的远程安全存储器中。
第三部署模型可以是将具有PES函数的安全web应用部署到客户端环境中并且将一个或多个受信任模块和PEFM部署到一个或多个远程网络节点中。可由PES函数经由远程连接和访问设施来访问安全的存储器。
第四部署模型可以是组合用于将具有PES函数的安全的web应用部署到客户端环境中的前第三模型,不同组的特性。例如,在客户端环境中,可存在一个或多个受信任模块以及被存储在本地安全存储器中的某PEFM,而一个或多个受信任模块被存储在远程服务器或云环境中,并且某PEFM被存储在远程安全存储器中。在这样的示例中,可通过本地地和远程地关联不同的受信任模块来协调动态执行依赖性。受保护的函数的执行可在线或离线或以这两种方式的混合发生,这很可能使攻击甚至更加困难。
通常将方法设想为导致期望结果的自洽的步骤序列。这些步骤要求对物理量的物理操纵。通常,尽管不是必然的,这些量采用能够被存储、传递、组合、比较和以其他方式操纵的电或磁信号的形式。有时主要出于普遍使用的原因,将这些信号称为位、值、参数、项目、元素、对象、符号、字符、术语、数字等是方便的。然而,应当注意,所有这些术语和类似术语应与适当的物理量相关联且仅仅是被应用到这些量的方便标签。已经为了说明的目的介绍本发明的描述,但是本发明的描述并不意图是穷尽的或限于所公开的实施例。很多修改和变型将对于本领域技术人员来说是明显的。选择了实施例来解释本发明的原理及其实际应用,并使得其他本领域技术人员能够理解本发明,以便实施具有如可能适于其他所设想到的用途的各种修改的各种实施例。