检测恶意代码的方法

文档序号:6471814阅读:3485来源:国知局
专利名称:检测恶意代码的方法
技术领域
本发明涉及一种用于检测在代码执行设备中的恶意代码的方法,具体地说是在计算机中的恶意代码,但不限于此。本发明也涉及一种根据本方法进行操作的测试仪器。
背景技术
恶意代码,例如计算机病毒,经常在现代的代码执行系统中造成严重问题。这种恶意代码可能在最初载入之后保持潜伏,而当被启动时,很有可能会对系统中存储的数据、可执行软件的完整性造成广泛的危害。
目前有很多种技术来检验可执行代码的认证,例如对可执行代码进行加密,然后在使用之前对其进行解密;和使用利用了专用钥或公用钥密码术的认证签名。使用这些技术,就可以防止在系统中载入和执行未经认证的可执行代码。然而,如果加密代码或专用钥被从合法主人处偷出,而归第三方所有,这个第三方就可以制出恶意代码,这种恶意代码会被解密代码和相应的公用钥检验为正确。
发明者认为恶意代码会引出下面的第一、第二问题。第一问题关于防止将恶意代码载入代码执行系统的对策;第二问题关于当对代码的认证性存在怀疑时,来确定已载入可执行代码的代码执行设备是否受到了危害。例如在怀疑有恶意代码载入代码执行系统的情况中,执行该代码将对能通过该代码执行系统对其进行操作的有价值数据库造成巨大损害。相反,对该代码执行系统进行复位,并随后对其进行重新编程也需要很大的开支,因为需要将该系统返还到制造者。而且在很多情况中,重要的是了解是否有人试图发布恶意代码,而该恶意代码已经通过了如公用钥的认证过程,以便可以使用其他的保护措施,例如使用对恶意代码的清除(purge)设备。
发明者还认为,恶意代码经常以狡猾的方式编写而成,它在代码执行设备中占据很小的存储器空间,在启动时,也只使用有效的内部设备存储器或设备可对其进行操作的外部存储器。尝试检测这种恶意代码可能会是非常困难的,尤其是在其嵌入这样一种代码中时外表像真正可执行代码,并在多数时间里也起像真正的代码的作用。

发明内容
因此,本发明提供了一种在恶意代码载入代码执行设备时进行检测的方法。
根据本发明的第一方面,提供了一种方法来检测代码执行设备中的恶意代码,该方法的特征在于包括步骤(a)产生一种测试数据,这种测试数据基本上不受在不减少测试数据信息的情况下而对其进行压缩的影响。然后将该数据作为映像数据存储到设备的外部存储器中;(b)将测试数据载入设备存储器;(c)计算设备存储器中存储的测试数据的校验和(checksum),来产生第一校验和值,相应地计算映像数据的校验和,来产生第二校验和值,然后比较第一、第二值,来确定设备存储器中的测试数据是否遭到了危害;(d)重复步骤(c),直到对设备存储器中足够多的测试数据进行了校验和测试,来确定该设备中是否存在恶意代码。
本方法具有这样一个优点,即通过计算设备存储器中的测试数据的校验和值,并将该值与为映像数据计算得到的相应校验和值进行比较,就可以检测出设备存储器中存在的恶意代码。
测试数据不易受压缩的影响这一特性可以防止设备存储器中存在的恶意代码通过压缩测试数据来隐藏自身在设备存储器中。特别有利的一种情况是测试数据包含一个或多个随机数序列;随机数序列的特性是对它们进行压缩必然带来相关信息的丢失。
方便的是,本方法可以在执行步骤(b)之前,还包括这样一个步骤查询该设备,并使其泄露内部存储的软件应用程序的名称,以便覆盖设备存储器中的应用程序。
当应用了本方法,并确认设备中清空了恶意代码时,最好在步骤(d)之后,将设备泄露的软件应用程序的未受危害版本载入该设备中。像这样载入未受危害的软件可以使设备恢复到应用此方法之前的状态。
为了使设备中存在的任何恶意代码更难预测执行本方法时需要的校验和值,最好令步骤(c)中校验和的计算在该设备存储器的一个或多个存储位置(memory location)的序列上执行,以作为对该设备提出的询问的响应,这里说的每个询问都具体针对某个要通过使用加密的校验和计算来对其进行校验和校验的该设备的存储位置,并也具体针对一个或多个用于开始计算的相关初始化向量。由于恶意代码不能预测选用的存储器位置或本方法中使用的初始化向量,所以该恶意代码就更难预算出校验和值,从而压缩测试数据来藏身其中。
有利的是,为了使恶意代码更难藏身,上述的一个或多个序列可以跳过其中的存储位置。像这样跳过位置具有的优点是可以以多种不同的方式来测试设备存储器,从而使恶意代码更难藏身。
最好使步骤(c)中的校验和计算至少有一次是在设备存储器中的接口软件上执行的,其中该接口软件可被操作成用于传递测试数据到设备存储器,并从设备存储器中输出数据。该接口软件还可以包含在映像数据中用于比较。像这样测试接口软件有助于降低恶意代码存在于其中的风险。
有利的是,在本方法中,利用设备输出校验和计算的速度性,来确定设备存储器中是否存在恶意代码。如果存在恶意代码,该代码要想隐藏起来而不为校验和方法所发现,通常需要更多的处理步骤。
在根据本方法测试设备时,最好在步骤(c)的校验和计算的期间使该设备不能对其外部存储器进行存取。如果该设备可以与这种外部存储器通信,恶意代码就可能驻留于这种外部存储器中来隐藏身份,或者在外部存储器中存储测试数据来隐藏在该设备中。
在步骤(c)中,最好使用加密哈希算法来计算校验和。由加密哈希算法产生的校验和很难仿造,因此使用这样的算法就使得恶意代码更难在设备中藏身。适用的加密哈希算法的例子如下(a)Internet工程任务组(IETF)文件RFC 1321,“MD5消息-摘要算法”(1992)中定义的“MD5”;以及(b)(美国)国家标准技术研究所(NIST)文件“FIPS发表180安全哈希标准(SHS)”(1993)和“安全哈希标准缺点的公告”(1994)中定义的“SHA-1”。
在本发明的第二方面,提供了一种可操作的测试仪器,这种测试仪器用于应用根据本发明的第一方面的方法,查询代码执行设备来确定该设备是否包含恶意代码。
现在仅通过例子和附图来描述本发明的具体实施方案


图1是便携式代码执行设备的硬件原理图;图2是载入图1中的设备存储器的软件应用程序和处理程序的图释;图3是图1、2所示设备连接到根据本发明的测试仪器的图释;以及图4中显示了当图1到3的设备中载入恶意代码时的检测方法的步骤。
具体实施方案现在参照图1,图1显示的是代码执行设备的硬件,用10指示该设备。设备10包括外壳20、主存储器30、代码执行处理器40和相关的随机存取存储器(RAM)50。RAM50、处理器40和主存储器30通过电或光的方式互连起来,以便使处理器40能访问RAM50和主存储器30中的数据,并能向其中存储数据。设备10还包括电或光接口60,用于与设备10的外部网络70进行通信。网络70可以是例如测试设备,或作为替换,也可以是与计算设备互连形成的网络。
当设备10是便携式代码执行设备时,RAM50典型地具有256字节的数据存储容量。而且,主存储器30典型地以包含8M字节数据存储容量的E2PROM非易失性存储器的形式执行。进一步,处理器40典型地作为8-位或16-位微控制器来执行,这种微控制器包含提供接口60的双向缓冲器端口。
作为另一种情况,该设备10也可以是大型机,其中处理器40包含相互连通的数字处理器的阵列,RAM50包含多吉(G)字节的固态数据存储容量,且主存储器30包含光的、磁的和固态的数据存储介质,该存储介质具有多吉字节的存储容量。
在运行中,外部网络70通过接口60与设备10进行通信。当网络70发送可执行代码到设备10时,该设备10将该代码存储进主存储器30。另外,通过对处理器40下指令来存储特定的数据项,或将特定的数据项从主存储器30输出,并根据环境来决定是否对其进行处理。可通过对主存储器30进行操作来保留在其中存储的数据,例如,即使在去掉设备10的电源的时候。
现在参照图1和2来描述一种关于可执行代码,即软件,的配置设备10的方法。可执行代码,即应用程序1到n(n为非零正整数),被存储在主存储器30中,然后通过接口60载入设备10,其中的接口60是在叫做处理程序的可执行代码对象100的软件控制下运行的。该处理程序100处理所有数据和可执行代码在网络70与主存储器30、RAM50之间的流动。
当设备10与网络70结合使用时,该网络70可以通过处理程序100来访问主存储器30。作为替换,网络70可以命令处理程序100来开始执行在处理器40上的一个或更多的应用程序,该处理程序100同时执行用于管理流向和来自设备10的数据的一个或更多的执行应用程序。
因此在一般情况下,网络70只能通过处理程序100来与设备10进行往来通信。
在向设备10载入应用程序之前,该应用程序的供方使用己方的专用钥在该应用程序上签名,来保证它的认证。然后网络70,如果必要的话再加上处理程序100,可操作成使用对应该专用钥的公用钥来检验该应用程序。这种认证过程降低了设备10将未经认证的欺诈应用程序载入其主存储器30的风险。
使用这一对专用钥和相应的公用钥来认证软件是众所周知的,这些密钥以代码的形式出现。如果只知道这一对代码中的一个,就不可能合理地推出另一个。当供方向网络70提供要存入设备10的软件应用程序时,该供方使用密钥之一来“签名”该应用程序,并将此密钥作为“专用钥”密藏起来而不透露给网络70。然而,该供方告诉网络70,并通过网络70告诉设备10该对密钥的另一个,即公知的供方“公用钥”。因此网络70和设备10可以使用供方提供的公用钥来检验应用程序的认证,而这些应用程序是使用属于供方的专用钥进行过签名的。
专用和公用钥的产生可以从US专利No.4200770中了解,其中通过引用手法,包含了关于产生互补密钥的内容。专用和公用钥一般长度为大约200字节,可以使用US专利中描述的数学变换来产生。
现在更具体地描述使用传统的专用钥来对软件应用程序进行的“签名”。
在第一种方法中,“签名”涉及使用专用钥对软件应用程序的整体进行编码,来产生相应的经编码的应用程序。可以使用对应该专用钥的公用钥对经编码的应用程序进行解码。其他无关的公用钥不能对经编码的软件应用程序进行成功的解码,以产生用于设备10中的可行的可执行代码。如果处理程序100在执行解码时发现了这种不可行的可执行代码,该处理程序100就确定该可执行代码未通过认证,并不应对其进行执行或将其保留在主存储器30中。
在第二种方法中,“签名”包括使用一种供方、网络70和设备10都知道的校验和产生程序来为软件应用程序计算加密的校验和;公知的加密的校验和产生程序包括“消息摘要5”(MD5)和“安全哈希算法”(SHA或SHA-1)。该校验和的长度比较短,一般在16到20字节的范围内。供方可以为其软件应用程序使用专用钥,对利用公用校验和产生程序产生的校验和进行编码,然后将未经编码的软件应用程序与经编码的校验和一起提供给网络70,并通过网络70提供给设备10,其中经编码的校验和有时称作消息认证代码(MAC)。当网络70从供方接收到该软件应用程序时,该网络70和设备10可以应用公用校验和产生程序,来为未经编码的软件应用程序产生一种操作者校验和。然后网络70和设备10可以使用供方的公用钥来解码由供方提供的经编码的校验和,来产生一种经解码的校验和,然后网络70和设备10将此经解码的校验和与它们的操作者校验和进行对比。如果经解码的校验和与操作者校验和一致,该网络70和设备10就确定该软件应用程序是认证了的;如果经解码的校验和与操作者校验和不一致,该网络70和设备10将认为该软件应用程序可疑。
第二种“签名”软件应用程序的方法速度更快,并包含比第一种方法更少的计算,因为用于校验和产生的计算速度很快,并且对16-20字节的校验和进行编码比对软件和整体数据进行编码要容易,这里整体数据的大小可以是例如几千万字节。
当发明者用“签名”这一名词描述他们的发明时,这就代表如上所述利用第一种方法或根据第二种方法的“签名”。
当供方提供给网络70、设备10的软件应用程序的专用钥被第三方偷走时,则会出现问题。第三方就可以准备恶意代码,使用专用钥对其进行签名,并将恶意代码作为软件应用程序提供给网络70。网络70和设备10在使用它们相应的公用钥对应用程序查核认证时,都不能检测出恶意代码。
如果之后了解到该专用钥被偷,则怀疑使用该专用钥签名的软件应用程序是恶意代码。于是出现这样的问题如何测试设备10,来确定其主存储器30中存储的一个或多个软件应用程序是否包含恶意代码。
当恶意代码通过接口60和处理器40载入设备时,该代码可以以多种方式存储,即(a)该恶意代码可以覆盖处理程序100,或与之在主存储器30中共存,并作为欺诈处理程序起作用,模仿处理程序100的操作,但同时执行有利于第三方的功能,例如将设备10的合法主人的银行帐户中的钱转入第三方持有的银行帐户;(b)该恶意代码可被存储为软件应用程序,并可通过处理程序100从网络70调用,该软件应用程序可以通过操作来执行一种未认证的功能,来危害设备10主人的利益;和(c)该恶意代码可被存储为一种数据,根据存储于主存储器30中的真正的应用程序和处理程序100来对其进行操作,这种数据会引起执行未认证的功能。
如果处理程序被恶意处理程序替换了,在网络70通过接口60进行查询时,该恶意处理程序可以将存储在存储器30中的一个或多个恶意应用程序隐藏起来。在这种情况下,从网络70看来,设备10功能正常。如果设备10继续使用,可能会引起例如网络70及其相关数据库的重大经济损失。因此在可疑恶意代码被载入设备10时,特别是在专用钥被偷,从而规避了专用-公用钥认证方法的时候,需要一种方法来进行检测。
现在参照图3、4来描述一种在恶意代码被载入设备10时的一种根据本发明的检测方法。在图3中显示的配置是设备10通过接口60连接到测试仪器200。在这种配置中,有意地对设备10进行安排,使其只能与仪器200通信。使用这种受限制的通信是为了防止存在于设备10中的恶意代码与其他设备进行通信,或使用该设备的外部存储器来使仪器200不能发现恶意代码。
在本方法的步骤A中,包含其处理程序100以及一个或多个软件应用程序的设备10被连接到仪器200。然后仪器200通过接口60与处理程序100进行通信,并请求它泄露其中存储的应用程序的清单210。在某些情况中,网络70自己会保留载入设备10的应用程序的记载;然而,这种记载对于执行本发明的方法来说不重要。之后处理程序100通过传送设备10中存储的清单210来回应仪器200。
如果处理程序100遭到危害,成为恶意处理程序,它将会欺骗仪器200,并隐藏设备10中存储的一个或多个欺诈应用程序以及真正的应用程序。
当仪器200从处理程序100接收到清单210时,该仪器200将清单210存储到自己的存储器中。
在本方法的步骤B中,仪器200通过接口60发送称作测试处理程序220的软件应用程序到设备10,并将其存储在主存储器30的指定位置。在这一阶段,设备只应包含其处理程序100、测试处理程序220和设备在清单210中已向仪器200声明的任何应用程序。
如果设备10已经受到恶意代码的危害,它就可能包含未在清单中向仪器200声明的应用程序,且处理程序100自身可能带有恶意代码。
如果网络70具有其自身的应存入设备10的应用程序清单,且该网络70清单与清单210不一致,仪器200就从而确定该设备10包含假定的恶意附加代码,从而遭到了危害。
然后仪器200命令设备10执行测试处理程序220。并且,仪器200将提前了解处理程序100和测试处理程序220应占用主存储器30的哪些位置。未被这些处理程序100、220占用的存储器30位置因此可用于存储软件应用程序。
然后仪器200在其存储器中产生关于设备10的存储器30看上去应为如何的参考映像230。在产生该参考映像230之后,仪器200产生一系列随机数字R0到Rm,并将这些随机数字填充到参考映像230的未被处理程序100、220占用的位置中。该仪器200还将这些随机数字通过接口60传到测试处理程序,命令其将这些随机数字存储到主存储器30中的位置,而这些位置是对应于映像230中的位置的。
随机数字具有一种特征,即其不可能在不丢失信息内容的情况下被压缩。因此,如果欺诈应用程序存储在设备10的主存储器30中,且处理程序100为恶意处理程序,该恶意处理程序就不可能压缩随机数字来隐藏欺诈应用程序,因为正如下面要说到的,这种压缩随机数字的尝试会被仪器200检测到。
仪器200持续通过测试处理程序210向设备10提供随机数字,直到主存储器30中除被处理程序100、220占用之外的所有位置都被填充。
在本方法的步骤C中,仪器200使用一种方法,该方法涉及用初始化矢量(IV)来向设备10提出查询,以此来测试随机数字R0到Rm是否已经被正确地存入主存储器30。如果证实这些数字未被正确地存入,这种不正确的存入就指示欺诈应用程序起了作用,或处理程序100已受到危害。
当查询设备10时,仪器200通过接口60向测试处理程序220发送一个询问。该询问指定一系列在主存储器30中的开始位置和一个初始化矢量(IV),然后测试处理程序220在将这一系列指定位置馈给算法之前,利用提供的IV初始化其加密的哈希算法。测试处理程序220的算法计算得出的第一校验和,其典型的长度大约为128或160比特。然后,测试处理程序220使用与提供给测试处理程序220的相同的IV和相同的加密哈希算法,来根据参考映像230中存储的数据计算相应的第二校验和。如果第一和第二校验和不相同,仪器200就确定设备10遭到了危害。相反,如果第一和第二校验和相同,仪器200则使用其他询问来查询设备10。如果需要,仪器200可以对主存储器30的所有位置进行查询,包含由一个或多个处理程序100和测试处理程序220占用的位置。如果处理程序100已受到危害而成为恶意处理程序,仪器200将可以检测到这种危害。
仪器200最好使用许多不同的初始化矢量来查询设备10,并且如果需要,还要指定用于计算相关校验和的变长的序列。这样的多个查询可以有效地防止设备中的恶意处理程序尝试预算出校验和,并从而在随机数字提供给设备10的时候,通过对这些随机数字进行压缩来尝试隐藏欺诈应用程序。
序列最好包含由至少一个处理程序100和测试处理程序220占用的位置。并且,这些序列可以选择性地交替跳过一个或多个位置,使恶意代码更难在设备10中藏身。在图4中的序列1和3演示了这种跳跃。图4中的序列2对应主存储器30中的连续存储位置。序列3包含由处理程序100、220占用的位置。
如果在使用许多互相不同的初始化矢量查询设备10之后,确定了设备10未受危害,本方法就进行步骤D。如果设备10已经受到危害,就产生警报。
在本方法的步骤D中,仪器200选择性地覆盖在设备10中存储的测试处理程序220,来防止此处理程序220的可执行代码泄露给之后在设备10上执行的应用程序,然后载入如清单210上记载的应用程序的真正证实版本。这样载入的结果是该设备10包含处理程序100的未受危害版本、一个或多个真正应用程序,而且主存储器30中的剩余位置被填充了随机数字。如果需要,该仪器可以在载入一个或多个真正应用程序之前,选择性地清除存储器中的随机数字。
本方法提供了一个优点,即使由对应存储在设备10中的公用钥的被盗专用钥签名的应用程序被载入设备10,也可以查出存在于在设备10中的恶意代码。并且,本方法也使真正的未受危害应用程序能够在本方法终止时被重新载入设备10,从而使设备10可以再次使用。
本发明的方法不能检测出所有可能的恶意代码。例如,当恶意代码能对未受危害的处理程序进行操作、对其进行压缩、并随之将经压缩的处理程序和恶意代码存储至原来由未经压缩处理程序100占用的存储器空间内时,本方法则不能生效。然而,恶意代码将不得不能够与测试处理程序交互,以便在本方法的步骤C中进行测试时,对其提供当通常由未压缩处理程序100占用的位置值的序列。如果需要,该测试仪器200可以被制成通过对来自设备10的查询响应计时,从而敏感于这种压缩;解压缩代码将耗时更长,因此以这种方式运行的恶意代码可能由于其慢于通常响应的特性而被检测出来。
从上面可以理解,设备10可以具有许多不同的形式。上述本发明的方法可用于设备10是便携式个人物品的情况,以及设备10是复杂的计算机安装的情况。
本领域的技术人员同样可以理解,可以对本发明的方法进行修改,而不脱离发明范围。例如,在步骤B中,假设有基本上不受存在于设备10中的恶意代码对其进行不被检测到的压缩所影响的替换数据,设备10的主存储器30就可以填充进除随机数字之外的这种替换数据;对这种替换数据进行压缩可能会潜在地向恶意代码提供其继续生存的存储器空间。另外,如果可以接受对设备10不够彻底的询问,那么为产生校验和而读得的位置序列就不必对整个主存储器30都进行映射。并且,尽管这里描述的是在步骤C中使用加密的哈希算法来生成校验和,同样也可以将其他产生校验和的方法与加密哈希算法结合使用,或替换使用。
尽管描述的是将测试处理程序220载入设备10,同样也可以在步骤B中,将处理程序100修改为能将测试设备200提供的随机数字载入主存储器30,这样就不需要将测试处理程序220载入设备10。
权利要求
1.一种用于在检测在代码执行设备中的恶意代码的方法,该方法的特征在于包括步骤(a)产生一种测试数据,这种测试数据基本上不受在不减少测试数据信息的情况下而对其进行压缩的影响。然后将该测试数据作为映像数据存储到设备的外部存储器中;(b)将该测试数据载入设备存储器;(c)计算设备存储器中存储的测试数据的校验和,来产生第一校验和值,对映像数据进行相应的校验和计算,来产生第二校验和值,然后比较第一、第二值,来确定设备存储器中的测试数据是否受到了危害;(d)重复步骤(c),直到对设备存储器中足够多的测试数据进行了校验和测试,来确定该设备中是否存在恶意代码。
2.根据权利要求1的方法,其中在执行步骤(b)之前查询该设备,使其泄露内部存储的软件应用程序的名称,以便覆盖设备存储器中的应用程序。
3.根据权利要求2的方法,其中当发现在设备中没有恶意代码时,在步骤(d)之后,将设备泄露的软件应用程序的未受危害版本载入该设备中。
4.根据权利要求1,2或3的方法,其中该测试数据包含一个或多个随机数字序列。
5.根据前述任一权利要求的方法,其中步骤(c)中校验和的计算是利用询问来指定存储位置,以及指定一个或多个用于校验和计算的相关初始化向量,来使其执行在该设备存储器的一个或多个存储位置序列上。
6.根据权利要求5的方法,其中一个或多个序列跳过其中的存储位置。
7.根据前述任一权利要求的方法,其中使步骤(c)中至少有一次校验和计算执行在设备存储器中存在的接口软件上,其中该接口软件可被操作成用于传递测试数据到设备存储器,并从设备存储器中输出数据。该接口软件还包含在映像数据中用于比较。
8.根据前述任一权利要求的方法,其中使用设备输出校验和计算的快速性来确定设备存储器中是否存在恶意代码。
9.根据前述任一权利要求的方法,其中在步骤(c)的校验和计算的期间,使该设备不能对其外部存储器进行存取。
10.根据前述任一权利要求的方法,其中使用加密哈希算法来计算校验和。
11.一种测试仪器,可操作成应用根据上述任何权利要求的方法来查询代码执行设备,以便确定该设备是否包含恶意代码。
全文摘要
本发明提供一种用于检测在代码执行设备(10)中的恶意代码的方法,该方法的特征在于它包括(a)产生一种测试数据,这种测试数据基本上不受在不减少测试数据信息的情况下而对其进行压缩的影响。然后将测试数据作为映像数据(230)存储到设备(10)的外部存储器中;(b)将测试数据(R
文档编号G06F21/56GK1449515SQ0181466
公开日2003年10月15日 申请日期2001年7月2日 优先权日2000年7月1日
发明者I·W·J·斯帕里, S·C·雷 申请人:马科尼通讯有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1