专利名称:一种elf文件格式的代码签名验证方法
技术领域:
本发明涉及一种防止计算病毒及其它恶意代码入侵的技术方法,确切说是涉及一种能有效防止ELF文件格式易被黑客利用进行病毒或其它恶意代码攻击、确保计算机安全的代码签名验证方法。
背景技术:
ELF文件格式是Unix环境最主要的可执行二进制文件格式之一,这种文件格式是完全公开的,任何人都能够了解它的具体格式,因而很容易被黑客利用,通过直接修改二进制文件就能达到入侵计算机的目的。历史上有不少Unix下的病毒程序,就是通过该方法来实现入侵的。传统的Unix系统并不会对执行的代码进行完整性和合法性检测,因而让很多病毒程序以及木马程序有机可乘。另外,Unix下有很多软件遵循GPL协议,任何人都可以获得软件的源代码,修改之后再次发行,因此也很容易被黑客利用,修改之后并冒充某些发行者进行发行。如果使用者安装并执行了这样的发行软件,那么就很可能受到入侵。
代码签名和验证是一种能够有效的防止病毒以及其他恶意代码入侵的方法。目前,对ELF文件格式的代码签名技术只有一些零散的研究,还没有统一的标准,也有一些开放源代码的项目,但是大多都只针对某一方面或几方面,没有完整的解决方案,而且效率很低,严重影响了计算机系统的性能。
发明内容
本发明的目的在于针对目前大多数代码签名方法中,安全性与效率严重失衡的状况,提供一种能确保计算机安全、使操作系统效率和安全性能取得最佳平衡、有效防止ELF文件被利用进行非法入侵的代码签名验证方法。
本发明的目的是通过实施下述技术方案来实现的一种ELF文件格式代码签名验证方法,其特征在于在用户请求执行ELF文件时,系统首先判断“系统验证级别”,根据确定的“系统验证级别”,确定被执行文件的“文件验证级别”,对于系统验证级别定为0级的,无须验证代码签名,直接执行ELF文件程序;对于确定“系统验证级别”为非0级的,可以有0、1、2三种“文件验证级别”,分别对应于不验证被执行文件或验证被执行文件的不完全签名值或完全签名值;进行验证时,首先从核心空间公钥链表中提取相应的签名者公钥,并用此公钥解密签名数据,得到原始数据的摘要数据,然后系统利用现有文件数据计算出相应的摘要数据,系统对这两个摘要数据作对比,如果相同则验证成功,可以执行ELF文件;否则验证失败,不允许执行ELF文件。
附加技术特征是①所述的“系统验证级别”,设置四级,分别由0、1、2、3表示;0级表示无保护级,执行所有程序,不进行验证;1级表示低保护级,根据“文件验证级别”验证被执行文件的签名值;2表示中保护级,“文件验证级别”为0时,根据“系统验证级别”验证被执行文件的签名值;“文件验证级别”不为0时,根据“文件验证级别”验证被执行文件的签名值;3表示高保护级,验证所有被执行文件的完全签名值。
②“系统验证级别”也可以根据需要进行设置,具体设置方式由具体情况决定。
③所述“文件验证级别”是为单个文件设置的验证级别,分设3级,分别由0、1、2表示;0级表示无保护级,不验证该文件的签名值;1级表示中保护级,验证该文件的不完全签名值;2级表示高保护级,验证该文件的完全签名值,某文件的验证级别根据需要和规定设置;④所述要验证被执行文件的不完全签名值,是将原始数据,包括被签名的ELF文件的文件头;版本标识、原始文件大小、签名者公钥标识1D;签名算法标识、签名时间,签名者基本信息,以上数据通过散列运算计算得到数字摘要,并用签名者证书私钥加密而得到数字摘要;所要验证被执行文件的完全签名值,是将原始数据,包括被签名ELF文件的所有代码数据;版本标识、原始文件大小、签名者公钥标识1D;签名算法标识,签名时间,签名者基本信息,以上数据通过散列运算计算得到数字摘要,并用签名者证书私钥加密而得到数字摘要。⑤所述验证时所使用的核心空间公钥链表,是在系统核心空间中配置一个记载有所有被信任的公钥链表;当系统验证代码的签名值时,可直接从该表中提取相应公钥,如果公钥链表中没有相应的公钥,则该代码的签名者不被信任,因而验证失败。
本发明的优点在于①可以有效的防止病毒及木马程序等利用ELF文件格式进行恶意代码攻击,因而提高了操作系统的安全性。抵御恶意代码的入侵是代码签名及验证的最主要目的。当ELF文件被签名后,该文件中保存了签名者的签名信息及签名值,这些信息都是验证该文件是否可信的基础。每一个文件的签名值都是唯一的,同样的文件在不同的时间进行签名后,签名值也不同。本方法的优点是当一个被签名的文件被修改之后,哪怕是一个比特(bit)的改动,验证该文件的签名时都无法通过。这样,就可以防止他人通过修改ELF文件来达到入侵的目的。另外,并不是说所有被签名的ELF文件只要没有被修改就可以被正确验证,而是只有可信的签名者所签的ELF文件才能通过验证。这样,就可以防止来自不可信的软件发布者的恶意代码攻击。②与目前大多数代码签名机制中安全性与效率失衡的情况不同,本方法能够使操作系统取得安全性与验证效率的最佳平衡;本方法对系统的保护有两种方式,一种是实时的保护,另一种是非实时的保护。实时保护是指系统在执行摘要计算时,这个计算过程将要消耗一定的系统资源。因此,在实时保护模式下,如果有大量文件需要执行的话,那么系统的性能必然会受到影响。为了在安全性与效率之间取得平衡,本方法提供了一套灵活的配置,可以适应不同安全级别的需求。在本方法中提出了“完全签名值”和“不完全签名值”两个概念及文件处理方法“完全签名值”是指对整个ELF文件的所有数据计算了摘要后所得到的签名值,“不完全签名值”是指对ELF文件的一部分数据计算了摘要后所得到的签名值。另外,还提出了“系统验证级别”和“文件验证级别”两个概念及对文件分级管理的办法。“系统验证级别”是指系统级的验证级别,它适用于系统中所有的ELF文件,“文件验证级别”是指单个ELF文件的验证级别,它只适用于指定的某个ELF文件。通过“系统验证级别”和“文件验证级别”的结合,我们可以得到适应各种安全级别的配置方案,如图4所示。③保护开源软件开发者或者发行者的利益,保护软件使用者的利益。虽然主要目的是保护计算机系统的安全,但是,通过代码签名与认证仍然可以保护软件开发者、发行者的利益。尤其是对开源软件的开发者和发行者来说,通过对自己发行的代码进行签名,可以切实保护自己的声誉和利益。对于大多数开源软件来说,一般任何人都可以使用其源代码,任何人都可以修改或者再次发行。因此,很可能被黑客利用,他们可以修改之后再次发行给用户,从而让用户运行那些具有恶意代码的程序。但是,用户不会轻易相信每一个软件发行者所发行的软件,一般只相信权威的或者知名的发行者。因此,黑客自然就会冒充那些被用户信任的软件发行者来发行自己的恶意代码,用户就可能被迷惑而遭到入侵。这样,既损害了用户的利益,同时也影响了那些被冒名的软件发行者的声誉。但是,如果软件发行者将自己发行的代码进行了签名,软件使用者在安装或者运行这些代码时对代码的签名值进行验证,那么就可以有效阻止恶意代码的入侵,同时也保护了软件发行者的声誉和利益。另外,对于软件发行者将自己发行的代码进行了签名,软件使用者在安装或者运行这些代码时对代码的签名值进行验证,那么就可以有效阻止恶意代码的入侵,同时也保护了软件发行者的声誉和利益。而对于软件使用者来说,如果他不再信任某个软件发行者时,只需要将该发行者的证书从受信任的证书配置文件中删除即可。④在操作系统核心完成验证,安全性更高本对代码签名值的验证是在操作系统核心进行的,因而安全性更高,可以更有效的阻止恶意代码。
图1为系统验证级别表图2为文件验证级别表图3为系统级的签名值验证方式表图4为适应各种安全级别的配置方案表图5为系统级签名验证流程6为具体应用举例具体实施方式
下面给出一个基于Linux操作系统的实现举例。
1、功能模块设计本举例主要包括以下六个功能模块1、签名模块2、核心层验证模块3、应用层验证模块4、公钥管理模块5、系统验证级别管理模块
6、文件验证级别管理模块2、功能模块1、签名模块签名模块是一个相对独立的模块,它是提供给软件发行者使用的模块,主要用于对ELF文件进行签名。
该模块的主要功能有对指定ELF文件签名,对指定目录下的所有ELF文件签名,并生成签名报告。同时,该模块还具有基本的异常处理功能,如能够识别被签名文件是否是ELF文件,能够识别被签名文件是否已经被签名等。
2、核心层验证模块核心层验证模块是指在操作系统核心空间,对请求执行的ELF文件进行验证的模块。该模块首先与系统验证级别管理模块和文件验证级别管理模块进行交互,取得系统验证级别及相应的文件验证级别,然后根据验证策略对文件的签名值进行验证。验证时,该模块还需要与公钥管理模块进行交互,获取验证时所需的签名者公钥。
3、应用层验证模块应用层验证模块是指在应用层对ELF文件进行验证的模块,它是提供给软件使用者用于自行验证文件签名值的工具。验证时,该模块需要与公钥管理模块进行交互,获取验证时所需的签名者公钥。
该模块的主要功能有;对指定ELF文件进行验证,对指定目录下的所有ELF文件进行验证,并生成验证报告。同时,该模块还具有基本的异常处理功能,如能够识别被验证文件是否是ELF文件等。
4、公钥管理模块公钥管理模块的主要功能是管理受信任的签名者公钥,并在操作系统核心维持一个信任公钥链表,以便验证签名值时能够很快提取签名者的公钥。
该模块的主要功能有配置文件管理与分析,初始化核心公钥链表,在核心公钥链表中查询、获取、插入及删除某个公钥。
5、系统验证级别管理模块系统验证级别管理模块主要负责控制“系统验证级别”。主要功能包括初始化系统验证级别,设置系统验证级别,管理并维护系统验证级别,查看系统验证级别。
6、文件验证级别管理模块文件验证级别管理模块主要负责控制“文件验证级别”。主要功能包括设置文件验证级别,管理设置通过文件验证级别的ELF文件,查询某个文件的文件验证级别,获取及检测文件验证级别。该模块还具有防止ELF文件的文件验证级别被修改的功能。
3、应用举例下面是一个将该实现应用到实际中的例子,如图6所示。
应用举例为了便于描述该实际应用,我们假定该应用已经满足以下几个前提条件1.软件使用者和软件发行者(或开发者)有一个共同信任的证书发放机关;2.软件发行者已从该发证机关取得了合法的代码签名证书;3.软件发行者已安装代码签名验证工具包,其中至少包括代码签名工具;4.软件使用者已安装代码签名验证工具包,其中至少包括签名值验证工具;5.软件使用者已安装支持代码签名机制的核心包。
由于满足了以上条件,则该应用实施的步骤如下1 软件发行者使用代码签名工具以及从发证机关取得的证书,对即将发行的代码文件签名,然后以某种形式将已签名的软件连同自己的公钥证书,一起发行给软件使用者;2.软件使用者以某种形式获得该软件及其发行者的公钥证书;3.使用者利用被信任发证机关的根证书,验证发行者的公钥证书是否可信任;4.如果发行者的证书被验证通过,并且使用者信任该证书,那么使用者则将通过配置将该证书的公钥,注入到自己信任的公钥链表中;5.至此,软件使用者可以根据技术方案中的图4选择配置方式。软件使用者可以通过系统验证级别设置工具设置系统验证级别,同时也可以通过文件验证级别设置工具设置文件的验证级别。
以上提到的配置工具、验证工具以及签名工具等都是该方案中必备的工具,在本实例中都有相应的实现。
权利要求
1.一种ELF文件格式代码签名验证方法,其特征在于在用户请求执行ELF文件时,系统首先判断“系统验证级别”,根据确定的“系统验证级别”,确定被执行文件的“文件验证级别”,对于系统验证级别定为0级的,无须验证代码签名,直接执行ELF文件程序;对于确定“系统验证级别”为非0级的,可以有0、1、2三种“文件验证级别”,分别对应于不验证被执行文件或验证被执行文件的不完全签名值或完全签名值;进行验证时,首先从核心空间公钥链表中提取相应的签名者公钥,并用此公钥解密签名数据,得到原始数据的摘要数据,然后系统利用现有文件数据计算出相应的摘要数据,系统对这两个摘要数据作对比,如果相同则验证成功,可以执行ELF文件;否则验证失败,不允许执行ELF文件。
2.按照权利要求1所述的ELF文件格式代码签名验证方法,其特征在于所述的“系统验证级别”,设置四级,分别由0、1、2、3表示;0级表示无保护级,执行所有程序,不进行验证;1级表示低保护级,根据“文件验证级别”验证被执行文件的签名值;2表示中保护级,“文件验证级别”为0时,根据“系统验证级别”验证被执行文件的签名值;“文件验证级别”不为0时,根据“文件验证级别”验证被执行文件的签名值;3表示高保护级,验证所有被执行文件的完全签名值。
3.按照权利要求1所述的ELF文件格式代码签名验证方法,其特征在于“系统验证级别”也可以根据需要进行设置,具体设置方式由具体情况决定。
4.按照权利要求1所述的ELF文件格式代码签名验证方法,其特征在于所述“文件验证级别”是为单个文件设置的验证级别,分设3级,分别由0、1、2表示;0级表示无保护级,不验证该文件的签名值;1级表示中保护级,验证该文件的不安全签名值;2级表示高保护级,验证该文件的完全签名值,某文件的验证级别根据需要和规定设置。
5.按照权利要求1所述的ELF文件格式代码签名验证方法,其特征在于所述要验证被执行文件的不完全签名值,是将原始数据,包括被签名的ELF文件的文件头;版本标识、原始文件大小、签名者公钥标识1D;签名算法标识、签名时间,签名者基本信息,以上数据通过散列运算计算得到数字摘要,并用签名者证书私钥加密而得到数字摘要;所要验证被执行文件的完全签名值,是将原始数据,包括被签名ELF文件的所有代码数据;版本标识、原始文件大小、签名者公钥标识1D;签名算法标识,签名时间,签名者基本信息,以上数据通过散列运算计算得到数字摘要,并用签名者证书私钥加密而得到数字摘要。
6.按照权利要求1所述的ELF文件格式代码签名验证方法,其特征在于所述验证时所使用的核心空间公钥链表,是在系统核心空间中配置一个记载有所有被信任的公钥链表;当系统验证代码的签名值时,可直接从该表中提取相应公钥,如果公钥链表中没有相应的公钥,则该代码的签名者不被信任,因而验证失败。
全文摘要
本发明公开了一种ELF文件格式的代码签名验证方法,在用户请求执行ELF文件时,系统首先判断“系统验证级别”,根据确定的级别确定被执行文件的“文件验证级别”,对于系统验证级别为0级,不验证代码签名,对于非0级的,分别对应于不验证或验证被执行文件不完全签名值或完全签名值;验证时,从核心空间公钥链表中取出签名者公钥,解密签名数据,得到原始数据的摘要数据,用现有文件数据计算出相应摘要数据,比较此两数据,相同时验证成功,不同时验证失败,其显著的优点是可防止病毒攻击,提高操作系统安全性,可使操作系统取得安全与效率的最佳平衡,以及可以有效保护开源软件开发者、发行者及软件使用者的利益。
文档编号G06F12/16GK1512355SQ0212812
公开日2004年7月14日 申请日期2002年12月30日 优先权日2002年12月30日
发明者吴志刚 申请人:成都三零盛安信息系统有限公司