基于白名单列表的linux文件完整性度量方法
技术领域
1.本发明涉及信息安全技术领域,具体涉及基于白名单列表的linux文件完整性度量方法。
背景技术:2.可信计算是一种非常有效的信息安全技术,其中文件完整性度量是可信计算的基础。通过ima完整性度量,可以检测出加载至平台的执行部件以及运行于平台的应用程序,配置文件,动态库是否被篡改,从而保证整个平台的安全性。
3.在内核ima 保护之下的每个文件都需要把它的摘要数值跟文件存储在一起,这通常是利用了文件系统中的扩展属性来完成的。ima 可以配置成在访问每个文件之前都先检查它的摘要是否仍然与之前存下来的值相匹配。如果不在匹配了就马上拒绝访问。在文件被评估的时候,它们的摘要可以被提交给 tpm 来扩展一个 platform configuration register(pcr),得出的最终数值可以跟此时被测量的文件数据有关,但它同时也会根据访问顺序不同而受到影响。
4.现在是把度量基准值存储在扩展属性 security.ima 当中,如果 security.ima 被篡改了,它和文件内容一起篡改的话,不就实现了对文件本身的篡改并且不被系统发现,为了解决这个问题,我们引入了 evm 模块来防止这种事情的发生。
5.evm 是扩展验证模块,它的作用就是将系统当中某个文件的安全扩展属性,包括 security.ima 、security.selinux 等合起来计算一个哈希值,然后使用 tpm 中存的密钥对其进行对称签名,签名之后的值存在 security.evm 中,这个签名后的值是不能被篡改的,如果被篡改,再次访问的时候就会验签失败。
6.总而言之,evm 的作用就是通过对安全扩展属性计算 hmac 值并将其存储在 security.evm 中,提供对安装扩展属性的离线保护。其中security.ima存储文件内容的哈希值;security.evm存储文件扩展属性的哈希值签名。访问受保护文件时,将会触发内核中的钩子,依次验证文件扩展属性和内容的完整性:使用内核 keyring 中的公钥对文件 security.evm 扩展属性中的签名值验签,与当前文件扩展属性的哈希值比较,如果匹配就证明文件的扩展属性是完整的(包括 security.ima)。在文件扩展属性完整的前提下,将文件 security.ima 扩展属性的内容与当前文件内容的摘要值比较,如果匹配就允许对文件的访问。
7.然而,上述完整性度量方法存在如下缺陷:1、原生 ima 会在系统初次部署的时候进入一个 fix 模式,在该模式下对系统中的所有文件去计算一个参考值,然后进入到 enforce 模式中,用初次部署时计算出来的基准值和系统当前的文件摘要值进行对比,如果两者不符合,就拒绝对文件的访问。但这种方式存在一个问题,它的信任链并不完整,因为在启动系统之后,在现网环境下预先生成并标记文件扩展属性,访问文件时将文件扩展属性作为参考值,要通过人为对系统重 新设定基准值,在设定基准值之前,这个文件是有可能被篡改的。
8.2、研制成功的可信计算产品只能实现系统开机时的静态度量,不能实现系统工作后的动态度量。
9.3、ima评估验证时,性能低下,对于性需要高性能的可信计算功能的完整性度量,这是不可接受的,因为ima评估时,需要使用公钥验证文件扩展属性中的security.evm的签名值,成功之后,还需要验证security.ima的摘要值。
10.4、现有的动态度量模型存在功能受限、结构复杂、实现困难等不足。
技术实现要素:11.为解决已有技术存在的不足,本发明提供了一种基于白名单列表的linux文件完整性度量方法,包括如下步骤:步骤s1:系统启动早期,将所有用户空间白名单列表加载到内核空间白名单列表中;步骤s2:系统运行阶段,针对新安装的软件包,将软件包与其所对应的系统包白名单列表同时导入内核空间,将系统包白名单列表加载到内核空间白名单列表中;或者,将管理员定制的白名单列表加载到内核空间白名单列表中;步骤s3:系统关闭后,内核空间白名单列表释放;步骤s4:系统再次启动时,再次将所有用户空间白名单列表加载到内核空间白名单列表中,其中,步骤s2中所注册的系统包白名单列表存在于用户空间白名单列表中。
12.其中,所述步骤s1中,在将用户空间白名单列表加载到内核空间白名单列表之前,内核加载白名单钩子使用安全芯片中证书的公钥对加载进来的用户空间白名单列表进行验签,验签通过再加载;验签失败后返回错误信息给白名单加载器;所述步骤s2中,在将系统包白名单列表加载到内核空间白名单列表之前,内核加载白名单钩子使用安全芯片中证书的公钥对加载进来的系统包白名单列表进行验签,验签通过再加载;验签失败后返回错误信息给白名单加载器;所述步骤s2中,在将管理员定制的白名单列表加载到内核空间白名单列表之前,使用管理员自己的证书公钥对加载进来的定制的白名单列表进行验签,验签通过再加载;验签失败后返回错误信息给白名单加载器。
13.其中,所述步骤s1中,用户空间白名单列表为整个系统要保护的所有的软件包中文件的摘要值列表;所述步骤s2中,系统包白名单列表为新安装的软件包中文件的摘要值列表。
14.其中,在系统运行阶段,若用户空间需要对内核空间系统进行调用,则将用户空间文件的参考值与内核空间白名单列表中的参考值进行比对,比对存在的情况下允许用户空间执行系统调用,比对不存在的情况下拒绝用户空间执行系统调用。
15.其中,所述用户空间文件的参考值为需要进行系统调用的所有文件的摘要值列表;内核空间白名单列表的参考值为待调用的软件包中需要度量的所有文件的摘要值列表。
16.其中,通过内核空间的内核完整性钩子函数完成用户空间文件的参考值与内核空间白名单列表中的参考值的比对。
17.本发明提供的基于白名单列表的linux文件完整性度量方法,使用内核空间白名
单列表记录系统保护文件的可信哈希值,取代使用文件扩展属性记录系统保护文件的可信哈希值,提高了系统完整性度量功能的易用性;同时,使用可信芯片存储系统发行者的证书或者软件开发者的证书,保证加载进入内核空间的白名单列表都是可信安全的。
附图说明
18.图1:本发明的基于白名单列表的linux文件完整性度量方法的实现逻辑图。
具体实施方式
19.为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
20.图1为本发明的基于白名单列表的linux文件完整性度量方法的实现逻辑图,相对于原生内核中的ima完整性度量机制,本发明提供的ima白名单列表机制从安全性,易用性,性能方面进行了优化加强。
21.如图1所示,本发明的基于白名单列表的linux文件完整性度量方法,基于wlim(white list integrity module,白名单列表完整性度量模块)功能,它的实现,是通过提供一种机制将已安装文件的摘要值注册到内核空间的白名单列表中,加载时,使用安全芯片的证书公钥链对欲加载的白名单(欲加载的白名单包括系统启动早期用户空间的白名单以及系统运行过程中新安装的软件包中文件所对应的白名单)进行验签,验签成功的白名单才会加载到内核空间白名单列表,然后就可以在访问文件(打开,执行,加载)时查阅该内核空间白名单列表了。当一个文件的摘要出现在了内核空间白名单列表中且相同,那么可以认为此文件是没有改动过的,否则的话就说明该文件已经被修改、或者根本没有包括在内核空间白名单列表中,所以访问可能会被拒绝。
22.其中,用户空间白名单列表为整个系统要保护的所有的软件包中文件的摘要值列表,在系统每次重启的时候通过白名单加载器加载到内核空间白名单列表中;内核空间白名单列表为系统在运行过程中要保护的所有的软件包中文件的摘要值列表,在系统每次重启的时候通过白名单加载器由用户空间白名单列表加载而来,并在系统运行过程中接收新加载的新安装软件包的系统包白名单列表;系统包白名单列表为新安装的软件包中文件的摘要值列表,待其注册到内核空间白名单列表后,在系统下次重启时,作为用户空间白名单列表的一部分,在开机过程中被加载到内核空间白名单列表中。
23.用户空间的白名单列表是一种特殊格式的二进制数据文件,他与系统的打包文件一一对应,记录了文件包中受保护文件的哈希值(即摘要值),内核空间白名单列表文件在构建包的阶段必须经过系统私钥签名,当通过接口上传到内核空间白名单列表时,必须经过安全芯片中的证书公钥验签才能加载。
24.wlim还可为系统提供一种处理完整性管理的方法,不需要发行版提供商密切参与这一过程,如果客户需要提供自己的白名单列表,可以在获取安全芯片的管理员权限的基础上,加入自己的证书,将自己的证书加入到安全芯片的证书列表中,并将自己开发的应用的白名单列表加载到内核空间白名单列表中,在使用安全芯片证书验签欲加载的白名单时,使用客户自己的证书公钥,验证客户自己定制的白名单了,无需系统集成商去操作和集成第三方白名单,增加了整个系统的易用性。
25.由此可见,相比较原生内核的ima完整性度量机制是在系统安装完成自后,手动生成标记文件扩展属性,访问文件时将文件扩展属性值作为安全基准值所存在的安全链不完整,且没有经过专业的认证机构认证签名的缺陷;本发明通过特殊的白名单列表机制,在构建阶段通过认证机构认证签名的文件参考值(即一个软件包中需要度量的所有文件的摘要值列表),随着软件包一起发布,在安装软件包的同时将参考值导入内核空间白名单列表中,并且,通过可信芯片中保存的公钥进行验证签名,确保了内核空间白名单列表的参考值来自于软件发行商,实现了完整的信任链,减少了中间环节的安全漏洞,同时,在访问文件时,将内核空间白名单列表中的摘要值作为安全基准值,安全性好;另外,相比较原生 ima完整性度量机制在初次部署或每次更新软件包时,都需要切换到 fix 模式手动标记文件扩展属性后再重启进入 enforce 模式,才能正常访问安装的程序的缺陷;本发明提供的白名单完整度量机制,在enforce模式下,只要是管理员有加载权限,就保证了用户空间可以和内核空间进行通信从而进行白名单列表文件的传输。这个时候,只要当前安装包的文件的摘要值已经被加载到内核空间白名单列表中去,就算当前系统的完整性度量处于enforce模式,也能对当前安装的程序或者文件进行完整性保护。也即,内核空间白名单列表可实现安装完成后开箱即用,且允许直接在 enforce 模式下安装或升级软件包(比如rpm,deb)包,无需重启和手动标记即可使用,实现了用户感知最小化,适合现网环境下的快速部署和平滑升级。
26.本发明的一个具体实施实例如下:1、系统包白名单列表文件构建系统包白名单列表是在构建系统包的时候,将需要保护的文件自动构建哈希值,然后将保护的文件以及对应的哈希值列表存入系统包白名单列表文件中,然后使用构建系统的私钥,或者使用第三方软件开发者对该软件包进行签名,然后该系统包白名单列表随着该软件包一起发布,随着软件包的安装进入系统。
27.2、用户空间白名单列表及系统包白名单列表加载操作系统会有一个运行在用户空间的白名单解析器,在系统启动早期阶段由系统发起调用,然后将系统所有包的白名单列表(图1中表现为用户空间白名单列表)加载到内核空间白名单列表,在加载过程中内核加载白名单钩子会使用安全芯片中证书的公钥对加载进来的用户空间白名单进行验签,确保用户空间白名单列表参考值来自于软件发行商,实现完整的信任链,验签成功,允许加载进入内核空间白名单列表,验签失败,返回错误给用户空间的白名单解析器。
28.在系统运行阶段,如果有新的软件包需要安装,针对该软件包的系统包白名单列表的加载方式,与上文所述用户空间白名单列表的加载方式相同;加载后,新安装软件包中相关文件的系统包白名单列表在下次系统重启的时候,作为用户空间白名单列表中的一部分,与原先存在于用户空间的其它白名单列表,一起重新经过验签、加载的步骤,再次被加载到内核空间白名单列表中。
29.3、系统安全调用流程对应用的可执行程序、脚本、配置文件进行系统调用,比如打开,读取,执行时,内核空间的内核完整性钩子函数就计算文件的哈希值,然后与内核空间白名单列表中的哈希值进行比较,如果不存在或者哈希值不一致,则拒绝执行,返回错误给用户空间,如果验证
成功,运行下一步的系统调用。
30.本发明的有益效果如下:1、本发明使用内核白名单列表记录系统保护文件的可信哈希值,取代使用文件扩展属性记录系统保护文件的可信哈希值,提高系统完整性度量功能的易用性。
31.2、本发明使用可信芯片存储系统发行者的证书或者软件开发者的证书,保证了加载进入内核空间的白名单列表都是可信安全的。
32.虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。