首页> 中国专利> 一种预链接机制下的动态链接库完整性度量方法

一种预链接机制下的动态链接库完整性度量方法

摘要

本发明公开了一种预链接机制下的动态链接库完整性度量方法。本发明为:1)关闭Linux的完整性度量使能开关,进入完整性维护模式并提取所需度量的文件;2)检测度量文件是否属于动态链接库文件;如果是,则提取该动态链接库文件中代码段在文件中的偏移位置和长度发送给度量函数计算基准度量值并保存;3)进入完整性验证模式;当系统加载的文件为需度量文件时,检测其是否属于动态链接库文件;如果是,则提取该动态链接库文件中代码段在文件中的偏移位置和长度发送给度量函数计算度量值并与对应基准度量值进行比较,如果匹配,则允许加载执行,否则拒绝。本发明不需要关闭prelink工具即可对动态链接库进行完整性度量。

著录项

  • 公开/公告号CN104751048A

    专利类型发明专利

  • 公开/公告日2015-07-01

    原文格式PDF

  • 申请/专利权人 中国科学院信息工程研究所;

    申请/专利号CN201510046876.4

  • 发明设计人 涂碧波;陈克;李艳昭;孟丹;

    申请日2015-01-29

  • 分类号

  • 代理机构北京君尚知识产权代理事务所(普通合伙);

  • 代理人司立彬

  • 地址 100093 北京市海淀区闵庄路甲89号

  • 入库时间 2023-12-18 09:38:21

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-12-15

    授权

    授权

  • 2015-07-29

    实质审查的生效 IPC(主分类):G06F21/51 申请日:20150129

    实质审查的生效

  • 2015-07-01

    公开

    公开

说明书

技术领域

本发明涉及计算机操作系统完整性验证技术领域,具体涉及一种基于Linux系统预链 接机制下的动态链接库完整性度量方法。

背景技术

随着计算机应用的普及,对计算机系统的完整性保护日益受到重视,出现了各种完整性 保护的模型与实施方法。其中大部分都采取了度量的方法,即在某些特殊的时刻,对目标进 行度量,得到目标的某些信息(通常是对文件内容的哈希值),将这些信息的值与事先记录的 标准值进行比较,从而判断目标的完整性是否被破坏。目前在Linux系统中,保护完整性的 方式基本采用度量的方法。例如Linux系统中安全模块中的IMA(Integrity Measurement  Architecture),采用的就是先存储一些重要文件的正确哈希值,在需要使用这些文件之前先对 其进行度量得到哈希值,然后与正确的哈希值比较,如果匹配成功就让其执行或使用,否则 拒绝。

同时,在Linux系统中,为了减少程序的加载时间、缩短系统的启动时间,基本上都采用 了Prelink机制,即预链接机制。Prelink的运行原理就是在程序的运行前就确定下来每个共享 库文件在程序执行时在地址空间里的位置,包括每个函数的地址。但是使用了Prelink之后会 对动态链接库的文件内容进行修改,并且每次对同一个动态链接库文件进行预链接的地址空 间随机导致每次修改的结果不一样。这最终就导致了完整性度量方法不能适用于动态链接库 文件。

目前针对这个问题主要有两种度量方法,第一种是不使用Prelink机制,将动态链接库也 进行完整性度量,这样做的缺点是Linux系统中的程序启动时间加长;第二种是使用Prelink 技术而不对动态链接库进行完整性度量,这样做的缺点是安全性能的降低,因为攻击者可以 破坏或者替换系统中动态链接库而入侵系统。

发明内容

基于此,本发明提出了一种基于Linux系统预链接机制下动态链接库完整性度量方法, 对动态库中的代码段进行完整性度量,因为预连接技术只会缓存符号表和函数地址而不会 修改代码段的任何内容,同时大部分攻击者如果想通过篡改动态链接库内容达到入侵系统 的目的也是篡改动态链接库中的代码段,让系统执行代码段中插入的恶意代码。因此本方 法有效解决了传统Linux中度量方法的缺陷,能够在验证Linux动态链接库完整性同时也 能进行预链接减少系统和程序的启动时间。

本发明的技术方案为:

一种预链接机制下的动态链接库完整性度量方法,其步骤为:

1)关闭Linux的完整性度量使能开关,进入Linux系统完整性维护模式,登录root用户, 进行完整性度量基准值的生成和更新。通过用户层的度量工具,对系统中的所有满足 度量策略的文件进行度量。其中度量策略可以是系统默认的也可以由系统管理员进行 配置。

2)对于需要度量的文件,获取其绝对路径,打开文件获得其file结构体(文件结构体)。 由于Linux系统中的动态链接库都是标准的ELF文件,则可通过判断ELF文件头结 构中的魔数(magic)是否为7f454c46和类型(type)是否为ET_DYN来决定该文件 是否为动态链接库文件。

3)如果步骤(2)中判断为非动态链接库文件,则将哈希函数中的偏移位置(offset)与 长度(size)分别设置为0和文件长度,并跳到步骤(5);如果判断为动态链接库文 件,则对ELF文件中段描述符进行解析,获取动态链接库文件中代码段在文件中的 偏移位置(offset)和长度(size)。

4)将步骤(3)所得的偏移位置(offset)与长度(size)作为参数传递给哈希函数。

5)哈希函数根据传来的偏移位置(offset)与长度(size)两个参数进行哈希计算获得度 量值,并将度量值存储起来作为该文件的度量基准值。

6)开启Linux的完整性度量使能开关,进入Linux系统完整性验证模式。在Linux内核 启动过程中,会对完整性度量模块进行初始化。初始化的主要工作内容为初始化一些 数据结构。

7)当系统需要加载使用一个文件时,首先经过度量策略的分析,如果分析结果是不需要 度量则直接加载运行,不执行度量模块,否则进行度量。

8)获取需要度量文件的inode结构体(索引节点对象),按照ELF文件格式读出其ELF 文件头结构,并比较文件头中的魔数(magic)是否为7f454c46和类型(type)是否 为ET_DYN来决定该文件是否为动态链接库文件。

9)如果步骤(8)中判断为非动态链接库文件,则将哈希函数中的偏移位置(offset)与 长度(size)分别设置为0和文件长度,并跳到步骤(10);如果判断为动态链接库文 件,则对ELF文件中段表进行解析,获取动态链接库文件中代码段在文件中的偏移 位置(offset)和长度(size)。

10)将步骤(9)所得的偏移位置(offset)与长度(size)作为参数传递给哈希函数。

11)通过哈希函数计算所得的度量值与之前在用户态得到的基准度量值进行比较,如 果匹配则让其加载运行,否则拒绝其执行。

本发明主要包含两个方面:(1)在用户态提供对动态链接库的度量方法,对于需要度量 的动态链接库首先获取其代码段的偏移位置和长度,然后度量代码段。(2)在内核态对完整 性值进行验证时,首先判断需要验证的文件是否是动态链接库文件,如果是则获取其代码段 位置,并对代码段进行度量获得度量值与基准值进行比较;否则度量整个文件内容获得度量 值并与基准值进行比较。

与现有技术相比,本发明的积极效果:

本发明不需要关闭prelink工具就能够对动态链接库进行完整性度量,不影响系统和程 序的启动速度。

本发明只需要少量修改linux内核代码,不影响系统性能。

附图说明

图1为度量生成模式流程图。

图2为度量实施模式流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本 发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并 不用于限定本发明,本发明同样适用于其他方式的完整性度量方法,也适用于其它Linux 终端(包括桌面计算机和服务器)中的完整性度量方法。

本发明度量方法的构建分为两个模式:完整性维护模式和完整性验证模式。完整性维 护模式下,系统启动时不对文件进行完整性验证。该模式主要用于创建或者更新配置文件 和文件的度量基准值。完整性验证模式下,系统启动完整性度量使能开关,当文件在加载 执行之前要先检查是否需要度量,如果需要度量则进行完整性验证;否则直接加载执行。 下面详细介绍实施步骤:

如图1所示,在关闭系统完整性度量使能开关进入完整性维护模式下:

(1)计算机加电启动,传递内核参数关闭系统的完整性度量使能开关,进入系统完 整性维护模式。

(2)登录root用户,对整个文件系统进行遍历。

(3)提取文件属性与度量策略进行匹配。比较该文件是否需要度量。如果需要度量 跳到步骤(4),否则跳到(10)。

(4)获取文件的绝对路径,打开文件获得file结构体。并读取文件最开始的16字节, 按照ELF文件头格式获取其中的魔数(magic)和类型(type)两个字段。

(5)比较魔数是否为0x7F454C46,并且类型为ET_DYN。通过这两个字段可以判断 该文件是ELF文件并且是动态度量库文件。判断结果如果是则跳转步骤(6), 否则跳转步骤(8)。

(6)按照ELF文件格式,读取动态度量库的段表,段表中记录了每一个段的信息。 从中取得代码段的偏移地址(offset)和大小(size)。

(7)只对动态链接库的代码段进行度量,因为剩下的内容有可能会被prelink修改而 影响完整性验证模式的验证结果。度量完成后跳到步骤(9)。

(8)获取整个文件的大小,并对整个文件进行完整性度量。

(9)将度量值存放在该inode节点的扩展属性中。

(10)如果遍历完成整个文件系统,则结束并重启机器;否则按照步骤(3)-(9) 度量下一个文件。

如图2所示,在完整性验证模式下:

(1)计算机加电启动,传递内核参数开启完整性度量,进入完整性验证模式。

(2)安全度量模块初始化,主要是初始化相关数据结构和度量策略,并在相关的系 统调用中插入钩子函数。例如security_mmap_file、security_bprm_check等

(3)当系统需要加载或者运行一个文件的时候,就会产生系统调用,从而执行钩子 函数。在钩子函数中,将该文件的属性与度量策略进行匹配,比较该文件是否 需要度量。如果需要度量跳到步骤(4),否则跳到(10)。

(4)获得inode结构体。并读取文件最开始的16字节,按照ELF文件头格式获取其 中的魔数(magic)和类型(type)两个字段。

(5)比较魔数是否为0x7F454C46,并且类型为ET_DYN。通过这两个字段可以判断 该文件是ELF文件并且是动态度量库文件。判断结果如果是则跳转步骤(6), 否则跳转步骤(8)。

(6)按照ELF文件格式,读取动态度量库的段表,段表中记录了每一个段的信息。 从中取得代码段的偏移地址(offset)和大小(size)。

(7)只对动态链接库的代码段进行哈希度量,获取度量值。度量完整后跳到步骤(9)。

(8)获取整个文件的大小,并对整个文件进行完整性度量,获取度量值。

(9)将步骤(7)或者步骤(8)中获得的度量值与该inode节点扩展属性中的度量值 进行比较。如果比较成功则跳转(10)否则拒绝加载执行并提示错误信息。

(10)跳出钩子函数,准许该文件加载执行。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号