一种基于代码签名的elf文件鉴别方法和装置制造方法

文档序号:6505670阅读:121来源:国知局
一种基于代码签名的elf文件鉴别方法和装置制造方法【专利摘要】本发明公开了一种基于代码签名的ELF文件鉴别方法。ELF文件鉴别是通过发行方提供证据,调用方(操作系统)验证证据的方式进行。发行方的证据是发行方对文件的签名,签名分两步进行:第一步,发行方对文件标识签名,第二步,发行方对文件特征签名。调用方的验证也分两步进行,第一步,调用方先提取该文件标识的签名进行验证,判断该文件的加载与否,称受理验证;第二步,调用方提取文件特征的签名进行验证,判断该文件的执行与否,称接受验证。本发明实现了ELF文件的标识鉴别与特征鉴别,能有效地防止非法入侵和恶意软件的破坏,确保计算机操作安全,并使操作系统效率与安全取得最佳平衡。【专利说明】一种基于代码签名的ELF文件鉴别方法和装置【
技术领域
】[0001]本发明涉及网络安全领域,具体来说,涉及一种基于代码签名的ELF文件鉴别方法和装置。【
背景技术
】[0002]随着Linux的不断发展,越来越多的个人和企业开始使用Linux,尤其众多的企业服务器开始采用Linux操作系统,其安全性也受到越来越多的挑战。可执行连接格式(ExecutableandLinkableFormat,简称为ELF)作为Linux和Unix下最主要的可执行二进制文件格式,自然成了病毒及各种恶意代码的攻击目标。事实证明,有不少Linux下的病毒程序就是通过直接修改ELF文件的方法来实现入侵的。传统的Unix系统(包括Linux)并不会对执行的代码进行完整性和合法性检测,因而让很多病毒程序以及木马程序有机可乘。[0003]为了保证系统的安全性,有必要对诸如ELF文件的多种文件提供有效的鉴别方案,以判断其合法性。目前,主要采用的鉴别方法是代码鉴别。代码鉴别是一种能够有效地防止病毒以及其他恶意代码入侵的方法。对于Linux下的代码鉴别机制,虽然已经有人研究,但是目前仍旧主要存在以下几个问题:一是在安装时进行签名验证的方法,并通过修改chmod系统调用控制文件的可执行属性,但这种方法无法检测程序安装后对代码的任何修改,有一定的局限性;二是采用PKI公钥体制,由于PKI是基于第三方的,不能保障证书的实时有效性,且CA根证书易被替换,也存在明显漏洞;三是签名鉴别是先将整个文件加载入内存,计算其数字摘要再验证文件的真实性与完整性,这种方法是一种事后鉴别,且性能较低。[0004]针对相关技术中对文件进行鉴别的方案存在缺陷导致系统安全性受到威胁的问题,目前尚未提出有效的解决方案。【
发明内容】[0005]针对相关技术中的问题,本发明提出一种基于代码签名的ELF文件鉴别方法和装置,能够有效防止ELF文件被黑客利用,成为进行病毒、木马和恶意代码攻击的工具,确保操作系统安全。[0006]本发明的技术方案是这样实现的:[0007]根据本发明的一个方面,提供了一种基于代码签名的ELF文件鉴别方法。[0008]该方法包括:用户或系统在申请执行ELF文件时,操作系统内核调度程序首先对所述ELF文件的标识进行鉴别;如果鉴别结果为所述ELF文件的标识是真实的,则进一步对所述ELF文件的特征进行鉴别,并且在所述ELF文件的特征鉴别结果为完整及真实的情况下,允许执行所述ELF文件;[0009]如果所述ELF文件的标识是非真实的、或者所述ELF文件的特征鉴别结果不是完整及真实的,则拒绝执行所述ELF文件。[0010]其中,对所述ELF文件的标识进行鉴别包括:对所述ELF文件的标识签名验证和签名者标识的合法性检查。[0011]并且,所述ELF文件的标识签名与验证是基于组合公钥体制的,其中,签名私钥是ELF文件的发行方或作者的私钥,在对所述ELF文件的标识签名进行验证时,将所述ELF文件的发行方或作者的标识作为公钥。[0012]此外,对所述ELF文件的标识进行鉴别或者包括:对签名者的标识进行合法性检查,判断ELF文件的作者与发行方的标识是否在操作系统预设信任列表中;和/或,对文件标识的签名进行数字签名的验证,判断文件标识的真实性与完整体。如果签名者标识鉴别未通过,则直接拒绝加载ELF文件。[0013]其中,对所述ELF文件的特征进行鉴别包括:对所述ELF文件的特征签名验证和签名者标识的合法性检查。[0014]并且,所述ELF文件的内容签名与鉴别是基于组合公钥体制的,其中,签名私钥是ELF文件的发行方或作者的私钥,在对所述ELF文件的特征签名进行鉴别时,将所述ELF文件的发行方或作者的标识作为公钥。[0015]此外,对所述ELF文件的特征进行鉴别或者包括:对签名者的标识进行合法性检查,判断ELF文件的作者与发行方的标识是否在操作系统预设信任列表中;和/或,对文件特征的签名进行数字签名的验证,判断文件标识的真实性与完整体。如果文件特征鉴别未通过,则拒绝执行ELF文件。[0016]根据本发明的另一方面,还提供了一种基于代码签名的ELF文件鉴别装置。[0017]该装置包括:第一鉴别模块,用于在用户或系统在申请执行ELF文件时,首先对ELF文件的标识进行鉴别;第二鉴别模块,用于在鉴别结果为ELF文件的标识是真实的情况下,进一步对ELF文件的特征进行鉴别,并且在ELF文件的特征鉴别结果为完整及真实的情况下,允许执行ELF文件;控制模块,用于在ELF文件的标识是非真实的、或者ELF文件的特征鉴别结果不是完整及真实的情况下,拒绝执行ELF文件。[0018]本发明实现了ELF文件的标识鉴别与特征鉴别,能有效地防止非法入侵和恶意软件的破坏,确保计算机操作安全,并使操作系统效率与安全取得最佳平衡。【专利附图】【附图说明】[0019]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0020]图1是根据本发明实施例的一种基于代码签名的ELF文件鉴别方法的流程示意图;[0021]图2是根据本发明实施例的对ELF文件进行签名设置的流程示意图;[0022]图3是根据本发明实施例的对签名的ELF文件进行验证操作的流程示意图;[0023]图4是根据本发明实施例的Linux安全模块的执行流程示意图。【具体实施方式】[0024]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。[0025]根据本发明的实施例,提供了一种基于代码签名的ELF文件鉴别方法。[0026]如图1所示,根据本发明实施例的基于代码签名的ELF文件鉴别方法包括:[0027]步骤S101,用户或系统在申请执行ELF文件时,操作系统内核调度程序首先对所述ELF文件的标识进行鉴别(该步骤可通过调用操作系统内核调度程序来完成,也可以借助于其他方式);[0028]步骤S103,如果鉴别结果为所述ELF文件的标识是真实的,则进一步对所述ELF文件的特征进行鉴别,并且在所述ELF文件的特征鉴别结果为完整及真实的情况下,允许执行所述ELF文件;[0029]步骤S105,如果所述ELF文件的标识是非真实的、或者所述ELF文件的特征鉴别结果不是完整及真实的,则拒绝执行所述ELF文件。[0030]其中,对所述ELF文件的标识进行鉴别包括:对所述ELF文件的标识签名验证和签名者标识的合法性检查。[0031]并且,所述ELF文件的标识签名与验证是基于组合公钥体制的,其中,签名私钥是ELF文件的发行方或作者的私钥,在对所述ELF文件的标识签名进行验证时,将所述ELF文件的发行方或作者的标识作为公钥。[0032]此外,对所述ELF文件的标识进行鉴别或者包括:一是对签名者的标识进行合法性检查,判断ELF文件的作者与发行方的标识是否在操作系统预设信任列表中;二是对文件标识的签名进行数字签名的验证,判断文件标识的真实性与完整体。如果签名者标识鉴别未通过,则直接拒绝加载ELF文件。[0033]其中,对所述ELF文件的特征进行鉴别包括:对所述ELF文件的特征签名验证和签名者标识的合法性检查。[0034]并且,所述ELF文件的内容签名与鉴别是基于组合公钥体制的,其中,签名私钥是ELF文件的发行方或作者的私钥,在对所述ELF文件的特征签名进行鉴别时,将所述ELF文件的发行方或作者的标识作为公钥。[0035]此外,对所述ELF文件的特征进行鉴别或者包括:一是对签名者的标识进行合法性检查,判断ELF文件的作者与发行方的标识是否在操作系统预设信任列表中;二是对文件特征的签名进行数字签名的验证,判断文件标识的真实性与完整体。如果文件特征鉴别未通过,则拒绝执行ELF文件。[0036]根据本发明的实施例,还提供了一种基于代码签名的ELF文件鉴别装置。[0037]该装置包括:第一鉴别模块,用于在用户或系统在申请执行ELF文件时,首先对ELF文件的标识进行鉴别(可通过调用操作系统内核调度程序来完成,也可以通过其他方式);第二鉴别模块,用于在鉴别结果为ELF文件的标识是真实的情况下,进一步对ELF文件的特征进行鉴别,并且在ELF文件的特征鉴别结果为完整及真实的情况下,允许执行ELF文件;控制模块,用于在ELF文件的标识是非真实的、或者ELF文件的特征鉴别结果不是完整及真实的情况下,拒绝执行ELF文件。[0038]以下从原理上对本发明的上述技术方案进行说明。[0039]在本发明中,所述文件鉴别包括对文件的签名与验证,执行国际标准协议;所述签名与验证是在基于标识的公钥体制基础上实现的;所述基于标识的公钥体制是由标识产生公、私钥对密钥体制(目前只有组合公钥(CPK)体制才能同时提供签名与验证以及加密与脱密功能);例如,假设实体标识为Alice,alice表示Alice的私钥,ALICE表示公钥,私钥的映射算法为σ?,公钥的映射算法为〇2,那么可以得出:Alice--alice;Alice-σ2-ALICE。[0040]其中,σ1只在密钥管理中心(KeyManagementCenter,缩写为KMC)具有,因此只有KMC才能生成私钥,而〇2每一用户都具有,因此,每一用户只要知道标识就能生成对应的公钥。[0041]在本发明中,ELF文件鉴别是通过文件发行方提供证据,文件调用方验证证据的方式进行。证据是发行方对文件的签名,签名分两步进行:第一步,发行方对文件标识签名,第二步,发行方对文件特征签名。调用方的验证也分两步进行:第一步,在受理阶段,当系统或用户申请执行ELF文件时,即操作系统内核调度程序在文件载入内存之前,先提取该文件标识的签名进行验证,判断该文件的加载与否,称受理验证;第二步,在接受阶段,提取文件特征的签名进行验证,判断该文件的执行与否,称接受验证。[0042]在实际实施时,实现本发明上述技术方案的架构包括签名模块、内核安全模块、验证模块、安全芯片模块和名单列表模块等五个部分,其中,[0043]签名模块用于对ELF文件的文件标识和文件特征进行签名,提供真实性证据。其中,文件标识包括文件名称、文件大小和文件的原作者等信息;文件特征包括文件标识与文件内容,是文件标识与文件内容数据的数字摘要,可采用SHA1杂凑函数。对文件标识的签名,也称受理签名;对文件特征的签名,也称接受签名。文件特征提供文件标识和数据的一体性证明的,因此可将文件中的一小段或数据完整性码作为文件特征。签名模块一般以可执行二进制程序方式存在。在实现安全策略前需要对操作系统的ELF文件进行签名,否则操作系统的ELF文件由于没有合法签名也会被拒绝执行,导致操作系统无法正常运行。[0044]内核安全模块用于对操作系统内核源代码的调试进程进行修改,在主进程调度ELF文件前先转向验证模块,由验证模块判定请求加载或执行ELF文件的真实性,只能通过鉴别是真实的(即没有被篡改,是名单列表中所允许的发行者所发行的ELF文件),才允许加载或执行,否则拒绝加载或执行。[0045]验证模块用于对ELF文件标识的签名进行验证,称受理验证,做出加载与否的判断;同时还用于对ELF文件特征的签名进行验证,称接受验证,做出执行与否的判断。受理验证可以在接受验证之前进行,称事先鉴别。事先鉴别可大大提高操作系统的性能,这也是本发明区别于其他鉴别方法的重要特征。[0046]安全芯片模块用于通过硬件保护技术保护系统参数和名单列表的安全,有效防止替换攻击与量子计算攻击,这也是本发明区别于传统签名鉴别方法的重要特征。[0047]名单列表模块是一种配置性文件,用于管理合法的发行方。名单用芯片标识加密,存储在芯片内部,当操作系统启动时调入操作系统内核,禁止用户进程访问。名单列表也是本发明的有效组成部分,这样可以实现允许的合法的发行方签名的ELF文件外,其余即使有合法签名(签名不在名单列表中)的ELF文件也会被拒绝加载或执行。[0048]基于上述架构,本发明在实际实施时主要涉及的签名流程和验证流程如下:[0049]签名流程是在启用验证流程相关模块之前对计算机内操作系统所涉及的ELF文件和一些经过测试确认安全的软件中的ELF文件进行签名,签名之后的文件视为安全文件,所以在执行签名前请签名方确认(可能通过现有的防病毒与木马软件进行检测)文件未感染病毒与木马。[0050]如图2所示,签名过程分为以下几步:[0051]1)、发行方先提供所要发行的ELF文件标识真实性证据,即发行方对ELF文件标识签名(签名运算在安全芯片内);[0052]2)、将文件标识的签名值、签名时间、签名协议、版本号和签名者标识等进行打包,然后采用ASN.1编码后写入ELF文件的标识签名区;[0053]3)、发行方先提供所要发行的ELF文件特征真实性证据,即发行方对ELF文件特征签名(签名运算在安全芯片内);[0054]4)、将文件特征的签名值、签名时间、签名协议、版本号和签名者标识等进行打包,将打包后的数据采用ASN.1编码写入签名后的ELF文件的特征签名区。[0055]验证流程是在安装部署本发明的验证模块、内核安全模块、安全芯片模块和名单列表模块后,在操作系统启动时开始至系统关闭的整个周期中所执行的ELF文件合法性检查的流程。验证流程涉及了签名信息的提取、名单列表的加载与查询、安全芯片模块和内核安全模块的调度等。[0056]如图3所示(图中将标识鉴别与文件特征鉴别进行了合并简化处理),验证流程分为以下几步:[0057]1)、系统或用户申请执行某个ELF文件;[0058]2)、内核安全模块将调用验证模块,申请对申请执行的ELF文件进行验证;[0059]3)、验证模块从申请执行的ELF文件的标识签名区中读取标识签名数据,同时将文件标识信息一并提交给验证模块;[0060]4)、验证模块对签名数据进行格式校验,如果不通过,则直接向内核安全模块返回鉴别不通过的信息(主要针对未签名的ELF文件),内核安全模块拒绝执行请求;如果通过,则转入步骤5);[0061]5)、验证模块对文件标识计算数字摘要,并将数字摘要与签名信息送入安全芯片模块,进行数字签名的验证;[0062]6)、如果验证不通过,则向内核安全模块返回鉴别不通过信息(针对文件标识被篡改的情况),内核安全模块拒绝执行请求;否则转入步骤7);[0063]7)、标识签名验证通过,则查询签名者标识是否在名单列表中,如果不在名单列表中,则向内核安全模块返回鉴别不通过信息,内核拒绝执行请求;否则转入步骤8);[0064]8)、验证模块从ELF文件中提取文件内容签名数据,同时计算文件内容(不含ELF签名的附加信息)的数据摘要,将签名数据和数字摘要提交给验证模块。[0065]9)、验证模块检查签名数据的格式合法性,不通过则向内核安全模块返回鉴别不通过信息,内核安全模块拒绝该ELF文件的执行请求;否则转入步骤10);[0066]10)、验证模块将数字摘要与签名数据送入安全芯片模块进行签名验证,如果验证不通过,则向内核安全模块返回鉴别不通过信息,内核安全模块拒绝执行该ELF文件的执行请求;否则转入步骤11);[0067]11)、当验证通过后,提取签名标识,向名单列表中查询此标识是否存在,如果不存在则向内核安全模块返回鉴别不通过信息,内核安全模块拒绝执行该ELF文件的执行请求;否则转入步骤12);[0068]12)、内核安全模块加载该ELF文件并执行。[0069]在上述的流程中,数字签名验证是在安全芯片模块内进行的,如果芯片的性能达不到要求或从安全性与性能上进行综合考虑,也可以采用验证模块来实现数字签名的验证功能。[0070]在实际应用时,本发明的上述技术方案适用于以Unix和Linux操作系统为内核所有操作系统,包括目前流行的Android操作,现以开源的Linux操作系统为例对本发明的上述技术方案进行进一步说明。[0071]Linux安全模块(LinuxSecurityModule,缩写为LSM)是Linux内核的一个轻量级通用访问控制框架。它使得各种不同的安全访问控制模型能够以Linux可加载内核模块的形式实现出来,用户可以根据其需求选择适合的安全模块加载到Linux内核中,从而大大提高了Linux安全访问控制机制的灵活性和易用性。本发明就是利用了Linux安全模块的访问控制框架,在内核程序调度时加入了对ELF文件的签名验证以实现ELF文件的真假鉴别,从而提升操作系统的安全性。[0072]图4示出了Linux安全模块的执行过程,其中,用户在执行系统调用时,先通过原有的内核接口依次执行功能性的错误检查,接着进行传统的DAC检查,并在即将访问内核的内部对象之前,通过LSM钩子函数调用LSM。LSM再调用具体的访问控制策略来决定访问的合法性。[0073]本发明的原理就是在利用LSM钩子函数调用验证模块实现对ELF文件的文件标识签名与文件内容签名验证,根据鉴别的结果来判断是否允许该ELF文件的执行,以达到防止病毒与木马程序的恶意攻击。[0074]以下就本发明的实现进行Linux系统设计,并举例说明实施过程。[0075]1.系统总体设计[0076]主要涉及以下几个模块:签名模块、内核安全模块、验证模块、安全芯片模块、名单列表模块。[0077]2.模块设计[0078](1)签名模块[0079]签名模块是一个相对独立的模块,它是提供给发行方所使用的一个签名管理装置,供发行方进行对所要发行的ELF文件进行签名。[0080]签名模块包括以下主要功能:[0081]a、对指定的ELF文件或指定文件夹下的所有ELF文件进行签名,生成签名后的ELF文件;[0082]b、具有相应的异常处理能力,如判断文件是否是ELF文件和对已签名的ELF文件不做重复签名等。[0083]签名模块涉及的主要数据结构有:[0084]a、签名数据结构[0085]ASN!l_SEQUENCE(SIGINFO)={ASN1_SIM[)LE(SIG1NF0,version,ASN1_INTEGER),//签名的版本号ASN1_SIM1)LE(SIGIN丨:?,matrixid,八5川_11下85丁尺叫0),//发行方所在的矩阵标识ASN1_SIV1PLE(SIGINF0,signedd,ASN1-UTF8STRING)././发行方的标识ASN1_SIMPLE(S1GINF0,signTime,ASN?_ΤΙΜΕ),//签名时间戮ASNIS!MPLE(S1G!NF0,signAlg,ASNl_OBJECT),//签名算法标识[0086]ASN1-S丨MPLE(S1G]NF0,signVai,ASN丨-OCTET-STRING),"签名值(s.c)}ASNl_SEQUENCE_END(S!G!NFO);[0087]b、ELF文件数据结构(如表1所示)[0088]【权利要求】1.一种基于代码签名的ELF可执行连接格式文件鉴别方法,其特征在于,包括:用户或系统在申请执行ELF文件时,首先对所述ELF文件的标识进行鉴别;如果鉴别结果为所述ELF文件的标识是真实的,则进一步对所述ELF文件的特征进行鉴别,并且在所述ELF文件的特征鉴别结果为完整及真实的情况下,允许执行所述ELF文件;如果所述ELF文件的标识是非真实的、或者所述ELF文件的特征鉴别结果不是完整及真实的,则拒绝执行所述ELF文件。2.根据权利要求1所述的ELF文件鉴别方法,其特征在于,对所述ELF文件的标识进行鉴别包括:对所述ELF文件的标识签名验证和签名者标识的合法性检查。3.根据权利要求2所述的ELF文件鉴别方法,其特征在于,所述ELF文件的标识签名与验证是基于组合公钥体制的,其中,签名私钥是ELF文件的发行方或作者的私钥,在对所述ELF文件的标识签名进行验证时,将所述ELF文件的发行方或作者的标识作为公钥。4.根据权利要求1所述的ELF文件鉴别方法,其特征在于,对所述ELF文件的标识进行鉴别包括:对签名者的标识进行合法性检查,判断ELF文件的作者与发行方的标识是否在操作系统预设信任列表中;和/或,对文件标识的签名进行数字签名的验证,判断文件标识的真实性与完整体。如果签名者标识鉴别未通过,则直接拒绝加载ELF文件。5.根据权利要求1所述的ELF文件鉴别方法,其特征在于,对所述ELF文件的特征进行鉴别包括:对所述ELF文件的特征签名验证和签名者标识的合法性检查。6.根据权利要求1所述的ELF文件鉴别方法,其特征在于,所述ELF文件的内容签名与鉴别是基于组合公钥体制的,其中,签名私钥是ELF文件的发行方或作者的私钥,在对所述ELF文件的特征签名进行鉴别时,将所述ELF文件的发行方或作者的标识作为公钥。7.根据权利要求1所述的ELF文件鉴别方法,其特征在于,对所述ELF文件的特征进行鉴别包括:对签名者的标识进行合法性检查,判断ELF文件的作者与发行方的标识是否在操作系统预设信任列表中;和/或,对文件特征的签名进行数字签名的验证,判断文件标识的真实性与完整体。如果文件特征鉴别未通过,则拒绝执行ELF文件。8.-种基于代码签名的ELF文件鉴别装置,其特征在于,包括:第一验证模块,用于在用户或系统在申请执行ELF文件时,首先对所述ELF文件的标识进行鉴别;第二验证模块,用于在鉴别结果为所述ELF文件的标识是真实的情况下,进一步对所述ELF文件的特征进行鉴别,并且在所述ELF文件的特征鉴别结果为完整及真实的情况下,允许执行所述ELF文件;控制模块,用于在所述ELF文件的标识是非真实的、或者所述ELF文件的特征鉴别结果不是完整及真实的情况下,拒绝执行所述ELF文件。【文档编号】G06F21/64GK104283860SQ201310288979【公开日】2015年1月14日申请日期:2013年7月10日优先权日:2013年7月10日【发明者】李维刚,南相浩申请人:全联斯泰克科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1