软件完整性验证制造技术

技术编号:22174514 阅读:63 留言:0更新日期:2019-09-21 15:10
一种方法包括,在包括验证代码和代码中的一个或多个部分的软件项目的运行时间期间:所述验证代码使用(a)由代码的所述一个或多个部分生成的运行时间数据和(b)一个或多个预定参数来生成验证数据,所述验证数据表示数据元素的预定第一集合的元素;以及将所述验证数据提供给完整性检查器,其布置成(i)如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生,以及(ii)如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;其中在不具有对所述一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;以及其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对所述运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。

Software Integrity Verification

【技术实现步骤摘要】
【国外来华专利技术】软件完整性验证
本专利技术涉及保护软件项目的方法、执行这种受保护的软件项目的方法和验证这种受保护的软件项目的方法,以及对应的装置和计算机程序。
技术介绍
软件应用通常在不友好的环境中进行操作或执行。这种不友好的环境可以被形式化为白盒攻击场景-在这种场景中,攻击者被假设有能力在软件应用的执行之前及期间审查和修改软件应用的代码/指令和数据/资源以及由该软件应用生成的运行时间数据。一个重要的保护目的是确定软件应用的操作正确性。这通常被称为完整性验证(参见例如https://en.wikipedia.org/wiki/File_verification,其整体公开通过引用结合在本文中)。IV旨在确保在运行时间执行的软件应用是由软件应用的供应商发布的版本。这有助于最终用户或服务提供商信任软件应用的原始/认证副本而非修改版本(例如,包含恶意软件的版本)正在执行。IV的传统方法是基于软件应用的原始代码中的一些或全部来计算一个值,当此代码被读取为数据时-这个值可以例如被计算为已被读取的代码的检查和(checksum)或散列或加密的强散列。使用加密的强散列使得对于攻击者在维持原始散列值的同时修改代码变得不可行-因此,可以通过检测不正确的或非预期的散列值来标识对代码的修改。这种IV可以由IV模块来执行,所述IV模块已经被结合到例如软件应用中或者其作为单独过程来执行。这在附图的图10中示意性示出。但是,如果攻击者能够以跳过或禁用验证步骤的方式修改IV模块,或者将IV测试改变为总是报告成功,则IV的这种方法可能会被击败。因此,IV模块通常以安全方式来实现,其中一种或多种软件保护技术被应用到所述IV模块,所述技术诸如有助于阻挠逆向工程攻击的已知白盒保护技术。因此,这种安全软件应用很难逆向工程,这提供了软件应用将提供其预期功能性的某一级别的保证。安全软件应用还可以包括普通的IV方法,以增加对软件应用的信任。然而,WVS(Wurster,vanOorschot,Somayaji)攻击(参见G.Wurster,P.C.vanOorschot,A.Somayaji,“Agenericattackoncheck-summing-basedsoftwaretamper-resistance”,技术报告TR-04-09,Carleton大学,2004年11月)示出的,攻击这种传统IV保护是可能的。WVS攻击是基于计算机硬件经常区别代码提取和数据提取的观察。这种区别改进了处理器流水线技术、缓存和/或存储器保护。攻击涉及在低级别硬件中安装“垫片(shim)”。这个垫片引起了使用数据提取而检索的值与使用代码提取而检索的值之间的不匹配。具体而言,攻击者可以响应于数据提取而提取“正确/未修改的”代码(使得使用数据提取来读取代码而计算的散列或检查和保持相同的“正确”值),同时响应于代码提取而提取的代码可以被修改/攻击代码。类似地,在虚拟机中,如同使用Java、JavaScript、Perl、Python、Ruby等,对于攻击者有可能修改实现虚拟机的软件并实现虚拟垫片。虚拟垫片使得对执行代码的数据访问看到未改变的代码,而在执行期间使用的代码提取看到攻击者已经改变的代码。因此,即使在篡改之后,所述代码对IV模块也显示出是未改变的:IV防御已经无效。IV的其他方法被公开在例如WO2015/149828中(其整体公开通过引用结合在本文中)。利用这种方法,安全软件应用包括断言测试,其验证预定的不变条件是否成立。这些对不变条件的检查增加了软件应用的完整性,因为攻击者修改很可能导致不变属性失败。
技术实现思路
如上所讨论,一些传统的完整性验证技术对于利用代码读取访问来隐藏代码修改的攻击是易受攻击的。其他代码完整性保存方法制止代码读取并且仅验证由应用所处理的数据,但依赖于代码中存在的某些不变条件。将期望的是,提供一种用于执行完整性验证的改进方法。本专利技术的实施例不依赖于代码中现存的不变条件,其也不依赖于对从存储器中已被读取的代码的计算(诸如,散列)。本专利技术的实施例可以将数据完整性验证代码与软件项目的正常/原始代码以使得对于攻击者很难把所述两种类型的代码区分开的方式进行混合。这种混合可以将正常数据和额外数据组合为到运行时间数据完整性验证算法的输入。运行时间数据完整性验证算法可以使用非常类似于正常软件操作的操作,并且其可以很容易地分解成用于代码混合操作的小代码片段。当攻击者修改使用本专利技术的某些实施例保护的软件应用的这种安全混合代码和/或数据或者由所述软件应用生成的这种安全混合代码和/或数据时,存在有很大的概率,这种修改也将会改变由运行时间数据完整性验证方法产生的数据或代码的计算行为。由于数据完整性方法优选地被设计成即使在对代码和/或数据有微小改变的情况下也能产生失败结果,所以很难做出未检测到的修改。因此,运行时间数据完整性验证的这些新行为与原始应用行为的这种混合有助于保存安全软件应用的完整性。根据本专利技术的第一方面,提供了一种方法,所述方法包括,在包括验证代码和代码中的一个或多个部分的软件项目的运行时间期间:所述验证代码使用(a)由代码的所述一个或多个部分生成的运行时间数据和(b)一个或多个预定参数来生成验证数据,所述验证数据表示数据元素的预定第一集合的元素;以及将所述验证数据提供给完整性检查器,所述完整性检查器布置成(i)如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生,以及(ii)如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;其中在不具有对所述一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;以及其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对所述运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。根据本专利技术的第二方面,提供了一种保护软件项目的方法,其中所述软件项目包括代码中的一个或多个部分,所述方法包括:修改所述软件项目,以使得所述软件项目包括验证代码,所述验证代码布置成,在所述软件项目的运行时间期间:使用(a)由代码中的所述一个或多个部分生成的运行时间数据和(b)一个或多个预定参数来生成验证数据,所述验证数据表示数据元素的预定第一集合的元素;以及将所述验证数据提供给完整性检查器,所述完整性检查器布置成(i)如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生,以及(ii)如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;其中在不具有对所述一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;以及其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对所述运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数本文档来自技高网
...

【技术保护点】
1. 一种方法包括,在包括验证代码和代码中的一个或多个部分的软件项目的运行时间期间:所述验证代码使用(a)由代码的所述一个或多个部分生成的运行时间数据和(b)一个或多个预定参数来生成验证数据,所述验证数据表示数据元素的预定第一集合的元素;以及将所述验证数据提供给完整性检查器,所述完整性检查器布置成(i)如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生,以及(ii)如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;其中在不具有对所述一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;以及其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对所述运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。

【技术特征摘要】
【国外来华专利技术】1.一种方法包括,在包括验证代码和代码中的一个或多个部分的软件项目的运行时间期间:所述验证代码使用(a)由代码的所述一个或多个部分生成的运行时间数据和(b)一个或多个预定参数来生成验证数据,所述验证数据表示数据元素的预定第一集合的元素;以及将所述验证数据提供给完整性检查器,所述完整性检查器布置成(i)如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生,以及(ii)如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;其中在不具有对所述一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;以及其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对所述运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。2.一种保护软件项目的方法,其中所述软件项目包括代码中的一个或多个部分,所述方法包括:修改所述软件项目,以使得所述软件项目包括验证代码,所述验证代码布置成,在所述软件项目的运行时间期间:使用(a)由代码中的所述一个或多个部分生成的运行时间数据和(b)一个或多个预定参数来生成验证数据,所述验证数据表示数据元素的预定第一集合的元素;以及将所述验证数据提供给完整性检查器,所述完整性检查器布置成(i)如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生,以及(ii)如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;其中在不具有对所述一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;以及其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对所述运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。3.根据权利要求2所述的方法,其中所述一个或多个预定参数中的每个是所述验证代码的一部分或者是在所述修改期间被包括在所述软件项目中的数据的一部分。4.根据权利要求2或3所述的方法,其中所述验证代码没有基于在所述修改之前存在于所述软件项目中的软件元素来生成所述验证数据。5.一种验证软件项目的方法,所述软件项目包括用于生成验证数据的验证代码,所述方法包括:接收验证数据,所述验证数据表示数据元素的预定第一集合的元素;如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生;以及如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;以及其中在不具有对一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对由所述软件项目的代码中的一个或多个部分生成的运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。6.根据权利要求5所述的方法,包括:标识所接收到的验证数据是否对应于先前接收到的与所述软件项目相关的验证数据;如果所接收到的验证数据没有对应于先前接收到的与所述软件项目相关的验证数据,则标识与所述验证代码相关的修改尚未发生;以及如果所接收到的验证数据对应于先前接收到的与所述软件项目相关的验证数据,则标识与所述验证代码相关的修改已经发生。7.根据前述权利要求中任一项所述的方法,其中所述验证代码生成所述验证数据是通过:使用所述运行时间数据来生成伪随机数据并且使用所述伪随机数据和所述一个或多个预定参数来生成所述验证数据。8.根据权利要求1至6中任一项所述的方法,其中所述运行时间数据是伪随机的或熵的源。9.根据前述权利要求中任一项所述的方法,其中所述验证代码布置成生成与由所述验证代码先前生成的基本上所有验证数据不同的验证数据。10.根据权利要求8所述的方法,其中所述验证代码布置成生成与由所述验证代码先前生成的基本上所有验证数据不同的验证数据,这是由于用来生成所述验证数据的所述运行时间数据与由所述验证代码先前...

【专利技术属性】
技术研发人员:顾元祥H约翰逊
申请(专利权)人:爱迪德技术有限公司
类型:发明
国别省市:荷兰,NL

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1