基于linux系统的可信计算方法及装置转让专利

申请号 : CN202010938943.4

文献号 : CN111797408A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李纪山王雪松

申请人 : 北京志翔科技股份有限公司

摘要 :

本发明提出了一种基于linux系统的可信计算方法及装置。可信计算方法,包括:根据预设审查项目,确定linux系统内核中需设置hook函数的待审查函数;根据内核导出的符号表查询待审查函数的起始位置;判断待审查函数的起始位置是否设置有hook函数,若已设置,则通过hook函数获取待审查函数,并基于待审查函数对预设审查项目进行可信计算检测。根据本发明的基于linux系统的可信计算方法,能够在内核任意位置实现埋点进行灵活可信计算审查的方式;hook方式能够兼容其他的安装产品,允许其他安全产品注册到本装置中;能够审查所有可能受攻击的点进行审计,能够灵活的安装和卸载,不需要重新编译内核镜像,保证应用运行环境可信,实现数据保护。

权利要求 :

1.一种基于linux系统的可信计算方法,其特征在于,包括:

根据预设审查项目,确定linux系统内核中需设置hook函数的待审查函数;

根据内核导出的符号表查询所述待审查函数的起始位置;

判断所述待审查函数的起始位置是否设置有hook函数,若已设置,则通过所述hook函数获取所述待审查函数,并基于所述待审查函数对所述预设审查项目进行可信计算检测。

2.根据权利要求1所述的基于linux系统的可信计算方法,其特征在于,所述方法还包括:当判断所述待审查函数的起始位置未设置hook函数时,则根据预设的hook函数的类型为所述hook函数设置蹦床区域代码,以在所述待审查函数的起始位置设置所述hook函数。

3.根据权利要求1所述的基于linux系统的可信计算方法,其特征在于,所述预设审查项目包括:程序启动审查项目和文件访问审查项目。

4.根据权利要求3所述的基于linux系统的可信计算方法,其特征在于,当所述预设审查项目为所述程序启动审查项目时,所述方法包括:通过所述hook函数hook内核的do_exec函数,计算检测所述do-exec函数的用户ID、进程启动参数、可执行文件入口点中的至少一项是否合法。

5.根据权利要求3所述的基于linux系统的可信计算方法,其特征在于,当所述预设审查项目为所述文件访问审查项目时,所述方法包括:通过所述hook函数hook内核的do_sys_open函数,计算检测所述do_sys_open函数的用户ID、进程是否可信、进程对文件是否有操作权限以及当前文件是否属于秘密文件中的至少一项。

6.一种基于linux系统的可信计算装置,其特征在于,包括:

项目建立模块,用于根据预设审查项目,确定linux系统内核中需设置hook函数的待审查函数;

定位模块,用于根据内核导出的符号表查询所述待审查函数的起始位置;

判断模块,用于判断所述待审查函数的起始位置是否设置有hook函数;

计算审查模块,用于在判断所述待审查函数的起始位置设置有hook函数时,通过所述hook函数获取所述待审查函数,并基于所述待审查函数对所述预设审查项目进行可信计算检测。

7.根据权利要求6所述的基于linux系统的可信计算装置,其特征在于,所述可信计算装置还包括:函数设置模块,当判断所述待审查函数的起始位置未设置hook函数时,所述函数设置模块用于根据预设的hook函数的类型为所述hook函数设置蹦床区域代码,以在所述待审查函数的起始位置设置所述hook函数。

8.根据权利要求6所述的基于linux系统的可信计算装置,其特征在于,所述预设审查项目包括:程序启动审查项目和文件访问审查项目。

9.根据权利要求8所述的基于linux系统的可信计算装置,其特征在于,当所述预设审查项目为所述程序启动审查项目时,所述计算审查模块用于:通过所述hook函数hook内核的do_exec函数,计算检测所述do_exec函数的用户ID、进程启动参数、可执行文件入口点中的至少一项是否合法。

10.根据权利要求8所述的基于linux系统的可信计算装置,其特征在于,当所述预设审查项目为所述文件访问审查项目时,所述计算审查模块用于:通过所述hook函数hook内核的do_sys_open函数,计算检测所述do_sys_open函数的用户ID、进程是否可信、进程对文件是否有操作权限以及当前文件是否属于秘密文件中的至少一项。

说明书 :

基于linux系统的可信计算方法及装置

技术领域

[0001] 本发明涉及计算机安全技术领域,尤其涉及一种基于linux系统的可信计算方法及装置。

背景技术

[0002] Linux,全称GNU/Linux,是一套免费使用和自由传播的类UNIX操作系统,随着linux系统使用的推广,Linux系统不仅作为服务器部署重要服务存储重要数据,还作为个人终端广泛使用,针对linux系统的相关攻击入侵、木马病毒植入、数据窃取事件日益增多,构建稳固的安全体系成为linux系统安全的基石,目前,基于linux系统的可信计算方案存在较多的限制,不能满足linux系统的可信计算要求。

发明内容

[0003] 本发明要解决的技术问题是如何对linux系统进行可信计算审查,本发明提出了一种基于linux系统的可信计算方法及装置。
[0004] 根据本发明实施例的基于linux系统的可信计算方法,包括:根据预设审查项目,确定linux系统内核中需设置hook函数的待审查函数;
根据内核导出的符号表查询所述待审查函数的起始位置;
判断所述待审查函数的起始位置是否设置有hook函数,若已设置,则通过所述hook函数获取所述待审查函数,并基于所述待审查函数对所述预设审查项目进行可信计算检测。
[0005] 根据本发明实施例的基于linux系统的可信计算方法,提供了linux系统下基于hook方式的可信计算实现方案,能够在内核任意位置实现埋点进行灵活可信计算审查的方式;hook方式能够兼容其他的安装产品,允许其他安全产品注册到本装置中;能够审查所有可能受攻击的点进行审计,能够灵活的安装和卸载,不需要重新编译内核镜像,保证应用运行环境可信,实现数据保护。
[0006] 根据本发明的一些实施例,所述方法还包括:当判断所述待审查函数的起始位置未设置hook函数时,则根据预设的hook函数的类型为所述hook函数设置蹦床区域代码,以在所述待审查函数的起始位置设置所述hook函数。
[0007] 在本发明的一些实施例中,所述预设审查项目包括:程序启动审查项目和文件访问审查项目。
[0008] 根据本发明的一些实施例,当所述预设审查项目为所述程序启动审查项目时,所述方法包括:通过所述hook函数hook内核的do_exec函数,计算检测所述do_exec函数的用户ID、进程启动参数、可执行文件入口点中的至少一项是否合法。
[0009] 在本发明的一些实施例中,当所述预设审查项目为所述文件访问审查项目时,所述方法包括:通过所述hook函数hook内核的do_sys_open函数,计算检测所述do_sys_open函数的用户ID、进程是否可信、进程对文件是否有操作权限以及当前文件是否属于秘密文件中的至少一项。
[0010] 根据本发明实施例的基于linux系统的可信计算装置,包括:项目建立模块,用于根据预设审查项目,确定linux系统内核中需设置hook函数的待审查函数;
定位模块,用于根据内核导出的符号表查询所述待审查函数的起始位置;
判断模块,用于判断所述待审查函数的起始位置是否设置有hook函数;
计算审查模块,用于在判断所述待审查函数的起始位置设置有hook函数时,通过所述hook函数获取所述待审查函数,并基于所述待审查函数对所述预设审查项目进行可信计算检测。
[0011] 根据本发明实施例的基于linux系统的可信计算装置,提供了linux系统下基于hook方式的可信计算实现方案,能够在内核任意位置实现埋点进行灵活可信计算审查的方式;hook方式能够兼容其他的安装产品,允许其他安全产品注册到本装置中;能够审查所有可能受攻击的点进行审计,能够灵活的安装和卸载,不需要重新编译内核镜像,保证应用运行环境可信,实现数据保护。
[0012] 根据本发明的一些实施例,所述可信计算装置还包括:函数设置模块,当判断所述待审查函数的起始位置未设置hook函数时,所述函数设置模块用于根据预设的hook函数的类型为所述hook函数设置蹦床区域代码,以在所述待审查函数的起始位置设置所述hook函数。
[0013] 在本发明的一些实施例中,所述预设审查项目包括:程序启动审查项目和文件访问审查项目。
[0014] 根据本发明的一些实施例,当所述预设审查项目为所述程序启动审查项目时,所述计算审查模块用于:通过所述hook函数hook内核的do_exec函数,计算检测所述do_exec函数的用户ID、进程启动参数、可执行文件入口点中的至少一项是否合法。
[0015] 在本发明的一些实施例中,当所述预设审查项目为所述文件访问审查项目时,所述计算审查模块用于:通过所述hook函数hook内核的do_sys_open函数,计算检测所述do_sys_open函数的用户ID、进程是否可信、进程对文件是否有操作权限以及当前文件是否属于秘密文件中的至少一项。
[0016]

附图说明

[0017] 图1为根据本发明实施例的基于linux系统的可信计算方法流程图;图2为根据本发明实施例的程序启动时可信计算方法流程图;
图3为根据本发明实施例的程序访问文件时可信计算方法流程图;
图4为根据本发明实施例的基于linux系统的可信计算装置示意图;
图5为根据本发明实施例的在待审查函数起始位置设置hook函数的示意图;
图6为根据本发明实施例的trampoline中允许三种方式的处理类型示意图;
图7为根据本发明实施例的基于linux系统的可信计算方法流程图;
图8为根据本发明实施例的建立的整套可信计算环境示意图。
[0018] 附图标记:可信计算装置100,
项目建立模块10,定位模块20,判断模块30,计算审查模块40,函数设置模块50。

具体实施方式

[0019] 为更进一步阐述本发明为达成预定目的所采取的技术手段及功效,以下结合附图及较佳实施例,对本发明进行详细说明如后。
[0020] 如图1所示,根据本发明实施例的基于linux系统的可信计算方法,包括:S100,根据预设审查项目,确定linux系统内核中需设置hook函数的待审查函数;
S200,根据内核导出的符号表查询待审查函数的起始位置;
S300,判断待审查函数的起始位置是否设置有hook函数,若已设置,则通过hook函获取待审查函数,并基于待审查函数对预设审查项目进行可信计算检测。
[0021] 根据本发明实施例的基于linux系统的可信计算方法,提供了linux系统下基于hook方式的可信计算实现方案,能够在内核任意位置实现埋点进行灵活可信计算审查的方式;hook方式能够兼容其他的安装产品,允许其他安全产品注册到本装置中;能够审查所有可能受攻击的点进行审计,能够灵活的安装和卸载,不需要重新编译内核镜像,保证应用运行环境可信,实现数据保护。
[0022] 根据本发明的一些实施例,如图5所示,方法还包括:当判断待审查函数的起始位置未设置hook函数时,则根据预设的hook函数的类型为hook函数设置蹦床区域代码,以在待审查函数的起始位置设置hook函数。
[0023] 在本发明的一些实施例中,预设审查项目包括:程序启动审查项目和文件访问审查项目。需要说明的是,对于linux系统的可信计算,并不局限于上述预设审查项目,还可以包括本机向外部提供服务时的可信计算,本机访问外部网络服务时的可信计算以及异常场景下的可信计算等。
[0024] 根据本发明的一些实施例,如图2所示,当预设审查项目为程序启动审查项目时,方法包括:通过hook函数hook内核的do_exec函数,计算检测do_exec函数的用户ID、进程启动参数、可执行文件入口点中的至少一项是否合法。
[0025] 具体地,如图2所示,通过hook内核的do_exec函数,检查进程启动参数、检测用户的uid、启动参数是否合法,如果不合法则直接返回错误拒绝执行。
[0026] 对ELF程序进行基本的安全检测,校验代码段的签名是否合法,如果不合法拒绝执行。
[0027] 检测ELF的入口点是否异常,检测入口点不是文本段的起始地址,如果地址不匹配,拒绝执行。
[0028] 检测进程启动的环境变量是否异常,是否包含异常环境变,异常环境变量由管理员通过后台下发。
[0029] 在本发明的一些实施例中,如图3所示,当预设审查项目为文件访问审查项目时,方法包括:通过hook函数hook内核的do_sys_open函数,计算检测do_sys_open函数的用户ID、进程是否可信、进程对文件是否有操作权限以及当前文件是否属于秘密文件中的至少一项。
[0030] 如图3所示,通过hook内核的do_sys_open函数监测文件打开的操作,在打开任意文件时进行可信计算检测,具体如下:A100,检测用户的uid,如果不合法则直接返回错误,拒绝打开;
A200,判断当前进程是否可信,如果不是可信应用则直接返回错误,拒绝打开;
A300,判断当前进程对该文件是否有操作权限,权限包括读写/删除/重命名/创建,如果没有权限则直接返回错误,拒绝打开;
A400,判断当前文件是否属于秘密文件,如果是则直接返回错误,拒绝打开。
[0031] 根据本发明实施例的基于linux系统的可信计算装置100,包括:项目建立模块10、定位模块20、判断模块30以及计算审查模40。
[0032] 其中,项目建立模块10用于根据预设审查项目,确定linux系统内核中需设置hook函数的待审查函数;定位模块20用于根据内核导出的符号表查询待审查函数的起始位置;
判断模块30用于判断待审查函数的起始位置是否设置有hook函数;
计算审查模块40用于在判断待审查函数的起始位置设置有hook函数时,通过hook函数获取待审查函数,并基于待审查函数对预设审查项目进行可信计算检测。
[0033] 根据本发明实施例的基于linux系统的可信计算装置100,提供了linux系统下基于hook方式的可信计算实现方案,能够在内核任意位置实现埋点进行灵活可信计算审查的方式;hook方式能够兼容其他的安装产品,允许其他安全产品注册到本装置中;能够审查所有可能受攻击的点进行审计,能够灵活的安装和卸载,不需要重新编译内核镜像,保证应用运行环境可信,实现数据保护。
[0034] 根据本发明的一些实施例,可信计算装置100还包括:函数设置模块50。
[0035] 如图5所示,当判断待审查函数的起始位置未设置hook函数时,函数设置模块50用于根据预设的hook函数的类型为hook函数设置蹦床区域代码,以在待审查函数的起始位置设置hook函数。
[0036] 在本发明的一些实施例中,预设审查项目包括:程序启动审查项目和文件访问审查项目。需要说明的是,对于linux系统的可信计算,并不局限于上述预设审查项目,还可以包括本机向外部提供服务时的可信计算,本机访问外部网络服务时的可信计算以及异常场景下的可信计算等。
[0037] 根据本发明的一些实施例,结合图2所示,当预设审查项目为程序启动审查项目时,计算审查模块40用于:通过hook函数hook内核的do_exec函数,计算检测do_exec函数的用户ID、进程启动参数、可执行文件入口点中的至少一项是否合法。
[0038] 具体地,如图2所示,通过hook内核的do_exec函数,检查进程启动参数、检测用户的uid、启动参数是否合法,如果不合法则直接返回错误,拒绝执行;对ELF程序进行基本的安全检测,校验代码段的签名是否合法,如果不合法,拒绝执行;
检测ELF的入口点是否异常,检测入口点不是文本段的起始地址,如果地址不匹配,拒绝执行;
检测进程启动的环境变量是否异常,是否包含异常环境变,异常环境变量由管理员通过后台下发。
[0039] 在本发明的一些实施例中,结合图3所示,当预设审查项目为文件访问审查项目时,计算审查模块40用于:通过hook函数hook内核的do_sys_open函数,计算检测do_sys_open函数的用户ID、进程是否可信、进程对文件是否有操作权限以及当前文件是否属于秘密文件中的至少一项。
[0040] 如图3所示,通过hook内核的do_sys_open函数监测文件打开的操作,在打开任意文件时进行可信计算检测,具体如下:A100,检测用户的uid,如果不合法则直接返回错误,拒绝打开;
A200,判断当前进程是否可信,如果不是可信应用则直接返回错误,拒绝打开;
A300,判断当前进程对该文件是否有操作权限,权限包括读写/删除/重命名/创建,如果没有权限则直接返回错误,拒绝打开;
A400,判断当前文件是否属于秘密文件,如果是则直接返回错误,拒绝打开。
[0041] 下面参照附图以一个具体的实施例详细描述根据本发明的基于linux系统的可信计算方法及装置。值得理解的是,下述描述仅是示例性描述,而不是对本发明的具体限制。
[0042] 相关技术中,Linux系统可信计算方案存在如下缺陷:1、Linux系统下现有的安全措施设计时间过久,用户、用户组、其他用户的权限模型基于RBAC(以角色为基础的访问控制)的权限控制粒度太粗,当一个用户拿到了root权限之后基本上能完成所有的事情,当入侵成功提权或者拿到了root权限后能做任何事情;
2、SELINUX和appormor等MAC(强制访问控制)访问控制提供了RBAC之外的访问控制,可以由管理员编辑并下发访问策略,但是它依赖于LSM的接口,灵活性较差,不能覆盖所有的安全面,例如内核模块的加载审查;
3、通过hook系统调用表方式实现的防御面有限,它只能侦测发自于用户空间的活动,侦测不到内核线程发起的活动,另一个它不是很贴近业务,进行防御时效率低下;
4、Linux厂商提供的防御方案只能重点防御入侵,针对严重的缺陷进行防御,缺乏全面性,不能完全满足用户的需求,而且不能进行功能订制;
5、Linux厂商提供的防御方案之间经常发生冲突,针对相同的检查点hook会发生失效或者造成系统异常崩溃重启的问题。
[0043] 本发明提供了一种通过hook方式在内核的任意函数位置提供可信计算检验的能力和使用该方式建立一整套的可信计算环境。该装置适用于linux系统下,支持x86/x86_64、mips/mips64、arm/arm64 CPU平台,通过二进制指令格式探测和修改的方式可以兼容其他安全产品的功能,并且向其他安全产品提供注册接口,实现多种安全产品功能的融合。它不仅仅局限在系统调用表位置和由用户空间发起的活动,还能监控到由内核发起的活动,实现全系统覆盖防御。
[0044] 基于linux系统的可信计算方法如下:S1,在内核中实现任意函数位置hook,并且创造了专有的trampoline区域,解决安全产品的兼容性问题,向其他安全产品提供注册接口。
[0045] S11,根据运行时内核导出的符号表进行查找函数的位置。
[0046] S12,检查函数的起始位置是否已经被hook,如果已经hook并且检查hook的类型,将其转化成该装置的callback形式继续完成原有功能。
[0047] 通过检查数据的位置发现位于LSM和syscall_table函数列表区域,并且函数指针不是正常的内核处理函数位置而是module中的位置,判定这种指针类型的hook实现并且识别其指针位置将其拷贝到我们的trampoline列表中,类型为下面的方式1。
[0048] 通过检查函数头部的区域是否有跳转指令并且解析跳转目标区域的指令和当前函数区域的指令相似程度,两者存在90%以上的相似指令时,判定这种类型的hook实现为指令拷贝类型,为其指令区域创造函数指针,注册到trampoline列表中,类型为方式1。
[0049] 通过检查函数头部的区域是否有int3指令,当存在int3类型指令时,遍历内核的kprobe_table表,查找其中是否有指向int3指令位置的hook点,如果有则为其创造指针添加到trampoline列表中,类型根据找到的kprobe点类型决定。
[0050] 在上述查找过程中定位到所属的模块文件,根据模块文件签名内容找到对应的厂商,内置安全厂商的优先级名单进行顺序排列。
[0051] S13,为hook点准备trampoline区域代码,通过S11中查找到module_alloc符号位置,通过它申请到可执行的页,地址范围位于MODULES_VADDR和MODULES_END区间。将S12中收集到的信息组织成trampoline区域,将会按照如下方式处理列表中的不同callback,不同列表中的callback根据其注册顺序进行排序:1、通过注册接口向该装置注册的函数钩子列表入口
2、LSM和syscall_table指针类型的指针句柄
3、指令拷贝类型的hook实现的指针句柄
4、Int3类型的hook实现的指针句柄
S14,通过二进制指令修改的方式,将原始函数重定向到trampoline中。具体实现为:
S141,通过S13中获取到的trampoline起始地址,计算和当前指令的地址偏差offset;
S142,保存原始函数的起始地址的5个字节指令,拷贝到trampoline区间;
S143,通过指令的二进制编辑实现jmp的功能,替换原始函数的起始地址的5个字节,实现跳转功能。
[0052] S15, trampoline中允许三种方式的处理类型,满足审计、控制、限制的安全需求,结合图6和图7所示,分别为方式1,方式2,方式3:方式1中执行顺序为trampoline代码→原始函数,如果hook函数返回错误,则不继续执行原始函数并且返回错误,如果hook函数返回成功则继续执行原始函数。这种方式通过减少无效的操作直接进行控制。
[0053] 方式2中执行顺序为原始函数→trampoline代码,如果原始函数返回错误,则不再执行hook函数并且返回错误,如果原始函数返回成功则继续执行trampoline函数。这种方式通过利用原始函数的结果进行审计。
[0054] 方式3中执行顺序为trampoline函数→原始函数,在trampoline函数中判断是否需要修改参数,并且将参数传递给原始函数,如果需要修改则将修改后的参数保存在栈上。在trampoline代码中从栈上恢复参数给原始函数时生效。这种方式通过修改参数内容的方式进行操作修正和限制。
[0055] 另外,本发明还建立了全面的可计算环境。如图8所示,根据操作系统易受攻击的面做了可信计算检测,包括:程序启动、文件访问、访问网络服务、主动监听端口开启服务模式、进程提权、加载内核模块、定时任务以及进程attach等。
[0056] 其中,如图2所示,程序启动时可信计算如下:通过hook内核的do_exec函数,检查进程启动参数、检测用户的uid、启动参数是否合法,如果不合法则直接返回错误拒绝执行。
[0057] 对ELF程序进行基本的安全检测,校验代码段的签名是否合法,如果不合法拒绝执行。
[0058] 检测ELF的入口点是否异常,检测入口点不是文本段的起始地址,如果地址不匹配,拒绝执行。
[0059] 检测进程启动的环境变量是否异常,是否包含异常环境变,异常环境变量由管理员通过后台下发。
[0060] 如图3所示,程序访问文件时可信计算方法如下:A100,检测用户的uid,如果不合法则直接返回错误,拒绝打开;
A200,判断当前进程是否可信,如果不是可信应用则直接返回错误,拒绝打开;
A300,判断当前进程对该文件是否有操作权限,权限包括读写/删除/重命名/创建,如果没有权限则直接返回错误,拒绝打开;
A400,判断当前文件是否属于秘密文件,如果是则直接返回错误,拒绝打开。
[0061] 本机向外部提供服务时可信计算:程序当前所属用户信息,运行中内存里程序签名是否有效和篡改,绑定端口,访问本地文件。
[0062] 本机访问外部网络服务时可信计算:是否可以进行网络通信,连接远程ip、端口,对本地文件操作权限是否有效。
[0063] 异常场景:权限提升、定时任务、加载内核模块以及进程attach等。
[0064] 进行内核埋点的位置包括进程执行,文件打开,读写,映射,关闭,分区的挂载,套接字的创建,绑定,监听,连接,发送和接收消息,驱动的加载和卸载,root权限的获取,进程的调试ptrace接口。
[0065] 综上所述,本发明通过组装trampoline代码区域实现hook实现方式,能够兼容内核中的其他安全产品hook实现,允许多个安全产品进行注册到该装置中,他们共存来进行系统安全保护。通过二进制组装指令功能,能够实现任意位置的hook实现可信计算和审计功能。
[0066] 本发明提出的基于linux系统的可信计算方法及装置具有如下优点:提供的hook实现方式能够针对90%的内核函数进行埋点实施可信计算审查,trampoline中的设计兼容其他安全产品的实现,为其他安全产品提供注册接口;
本发明以内核module的形式存在,可以动态安装和卸载,对于原有的OS业务运行没有影响;
对安装系统环境要求低,运行linux kernel的系统都可以应用本发明,而且无需重新编译内核;
可信计算环境构建全面,根据官方攻击类型统计和在技术上分析防御薄弱面,本发明实现系统全覆盖,防御无死角。
[0067] 通过具体实施方式的说明,应当可对本发明为达成预定目的所采取的技术手段及功效得以更加深入且具体的了解,然而所附图示仅是提供参考与说明之用,并非用来对本发明加以限制。