著录项信息
专利名称 | 检测针对软件应用的利用 |
申请号 | CN201380077009.6 | 申请日期 | 2013-03-28 |
法律状态 | 撤回 | 申报国家 | 中国 |
公开/公告日 | 2016-01-06 | 公开/公告号 | CN105229652A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/10 | IPC分类号 | G06F21/10查看分类表>
|
申请人 | 爱迪德技术有限公司 | 申请人地址 | 荷兰霍***
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 爱迪德技术有限公司 | 当前权利人 | 爱迪德技术有限公司 |
发明人 | A.斯切辛斯基 |
代理机构 | 中国专利代理(香港)有限公司 | 代理人 | 申屠伟进; 陈岚 |
摘要
文本描述了一种通过在软件应用内包括安全内核并且在安全内核内提供系统证实功能来在装置上执行软件应用的方法。系统证实功能被用于参照可由外部服务器提供的利用签名数据扫描针对应用的利用,例如试图恢复可在执行时在应用内被找到的密钥的本地利用。
1.一种在装置上执行软件应用的方法,包括:
提供具有安全内核的软件应用;
在所述装置处从位于所述装置外部的源接收利用签名数据;并且
执行安全内核内的系统证实功能,系统证实功能被布置为使用所述利用签名数据扫描针对所述软件应用的利用。
2.如权利要求1所述的方法,其中结合所述利用签名数据,所述系统证实功能被布置为仅扫描针对所述软件应用的利用,并且不扫描针对其它软件应用的利用。
3.一种执行安装在计算机装置上的至少一个软件应用的方法,包括:
在所述装置从位于所述装置外部的源接收利用签名数据;并且
在计算机装置上执行系统证实功能以扫描针对所述至少一个软件应用中的至少一个的利用。
4.如任一前面权利要求所述的方法,其中所述软件应用被布置使得使用利用来绕过系统证实功能引起软件应用的用户功能的限制。
5.如任一前面权利要求所述的方法,其中所述软件应用被布置为对位于所述装置内但位于所述软件应用外部的库函数进行过程调用,并且系统证实功能被布置为:在完成所述过程调用之前执行对于针对所述软件应用的利用的扫描并且如果通过所述扫描而检测到针对所述软件应用的利用,则阻止所述过程调用的完成。
6.如任一前面权利要求所述的方法,其中所述系统证实功能被布置为:在解密所述软件应用所需的选择的数据之前执行对于针对所述软件应用的利用的扫描,并且如果通过所述扫描而检测到针对所述软件应用的利用,则阻止所述解密的完成。
7.如任一前面权利要求所述的方法,其中在所述装置接收所述利用签名数据作为至少一个利用签名文件。
8.如权利要求7所述的方法,其中所述利用签名数据在接收的利用签名文件内被加密,并且系统证实功能被布置为在用于执行对于针对所述软件应用的利用的扫描之前解密所述利用签名数据。
9.如权利要求7或8所述的方法,其中所述利用签名文件包括时间戳,并且系统证实功能被布置为根据时间戳确定是否使用所述利用签名文件内所包含的利用签名数据。
10.如权利要求7至9中任一项所述的方法,其中所述利用签名文件包括数字签名,并且系统证实功能被布置为:如果系统证实功能未能证实所述数字签名,则不使用接收的利用签名文件执行对于针对所述软件应用的利用的扫描。
11.如权利要求7至10中任一项所述的方法,其中所述装置被布置为定期地从外部服务器接收所述利用签名文件的更新版本。
12.如任一前面权利要求所述的方法,其中所述利用签名数据仅识别针对所述软件应用的本地利用。
13.如任一前面权利要求所述的方法,其中所述利用签名数据为所述系统证实功能提供用于扫描所述利用的一个或多个算法。
14.如任一前面权利要求所述的方法,其中所述利用包括用于从所述软件应用获得密钥数据的一个或多个利用。
15.如任一前面权利要求所述的方法,其中所述装置是移动计算装置。
16.一种计算机装置,包括:
软件应用,被提供有安全内核;和
系统证实功能,被布置为在软件应用的安全内核内进行执行以扫描针对所述软件应用的利用,
所述计算机装置被布置为从位于所述装置外部的源接收利用签名数据,系统证实功能被布置为使用所述利用签名数据扫描所述利用。
17.如权利要求16所述的计算机装置,其中所述软件应用被布置为使得使用利用来绕过所述系统证实功能引起所述软件应用的用户功能的限制。
18.如权利要求16或17所述的计算机装置,其中所述软件应用被布置为对位于所述装置内但位于所述软件应用外部的库函数进行过程调用,并且所述软件应用被布置为:在完成所述过程调用之前执行对于针对所述软件应用的利用的扫描并且如果通过所述扫描而检测到针对所述软件应用的利用,则阻止所述过程调用的完成。
19.一种计算机可读介质,包括:计算机程序代码,被布置为当在合适的计算机装置上执行时实施权利要求1至15中任一项所述的方法。
检测针对软件应用的利用
技术领域
[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] 已知攻击者试图攻击软件应用。这可涉及例如:对对应可执行文件进行反向工程和/或修改可执行文件以便访问攻击者可能通常无法获得的特征/功能和/或信息。例如,攻击者可能没有针对访问应用的某个功能付费(例如,如果攻击者未获得针对该功能的合适许可)-用于执行该功能的指令可存在于攻击者已访问的软件应用的可执行文件中,但攻击者未被提供对这些指令的访问,或者执行这些指令的授权,在这种情况下,攻击者可执行攻击以试图避开位于合适位置的保护机制(例如,授权或许可检查)以便能够通过执行这些指令来访问该功能。一旦攻击者已成功地攻击了可执行文件,攻击者可形成可执行文件的攻击版本,该攻击版本能够实现对受保护功能的未授权访问——攻击者可随后分发可执行文件的这个攻击版本,由此允许其他人访问这个受保护功能。类似地,攻击者可攻击可执行文件以便产生可执行文件的攻击版本,该攻击版本包括另外的恶意软件功能——攻击者可随后分发可执行文件的这个攻击版本,并且如果接收者运行可执行文件的攻击版本,则接收者可能最终运行恶意软件部件。
[0025] 计算机装置10因此被布置为从外部源35下载利用签名数据(例如,具有利用签名文件(ESF) 30的形式)。外部源通常定期地(例如,以推送类型操作或根据来自装置10或软件应用20的请求)将更新的ESF 30递送给计算机装置10。以这种方式,ESF能够保持最新以反映由利用发现组70识别的改变的和新的利用,利用发现组70是负责发现并且阻止软件应用20上的新的利用并且负责更新ESF以便使软件应用20能够检测这些利用的主体或组织。特别地,ESF 30可识别由应用20或计算机装置10的合法用户进行的针对软件应用20的利用,该利用可被称为本地利用。例如,ESF可识别旨在获得能够被用于击败内容保护系统、数字版权管理系统和类似系统的关键数据或其它信息的利用。
[0026] ESF 30包含软件应用20上的已知利用的签名。签名数据包含关于例如如何利用签名检测特定利用的信息,该签名提供用于检测一个或几个类似利用的信息。
[0027] 软件应用20以如下这种方式使用集成到软件应用20中的系统证实功能或系统证实模块(SVM) 50检测利用:绕过系统证实功能将会阻止应用执行它的功能中的至少显著部分或主要部分。特别地,SVM 50在软件应用20的安全内核40内执行,安全内核40是软件应用20中的受到很好保护区域。
[0028] 可按照各种方式提供安全内核,包括:例如通过在单独的微处理器上的安全硬件元件中运行应用的一部分,以及通过使用安全软件部件。ARM Trustzone是能够被用于创建这种安全内核的技术的例子(在“http://en.wikipedia.org/wiki/ARM_architecture#Security_Extensions_.28TrustZone.29”描述)。
[0029] 在EP2362573中描述了类似概念,EP2362573通过引用被包含于此,并且在EP2362573中,电子装置包括安全部分和非安全部分。安全部分包括用于数据(诸如,信任密钥和会话密钥)的安全存储的存储器。安全部分是计算机装置的专用部分并且包含硬件元件,该硬件元件不允许通过来自安全部分外面的数据读/写操作来执行的访问并且仅允许以加密形式与接收器的非安全部分的数据传送。EP2362573中的安全部分的例子是安全加密引擎。
[0030] 在PCT/EP2012/004267中阐述了提供安全内核的其它方式,PCT/EP2012/004267也通过引用被包含于此。这个专利申请描述了现代芯片以及如何在制造过程期间配置该现代芯片,并且讨论使用该芯片的某个部分执行软件,而在该装置上执行的任何其它软件无法访问它的操作,也无法经该芯片的硬件管脚访问它的内部存储器。攻击者因此将会需要打开该装置并且使用探针观察该软件。
[0031] 能够使用安全软件部件提供安全内核,例如,在安全软件部件中,应用软件变换,软件变换完全修改计算机程序的控制流和数据流。一个例子是在下述文献中讨论的白箱AES技 术:“White-Box Cryptography and an AES Implementation”, by Stanley Chow, Philip Eisen, Harold Johnson, and Paul C. Van Oorschot, in Selected th
Areas in Cryptography: 9 Annual International Workshop, SAC 2002, St. John's, Newfoundland, Canada, August 15-16, 2002,该文献的全部公开内容通过引用包含于此。“White-Box Cryptography and an AES Implementation”公开了一种针对通过使用一系列查找表创建加密算法的密钥相关实现来保护加密算法的完整性的方案。通过部分评估关于(一个或多个)密钥的该算法,(一个或多个)密钥被嵌入在该实现中。部分评估表示涉及密钥的表达被尽可能合理地评估,并且结果被放入该代码中而非全部表达中。这表示该实现特定于(一个或多个)特定密钥并且密钥输入对于使用该算法的密钥相关实现是非必要的。因此可分发用于加密或解密内容或数据的、可以是用户特定的算法的密钥相关实现,而非分发可以是用户特定的密钥。创建密钥相关实现以通过下述操作来隐藏(一个或多个)密钥:(1)使用用于合成而非个体步骤的表;(2)利用随机双射对这些表进行编码;和(3) 将加密边界扩展超出加密算法自身进一步向外到包含的应用中,由此迫使攻击者理解显著更大的代码段以实现他们的目标。在PCT/EP2013/056617中发现最新的讨论,该申请也通过引用包含于此,在PCT/EP2013/056617中,使用纠错码对数据进行变换,并且在纠错数据域中执行对数据的操作,从而在对数据的每个操作之后,纠错码保持完整。
[0032] 在PCT/EP2013/056615中阐述了使用安全软件部件实现安全内核的其它方式,PCT/EP2013/056615也通过引用包含于此。例如,参见这个文档的第8-17页和图3和4以及朝着本详细描述的末尾阐述的对应材料。这些软件技术使用数学技术的混合,这些数学技术使用接近加密强度的变换对数据进行变换,但允许对变换数据的操作仍然在去除该变换之后产生有效结果。
[0033] 以上技术倾向于产生变换的软件代码,变换的软件代码相对比较低效,但在不了解用于产生变换代码的基本参数的情况下非常难以进行反向工程。由于运行时间低效,所以无法将这种技术应用于全部软件应用,但可行的是将它们应用于包含应用的更关键安全功能的应用的子部分(即,安全内核)。
[0034] SVM 50使用ESF 30扫描已知利用。SVM 40能够优选地检查计算装置的宽范围的性质,包括:搜索针对特定字节序列的随机访问和永久存储器,观察装置资源(诸如,存储器、CPU使用率或IO),以及观看系统调用模式。
[0035] 图1还示出示例性依赖库60,依赖库60被安装在计算机装置10中并且提供应用所需的功能。
[0036] 图2示出图1的布置可如何操作以保护软件应用20免于利用。软件应用20安全地集成SVM 50,在启动时并且在软件应用10的执行期间运行SVM 50。在执行期间,例如,可在对一个或多个依赖库60的重要调用之前运行SVM 50以证实未使用已知利用。
[0037] 在图2中,步骤110图示将例如来自应用开发者或其它应用源80的应用20部署到计算机装置20。例如在经网络下载或从计算机可读介质安装之后,可部署该应用,其中此时提供或不提供最新的ESF 30。每次在步骤115运行应用时,也启动SVM 50(图2中未示出)。SVM随后检查ESF 30并且证实它是可信的并且最新的。如果不是可信的或最新的,则可由装置在步骤120获得新版本的ESF。
[0038] 软件应用可被配置为直到可在装置10获得证实的且最新的ESF才继续执行。当在步骤125运行时,SVM使用ESF内所包含的签名信息证实未执行已知利用。如果发现利用,则在步骤130阻止或部分地阻止应用20执行它的功能。如果未发现利用,则它使应用
20能够例如在进行对依赖库的调用时(如步骤135中所示)正常地继续执行。
[0039] 同时,如图3中所示,利用发现组或实体70在步骤150中例如通过与计算机装置
10的互联网连接继续扫描在更广泛的用户群中实现的应用上的利用,计算机装置10已实现该软件应用并且已被识别为受到损害。当发现新的利用时,由利用发现组70针对利用签名32在步骤155分析该新的利用,并且利用签名数据(例如,具有ESF 30的形式) 在步骤
160在ESF源35上被更新以包括新的签名32。
[0040] 上述方案具有许多优点:
·对于将要被有效地部署的利用,必须禁用SVM 50。如果SVM未被禁用,则攻击发现组
70能够部署新的签名以禁用该利用。这迫使攻击者击败安全内核40,安全内核40通常是应用的最安全的部分;
·不必在部署软件应用20之前知道所有潜在利用和利用路径;
·应用20能够扫描软件应用的所有依赖性,包括针对利用的依赖库60和数据文件;
·经常,能够发现攻击者难以改变从而使攻击者难以适应的针对利用的签名;
·扫描利用时SVM的活动能够快速,因为签名的数量能够保持为低。这是因为,仅需要检测影响软件应用20自身的利用,其中影响在计算机装置10上执行的其它软件的利用被忽略。这可具有这样的优点:能够更频繁地运行扫描;
·因为软件应用20能够要求使用相对较新版本的利用签名文件,所以对利用签名文件的更新能够快速地跨许多装置上的软件应用20的较大用户群生效。
[0041] 当与用于扫描计算机系统上的病毒的现有技术软件比较时,本发明的实施例具有许多差异,包括下面各项:
·SVM被集成到软件应用自身中,而非独立地或单独地运行;
·SVM可扫描由计算机装置10的用户针对软件应用20进行的利用(本地利用),而非扫描由黑客从计算机装置外面进行的利用;
·SVM可被集成到软件应用20中,以使得成功的扫描(其中未发现利用)与正确运行的应用20的组成部分;
·SVM仅需要扫描以它被集成到的软件应用为目标的利用,而非扫描能够以通常的计算机装置为目标的所有利用。
[0042] 如以上所讨论的,系统证实模块50被紧密地集成到软件应用20中,以使得难以避开由SVM执行的扫描。例如,能够以许多方式实现这一点:
(a)在部署之前或在运行时间期间的某个时间,但在由SVM执行的扫描之前,将软件应用20起作用所需的数据或对于软件应用20起作用关键的数据进行加密,然后作为成功扫描的结果解密该数据;
(b)通过将由SVM执行的扫描集成到由软件应用20进行的过程调用中,尤其是集成到调用依赖库60的那些过程调用中,从而使得失败的扫描将会阻止执行或完成过程调用,以使得关键数据不被传递给那些过程调用;
(c)通过在软件应用20自身内使用模糊化技术(诸如,控制流平化和传统防篡改检查);
(d)通过将防调试技术集成到软件应用20中;
(e)通过SVM从一个或多个特许过程或信任的执行环境执行至少一些扫描。
[0043] 通过SVM 50扫描利用,成功扫描(未检测到利用的扫描)能够因此导致加密数据变为非加密或成功地进行功能调用。以这种方式,如果攻击者使软件应用20跳过由SVM执行的扫描,则加密数据将不会变为非加密或者将不会执行功能调用,并且软件应用将会因此无法正确地运行。
[0044] SVM 50能够在它的用于检测利用的扫描期间使用许多不同技术,例如与在现有技术病毒扫描器中发现的技术类似的技术。能够针对特定字节模式扫描磁盘和存储器上的文件。与软件应用20相关的文件(包括数据文件以及系统文件和依赖库文件)能够被扫描。
应用二进制代码以及在脚本环境(诸如,JavaScript)中运行的代码能够被扫描和保护。能够通过该扫描来监测系统属性(诸如,CPU性能模式、磁盘使用模式和网络带宽使用)。系统调用模式能够被用于寻找由攻击表现出的特定特征。关于已知的良好的库的统计数据(诸如,尺寸、字节模式或部分签名)能够被用于帮助增加关于扫描的准确性。
[0045] 上述任何一个特定类型的信息可能不单独引起对利用的准确检测,但不同信息类型可被组合使用以提高准确性。ESF 30内所包含的特定签名可包括用于积极识别的许多条件。能够使用各种条件,诸如AND(例如,A AND B必须为真)、OR(例如,A OR B必须为真)、NOT(例如,A AND B但NOT C必须为真)、选择(例如,A、B、C、D、E中的3个或更多个必须为真)或浮点值(例如,超过一个月的A的20%+B的35%+卡埃方(C)的10%必须小于
1.0)。SVM应该被用于在软件应用20的启动期间或之后并且在尤其是对依赖或外部库的重要过程调用之前的某个时间进行扫描。
[0046] 签名可能需要在超过一个地方(例如,在第一文件中以及在第二过程调用中的字节序列)进行测试或检查以使攻击者更加难以避开扫描。需要注意的是,许多利用能够在软件应用20已运行一些时间之后被启动,因此,重要的是,随着应用运行定期地执行利用扫描。可最佳地在多个线程中执行这种扫描以使攻击者和利用更加难以检测扫描的定时并且使攻击者或利用更加难以停止该扫描。当文件或库已被成功地扫描时,可计算并且存储文件或库的签名或哈希(hash),以使得在获得新的ESF或签名或哈希改变的时间之前,在文件或库上可以不需要进一步扫描。
[0047] 例如,通过破坏系统调用或文件访问,攻击者可试图破坏SVM在它的扫描期间搜集信息的机制。为了消除这种可能性,SVM可将它搜集信息的方式随机化。SVM还可搜集系统的已知的并且不可变的属性。如果这些属性被改变或不正确,则SVM可以能够推导出它是攻击或利用自身的目标。
[0048] 虽然利用签名文件30包含定义可在扫描期间检测到的利用的签名(诸如,针对搜索什么字节模式以及在哪里的指令),但它还可包含指定何时产生和/或递送利用签名文件30的时间信息。利用签名文件30的例子被图示在图4中。ESF 30包含在图4的实施例中被加密的利用签名32、指示何时产生或递送ESF的时间戳33和SVM 50能够用来证实ESF 30的数字签名34。
[0049] SVM可证实ESF 30是最新的或者它满足一个或多个时间约束。例如,SVM可能需要ESF必须已在某个时间段内(例如,不超过一个星期前)被创建或递送,并且如果ESF未在某个时间段内被创建或递送,则软件应用20可停止全功能运行,直至获取满足相同或不同时间约束的新的ESF。对于确保以下情况而言这种机制可能至关重要:当由攻击发现组
70识别出新的利用时,将会要求所有用户在合理的时间段内获得更新的ESF,更新的ESF具有用于识别新的利用的签名。同时,针对具有旧的ESF的用户,新的利用可以是有效的。攻击者能够篡改计算机装置10中的相关时钟,因此允许使用旧的ESF,并且为了避免这一点,计算机装置10可包括安全时钟以阻止时钟反转或系统时钟篡改。
[0050] 利用签名文件优选地也受到保护以免被发现,从而禁止攻击者获得关于他们的利用如何被发现并且扫描的有价值的信息,因为这种信息能够被用于快速地适应于制造不太能被SVM检测到的新的利用。通过使用密钥以某种方式将文件加密并且在应用内使用处于变换状态下的文件,能够执行对ESF 30的保护。ESF优选地也受到保护以免被篡改,否则攻击者能够例如进行改变,从而使得ESF搜索错误的签名,或者他们能够改变时间信息,因此允许使用旧的ESF。通过使用加密安全方法(诸如,使用数字签名34,例如RSA签名)以数字方式对文件进行签名并且要求SVM证实签名34,ESF能够受到保护以免被篡改。另外,通过把SVM布置为仅将时间戳33的某些值视为有效,例如通过可被特定数字除尽,或通过成为某个预定义数学级数的最接近的值,能够实现篡改保护,从而使得在允许范围之外的值将会暗示ESF是不可信的并且应该被拒绝。
[0051] 为了提高SVM在执行扫描时的通用性,ESF可包含例如具有共享库或动态链接库形式的代码,该代码包含可由一些签名32参考的例程。以这种方式,如果集成到SVM中的已有扫描技术不足以正确地识别利用,则能够分发新的技术或对已有技术的修改作为ESF的一部分。这种代码优选地被以数字方式签名并且受到保护以确保攻击者不能使用这个功能对代码进行修改或执行他们自己的代码或分析利用如何被检测到。
[0052] 软件应用20优选地包括用于频繁地获得最新利用签名文件以使得能够在利用影响实现软件应用20的计算机装置10的用户群的大部分之前停止利用的方法。实现这一点的一种方式是使用互联网连接将ESF从ESF源35递送给软件应用20,其中软件应用要求它足够频繁地访问互联网。能够使用主控更新的利用签名文件的服务器(诸如,HTTP服务器)实现ESF源35,并且能够需要软件应用从服务器牵拉更新的ESF。另外,更新的ESF能够被广播到部署在用户群的许多计算机装置上的软件应用的实例。可布置软件应用20,从而使得如果它未能获得被视为足够新的ESF,则应用将会停止执行它的主要功能,直至应用已能够连接到ESF源35以获得更新的ESF。为了在特定计算机装置10上使ESF变得过时的可能性最小化,应用应该被布置为即使当前ESF未被视为太久也频繁地试图获得较新的ESF文件。
[0053] 当计算机装置10请求利用签名文件30时,ESF源35可返回包括对应时间戳的最新ESF版本。利用发现组70能够保持ESF源35以在发现新的利用时保持最新的ESF。自动化脚本能够由ESF源用于写入同时期的时间戳33并且以数字方式对从利用发现组70递送的最新ESF进行签名。必须足够频繁地完成这种时间戳和数字签名,以使得新的利用签名被快速地递送给计算机装置。然而,必须小心使每个新更新的ESF足够不同于以前的版本,以使得收集更新的ESF文件的攻击者由于作为时间戳33的两个特定版本之间的唯一或唯一显著差异而不能获得信息。为了帮助避免这种风险,某种随机性(诸如,插入到ESF中的伪随机值、ESF的随机布局或插入到ESF中的随机密钥)可被用于减少对加密密钥和ESF的其它方面的成功的严酷攻击的风险。
[0054] 攻击发现组70能够包括针对发布的关于利用的信息定期地扫描互联网的一组人,和/或能够包括执行相同或类似功能的一系列自动化工具。当已发现利用时,针对能够被用于检测该利用的签名和模式分析该利用。重要的是,当产生签名时,它正确地识别利用并且不会导致许多误报,误报将会导致软件应用的用户的挫折和差的体验。当已构造新的签名时,ESF在ESF源被更新以包括新的签名。需要注意的是,虽然一些利用可以超过一个不同软件应用20为目标,但ESF 30优选地仅包含以对应软件应用20为目标的利用的签名。
[0055] 虽然在上述实施例中SVM 50被部署在软件应用10的安全内核中,但在其它实施例中,类似SVM 150能够被与软件应用20分开地部署并且被用于保护一个或多个软件应用
120、120'、120",如图5中所示。即使所述多个软件应用120、120'、120"中的两个或更多个软件应用由各自不同方开发,也可实现这一点。通过以如下这种方式加密任何这种应用(或任何这种应用的部分)能够保护任何这种应用:仅外部SVM 150能够执行需要的解密。
在能够运行任何这种软件应用之前,SVM 150将会证实应用120、120'、120"未被篡改并且没有已知利用当前被部署在计算机装置10上,例如没有依赖库60、60'、60"被已知利用改变。如果通过扫描而发现计算机装置20已没有利用,则软件应用被解密并且启动。
[0056] 在软件应用120、120'、120"与外部SVM 150关联地运行的同时,SVM 150应该优选地继续扫描并且证实已知利用未被使用或启动。优选地,任何这种应用120、120'、120"应该要求外部SVM 150继续起作用,以使得攻击者不能简单地停止对应过程或线程。通过包括一个或多个另外的文件或资源65(应用120"需要所述一个或多个另外的文件或资源
65,但在加密状态下保持所述一个或多个另外的文件或资源65,并且仅由SVM 150在完成成功扫描时解密所述一个或多个另外的文件或资源65),能够实现这一点,例如如图5中所示。替代地或者附加地,应用120、120'、120"能够被布置为执行外部SVM 150正在正确地运行的检查,并且如果SVM处理150在扫描该应用时停止或变得无效,则减少或停止通常的功能。
[0057] 现在下面是能够被用于提供以上安全内核40的技术的讨论,可在安全内核40中执行系统证实模块50。当程序(或软件)正在由处理器执行时,如果用户(或第三方)访问该处理以使得用户能够观察和改变程序的执行(例如,通过运行合适的调试器)——这种改变能够是对过程流程的改变或对正在处理的数据的改变,则施行该执行的环境是所谓的“白箱”环境。对程序的执行的这种观察和/或改变可被称为篡改。用户可观察或改变(或换句话说,篡改)程序的执行以便满足他们自己的目的或目标,如果程序在未被篡改的情况下正常地运行,则可能无法满足该目的或目标。用于实现特定目的或目标的这种篡改可被称为目标导向篡改。目标导向篡改可涉及:例如,观察和/或改变正在白箱环境中运行的程序的执行以便获得或推导出由该程序用来处理数字数据的密钥(例如,用于解密数据的解密密钥)。
[0058] 已知用于保护正在白箱环境中运行的数据处理软件应用(或程序或系统)的完整性的各种技术。这些技术通常旨在通过在软件应用的控制和/或数据路径中引入另外的复杂性和/或随机性来隐藏该应用的嵌入知识。这种另外的复杂性和/或随机性具有这样的效果:使软件应用的信息(或数据)或执行路径不清楚或模糊化。作为这种模糊化的结果,通过代码检查来从应用提取信息变得更加困难,并且更加难以发现和/或修改与程序的特定功能关联的代码。因此,以下的情况变得困难得多:攻击者访问正在白箱环境中运行的程序以检索敏感数据或改变程序的操作以便通过篡改程序的执行来满足他们自己的目标。如此,减小了攻击者执行目标导向篡改的能力。旨在减小攻击者执行目标导向篡改的能力的这些技术可被视为提高软件的抗篡改性。如果对于攻击者而言执行目标导向篡改是足够困难的,则对于任何实际目的,即使在理论上篡改仍然是可能的,该软件也可被视为抗篡改。
[0059] 能够在如下文献中发现用于提高软件的抗篡改性的示例性技术:“White-Box Cryptography and an AES Implementation”, by Stanley Chow, Philip Eisen, Harold th
Johnson, and Paul C. Van Oorschot, in Selected Areas in Cryptography: 9 Annual International Workshop, SAC 2002, St. John's, Newfoundland, Canada, August
15-16, 2002,该文献全部公开内容通过引用包含于此。“White-Box Cryptography and an AES Implementation”公开一种用于通过使用一系列查找表创建加密算法的密钥相关实现来保护加密算法的完整性的方案。通过关于(一个或多个)密钥对该算法的部分评估,(一个或多个)密钥被嵌入在该实现中。部分评估表示涉及密钥的表达被尽可能合理地评估,并且结果被放入代码中而非全部表达中。这表示该实现特定于(一个或多个)特定密钥并且密钥输入对于使用该算法的密钥相关实现是非必要的。因此可分发用于加密或解密内容或数据的、可以是用户特定的算法的密钥相关实现,而非分发可以是用户特定的密钥。创建密钥相关实现以通过下述操作来隐藏(一个或多个)密钥:(1)使用用于组成而非个体步骤的表;
(2)利用随机双射对这些表进行编码;和(3) 将加密边界扩展超出加密算法自身进一步向外到包含的应用中,由此迫使攻击者理解显著更大的代码段以实现他们的目标。
[0060] 附图中的图6图示示例性函数X的实现310,示例性函数X在函数X的输入312或经函数X的输入312接收或获得数据d,处理数据d以产生处理的数据X(d),并且经输出316提供处理的数据X(d)。该函数的实现310可涉及一个或多个处理步骤,所述一个或多个处理步骤包括指令、代码、逻辑、查找表中的一个或多个或其任何组合,以便响应于在输入312接收到数据d而在输出316提供处理的数据X(d)。图6还图示函数X的编码或模糊化实现
320——这种实现320包括模糊化函数X'。在实现320中,通过使用输入编码F和输出编码G来使函数X模糊化以形成函数X'。模糊化函数X'在模糊化函数X'的输入322处或经模糊化函数X'的输入322接收或获得输入数据d的编码表示F(d),处理编码表示F(d)以产生处理的数据X(d)的编码表示G(X(d)),并且经输出328提供编码表示G(X(d))。编码表示F(d)是使用函数F编码的数据d。编码表示G(X(d))是使用函数G编码的数据X(d)。
模糊化函数X'能够被视为:
-1
X' = G o X o F
其中o如通常一样表示函数合成(即,对于任何两个函数a(x)和b(x),按照定义,(a o -1 -1
b)(x)=a(b(x)))。在该实现中,通过将函数F 、X、G组合到单个查找表中来使函数F 、X、G模糊化。各函数到单个查找表中的这种组合意味着:只要函数F和G保持对于攻击者而言未知,攻击者就不能提取关于函数X的信息,并且因此不能例如提取作为函数X的基础或由函数X使用的秘密信息(诸如,密钥)。尽管图6的中间将模糊化函数X'图示为一系列函-1 -1
数F 、X和G,但这仅用于说明的目的。特别地,模糊化函数X'并不分开地实现函数F 、X和G中的每一个(因为这样做将会把数据d和X(d)以及函数X的操作暴露给攻击者)——-1
替代地,如上所述,函数F 、X和G被一起实现为单个函数(诸如,经查找表),以使得模糊化函数X'不会把数据d和X(d)暴露给攻击者并且不会把函数X的处理或操作暴露给攻击者。
[0061] 任何给定程序能够被视为函数的序列或网络。附图中的图7图示程序或程序的一部分的示例性实现410,其中两个函数X和Y将要被顺序地评估(即,作为序列的一部分)以便提供下述操作:
(Y o X)(d) = Y(X(d))
换句话说,函数的序列在序列中的第一函数(即,函数X)的输入312或经序列中的第一函数的输入312接收或获得数据d,函数X随后处理数据d以产生处理的数据X(d),并且经输出316提供处理的数据X(d),如以上所讨论的。处理的数据X(d)经第一函数X的输出316被提供给函数的序列中的第二函数(即,函数Y)的输入412,函数Y随后处理数据X(d)以产生处理的数据Y(X(d)),并且经输出416提供处理的数据Y(X(d))。以这种方式,在第二函数Y的输出416提供的处理的数据Y(X(d))被提供作为来自函数X和Y的序列的输出。再一次,函数X和Y中的每一个能够分别被实现为指令、代码、逻辑或查找表中的一个或多个或其任何组合,如以上所讨论的。然而,当在白箱环境中执行函数X和Y的序列的实现410时,攻击者能够观察和/或修改下面的一项或多项:函数X和Y中的每个函数的操作;提供给函数的序列的输入312的数据d;在函数的序列的输出416提供的处理的数据Y(X(d));和从第一函数X的输出316提供给第二函数Y的输入412的处理的数据X(d)。因此,当在白箱环境中执行函数X和Y的序列作为实现410时,由该函数的序列提供的操作容易遭受篡改。在函数X和Y的序列的实现410形成例如程序的加密部件的密钥相关实现的情况下,攻击者可通过观察或篡改函数X和/或Y和/或提供给它们/在它们之间提供的数据来提取或推导出密钥。为了克服这个问题,函数X和Y的序列中的函数X和Y能够分别被实现为那些函数X和Y的模糊化版本X'和Y'。
[0062] 图7还图示函数X和Y的序列的这种编码或模糊化实现420——实现420包括模糊化函数X'和模糊化函数Y'。在实现420中,通过组合函数X与输入编码F和输出编码G来形成函数X的模糊化函数X',如前面结合图6所述的。以与模糊化函数X'类似的方式形成函数Y的模糊化函数Y',但用于模糊化函数Y'的实现的输入编码G和输出编码H可不同于用于模糊化函数X'的实现的输入编码F和输出编码G。函数Y的模糊化实现Y'能够因此被表示为:
-1
Y' = H o Y o G
用于模糊化函数Y'的输入编码G应该与用于前一函数X'的模糊化实现的输出编码G匹配。这意味着:使用输出编码G在模糊化函数X'的输出328提供的处理的数据G(X(d))的表示能够被用作预期接收使用输入编码G表示的数据X(d)(即,它预期接收G(X(d)))的模糊化函数Y'的输入。将会理解,尽管函数G被称为模糊化函数Y'的输入编码(因为将要在模糊化函数Y'的输入328接收的数据X(d)被利用函数G编码,从而使得它是数据X(d)的编码表示G(X(d))),但与函数Y组合以实现模糊化函数Y'的实际函数是函数G的反函-1 -1
数,即函数G ,函数G 具有抵消输入编码G以允许函数Y对数据X(d)进行操作的效果。
[0063] 模糊化函数Y'从模糊化函数X'的输出328接收表示为G(X(d))(即,由函数G编码)的数据X(d)。模糊化函数Y'处理经处理的数据X(d)的编码表示G(X(d))以产生经处理的数据Y(X(d))的编码表示H(Y(X(d))),并且经输出428提供编码表示H(Y(X(d)))。由于模糊化函数Y'是该函数的序列中的最后一个函数,所以模糊化函数Y'的输出428是该函数的序列的模糊化实现420的输出。
[0064] 再一次,尽管图7的中间将模糊化函数Y'图示为一系列函数G-1 、Y和H,但这仅-1
用于说明的目的。特别地,模糊化函数Y'并不分开地实现函数G 、Y和H中的每一个(因为这样做将会把数据X(d)和Y(X(d))以及函数Y的操作暴露给攻击者)——替代地,如上-1
所述,函数G 、Y和H被一起实现为单个函数(诸如,经查找表),以使得模糊化函数Y'不会把数据X(d)和Y(X(d))暴露给攻击者并且不会把函数Y的处理或操作暴露给攻击者。
[0065] 将会理解,为了正确地计算函数的序列的模糊化实现420的输出H(Y(X(d)))的表示,实现420的输入d必须使用模糊化函数的序列中的第一模糊化函数的输入编码(即,F)表示为F(d),而序列中的每个模糊化函数的输出编码(除序列中的最后一个模糊化函数之外)必须与下一个函数的输入编码匹配。序列中的最后一个模糊化函数的输出编码(即,H)指示从函数的模糊化序列提供的输出的表示(即,H(Y(X(d))))。
[0066] 函数X和Y的序列的模糊化实现420能够因此被表示为:
-1 -1 -1
Y' o X' = (H o Y o G ) o (G o X o F ) = H o (Y o X) o F
以这种方式,Y o X被适当地计算,但输入d需要被利用函数F编码并且输出-1
H(Y(X(d)))需要被利用函数H 解码。能够在相应查找表中分别表示每个模糊化函数X'和-1
Y',从而使得在实现模糊化函数Y'的表中组合函数H、Y和G ,并且在实现模糊化函数X'-1
的不同表中实现函数G、X和F 。通过以这种方式将各函数组合到单个查找表中,函数X和Y的细节、它们操作并且输出的数据以及函数F、G和H被隐藏。同时,使用编码G表示在模糊化实现420中的查找表之间传递的数据X(d)(即,作为G(X(d)))。这意味着:攻击者不能在模糊化实现420中的模糊化函数之间的数据流中观察到任何有用的信息。
[0067] 假设输入数据d被提供给表示为F(d)(即,由函数F编码)的函数的模糊化序列并且在处理期间未发生错误,则从模糊化函数的序列提供的输出G(X(d))的表示将会对应于由函数G编码的非模糊化函数的序列的输出X(d)。
[0068] 将输入和输出编码用于函数的序列的模糊化实现420具有这样的效果:模糊化功能被更紧密地绑定到实现420在其中进行操作的程序或系统的其余部分中。这是因为,向函数的模糊化序列提供数据(或调用函数的模糊化序列)的程序或系统的其余部分中的函数提供使用输入编码F编码的数据的表示,而从函数的模糊化序列接收数据的程序或系统的其余部分中的函数接收使用输出编码H编码的处理的数据的表示。因此,模糊化的效果把攻击者将必须理解的代码扩展超出函数的序列自身之外到程序的周围函数或部分中。在模糊化实现420是程序的加密部件(该程序通常将会是更大的包含系统或应用的一部分)的情况下,输入和输出编码的使用具有这样的效果:把加密边界扩展超出加密算法自身之外进一步向外到该包含系统或应用中。这使得更加难以从应用的其余部分提取加密算法的密钥特定实现,并且迫使攻击者理解代码的更大部分以便篡改软件,由此使得更加难以篡改软件。
[0069] 虽然图6和7图示具有应用于其的输入和输出编码两者的模糊化函数,但将会理解,可通过仅组合输入或输出编码与函数来使函数模糊化。作为例子,虽然在图4中未图示,但模糊化函数X'能够被实现为使得它使用输出编码G,但不使用输入编码F。类似地,模糊化函数Y'能够被实现为使得它使用输入编码G,但不使用输出编码H。这种布置能够被表示为:
-1
Y' o X' = (Y o G ) o (G o X ) = Y o X
作为结果,模糊化函数的序列的输入能够是数据d,数据d是与将被提供给函数的非模糊化序列的输入的相同表示,并且模糊化函数的序列的输出将会是Y(X(d)),Y(X(d))是将会由函数的非模糊化序列提供的输出的相同表示。然而,就攻击者不能观察到函数X的结果或函数Y的输入而言,该函数的序列仍然是模糊化的。因此,假设攻击者不知道函数G的细节,则攻击者将会仍然难以确定这些函数的细节以便提取密钥。
[0070] 尽管图7图示随后被实现为模糊化函数X'和Y'的两个函数X和Y的序列,但将会理解,任何数量的函数(在系列、网络、链条等中)能够被实现为对应模糊化函数的系列、网络、链条等。
[0071] 将会理解,可在不脱离如所附权利要求中所定义的本发明的范围的情况下对描述的实施例做出变化和修改。例如,应该理解,结合任何一个实施例描述的任何特征可被单独使用,或结合关于该实施例或其它实施例描述的其它特征使用。
法律信息
- 2018-09-11
发明专利申请公布后的视为撤回
IPC(主分类): G06F 21/10
专利申请号: 201380077009.6
申请公布日: 2016.01.06
- 2016-04-20
实质审查的生效
IPC(主分类): G06F 21/10
专利申请号: 201380077009.6
申请日: 2013.03.28
- 2016-01-06
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2008-09-17
|
2008-04-16
| | |
2
| |
2003-09-24
|
2001-05-28
| | |
3
| | 暂无 |
1992-06-19
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |