书签 分享 收藏 举报 版权申诉 / 8

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

  • 上传人:00062****4422
  • 文档编号:2239000
  • 上传时间:2018-08-03
  • 格式:PDF
  • 页数:8
  • 大小:648.69KB
  • 摘要
    申请专利号:

    CN201510046876.4

    申请日:

    2015.01.29

    公开号:

    CN104751048A

    公开日:

    2015.07.01

    当前法律状态:

    授权

    有效性:

    有权

    法律详情:

    授权|||实质审查的生效IPC(主分类):G06F 21/51申请日:20150129|||公开

    IPC分类号:

    G06F21/51(2013.01)I

    主分类号:

    G06F21/51

    申请人:

    中国科学院信息工程研究所

    发明人:

    涂碧波; 陈克; 李艳昭; 孟丹

    地址:

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

    优先权:

    专利代理机构:

    北京君尚知识产权代理事务所(普通合伙)11200

    代理人:

    司立彬

    PDF完整版下载: PDF下载
    内容摘要

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

    权利要求书

    1.  一种预链接机制下的动态链接库完整性度量方法,其步骤为:
    1)关闭Linux的完整性度量使能开关,进入Linux系统完整性维护模式,并提取所需度量的文件;
    2)遍历所需度量的文件,检测每一所需度量文件是否属于动态链接库文件;如果判断为非动态链接库文件,则将偏移位置设置为设定值、长度设置为该度量文件长度发送给度量函数,度量函数根据传来的参数计算该度量文件的基准度量值并保存;如果判断为动态链接库文件,则提取该动态链接库文件中代码段在文件中的偏移位置和长度发送给度量函数,度量函数根据传来的参数计算该动态链接库文件的基准度量值并保存;
    3)开启Linux的完整性度量使能开关,进入Linux系统完整性验证模式,加载所述基准度量值;
    4)当Linux系统加载的文件为需度量文件时,检测其是否属于动态链接库文件;如果判断为非动态链接库文件,则将偏移位置设置为设定值、长度设置为该度量文件长度发送给度量函数,度量函数根据传来的参数计算该度量文件的度量值并与该度量文件的基准度量值进行比较,如果匹配,则允许加载执行,否则拒绝加载;如果判断为动态链接库文件,则提取该动态链接库文件中代码段在文件中的偏移位置和长度发送给度量函数,度量函数根据传来的参数计算该动态链接库文件的度量值并与该动态链接库文件的基准度量值进行比较,如果匹配,则允许加载执行,否则拒绝加载。

    2.
      如权利要求1所述的方法,其特征在于,所述步骤4)中,在Linux系统调用中插入一钩子函数,当产生系统调用,执行该钩子函数暂停调用;当确定允许加载时,跳出钩子函数执行系统调用。

    3.
      如权利要求1所述的方法,其特征在于,所述设定值为0。

    4.
      如权利要求1所述的方法,其特征在于,所述度量函数为哈希函数。

    5.
      如权利要求1所述的方法,其特征在于,所述步骤1)包括:首先设置一度量策略配置文件,然后遍历每一文件,提取该文件的文件属性与该度量策略配置文件中设置的属性进行匹配,判断该文件是否为所需度量文件。

    6.
      如权利要求1所述的方法,其特征在于,检测出所述动态链接库文件的方法为:对于每一需度量文件,首先获取其绝对路径,打开该度量文件获其文件结构体,然后根据文件头中的魔数和类型判断该度量文件是否属于动态链接库文件。

    7.
      如权利要求1所述的方法,其特征在于,提取动态库文件代码段的方法为:按照ELF文件格式,解析其段表获取其中描述代码段的信息,从中找到偏移位置和长度。

    说明书

    一种预链接机制下的动态链接库完整性度量方法
    技术领域
    本发明涉及计算机操作系统完整性验证技术领域,具体涉及一种基于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)跳出钩子函数,准许该文件加载执行。

    关 键  词:
    一种 链接 机制 动态 完整性 度量 方法
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:一种预链接机制下的动态链接库完整性度量方法.pdf
    链接地址:https://www.zhuanlichaxun.net/p-2239000.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1