检测针对软件应用的利用
【技术领域】
[0001]本发明涉及用于在能够检测和击败针对软件应用的利用(exploit)的装置上执行软件应用的方法和设备以及布置为执行该方法的装置和系统。
【背景技术】
[0002]当试图保护计算装置上的软件应用免受篡改时,安全可能仅实际上等于最弱攻击路径。通常能够使用许多不同技术和路径攻击软件应用,当最初设计和编写该软件时可能未想到其中的一些技术和路径。攻击者将会倾向于采用最容易的攻击路径,并且经常将会发明新的路径而非攻击受到很好保护的路径。
[0003]通常,软件应用的某个内核能够在这种程度上被很好地保护:攻击者不愿意或不能攻击它,或者针对其的攻击将会花费足够长的时间。然而,在这个内核之外,可能存在使软件应用容易受攻击的相对比较简单的攻击路径。软件应用的设计者和提供商可能知道这些攻击路径,但可能难以充分保护这些攻击路径。
[0004]考虑例如这样的情况:软件应用必须使用它把安全关键数据发送到的依赖库。在现有技术中,可使用防篡改检测(诸如,完整性证实(IV))实现软件应用和它使用的库的完整性,在防篡改检测中,利用产生加密安全签名的签名工具对软件应用和依赖库进行签名。在启动或执行(传统IV检查)期间的某个时间,或者恰好在每个关键过程调用(能够被称为安全调用)之前,在磁盘(或其它永久存储装置)上或在存储器中或者在两者中证实代码段的签名。如果签名被正确地证实,则软件应用确认它的代码未被篡改并且按照原样继续执行。如果签名未被证实,则软件应用具有如下指示:代码段已被修改并且执行将会因此可能失败或采用与最初设计和预期的执行路径不同的执行路径,并且软件应用能够因此采取预防措施(诸如,阻止执行)。这些检查(尤其是如果很好地隐藏并且集成到软件应用产品中)使得攻击者非常难以改变软件应用的计算机程序代码。
[0005]传统防篡改检查和安全调用需要:在软件应用被部署到计算装置之前,软件应用的依赖库的二进制数可用于签名。如果开发者无法使用该库或者获得该库是不实际的,则不能计算签名并且该技术失败。例如,如果由无数不同方分别提供并且部署库并且在每一方以不同方式自由实现并且更新库的情况下(诸如针对手持式装置制造商的许多库的情况那样),则能够发生这种情况。然后,经常难以或无法与所有方通信并且获得它们的库的拷贝,并且经常无法在部署库之前及时获得对库的更新。因此,即使能够很好地保护软件应用自身免受篡改,但如果没有防篡改技术能够被用在依赖库上,则黑客也能够简单地利用他们自己的库替代这些库并且间接地攻击软件以便例如抽取关键数据。
[0006]本发明解决相关现有技术的问题和限制。
【发明内容】
[0007]本发明提供一种防篡改方案,其中软件应用检查已知利用的存在,并且特别适用于对计算机装置的大用户群实现软件应用的情况。通常,从某个外部中心源在每个计算机装置上频繁地更新已知利用的签名。在每个计算机装置上,检测过程被集成到软件应用的受到很好保护的区域(通常在这里被称为安全内核)中。以这种方式,能够快速地停止已知利用,因此阻止这些利用影响用户群的显著百分比,而非尝试停止所有攻击。单独地,本发明不必停止开发新的利用(虽然签名内、结合签名或除了签名之外的高级启发法可以能够检测正被开发的利用),而是阻止这种利用以普遍方式有效地分布。
[0008]通过在软件应用内包括安全内核并且在安全内核内提供系统证实功能,本发明提供装置上软件应用的执行。系统证实功能被用于参照可由外部服务器提供的利用签名数据来扫描针对应用的利用,例如试图恢复可在应用执行时在应用内找到的密钥的本地利用。
[0009]特别地,本发明提供一种在装置上执行软件应用的方法,该方法包括下述步骤:提供具有安全内核的软件应用;在该装置处从位于该装置外部的源接收利用签名数据;以及执行安全内核内的系统证实功能,系统证实功能被布置为使用利用签名数据检测针对软件应用的利用。
[0010]该装置可以是移动计算装置,诸如移动电话、平板计算机或类似装置。
[0011]利用签名数据和/或系统证实功能可被配置为使得仅对于针对软件应用的本地利用执行扫描,其中该装置的其它合法用户从事针对软件应用的各方面的利用,诸如试图恢复加密数据(诸如,密钥)。结合利用签名数据,系统证实功能还可被布置为仅扫描针对该软件应用的利用,并且不扫描针对其它软件应用的利用。
[0012]软件应用可被布置为使得使用利用绕过系统证实功能会引起软件应用的用户功能的限制,例如阻止应用执行它的主用户功能(例如,如果软件应用是媒体播放器,则阻止内容(诸如,视频和/或音频内容)的回放)。
[0013]通常,软件应用可被布置为对一个或多个库函数执行过程调用,所述一个或多个库函数被安装在该装置上但位于软件应用自身的外部。软件应用可随后被布置为:在完成对外部库函数的过程调用之前执行对利用的扫描,并且被布置为:如果通过该扫描而检测到针对软件应用的利用,例如,如果检测到它的已修改或交换库的利用,检测到窥探过程调用的利用,则阻止所述过程调用的完成。
[0014]系统证实功能可被布置为在解密软件应用所需的选择的数据之前执行对于针对软件应用的利用的扫描,并且被布置为如果通过该扫描而检测到针对软件应用的利用,则阻止所述解密的完成。这种数据能够包括软件应用的执行所需的程序代码。
[0015]例如,可通常在该装置处通过由服务器启动的推送机制或由该装置启动的牵拉机制例如从服务器接收利用签名数据作为至少一个利用签名文件,并且这可定期地发生并且需要根据预定约束实现这一点。利用签名数据可被加密在接收的利用签名文件内,并且系统证实功能可随后被布置为在使用之前或在使用期间解密利用签名数据以执行对利用的扫描。
[0016]利用签名文件还可包括时间戳或其它时间数据,例如证明文件的创建或递送到该装置的时间。软件应用或特别是系统证实功能可随后被布置为根据时间戳确定是否使用利用签名文件内所包含的利用签名数据。例如,如果时间戳太旧,则该文件可被拒绝。为了阻止篡改这个过程,安全时钟可被用于该装置中以确定时间戳是否满足特定准则。
[0017]利用签名文件还可包括数字签名,并且系统证实功能可随后被布置为:如果软件应用或系统证实功能证实该数字签名失败,则不使用接收的利用签名文件。
[0018]例如,通过提供用于执行特定算法的完整代码,或者通过提供用于完成对将要被执行的算法的定义的部分代码和/或数据,利用签名数据还可为系统证实功能提供用于扫描所述利用的一个或多个算法。
[0019]本发明还可提供一种执行安装在计算机装置上的至少一个软件应用的方法,包括:在该装置处从位于该装置外部的源接收利用签名数据;并且在计算机装置上执行系统证实功能以扫描针对所述至少一个软件应用中的至少一个软件应用的利用。以这种方式,单个系统证实功能能够被用于扫描针对多个软件应用的利用。能够根据以上已经讨论的各种方法方面执行这种布置。在这种布置中,系统证实功能可在所有软件应用之外(例如,在装置上的安全环境内)执行,将扫描针对该软件应用的利用,或者系统证实功能能够例如在一个应用的安全内核内执行,但扫描针对该软件应用和/或其它应用的利用。
[0020]本发明还提供与以上方法对应的设备,例如一种计算机装置,包括:
软件应用,被提供有安全内核;和
系统证实功能,被布置为在软件应用的安全内核内执行以扫描针对软件应用的利用,所述计算机装置被布置为从位于装置外部的源接收利用签名数据,系统证实功能被布置为使用利用签名数据扫描所述利用。
[0021]本发明还提供一种与描述的方法和设备对应的软件应用,例如该软件应用包括安全内核和被布置为在如上所述的安全内核内执行的系统证实功能,并且本发明还提供对应的计算机可读介质,例如携带计算机程序代码的计算机可读介质,该计算机程序代码被布置为在计算机装置上实施这种软件应用。
【附图说明】
[0022]现在将参照附图仅作为例子描述本发明的实施例,其中:
图1图示系统证实模块在软件应用的安全内核内进行操作以扫描利用的计算机装置和用于将利用签名数据递送给该装置的机制;
图2图示为了操作图1的布置而执行的步骤;
图3示出利用签名数据可被产生并且使得对于装置可用的方式;
图4图示利用签名文件的各方面;
图5示出系统证实模块被实现为扫描针对装置中的多个软件应用的利用的布置;和图6和7图示可使用软件技术实现安全内核的方式。
【具体实施方式】
[0023]现在参照图1,计算机装置10被布置为执行软件应用20。计算机装置可以是例如传统个人计算机、平板计算机、移动电话或其它移动装置等。通常对这种计算机装置的大用户群实现本发明。软件应用20可通常被存储在硬盘驱动器、固态盘上或存储在某种其它形式的永久存储器中以便加载到计算机装置10的随机存取存储器中从而准备用于执行。
[0024]已知攻击者试图攻击软件应用。这可涉及例如:对对应可执行文件进行反向工程和/或修改可执行文件以便访问攻击者可能通常无法获得的特征/功能和/或信息。例如,攻击者可能没有针对访问应用的某个功能付费(例如,如果攻击者未获得针对该功能的合适许可)-用于执行该功能的指令可存在于攻击者已访问的软件应用的可执行文件中,但攻击者未被提供对这些指令的访问,或者执行这些指令的授权,在这种情况下,攻击者可执行攻击以试图避开位于合适位置的保护机制(例如,授权或许可检查)以便能够通过执行这些指令来访问该