一种防止在计算机中运行的应用系统被攻击或篡改的方法

文档序号:6654029阅读:345来源:国知局
专利名称:一种防止在计算机中运行的应用系统被攻击或篡改的方法
技术领域
本发明涉及系统安全技术,具体涉及基于公开密钥体制(PublicKey Infrastructure,PKI)的数字证书在计算机应用系统中的应用,更具体地说,涉及一种防止在计算机中运行的应用系统代码被攻击或篡改的方法。
随着计算机的普及,互联网的广泛应用,各种病毒、非法入侵程序对计算机应用系统安全造成极大威胁。这些非法代码往往通过修改应用系统代码或入口达到破坏目的。目前,解决问题主要是通过系统级安全进行防范,如防火墙、各种杀毒软件,并且它们只能针对现有的系统漏洞或已知的病毒特征码扫描。对于预防新的病毒和其它非法入侵程序具有滞后性,往往在已遭受攻击后才找出解决办法进行补救。而现行的在计算机上运行的应用系统,特别是大型的和复杂的应用系统,都采用了模块化设计,经常需要调用多个软件模块或其它应用程序,并且根据需要会随时从环境中添加和移走这些模块。为了防止恶意攻击者的攻击或篡改,建立一个安全可信任的计算环境,特别是在动态计算环境中,对应用系统、各加载模块和调用程序之间的验证处理和安全检查显得格外重要。
本发明的目的在于,提供一种防止在计算机中运行的应用系统被攻击或篡改的方法,可以克服现有技术存在的上述缺点,特别是可以有效地防止来自应用系统外部的非法代码的入侵,保证在动态环境下应用系统、各加载模块和其它调用程序的安全性,使得运行在计算机中的应用系统的功能不被破坏和影响,从而建立一个安全可信任的计算环境。
本发明的目的是基于以下认识实现的,由于基于公开密钥框架(PKI)的数字签名是实现上述验证处理和安全检查的比较完善的算法。本发明提出并利用认证系统的分层认证结构(证书链)和数字证书的签名验证技术。一方面,利用证书链验证了验证者本身(开发模块开发商)的真实性;另一方面,利用数字证书的签名验证技术,采用自我完整性检查、应用系统和各模块相互之间进行双向认证以及安全链接检查,从代码级去保证动态计算环境的安全。
本发明的目的是这样实现的,构造一种防止在计算机中运行的应用系统被攻击或篡改的方法,所述应用系统包括第一子系统和第二子系统,其特征在于,包括以下步骤根据第一子系统中的可加载模块A1、加载应用程序A2和第二子系统中的可加载模块B1和加载应用程序B2设置信任书文件;启动所述第一子系统时,通过查找所述信任书文件,获得证书链和模块信息,由证书链验证开发商的真实性验证对欲装载模块A1、A2进行完整性检查(即签名验证),如果签名验证成功则装载所述模块A1、A2;将所述第一子系统中模块A1、A2装入可执行环境中,在运行环境中,验证所述模块A1、A2在执行环境中的内存映象代码的杂凑值,将之与事先计算好的杂凑值进行比较,如果比较两者相同,验证装载后的完整性,其后可随时相互在线验证,防止恶意攻击者的在线攻击。启动第二子系统时,装载模块B1、B2的验证方法与上述相同。
对应用系统和模块、模块和模块之间的函数调用进行安全链接检查,检查被调用的函数地址是否在所属模块的内存映象地址空间内。
按照本发明提供的方法,所述应用系统和第一子系统由第一开发商提供,所述第二子系统由第二开发商提供,第一子系统调用第二子系统,其特征在于,所述在包含第一子系统和第二子系统的应用系统中设置信任书文件的步骤包括以下步骤由所述第一开发商生成根证书,使第一子系统中的动态可装载模块A1、A2实现自我签名;所述第一开发商用根证书为第二开发商拥有的数字证书签名,形成第二级数字证书,所述第二开发商利用自己的数字证书为所述第二子系统动态可加载模块B1、可加载应用程序B2签名;将所述根证书、所述数字证书形成的证书链以及模块信息、被签名的模块代码的杂凑值(信息摘要)、签名验证的具体算法以文件方式保存作为信任书文件,按照本发明提供的方法,其特征在于,所述完整性验证包括以下步骤从信任书文件中根据证书链读取签名验证用的模块证书和模块信息,验证验证者本身的真实性;从磁盘和内存映象空间两方面计算模块代码的杂凑值,将之与证书中事先计算好的杂凑值进行比较,如果一致,则验证了模块在装载前和装载后没有被他人篡改;相互验证能在线进行,防止在线攻击;对加载模块的函数调用实行安全链接检查,检查函数地址是否在模块内存映性地址空间内。
按照本发明提供的方法,其特征在于,所述第一、第二子系统运行时,所述信任书文件存储在外部存储介质中。
实施本发明提供的防止在计算机中运行的应用系统被攻击或篡改的方法,具有以下显著优点应用了基于公开密钥框架(PKI)的数字签名技术,通过利用数字证书的签名验证技术,采用自我完整性检查、应用系统、各加载模块和其它被调用程序之间的双向认证,从磁盘和内存映象空间两方面分别对已签名的代码进行验证,确定代码在装载前或装载后没有被恶意攻击者篡改;在动态计算环境中,加载模块会不断地从环境中添加和移走,本方法能保证相互验证处理在线进行,即在应用系统运行中能随时进行相互验证处理,有效地防止了恶意攻击者的在线攻击;对加载模块的函数调用实行安全链接检查,检查函数地址是否在模块内存代码空间内。从这三个方面,实现在代码级上保证动态计算环境的安全性。
结合附图和实施例,进一步说明本发明的特点,附图中

图1是按照本发明的方法形成签名及验证证书链的示意图;图2是按照本发明的方法,对可装载模块进行验证的过程示意图;在图1示出的本发明的方法原理性结构图中,设应用系统A本身有可加载模块A1和可加载应用程序A2,该A1、A2需要调用由开发商B开发的可加载模块B1和可加载应用程序B2,具体地说,即在一个应用系统中,有一个被调用的子系统SA,以及一个被调用的子系统SB,子系统SA包括可加载模块A1和可加载应用程序A2,子系统SB包括可加载模块B1和可加载应用程序B2,其中应用系统A和子系统SA、由开发商A开发,子系统SB由开发商B开发,子系统SA调用子系统SB。图1中,方框102、104表示数字证书,箭头线101、103表示私钥的对象。
为检测和防止在静态和动态条件下应用系统被攻击或篡改,由应用系统提供者预先为应用系统准备信任书文件,该文件可以随应用系统一起销售或分发,该信任书文件是这样形成的1)开发商A生成自我签名的根证书CA,给系统A的可装载模块A1、A2实现自我签名,包括计算模块A1、A2代码的杂凑值(即信息摘要),并签名杂凑值。
2)开发商A用根证书为开发商B拥有的数字证书签名,形成第二级数字证书CB,开发商B用数字证书CB对自己开发的模块B1、B2签名,即用证书CB对应的算法和私钥计算模块B1、B2代码的杂凑值,并签名杂凑值。开发商B也可为提供模块的其他开发商生成自己签名的数字证书,如此类推。
3)将1、2形成证书链作为信任书以文件方式保存。信任书还记录了模块的信息,被签名的模块代码的杂凑值,签名日期,签名验证的具体算法等等。
当应用系统分发到用户,在启动应用系统之前,首先,找出该应用系统的信任书文件,从中读取签名验证用的证书链和模块信息,在模块装载前,按以下步骤验证其完整性1)根据证书链验证验证者本身(即开发商提供的各级数字证书)的真实性;2)计算模块代码的杂凑值(即信息摘要),由证书获得事先计算好的杂凑值,与当前计算得到的杂凑值比较,如果一致,则验证了模块没有被他人篡改。
如果上述验证了静态模块没有被他人篡改,则准备装载模块A1、A2。将模块A1、A2装入可执行环境中,在运行环境中,验证模块在执行环境中的内存映象,即计算内存映象代码的杂凑值,与事先计算好的杂凑值比较,实现装载后的签名验证,其后可随时相互验证模块在执行环境中的内存映象,达到相互在线验证,防止了恶意攻击者的在线攻击。应用系统和模块、模块和模块之间的函数调用都采用了安全链接检查,检查被调用的函数地址是否在所属模块的内存映象地址空间内。
为防止计算机中运行的应用系统遭到恶意攻击者的攻击或篡改,保证动态计算环境的安全,上述技术方案还可以按照以下方式表述和实现1、使用基于公开密钥框架(Public Key Infrastructure,PKI)的数字签名这一比较成熟的算法。即利用数字证书的签名验证技术,采用自我完整性检查,系统与模块之间、模块与模块之间双向认证,对可加载模块内的函数调用采用安全链接检查,从代码级保证了动态计算环境的安全。
2、数字证书在应用系统和模块的对象代码之外被公开,以便他们能被任何伙伴验证。它使得所有模块被签名以及签名验证被执行。
3、为确定由谁检查这个验证者,也就是确定该证书是可信任的。为在计算环境中建立信任,从一个单个可信任的模块开始是很重要的。在应用系统级建立根证书,其它证书(被调用者)由上一级证书(调用者)签名,形成签名验证证书链(如图1所示),以此作为信任书以文件的方式保存。
可装载模块在添加到可执行环境中前必须被检查,调用者能根据信任书文件找到验证可装载模块的证书链和相关信息。从磁盘读入它的代码在装载前验证其完整性。在它们在系统中运行后,从内存映象中检查装入模块的代码,在线检查这些模块。通过使每一个模块去检查其他模块的完整性和信任书,这些应用程序的安全性能被进一步加强。检查步骤如图2所示,在框201中,调用者准备动态装载程序模块;在框202中,从磁盘读区读取模块的信任书,获取证书链、读入模块代码,验证签名;在框203中,如果验证成功,将装载模块到可执行环境;在框204中,在运行中读取模块的内存印象,相互的内存中读取,相互在线验证签名,同时,对模块的函数调用进行安全性检查本发明涉及基于公开密钥体制(PKI)的数字证书在计算机应用系统中的应用,它利用数字证书的数字签名和验证功能,检查应用系统的完整性,使用各种不同规模的应用系统的安全性保障,对所有调用的应用程序子系统或装载的模块进行完整性检查和认证,从而确保计算环境的安全。
权利要求
1.一种防止在计算机中运行的应用系统被攻击或篡改的方法,所述应用系统包括第一子系统和第二子系统,其特征在于,包括以下步骤设置信任书文件;启动所述第一子系统时,通过查找所述信任书文件对所述第一子系统欲装载模块A1、A2进行完整性验证,如果检验完整则装载所述模块A1、A2;将所述第一子系统的模块A1、A2装入可执行环境中,在运行环境中,随时或定时验证所述模块A1、A2在执行环境中的内存映象代码的杂凑值,将之与事先计算好的杂凑值进行比较,如果比较两者相同,则验证没有出现恶意攻击者的攻击。
2.根据权利要求1所述方法,其特征在于,还包括以下步骤由所述第一子系统加载所述第二子系统,通过查找所述信任书文件验证对欲装载模块B1、B2进行完整性验证,如果检验完整则装载之,并在运行环境中,随时或定时验证所述模块B1、B2在执行环境中的内存映象代码的杂凑值,将之与事先计算好的杂凑值进行比较,如果比较两者相同,则验证没有出现恶意攻击者的攻击。
3.根据权利要求1或2所述方法,其特征在于,对加载模块中的函数调用采用安全链接检查,检查函数地址是否在模块内存映象地址空间内。
4.根据权利要求3所述方法,所述第一子系统由第一开发商提供,所述第二子系统由第二开发商提供,所述第一子系统调用所述第二子系统,其特征在于,所述设置信任书文件包括以下步骤由所述第一开发商生成根证书,使第一子系统中的动态可装载模块A1、A2实现自我签名;所述第二开发商的数字证书由第一开发商的数字证书签名,形成第二级数字证书,给第二子系统动态可装载模块B1、可加载应用程序B2签名;将所述根证书、所述数字证书形成的证书链以及模块信息、被签名的模块代码的杂凑值,签名验证的具体算法以文件方式保存作为信任书文件。
5.根据权利要求3所述方法,其特征在于,所述完整性验证包括以下步骤从信任书文件中根据证书链读取签名验证用的模块证书和模块信息,验证其真实性;计算模块代码的杂凑值,将之与证书中事先计算好的杂凑值进行比较,如果一致,则验证了模块没有被他人篡改。
6.根据权利要求1-5任一项所述方法,其特征在于,所述第一、第二子系统运行时,所述信任书文件存储在外部存储介质中。
7.一种防止在计算机中运行的应用系统被攻击或篡改的方法,其特征在于,包括以下步骤由应用系统及可加载模块的开发商生成自我签名的根证书,被加载的其它模块由根证书或作为调用者的上一级证书签名,将上述数字签名链接成签名验证证书链,以此作为信任书以文件的方式保存;应用系统的每一个可装载模块在添加到可执行环境中前必须被签名验证,调用者根据所述信任书文件找到验证可装载模块的证书链和它的对象代码,验证签名,如果没有被篡改则加载到运行环境中。
8.根据权利要求7所述方法,其特征在于,还包括以下步骤,在将模块加载到可执行环境中后,还包括以下步骤,计算被加载模块在执行环境中的内存映象代码的杂凑值,将之与事先计算好的杂凑值进行比较,如果比较两者相同,验证模块加载后没有遭到恶意攻击者的攻击。
9.根据权利要求7所述方法,其特征在于,在应用系统运行过程中,还包括以下步骤,随时在线检查模块代码的内存映象,使每一个模块去检查其他模块内存映象代码的完整性和信任书,使得所有模块签名验证被在线执行,防止恶意攻击者的在线攻击。
10.根据权利要求7所述方法,其特征在于,在应用系统运行过程中,还包括以下步骤对加载模块中的函数调用进行安全链接检查,检查函数地址是否在模块内存映象地址空间内。
全文摘要
一种防止在计算机中运行的应用系统被攻击或篡改的方法,先将各可加载模块被开发商各自拥有的数字证书签名,产生证书链和可加载模块签名信息作为信任书文件保存。从该文件获取证书链确认验证者本身;调用者根据该文件可找到模块签名信息,并从磁盘和内存映象空间对被加载模块验证来确定在装载前、后没有被恶意攻击者篡改,而且签名验证可随时在线进行,同时可对加载模块中的函数调用进行安全链接检查,从代码级保证动态计算环境的安全。
文档编号G06F12/16GK1365053SQ01107429
公开日2002年8月21日 申请日期2001年1月9日 优先权日2001年1月9日
发明者刘华芳 申请人:深圳市中兴集成电路设计有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1