CN104751048B - 一种预链接机制下的动态链接库完整性度量方法 - Google Patents
一种预链接机制下的动态链接库完整性度量方法 Download PDFInfo
- Publication number
- CN104751048B CN104751048B CN201510046876.4A CN201510046876A CN104751048B CN 104751048 B CN104751048 B CN 104751048B CN 201510046876 A CN201510046876 A CN 201510046876A CN 104751048 B CN104751048 B CN 104751048B
- Authority
- CN
- China
- Prior art keywords
- file
- dynamic link
- link library
- metric
- measurement
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种预链接机制下的动态链接库完整性度量方法。本发明为:1)关闭Linux的完整性度量使能开关,进入完整性维护模式并提取所需度量的文件;2)检测度量文件是否属于动态链接库文件;如果是,则提取该动态链接库文件中代码段在文件中的偏移位置和长度发送给度量函数计算基准度量值并保存;3)进入完整性验证模式;当系统加载的文件为需度量文件时,检测其是否属于动态链接库文件;如果是,则提取该动态链接库文件中代码段在文件中的偏移位置和长度发送给度量函数计算度量值并与对应基准度量值进行比较,如果匹配,则允许加载执行,否则拒绝。本发明不需要关闭prelink工具即可对动态链接库进行完整性度量。
Description
技术领域
本发明涉及计算机操作系统完整性验证技术领域,具体涉及一种基于Linux系统预链接机制下的动态链接库完整性度量方法。
背景技术
随着计算机应用的普及,对计算机系统的完整性保护日益受到重视,出现了各种完整性保护的模型与实施方法。其中大部分都采取了度量的方法,即在某些特殊的时刻,对目标进行度量,得到目标的某些信息(通常是对文件内容的哈希值),将这些信息的值与事先记录的标准值进行比较,从而判断目标的完整性是否被破坏。目前在Linux系统中,保护完整性的方式基本采用度量的方法。例如Linux系统中安全模块中的IMA(IntegrityMeasurement 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)跳出钩子函数,准许该文件加载执行。
Claims (7)
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文件格式,解析其段表获取其中描述代码段的信息,从中找到偏移位置和长度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510046876.4A CN104751048B (zh) | 2015-01-29 | 2015-01-29 | 一种预链接机制下的动态链接库完整性度量方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510046876.4A CN104751048B (zh) | 2015-01-29 | 2015-01-29 | 一种预链接机制下的动态链接库完整性度量方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104751048A CN104751048A (zh) | 2015-07-01 |
CN104751048B true CN104751048B (zh) | 2017-12-15 |
Family
ID=53590720
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510046876.4A Active CN104751048B (zh) | 2015-01-29 | 2015-01-29 | 一种预链接机制下的动态链接库完整性度量方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104751048B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250124B (zh) * | 2016-07-25 | 2020-01-21 | 百富计算机技术(深圳)有限公司 | 功能模块跨平台运行的实现方法和装置 |
CN106599730B (zh) * | 2016-12-20 | 2019-08-02 | 武汉斗鱼网络科技有限公司 | 文件检测方法、装置和系统 |
CN107480522B (zh) * | 2017-08-14 | 2020-05-08 | 苏州浪潮智能科技有限公司 | 一种elf文件执行控制系统及方法 |
CN107563186A (zh) * | 2017-08-30 | 2018-01-09 | 浪潮(北京)电子信息产业有限公司 | 一种安全启动方法和装置 |
CN107450960A (zh) * | 2017-09-18 | 2017-12-08 | 珠海亿智电子科技有限公司 | 一种对可执行elf文件重新链接和加载的方法 |
CN109510825A (zh) * | 2018-11-13 | 2019-03-22 | 许昌许继软件技术有限公司 | 动态库加密方法和装置及动态库防劫持方法和装置 |
CN110598378B (zh) * | 2019-08-01 | 2023-07-18 | 华为技术有限公司 | 全局偏移表度量方法、动态度量方法及相关装置、设备 |
CN111581646B (zh) * | 2020-05-08 | 2023-11-24 | 北京可信华泰信息技术有限公司 | 数据处理方法、装置、存储介质和处理器 |
CN111831609B (zh) * | 2020-06-18 | 2024-01-02 | 中国科学院数据与通信保护研究教育中心 | 虚拟化环境中二进制度量值统一管理和分发的方法和系统 |
CN111857967B (zh) * | 2020-07-29 | 2022-04-12 | 中科方德软件有限公司 | 一种容器完整性校验方法 |
CN112363780A (zh) * | 2020-11-29 | 2021-02-12 | 王志平 | 一种软件动态链接的实现方法 |
CN112667285B (zh) * | 2021-01-25 | 2023-11-03 | Vidaa(荷兰)国际控股有限公司 | 一种应用升级方法、显示设备及服务器 |
CN114168934A (zh) * | 2021-11-30 | 2022-03-11 | 麒麟软件有限公司 | 一种linux的内核级进程动态度量方法 |
CN114818005B (zh) * | 2022-04-20 | 2023-03-31 | 北京凝思软件股份有限公司 | 一种Linux系统完整性检查方法与系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102542185A (zh) * | 2010-12-23 | 2012-07-04 | 伊姆西公司 | 硬化随机访问存储器中的软件执行的方法和装置 |
CN103593617A (zh) * | 2013-10-27 | 2014-02-19 | 西安电子科技大学 | 基于vmm的软件完整性校验系统及其方法 |
CN103944757A (zh) * | 2014-04-11 | 2014-07-23 | 珠海市君天电子科技有限公司 | 网络异常检测的方法和装置 |
CN104298917A (zh) * | 2014-11-14 | 2015-01-21 | 北京航空航天大学 | 一种基于tpm的虚拟机内应用程序完整性度量方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020138748A1 (en) * | 2001-03-21 | 2002-09-26 | Hung Andy C. | Code checksums for relocatable code |
-
2015
- 2015-01-29 CN CN201510046876.4A patent/CN104751048B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102542185A (zh) * | 2010-12-23 | 2012-07-04 | 伊姆西公司 | 硬化随机访问存储器中的软件执行的方法和装置 |
CN103593617A (zh) * | 2013-10-27 | 2014-02-19 | 西安电子科技大学 | 基于vmm的软件完整性校验系统及其方法 |
CN103944757A (zh) * | 2014-04-11 | 2014-07-23 | 珠海市君天电子科技有限公司 | 网络异常检测的方法和装置 |
CN104298917A (zh) * | 2014-11-14 | 2015-01-21 | 北京航空航天大学 | 一种基于tpm的虚拟机内应用程序完整性度量方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104751048A (zh) | 2015-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104751048B (zh) | 一种预链接机制下的动态链接库完整性度量方法 | |
Vastel et al. | {Fp-Scanner}: The Privacy Implications of Browser Fingerprint Inconsistencies | |
Carmony et al. | Extract Me If You Can: Abusing PDF Parsers in Malware Detectors. | |
CN104123493B (zh) | 应用程序的安全性检测方法和装置 | |
Dureuil et al. | From code review to fault injection attacks: Filling the gap using fault model inference | |
CN103577748B (zh) | 基于可信计算的动态度量方法与管理系统 | |
US8572747B2 (en) | Policy-driven detection and verification of methods such as sanitizers and validators | |
CN106326737B (zh) | 用于检测可在虚拟堆栈机上执行的有害文件的系统和方法 | |
EP3566166B1 (en) | Management of security vulnerabilities | |
Kim et al. | Software systems at risk: An empirical study of cloned vulnerabilities in practice | |
CN106355092B (zh) | 用于优化反病毒测定的系统和方法 | |
Böck et al. | Towards more trustable log files for digital forensics by means of “trusted computing” | |
CN108399338A (zh) | 基于进程行为的平台完整性状态信息度量方法 | |
CN105718806A (zh) | 一种基于国产bmc和tpm2.0实现可信主动度量的方法 | |
CN108256322B (zh) | 安全测试方法、装置、计算机设备和存储介质 | |
CN104715203A (zh) | 信息泄漏漏洞的定量分析的方法和系统 | |
CN104809391B (zh) | 缓冲区溢出攻击检测装置、方法和安全防护系统 | |
KR101803888B1 (ko) | 유사도 기반 악성 어플리케이션 탐지 방법 및 장치 | |
Lasser et al. | CoStar: a verified ALL (*) parser | |
Liu et al. | Gummy browsers: targeted browser spoofing against state-of-the-art fingerprinting techniques | |
CN112817877B (zh) | 异常脚本检测方法、装置、计算机设备和存储介质 | |
Liu et al. | Log-based control flow attestation for embedded devices | |
JP2011150716A (ja) | 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法 | |
CN104731708A (zh) | 一种Shellcode的动态检测方法 | |
CN106169054A (zh) | 一种基于可信状态的访问控制方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |