CN103279712B - 增强系统安全性的方法、校验装置及安全系统 - Google Patents
增强系统安全性的方法、校验装置及安全系统 Download PDFInfo
- Publication number
- CN103279712B CN103279712B CN201310204323.8A CN201310204323A CN103279712B CN 103279712 B CN103279712 B CN 103279712B CN 201310204323 A CN201310204323 A CN 201310204323A CN 103279712 B CN103279712 B CN 103279712B
- Authority
- CN
- China
- Prior art keywords
- code section
- physical memory
- kernel
- signature
- application code
- 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
- Storage Device Security (AREA)
Abstract
本发明公开了一种增强系统安全性的方法、校验装置及安全系统。增强系统安全性的方法包括:在系统运行过程中,获取程序逻辑部分参数;根据程序逻辑部分参数,对程序逻辑部分进行校验;若校验通过,正常运行系统,若校验未通过,直接复位系统。本发明还公开了相应的校验装置和安全系统。通过上述方式,本发明能够通过主动式防御策略,有效提高系统的安全性。
Description
技术领域
本发明涉及增强系统安全性的方法、校验装置及安全系统。
背景技术
随着机顶盒市场的不断发展,其也越来越重视软硬件系统的安全性。基于开源linux平台开发的软件系统,在享受开源带来的优势的同时,也面临开源系统漏洞或缺陷传播的范围不可控,而且发现漏洞到修复的过程也需要较长的周期,在这周期中系统可能遭到攻击和破解。
一般增强系统安全性的方法都是采用被动式防御策略,比如去掉操作系统内核中的所有调测手段、裁剪掉业务场景中不会使用到的系统内核配置项、限制系统内核某些组件的功能和行为、禁止用户和系统进行交互式操作等等,但是这些措施只能提供有限的防御效果。
发明内容
本申请主要解决的技术问题是提供增强系统安全性的方法、校验装置及安全系统,能够通过主动式防御策略,有效提高系统的安全性。
为解决上述技术问题,本申请实施方式提供了一种增强系统安全性的方法及装置和系统,通过引入主动保护策略,对系统程序逻辑部分进行校验以带来系统的强一致性,避免杜绝系统运行过程中因安全漏洞或其他故障导致的系统软件被修改而引入的安全风险,有效提高系统的安全性。
第一方面,提供一种增强系统安全性的方法,包括:在系统运行过程中,获取程序逻辑部分参数;根据所述程序逻辑部分参数,对所述程序逻辑部分进行校验;若所述校验通过,正常运行系统,若所述校验未通过,直接复位系统。
结合第一方面,在第一种可能的实现方式中:所述获取程序逻辑部分参数的步骤包括:获取内核代码段参数;所述根据所述程序逻辑部分参数,对所述程序逻辑部分进行校验的步骤包括:根据所述内核代码段参数,对所述内核代码段所在物理内存区域进行签名计算;将所述签名计算得到的值与所述内核代码段所在物理内存的原始签名值进行比对,若所述签名计算得到的值与所述内核代码段所在物理内存区域的原始签名值一样,则对所述内核代码段所在物理内存区域的签名校验通过;若所述签名计算得到的值与所述内核代码段所在物理内存区域的原始签名值不一样,则对所述内存代码段所在物理内存区域的签名校验未通过。
结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中:所述内核代码段参数至少包括所述内核代码段所在物理内存区域的起始地址以及长度;所述根据所述内核代码段参数,对所述内核代码段所在物理内存区域进行签名计算的步骤包括:根据所述内核代码段所在物理内存区域的起始地址以及长度,通过MD5或SHA-1任一种方式对所述内核代码段所在物理内存区域进行签名计算。
结合第一方面或第一方面的第一种可能的实现方式,在第三种可能的实现方式中:所述获取程序逻辑部分参数的步骤还包括:在应用程序运行过程中,获取应用程序代码段参数;所述根据所述程序逻辑部分参数,对所述程序逻辑部分进行校验的步骤包括:根据所述应用程序代码段参数,对所述应用程序代码段所在物理内存区域进行签名计算;将所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值进行比对;若所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值一样,则对所述应用程序代码段所在物理内存区域进行签名校验通过,若所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值不一样,则对所述应用程序代码段所在物理内存区域进行签名校验未通过。
结合第一方面或第一方面的第三种可能的实现方式,在第四种可能的实现方式中:所述获取应用程序代码段参数的步骤之前,还包括:在所有业务逻辑执行之前,使应用程序获取所述应用程序代码段映射地址范围,通过调用库函数,以所述应用程序代码段映射地址范围作为参数锁住所述应用程序代码段,并对所述应用程序代码段映射地址范围进行读操作遍历,以使所述应用程序代码段都被映射到物理内存中。
结合第一方面或第一方面的第三种可能的实现方式,在第五种可能的实现方式中:所述根据所述应用程序代码段参数,对所述应用程序代码段的物理内存区域进行签名计算的步骤之前,还包括:根据所述对应用程序代码段进行签名校验启动指令,创建内核校验接口以及内核线程以对所述应用程序代码段进行签名校验,其中,所述每个内核线程与一个应用程序绑定。
结合第一方面或第一方面的第五种可能的实现方式,在第六种可能的实现方式中:所述根据所述应用程序代码段参数,对所述应用程序代码段的物理内存区域进行签名计算的步骤包括:根据所述应用程序代码段参数,查找所述应用程序代码段所在的逻辑实体;解析所述应用程序代码段所在的逻辑实体的虚拟地址,以获取所述应用程序代码段所在物理内存地址;根据所述应用程序代码段所在物理内存地址,通过MD5或SHA-1任一种方式对所述应用程序代码段所在物理内存区域以页为单位进行分段签名计算。
结合第一方面或第一方面的第六种可能的实现方式,在第七种可能的实现方式中:所述根据所述应用程序代码段所在物理内存地址,通过MD5或SHA-1任一种方式对所述应用程序代码段的物理内存区域进行分段签名计算的步骤之后,还包括:释放处理器资源以等待下一次调度。
结合第一方面或第一方面的第七种可能的实现方式,在第八种可能的实现方式中:所述释放处理器资源以等待下一次调度的步骤之后,还包括:判断已经完成签名计算的所述应用程序代码段的物理内存长度是否达到预设的校验长度;若所述已经完成签名计算的所述应用程序代码段的物理内存长度没有达到预设的校验长度,则继续对剩下的应用程序代码段的物理内存区域进行签名计算,若所述已经完成签名计算的所述应用程序代码段的物理内存长度达到预设的校验长度,则根据所述进行签名计算得到的值对所述应用程序代码段进行签名校验。
结合第一方面,在第九种可能的实现方式中:所述在系统运行过程中,获取程序逻辑部分参数的步骤之前,还包括:判断在预定时间内是否检测到对系统程序逻辑部分进行校验的启动指令;若在预定时间内检测到对系统程序逻辑部分进行校验的启动指令,获取对系统程序逻辑部分进行校验的启动指令和所述程序逻辑部分参数;若在预定时间内没有检测到对系统程序逻辑部分进行校验的启动指令,则直接复位系统。
第二方面,提供一种校验装置,包括获取模块、校验模块以及控制模块,其中:所述获取模块用于在系统运行过程中,获取程序逻辑部分参数,并将所述程序逻辑部分参数发送给所述校验模块;所述校验模块用于根据所述程序逻辑部分参数,对所述程序逻辑部分进行校验;所述控制模块用于当所述校验通过时,控制正常运行系统,当所述校验没有通过时,控制直接复位系统。
结合第二方面,在第一种可能的实现方式中:所述获取模块用于获取内核代码段参数;所述校验模块用于根据所述内核代码段参数,对所述内核代码段所在物理内存区域进行签名计算,将所述签名计算得到的值与所述内核代码段所在物理内存区域的原始签名值进行比对,若所述签名计算得到的值与所述内核代码段所在物理内存区域的原始签名值一样,得出对所述内核代码段所在物理内存区域的签名校验通过的结论并发送给所述控制模块,若所述签名计算得到的值与所述内核代码段所在物理内存区域的原始签名值不一样,得出对所述内存代码段所在物理内存区域的签名校验未通过的结论并发送给所述控制模块,其中,所述内核代码段所在物理内存区域的原始签名值直接固化在所述校验模块中。
结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中:所述内核代码段参数至少包括所述内核代码段所在物理内存区域的起始地址以及长度,所述内核代码段所在物理内存区域的原始签名值;所述校验模块用于根据所述内核代码段所在物理内存区域的起始地址以及长度,通过MD5或SHA-1任一种方式对所述内核代码段所在物理内存区域进行签名计算。
结合第二方面或第二方面的第一种可能的实现方式,在第三种可能的实现方式中:所述获取模块还用于在应用程序运行过程中,获取应用程序代码段参数;所述校验模块还用于根据所述应用程序代码段参数,对所述应用程序代码段所在物理内存区域进行签名计算,将所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值进行比对,若所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值一样,得出对所述应用程序代码段所在物理内存区域进行签名校验通过的结论并发送给所述控制模块,若所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值不一样,得出对所述应用程序代码段所在物理内存区域进行签名校验未通过的结论并发送给所述控制模块。
结合第二方面或第二方面的第三种可能的实现方式,在第四种可能的实现方式中:所述校验装置还包括锁定模块,所述锁定模块用于所有业务逻辑执行之前,获取应用程序代码段映射地址范围,调用库函数,以所述应用程序代码段映射地址范围作为参数锁住所述应用程序代码段,并对所述应用程序代码段映射地址范围进行读操作遍历,以使所述应用程序代码段都被映射到物理内存中。
结合第二方面或第二方面的第四种可能的实现方式,在第五种可能的实现方式中:所述校验模块用于根据所述对应用程序代码段进行签名校验启动指令,创建内核校验接口以及内核线程以对所述应用程序代码段进行签名校验,其中,所述每个内核线程与一个应用程序绑定。
结合第二方面或第二方面的第五种可能的实现方式,在第六种可能的实现方式中:所述校验模块还用于根据所述应用程序代码段参数,查找所述应用程序代码段所在的逻辑实体,解析所述应用程序代码段所在的逻辑实体的虚拟地址,以获取所述应用程序代码段所在物理内存地址,根据所述应用程序代码段所在物理内存地址,通过MD5或SHA-1任一种方式对所述应用程序代码段所在物理内存区域以页为单位进行分段签名计算。
结合第二方面或第二方面的第六种可能的实现方式,在第七种可能的实现方式中:所述校验模块每完成一个应用程序代码段所在物理内存区域的所述分段签名计算之后,释放处理器资源以等待下一次调度。
结合第二方面或第二方面的第七种可能的实现方式,在第八种可能的实现方式中:所述校验装置还包括判断模块,用于判断已经完成签名计算的所述应用程序代码段的物理内存长度是否达到预设的校验长度,若所述已经完成签名计算的所述应用程序代码段的物理内存长度没有达到预设的校验长度,则通知所述校验模块继续对剩下的应用程序代码段的物理内存区域进行签名计算,若所述已经完成签名计算的所述应用程序代码段所在物理内存总长度达到预设的校验长度,则通知所述校验模块根据所述进行签名计算得到的值对所述应用程序代码段进行签名校验。
结合第二方面或第二方面的第八种可能的实现方式,在第九种可能的实现方式中:所述判断模块还用于判断在预定时间内是否检测到对系统程序逻辑部分进行校验的启动指令,若在预定时间内检测到对系统程序逻辑部分进行校验的启动指令,通知所述获取模块获取对系统程序逻辑部分进行校验的启动指令和所述程序逻辑部分参数,若在预定时间内没有检测到对系统程序逻辑部分进行校验的启动指令,则通知所述控制模块直接复位系统。
第三方面,提供一种安全系统,包括主系统和校验装置,其中:所述主系统包括处理器和物理内存,所述主系统通过所述处理器向所述校验装置发送对所述安全系统的程序逻辑部分进行校验的启动指令以及所述程序逻辑部分参数;所述校验装置与所述主系统的处理器通过内存总线相连接,共享所述物理内存,所述校验装置用于对所述安全系统的程序逻辑部分进行校验,所述校验装置包括获取模块、校验模块以及控制模块:所述获取模块用于在系统运行过程中,获取程序逻辑部分参数,并将所述程序逻辑部分参数发送给所述校验模块;所述校验模块用于根据所述程序逻辑部分参数,对所述程序逻辑部分进行校验;所述控制模块用于当所述校验通过时,控制正常运行系统,当所述校验没有通过时,控制直接复位系统。
结合第三方面,在第一种可能的实现方式中:所述主系统的处理器通过保留一块物理内存区域和定义一个魔数,将所述魔数写到所述物理内存区域,以作为对系统程序逻辑部分进行校验的启动指令。
结合第三方面,在第二种可能的实现方式中:所述主系统的处理器通过初始化内核并启动用户级进程,以获取内核代码段参数,向所述校验装置发送对所述内核代码段进行校验的启动指令和所述内核代码段参数。
本申请的有益效果是:区别于现有技术的情况,本申请通过对系统的程序逻辑部分进行校验,来判断系统的程序逻辑部分是否相对于原始状态发生变化,一旦程序逻辑部分发生改变,则复位系统,从而可以使系统的当前状态与其初始状态保持较强的系统一致性。通过这种方式,能够杜绝系统运行过程中因安全漏洞或其他故障导致的程序逻辑部分被修改而引入的安全风险,有效增强系统的安全性。
附图说明
图1是本申请增强系统安全性的方法一个实施方式的流程图;
图2是本申请增强系统安全性的方法其中一个实施方式中对内核代码段进行校验的流程图;
图3是本申请增强系统安全性的方式其中一个实施方式中获取内核代码段所在物理内存区域的原始签名值和长度的流程示意图;
图4是本申请增强系统安全性的方法其中一个实施方式中对内核代码段映射关系示意图;
图5是本申请增强系统安全性的方法其中一个实施方式中对应用程序代码段进行校验的流程图;
图6是本申请增强系统安全性的方法其中一个实施方式中应用程序代码段映射关系示意图;
图7是本申请增强系统安全性的方法其中一个实施方式中对应用程序代码段进行签名计算的流程图;
图8是本申请校验装置一个实施方式的结构示意图;
图9是本申请校验装置另一个实施方式的结构示意图;
图10是本申请安全系统一个实施方式的结构示意图。
具体实施方式
软件系统的核心是由具有静态属性的程序逻辑和动态属性的数据组成,静态属性的典型特征是不变性,而动态属性的特征是可变性。从理论上来说,大型软件系统内部的数据是不可能预测其变化规律的,也就是说起其值变化是随机且无序的;而不变的程序逻辑(就是俗称的代码)一旦变化也往往意味着风险,例如被插入了非法代码或被篡改等,因此主动保护程序逻辑部分的不变性能够提高系统软件的安全性。
本申请增强系统安全性的方法引入主动保护策略,对软件不可变的程序逻辑部分进行保护,防止出现利用系统漏洞篡改系统软件的行为。其中,本申请的主动保护范围可以包括linux内核和运行于之上的应用程序。
参阅图1,本申请增强系统安全性的方法一个实施方式包括:
步骤S101:在系统运行过程中,获取程序逻辑部分参数;
本申请实施方式中,通过新增一个校验装置对系统程序逻辑部分进行校验,这个校验装置物理上可以是另一个独立运行linux的环境,也可以是一个单片机环境,本申请对此不做限制。
系统上电或复位后,校验装置等待并解析主系统的处理器(CPU)通知开始启动校验的指令。通常情况下,系统启动后,校验装置判断在预定时间内是否检测到对系统程序逻辑部分进行校验的启动指令,若在预定时间内检测到对系统程序逻辑部分进行校验的启动指令,获取对系统程序逻辑部分进行校验的启动指令和所述程序逻辑部分参数,若在预定时间内没有检测到对系统程序逻辑部分进行校验的启动指令,则直接复位系统。
默认实现是主系统的CPU通过保留一块特殊的内存区域和定义一个特殊的魔数(magicnumber),主系统的CPU将参数信息和magicnumber写到这个区域,一旦校验装置检测到这个特殊的magicnumber就认为主系统的CPU发出了校验开始指令,读出相关参数开始进行校验。
步骤S102:根据程序逻辑部分参数,对程序逻辑部分进行校验;
获取到对程序逻辑部分进行校验的启动指令后,根据获取到的程序逻辑部分参数,对程序逻辑部分进行校验,具体而言可以通过对程序逻辑部分所在物理内存区域进行签名校验来实现对程序逻辑部分的校验。这里的程序逻辑部分实际上是指系统内的代码,对程序逻辑部分进行校验是指程序逻辑部分相对于其初始态的一致性校验,即校验代码段是否相对于初始状态发生变化。
其中,可以通过将程序逻辑部分的现有签名值与原始签名值进行比较,判断两个签名值是否一致来完成校验。
步骤S103:判断校验是否通过;
判断校验是否通过,当程序逻辑部分相对于原始状态没有发生变化,则表示校验通过,否则,校验没通过。若校验通过则进行步骤S104,若校验没通过则进行步骤S105。
步骤S104:正常运行系统;
当对系统程序逻辑部分进行校验通过时,正常运行系统。
步骤S105:直接复位系统;
当对系统程序逻辑部分进行校验未通过时,直接复位系统。
值得一提的是,本申请实施方式中提到的系统,可以是任一种支持linux的嵌入式系统。
通过上述实施方式的阐述,可以理解,本申请通过对系统的程序逻辑部分进行校验,来判断系统的程序逻辑部分是否相对于原始状态发生变化,一旦程序逻辑部分发生改变,则复位系统,从而可以使系统的当前状态与其初始状态保持较强的一致性,通过这种方式,能够杜绝系统运行过程中因安全漏洞或其他故障导致的程序逻辑部分被修改而引入的安全风险,有效增强系统的安全性。
其中,本申请对程序逻辑部分进行校验可以包括对内核代码段和对应用程序代码段进行校验。
在本发明实施例中,对内核代码段和对应用程序代码段进行校验,是为了验证内核代码段和应用程序代码段是否被篡改。其中,可以通过比较当前内核代码段和应用程序代码段的现有签名值是否与原始签名值保持一致来校验。当现有签名值与原始签名值保持一致时表示内核代码段和应用程序代码段没被篡改,否则,表示内核代码段和应用程序代码段已被篡改,需要及时复位系统。
以下,以对linux内核代码段和应用程序代码段进行校验为例进行详细说明:
请参阅图2,对内核代码段进行校验包括以下步骤:
步骤S201:获取内核代码段参数;
系统上电或复位后等待主系统的CPU通知开始启动内核代码段校验的指令,等待操作预设时间(通常默认是10s),如果未获取到对内核代码段进行签名校验的启动指令,则直接复位系统。如果有开始启动内核代码段校验的指令,则获取对内核代码段进行签名校验的启动指令和内核代码段参数。
步骤S202:根据内核代码段参数,对内核代码段所在物理内存区域进行签名计算;
根据内核代码段参数,对内核代码段所在物理内存区域进行签名计算。
其中,签名算法使用MD5或SHA-1,签名计算使用到的参数包括:
1、内核代码段所在物理内存区域的起始地址;
2、内核代码段所在物理内存区域的长度;
3、内核代码段所在物理内存区域的原始签名值。
其中,1的获取是在proc文件系统被挂载后,从/proc/iomem中读出内核代码段所在物理内存区域的起始地址,这个参数由主系统的CPU在发送启动指令时一并发送给校验装置:
6001c000-602ebfff:Kerneltext;起始地址是0x6001c000
其中2、3的获取方法可参阅图3,得到的签名值和文件长度信息直接固化在校验装置当中,不需要由主系统的CPU通过运行参数的形式传递给校验装置,这种方式比所有参数都是由主系统的CPU传递给校验装置安全性更高。
Linux系统运行在具有MMU设施的硬件平台上,CPU的地址空间被分成了两部分:内核态和用户态。内核代码段被映射到了内核态,普通应用程序的代码段被映射到用户态。
其中,内核代码段的映射情况可参见图4,通常情况下,linux内核可用的虚拟地址范围从0xc0000000~0xffffffff,1G的空间范围。物理内存的访问范围取决于硬件单板设计。不论部署的物理内存是否大于内核态虚拟地址空间总大小,都不会影响内核代码段的映射方式。
内核代码段采用基于偏移的直接连续映射的方式,暨映射后的虚拟地址减去一个固定偏移就可以得到其对应的物理地址,而且整个内核代码段在物理内存上是连续的。
如果拥有原始内核代码段的签名值就可以对内核代码段所在的物理内存区域使用同样的算法得到签名值,并和原始值对比的方式来判断是否发生了被改写的情况。
步骤S203:将签名计算得到的值与内核代码段所在物理内存区域的原始签名值进行比对;
步骤S204:判断签名计算得到的值与内核代码段所在物理内存区域的原始签名值是否一样;
判断签名计算得到的值与内核代码段所在物理内存区域的原始签名值是否一样,如果一样,进行步骤S205,否则,进行步骤S206。
步骤S205:对内核代码段所在物理内存区域的签名校验通过;
如果签名计算得到的值与内核代码段所在物理内存区域的原始签名值一样,则表示对内核代码段所在物理内存区域的签名校验通过,这时,正常运行系统。
步骤S206:对内核代码段所在物理内存区域的签名校验未通过;
如果签名计算得到的值与内核代码段所在物理内存区域的原始签名值不一样,则表示对内核代码段所在物理内存区域的签名校验未通过,这时,直接复位系统。
在系统启动后,对内核代码段所在物理内存区域进行循环的、不间断的签名校验工作,以有效保证系统的安全性。
通过对内核代码段进行校验的方式对主系统运行的linux内核进行保护的基础上,校验装置进一步对应用程序代码段进行一致性保护,其中,可参阅图5,对应用程序代码段进行校验的步骤包括:
步骤S301:在应用程序运行过程中,获取对应用程序代码段进行签名校验的启动指令和应用程序代码段参数;
通常情况下,在获取对应用程序代码段进行签名校验的启动指令和应用程序代码段参数之前,在所有业务逻辑执行之前,使应用程序获取应用程序代码段映射地址范围,通过调用库函数,以应用程序代码段映射地址范围作为参数锁住应用程序代码段,并对应用程序代码段映射地址范围进行读操作遍历,以使应用程序代码段都被映射到物理内存中。具体通过以下方式实现:
1、应用程序打开并读出/proc/self/maps文件的头17个字节,其中前8个byte数据为代码段的起始地址,后8个byte数据为代码段的结束地址,结束地址减起始地址为代码段的长度;
2、调用mlockC库函数,传入代码段起始地址,以代码段长度作为参数锁住应用程序的代码段;
3、以page为单位对整个代码段范围进行一次读操作遍历,以保证整个代码段都被映射到了物理内存当中。
通过这种方式,可以将应用程序锁定在内存中,阻止其被换入换出。
在应用程序运行的过程中,应用程序通过打开/proc/verify_app文件并写入1,通知校验装置开始对本进程进行签名校验工作。校验装置获取对应用程序代码段进行签名校验的启动指令和应用程序代码段参数。
默认情况下,校验装置去使能,其通过检查内核引导参数中是否包含app_sign_info来使能,这个参数定义如下:
app_sign_info=[App_1_Name],[len],[App_1_origSignValue];
App_n_Name],[len],[App_n_origSignValue];
其中,app_sign_info为参数名,在整个内核中具有唯一性。
App_1_Name为需要被校验的目标进程名字。
Len为目标程序代码段的长度。
App_1_origSignValue为目标应用程序代码段原始签名值。
多个进程的配置信息使用分号隔开。
其中,应用程序代码段原始签名值和长度的获取方法和内核是一样的,相关方法请直接参阅图3,只要把vmlinux换成应用程序即可。
步骤S302:根据应用程序代码段参数,对应用程序代码段所在物理内存区域进行签名计算;
校验装置对应用程序代码段进行校验通常分成两个执行阶段。第一阶段根据内核引导参数中是否有校验目标进程信息app_sign_info来创建内核校验开始接口以及创建进行具体签名校验工作的内核线程,这部分工作必须在系统init1号进程未启动之前完成,因此校验装置可以通过subsys_initcall注册到内核中。第一阶段的执行的具体流程为:
1、按照标准linux定义的增加新的内核引导参数的方式增加对app_sign_info参数的支持;
2、如果在内核引导参数中检测到app_sign_info参数,则使用create_proc_entry内核函数创建/proc/verify_app接口,这个文件只接受写操作,写入1代表开始启动对本进程的签名校验工作。校验装置会将执行这个操作的进程PID和进程名信息记录到签名校验准备就绪列表中;
3、根据app_sign_info中配置的目标应用程序参数使用kthread_run内核函数创建内核线程,每一个内核线程绑定一个应用程序。目标应用程序的名字、长度、原始校验值信息需要和对应的内核线程绑定。
第二阶段开始对应用程序代码段所在的物理内存区域进行签名校验,这些都是在内核线程中进行。
其中,根据应用程序代码段的参数,对应用程序代码段所在物理内存区域进行签名计算。签名计算使用MD5或SHA-1,签名计算使用到的参数包括:
1、应用程序代码段所在物理内存区域的起始地址;
2、应用程序代码段所在物理内存区域的长度;
3、应用程序代码段所在物理内存区域的原始签名值。
应用程序代码段的映射规则和内核代码段的映射规则差别比较大,应用程序代码段的映射关系图可参阅图6。
应用程序代码段映射到的物理内存区域地址是不连续的。应用程序开始执行时并不会一次性将所有代码段都映射到内存中,系统通过缺页异常在相关代码需要被执行时才将其映射到物理内存中。内核进行物理内存回收时,可能将长时间未被执行的应用程序代码段所在物理内存进行回收。
由于应用程序代码段没有类似内核代码段常驻物理连续内存的保证,因此需要强制应用程序代码段或相关区域常驻内存并不能被回收。然后对分布在不连续物理内存区域的数据进行校验。
步骤S303:将签名计算得到的值与应用程序代码段所在物理内存区域的原始签名值进行比对;
步骤S304:判断签名计算得到的值与应用程序代码段所在物理内存区域的原始签名值是否一样;
判断签名计算得到的值与应用程序代码段所在物理内存区域的原始签名值是否一样,如果一样,则进行步骤S305,否则,进行步骤S306。
步骤S305:对应用程序代码段所在物理内存区域的签名校验通过;
当签名计算得到的值与应用程序代码段所在物理内存区域的原始签名值一样时,表示对应用程序代码段所在物理内存区域的签名校验通过,这时,正常运行系统。
步骤S306:对应用程序代码段所在物理内存区域的签名校验未通过;
当签名计算得到的值与应用程序代码段所在物理内存区域的原始签名值不一样时,表示对应用程序代码段所在物理内存区域的签名校验未通过,这时,直接复位系统。
在应用程序运行过程中,对应用程序代码段所在物理内存区域进行循环的、不间断的签名校验工作,进一步提高系统的安全性。
其中,在内核线程中,对应用程序代码段所在物理内存区域进行签名计算的具体步骤可参阅图7,包括:
步骤S401:根据应用程序代码段参数,查找应用程序代码段所在的逻辑实体;
由于同时支持对多个应用程序进行签名校验,不同的内核线程需要各自分别等待各自独立的开始校验指令。内核线程使用跟自己绑定的目标应用程序名到前面提到的签名校验准备就绪列表中查找同名进程是否已经存在,如果存在则开始进入签名计算和校验工作。如果等待时间超时(默认30s)则直接复位系统。
根据应用程序代码段参数,查找目标进程(task_struct),task_struct是应用程序在linux内核中资源管理的抽象,其成员comm和pid分别代表目标应用程序的程序名和PID。使用for_each_process内核函数遍历内核维护的系统进程列表,并在遍历过程中通过对比应用程序名和PID找到签名校验的目标进程的task_struct。根据应用程序代码段的映射关系,找到应用程序代码段所在用户态映射的逻辑实体(vma)。
步骤S402:解析应用程序代码段所在的逻辑实体的虚拟地址,以获取应用程序代码段所在物理内存地址;
task_struct中的mm域维护了整个应用程序用户态地址空间的映射关系,使用find_vma内核函数在mm内查找第一个vma,默认就是应用程序的代码段。代码段的虚拟地址是连续的,这个vma的vm_start域和vm_end域之间就是整个代码段的虚拟地址,vm_start是代码段的起始地址。
步骤S403:根据应用程序代码段所在物理内存地址,通过MD5或SHA-1任一种方式对应用程序代码段所在物理内存区域以页为单位进行分段签名计算;
得到代码段的虚拟地址后,将用户态虚拟地址转换成内核态虚拟地址。如下代码片段中,u_vir_address为用户态代码段映射的虚拟地址,k_vir_address为u_vir_address映射的物理page重映射到内核态下的虚拟地址,使用它可以访问相同物理page的数据。
pmd_t*pmd;
pte_t*pte;
unsignedlongk_vir_address=0;
pmd=pmd_offset(pud_offset(pgd_offset(mm,u_vir_address),u_vir_address),
u_vir_address);
pte=pte_offset_map(pmd,u_vir_address);
if(pte_present(*pte)){
k_vir_address=(unsignedlong)page_address(pte_page(*pte));
}
pte_unmap(pte);
由于应用程序的代码段映射到物理内存并不连续,签名计算只能够分段进行,通常以页(page)的大小为单位分段进行。内核线程直接访问k_vir_address地址,通过MD5或SHA-1任一种方式对这个page的内容进行分段签名计算。
步骤S404:释放处理器资源以等待下一次调度;
内核线程如果持续不间断的进行签名计算会影响业务程序的执行。因此,每完成一个page的签名计算就释放CPU资源,以等待下一次的调度。
步骤S405:判断已经完成签名计算的应用程序代码段的物理内存长度是否达到预设的校验长度;
内核线程需要以page为单位对整个应用程序代码段虚拟地址范围内对应的物理page进行签名计算,校验的长度是由app_sign_info中的len字段定义,如果对单个page的签名计算完成后,发现已经进行完成签名计算的应用程序代码段物理内存长度未超过len字段的长度,则进行步骤S407,如果刚好达到len字段定义的长度,则进行步骤S406。
步骤S406:根据进行签名计算得到的值对应用程序代码段进行签名校验;
如果对单个page签名计算完成后,发现已经完成签名计算的应用程序代码段物理内存长度刚好达到len字段定义的长度,则根据计算得到的完整的签名值,和app_sign_info中的原始签名值(origSignValue)对比,如果一致,则从头进行下一轮的签名计算,否则复位单板。
步骤S407:继续对剩下的应用程序代码段的物理内存区域进行签名计算;
如果对单个page签名计算完成后,发现已经完成签名计算的应用程序代码段物理内存长度未超过len字段的长度,则返回对下一个应用程序代码段的物理内存区域进行签名计算。
通过上述实施方式的阐述,可以理解,区别于现有技术,本申请实施方式引入主动保护策略,对软件不可变的程序逻辑部分进行保护,防止出现利用系统漏洞篡改系统软件的行为。其中,对系统软件的主动保护范围包括linux内核和运行在内核之上的应用程序,系统启动后通过对内核以及应用程序代码段进行循环和不间断的签名校验带来的系统强一致性,能够杜绝系统运行过程中因安全漏洞或其他故障导致的内核以及应用程序代码段指令被修改而引入的安全风险,提高系统安全性。
请参阅图8,图8是本申请校验装置一个实施方式的结构示意图,校验装置100包括获取模块11、校验模块12以及控制模块13,其中:
获取模块11用于在系统运行过程中,获取程序逻辑部分参数,并将程序逻辑部分参数发送给校验模块12;
在其中一个实施方式中,获取模块11用于获取对内核代码段进行签名校验的启动指令和内核代码段参数,并将对内核代码段进行签名校验的启动指令和内核代码段参数发送给校验模块12。
在另一个实施方式中,获取模块11还用于在应用程序运行过程中,获取对应用程序代码段进行签名校验的启动指令和应用程序代码段参数,并将对应用程序代码段进行签名校验的启动指令和应用程序代码段参数发送给校验模块12。
校验模块12用于根据程序逻辑部分参数,对程序逻辑部分进行校验;
校验模块12用于根据内核代码段参数,对内核代码段所在物理内存区域进行签名计算,将签名计算得到的值与内核代码段所在物理内存区域的原始签名值进行比对,若签名计算得到的值与内核代码段所在物理内存区域的原始签名值一样,得出对内核代码段所在物理内存区域的签名校验通过的结论并发送给控制模块13,若签名计算得到的值与内核代码段所在物理内存区域的原始签名值不一样,得出对内存代码段所在物理内存区域的签名校验未通过的结论并发送给控制模块13,其中,内核代码段所在物理内存区域的原始签名值直接固化在校验模块12中。
内核代码段参数至少包括内核代码段所在物理内存区域的起始地址以及长度,内核代码段所在物理内存区域的原始签名值;
校验模块12用于根据内核代码段所在物理内存区域的起始地址以及长度,通过MD5或SHA-1任一种方式对内核代码段所在物理内存区域进行签名计算。
校验模块12还用于根据应用程序代码段参数,对应用程序代码段所在物理内存区域进行签名计算,将签名计算得到的值与应用程序代码段所在物理内存区域的原始签名值进行比对,若签名计算得到的值与应用程序代码段所在物理内存区域的原始签名值一样,得出对应用程序代码段所在物理内存区域进行签名校验通过的结论并发送给控制模块13,若签名计算得到的值与应用程序代码段所在物理内存区域的原始签名值不一样,得出对应用程序代码段所在物理内存区域进行签名校验未通过的结论并发送给控制模块13。
在实际应用过程中,对内核和应用程序代码段进行校验的校验模块12可以是同一个校验模块,也可以是分别独立的两个校验模块12,如果是分别采用两个独立的校验模块12对内核和应用程序代码段进行校验,则可以将对应用程序代码段进行校验的校验模块直接通过subsys_initcall注册到内核中,以便于建立内核线程对应用程序代码段进行校验。
校验模块12用于根据对应用程序代码段进行签名校验启动指令,创建内核校验接口以及内核线程以对应用程序代码段进行签名校验,其中,每个内核线程与一个应用程序绑定。
校验模块12还用于根据应用程序代码段参数,查找应用程序代码段所在的逻辑实体,解析应用程序代码段所在的逻辑实体的虚拟地址,以获取应用程序代码段所在物理内存地址,根据应用程序代码段所在物理内存地址,通过MD5或SHA-1任一种方式对应用程序代码段所在物理内存区域以页为单位进行分段签名计算。
校验模块12每完成一个应用程序代码段所在物理内存区域的分段签名计算之后,释放处理器资源以等待下一次调度。
控制模块13用于当校验通过时,控制正常运行系统,当校验没有通过时,控制直接复位系统。
在另一个实施方式中,本申请的校验装置结构示意图请参阅图9,校验装置200包括获取模块11、校验模块12、控制模块13、锁定模块14以及判断模块15,其中:
获取模块11用于在系统运行过程中,获取程序逻辑部分参数,并将程序逻辑部分参数发送给校验模块12;
校验模块12用于根据程序逻辑部分参数,对程序逻辑部分进行校验;
控制模块13用于当校验通过时,控制正常运行系统,当校验没有通过时,控制直接复位系统;
锁定模块14用于所有业务逻辑执行之前,获取应用程序代码段映射地址范围,调用库函数,以应用程序代码段映射地址范围作为参数锁住应用程序代码段,并对应用程序代码段映射地址范围进行读操作遍历,以使应用程序代码段都被映射到物理内存中。
判断模块15用于判断已经完成签名计算的应用程序代码段的物理内存长度是否达到预设的校验长度,若已经完成签名计算的应用程序代码段的物理内存长度没有达到预设的校验长度,则通知校验模块12继续对剩下的应用程序代码段的物理内存区域进行签名计算,若已经完成签名计算的应用程序代码段的物理内存总长度达到预设的校验长度,则通知校验模块12根据进行签名计算得到的值对应用程序代码段进行签名校验。
判断模块15还用于判断在预定时间内是否检测到对系统程序逻辑部分进行校验的启动指令,若在预定时间内检测到对系统程序逻辑部分进行校验的启动指令,通知获取模块11获取对系统程序逻辑部分进行校验的启动指令和程序逻辑部分参数,若在预定时间内没有检测到对系统程序逻辑部分进行校验的启动指令,通知控制模块13直接复位系统。
请参阅图10,图10为本申请安全系统一个实施方式的结构示意图,安全系统300包括主系统和校验装置32,主系统包括处理器31以及物理内存33,其中:
校验装置32与主系统的处理器31通过内存总线34相连接,共享安全系统的物理内存33;
处理器31用于向校验装置32发送对系统的程序逻辑部分进行校验的启动指令以及程序逻辑部分参数;
处理器31通过保留一块物理内存区域和定义一个魔数,将魔数写到物理内存区域,以作为对系统程序逻辑部分进行校验的启动指令。
处理器31用于初始化内核并启动用户级进程,以获取内核代码段参数,向校验装置发送对所述内核代码段进行校验的启动指令和内核代码段参数。
本实施方式中提到的处理器31可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecificIntegratedCircuit),或者是被配置成实施本申请实施方式的一个或多个集成电路。
校验装置32用于对安全系统的程序逻辑部分进行校验,校验装置32包括获取模块、校验模块以及控制模块:获取模块用于在系统运行过程中,获取程序逻辑部分参数,并将程序逻辑部分参数发送给校验模块;校验模块用于根据程序逻辑部分参数,对程序逻辑部分进行校验;控制模块用于当所述校验通过时,控制正常运行系统,当校验没有通过时,控制直接复位系统。
校验装置中各模块的具体实现方式可参阅图8和图9中各模块的相关描述,在此不再赘述。
通过上述实施方式的阐述,可以理解,区别于现有技术,本申请实施方式引入主动保护策略,对软件不可变的程序逻辑部分进行保护,防止出现利用系统漏洞篡改系统软件的行为。其中,对系统软件的主动保护范围包括linux内核和运行在内核之上的应用程序,系统启动后通过对内核以及应用程序代码段进行循环和不间断的签名校验带来的系统强一致性,能够杜绝系统运行过程中因安全漏洞或其他故障导致的内核以及应用程序代码段指令被修改而引入的安全风险,有效提高系统的安全性能。
在本申请所提供的几个实施方式中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的功能模块可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
另外,在本申请各个实施方式中的各功能模块可以集成在一个处理单元中,也可以是各个功能模块单独物理存在,也可以两个或两个以上功能模块集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的实施方式,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (21)
1.一种增强系统安全性的方法,其特征在于,包括:
在系统运行过程中,获取内核代码段参数,并在应用程序运行过程中,获取应用程序代码段参数;
根据所述内核代码段参数,对内核代码段进行校验,根据所述应用程序代码段参数对应用程序代码段进行校验,其中,对应用程序代码段进行校验包括:根据对应用程序代码段进行签名校验启动指令,创建内核校验接口以及内核线程以对所述应用程序代码段进行签名校验,其中,每个内核线程与一个应用程序绑定,在所述内核线程中对所述应用程序代码段所在的物理内存区域进行签名校验;
若所述校验都通过,正常运行系统,若所述校验其中之一未通过,直接复位系统。
2.根据权利要求1所述的方法,其特征在于,
所述根据所述内核代码段参数,对内核代码段进行校验的步骤包括:
根据所述内核代码段参数,对所述内核代码段所在物理内存区域进行签名计算;
将所述签名计算得到的值与所述内核代码段所在物理内存的原始签名值进行比对,若所述签名计算得到的值与所述内核代码段所在物理内存区域的原始签名值一样,则对所述内核代码段所在物理内存区域的签名校验通过;若所述签名计算得到的值与所述内核代码段所在物理内存区域的原始签名值不一样,则对所述内存代码段所在物理内存区域的签名校验未通过。
3.根据权利要求2所述的方法,其特征在于,
所述内核代码段参数至少包括所述内核代码段所在物理内存区域的起始地址以及长度;
所述根据所述内核代码段参数,对所述内核代码段所在物理内存区域进行签名计算的步骤包括:
根据所述内核代码段所在物理内存区域的起始地址以及长度,通过MD5或SHA-1方式对所述内核代码段所在物理内存区域进行签名计算。
4.根据权利要求2所述的方法,其特征在于,
所述在所述内核线程中对所述应用程序代码段所在的物理内存区域进行签名校验的步骤还包括:
根据所述应用程序代码段参数,对所述应用程序代码段所在物理内存区域进行签名计算;
将所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值进行比对;
若所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值一样,则对所述应用程序代码段所在物理内存区域进行签名校验通过,若所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值不一样,则对所述应用程序代码段所在物理内存区域进行签名校验未通过。
5.根据权利要求1所述的方法,其特征在于,
所述获取应用程序代码段参数的步骤之前,还包括:
在所有业务逻辑执行之前,使应用程序获取所述应用程序代码段映射地址范围,通过调用库函数,以所述应用程序代码段映射地址范围作为参数锁住所述应用程序代码段,并对所述应用程序代码段映射地址范围进行读操作遍历,以使所述应用程序代码段都被映射到物理内存中。
6.根据权利要求4所述的方法,其特征在于,
所述根据所述应用程序代码段参数,对所述应用程序代码段的物理内存区域进行签名计算的步骤包括:
根据所述应用程序代码段参数,查找所述应用程序代码段所在的逻辑实体;
解析所述应用程序代码段所在的逻辑实体的虚拟地址,以获取所述应用程序代码段所在物理内存地址;
根据所述应用程序代码段所在物理内存地址,通过MD5或SHA-1方式对所述应用程序代码段所在物理内存区域以页为单位进行分段签名计算。
7.根据权利要求6所述的方法,其特征在于,
所述根据所述应用程序代码段所在物理内存地址,通过MD5或SHA-1方式对所述应用程序代码段所在物理内存区域以页为单位进行分段签名计算的步骤之后,还包括:释放处理器资源以等待下一次调度。
8.根据权利要求7所述的方法,其特征在于,
所述释放处理器资源以等待下一次调度的步骤之后,还包括:
判断已经完成签名计算的所述应用程序代码段的物理内存长度是否达到预设的校验长度;
若所述已经完成签名计算的所述应用程序代码段的物理内存长度没有达到预设的校验长度,则继续对剩下的应用程序代码段的物理内存区域进行签名计算,若所述已经完成签名计算的所述应用程序代码段的物理内存长度达到预设的校验长度,则根据所述进行签名计算得到的值对所述应用程序代码段进行签名校验。
9.根据权利要求1所述的方法,其特征在于,
所述在系统运行过程中,获取内核代码段参数的步骤之前,还包括:
判断在预定时间内是否检测到对系统程序逻辑部分进行校验的启动指令;
若在预定时间内检测到对系统程序逻辑部分进行校验的启动指令,获取对系统程序逻辑部分进行校验的启动指令和所述程序逻辑部分参数;
若在预定时间内没有检测到对系统程序逻辑部分进行校验的启动指令,则直接复位系统。
10.一种校验装置,其特征在于,包括获取模块、校验模块以及控制模块,其中:
所述获取模块用于在系统运行过程中,获取内核代码段参数,并在应用程序运行过程中,获取应用程序代码段参数,将所述内核代码段参数和所述应用程序代码段参数发送给所述校验模块;
所述校验模块用于根据所述内核代码段参数,对内核代码段进行校验,根据所述应用程序代码段参数对应用程序代码段进行校验,其中,所述校验模块根据对应用程序代码段进行签名校验启动指令,创建内核校验接口以及内核线程以对所述应用程序代码段进行签名校验,其中,每个内核线程与一个应用程序绑定,在所述内核线程中对所述应用程序代码段所在的物理内存区域进行签名校验;
所述控制模块用于当所述内核代码段以及所述应用程序代码段的校验都通过时,控制正常运行系统,当所述内核代码段或所述应用程序代码段的校验其中之一没有通过时,控制直接复位系统。
11.根据权利要求10所述的校验装置,其特征在于,
所述校验模块用于根据所述内核代码段参数,对所述内核代码段所在物理内存区域进行签名计算,将所述签名计算得到的值与所述内核代码段所在物理内存区域的原始签名值进行比对,若所述签名计算得到的值与所述内核代码段所在物理内存区域的原始签名值一样,得出对所述内核代码段所在物理内存区域的签名校验通过的结论并发送给所述控制模块,若所述签名计算得到的值与所述内核代码段所在物理内存区域的原始签名值不一样,得出对所述内存代码段所在物理内存区域的签名校验未通过的结论并发送给所述控制模块,其中,所述内核代码段所在物理内存区域的原始签名值直接固化在所述校验模块中。
12.根据权利要求11所述的校验装置,其特征在于,
所述内核代码段参数至少包括所述内核代码段所在物理内存区域的起始地址以及长度,所述内核代码段所在物理内存区域的原始签名值;
所述校验模块用于根据所述内核代码段所在物理内存区域的起始地址以及长度,通过MD5或SHA-1方式对所述内核代码段所在物理内存区域进行签名计算。
13.根据权利要求11所述的校验装置,其特征在于,
所述校验模块还用于根据所述应用程序代码段参数,对所述应用程序代码段所在物理内存区域进行签名计算,将所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值进行比对,若所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值一样,得出对所述应用程序代码段所在物理内存区域进行签名校验通过的结论并发送给所述控制模块,若所述签名计算得到的值与所述应用程序代码段所在物理内存区域的原始签名值不一样,得出对所述应用程序代码段所在物理内存区域进行签名校验未通过的结论并发送给所述控制模块。
14.根据权利要求10所述的校验装置,其特征在于,
所述校验装置还包括锁定模块,所述锁定模块用于在所有业务逻辑执行之前,获取应用程序代码段映射地址范围,调用库函数,以所述应用程序代码段映射地址范围作为参数锁住所述应用程序代码段,并对所述应用程序代码段映射地址范围进行读操作遍历,以使所述应用程序代码段都被映射到物理内存中。
15.根据权利要求13所述的校验装置,其特征在于,
所述校验模块还用于根据所述应用程序代码段参数,查找所述应用程序代码段所在的逻辑实体,解析所述应用程序代码段所在的逻辑实体的虚拟地址,以获取所述应用程序代码段所在物理内存地址,根据所述应用程序代码段所在物理内存地址,通过MD5或SHA-1方式对所述应用程序代码段所在物理内存区域以页为单位进行分段签名计算。
16.根据权利要求15所述的校验装置,其特征在于,
所述校验模块每完成一个应用程序代码段所在物理内存区域的所述分段签名计算之后,释放处理器资源以等待下一次调度。
17.根据权利要求16所述的校验装置,其特征在于,
所述校验装置还包括判断模块,用于判断已经完成签名计算的所述应用程序代码段的物理内存长度是否达到预设的校验长度,若所述已经完成签名计算的所述应用程序代码段所在物理内存长度没有达到预设的校验长度,则通知所述校验模块继续对剩下的应用程序代码段的物理内存区域进行签名计算,若已经完成签名计算的所述应用程序代码段所在物理内存长度达到预设的校验长度,则通知所述校验模块根据所述进行签名计算得到的值对所述应用程序代码段进行签名校验。
18.根据权利要求17所述的校验装置,其特征在于,
所述判断模块还用于判断在预定时间内是否检测到对系统程序逻辑部分进行校验的启动指令,若在预定时间内检测到对系统程序逻辑部分进行校验的启动指令,通知所述获取模块获取对系统程序逻辑部分进行校验的启动指令和所述程序逻辑部分参数,若在预定时间内没有检测到对系统程序逻辑部分进行校验的启动指令,则通知所述控制模块直接复位系统。
19.一种安全系统,其特征在于,包括主系统和校验装置,其中:
所述主系统包括处理器和物理内存,所述主系统通过所述处理器向所述校验装置发送对所述安全系统的程序逻辑部分进行校验的启动指令以及所述程序逻辑部分参数;
所述校验装置与所述主系统的处理器通过内存总线相连接,共享所述物理内存,所述校验装置用于对所述安全系统的程序逻辑部分进行校验,所述校验装置包括获取模块、校验模块以及控制模块:
所述获取模块用于在系统运行过程中,获取内核代码段参数,并在应用程序运行过程中,获取应用程序代码段参数,将所述内核代码段参数和所述应用程序代码段参数发送给所述校验模块;
所述校验模块用于根据所述内核代码段参数,对内核代码段进行校验,根据所述应用程序代码段参数对应用程序代码段进行校验,其中,所述校验模块根据对应用程序代码段进行签名校验启动指令,创建内核校验接口以及内核线程以对所述应用程序代码段进行签名校验,其中,每个内核线程与一个应用程序绑定,在所述内核线程中对所述应用程序代码段所在的物理内存区域进行签名校验;
所述控制模块用于当所述内核代码段和所述应用程序代码段的校验都通过时,控制正常运行系统,当所述内核代码段或所述应用程序代码段的校验其中之一没有通过时,控制直接复位系统。
20.根据权利要求19所述的系统,其特征在于,
所述主系统的处理器通过保留一块物理内存区域和定义一个魔数,将所述魔数写到所述物理内存区域,以作为对系统程序逻辑部分进行校验的启动指令。
21.根据权利要求19所述的系统,其特征在于,
所述主系统的处理器通过初始化内核并启动用户级进程,以获取内核代码段参数,向所述校验装置发送所述内核代码段参数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310204323.8A CN103279712B (zh) | 2013-05-28 | 2013-05-28 | 增强系统安全性的方法、校验装置及安全系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310204323.8A CN103279712B (zh) | 2013-05-28 | 2013-05-28 | 增强系统安全性的方法、校验装置及安全系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103279712A CN103279712A (zh) | 2013-09-04 |
CN103279712B true CN103279712B (zh) | 2016-05-25 |
Family
ID=49062227
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310204323.8A Active CN103279712B (zh) | 2013-05-28 | 2013-05-28 | 增强系统安全性的方法、校验装置及安全系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103279712B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106547531B (zh) * | 2015-09-23 | 2021-05-14 | 云智慧(北京)科技有限公司 | 基于php的应用性能管理方法及其模块 |
CN107688745B (zh) * | 2016-08-04 | 2020-10-30 | 阿里巴巴集团控股有限公司 | 处理、生成内核镜像的方法、内核初始化方法、装置和设备 |
CN107038373A (zh) * | 2017-04-28 | 2017-08-11 | 北京洋浦伟业科技发展有限公司 | 一种进程调试检测方法及装置 |
CN109214180B (zh) * | 2017-06-30 | 2021-04-27 | 武汉斗鱼网络科技有限公司 | 一种内存代码的校验方法及装置 |
CN107480076A (zh) * | 2017-07-31 | 2017-12-15 | 北京小米移动软件有限公司 | 系统分区的保护处理方法、装置及终端 |
CN109753788B (zh) * | 2017-11-03 | 2024-04-19 | 厦门雅迅网络股份有限公司 | 内核运行时的完整性校验方法及计算机可读存储介质 |
CN108038021B (zh) * | 2017-11-13 | 2021-03-02 | 北京全路通信信号研究设计院集团有限公司 | 一种计算机程序运行阶段代码内存校验方法 |
CN108804324A (zh) * | 2018-06-07 | 2018-11-13 | 广州金山安全管理系统技术有限公司 | 应用程序的检测方法及装置、存储介质、电子装置 |
CN110069925B (zh) * | 2019-04-03 | 2020-09-25 | 奇安信科技集团股份有限公司 | 软件监测方法、系统及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6892304B1 (en) * | 1997-10-09 | 2005-05-10 | Phoenix Technologies Ltd. | System and method for securely utilizing basic input and output system (BIOS) services |
CN101373502A (zh) * | 2008-05-12 | 2009-02-25 | 公安部第三研究所 | 基于Win32平台下病毒行为的自动化分析系统 |
CN102356384A (zh) * | 2011-08-23 | 2012-02-15 | 华为技术有限公司 | 一种检测数据可靠性的方法和装置 |
-
2013
- 2013-05-28 CN CN201310204323.8A patent/CN103279712B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6892304B1 (en) * | 1997-10-09 | 2005-05-10 | Phoenix Technologies Ltd. | System and method for securely utilizing basic input and output system (BIOS) services |
CN101373502A (zh) * | 2008-05-12 | 2009-02-25 | 公安部第三研究所 | 基于Win32平台下病毒行为的自动化分析系统 |
CN102356384A (zh) * | 2011-08-23 | 2012-02-15 | 华为技术有限公司 | 一种检测数据可靠性的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103279712A (zh) | 2013-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103279712B (zh) | 增强系统安全性的方法、校验装置及安全系统 | |
US11630920B2 (en) | Memory tagging for side-channel defense, memory safety, and sandboxing | |
US9424200B2 (en) | Continuous run-time integrity checking for virtual memory | |
TWI655643B (zh) | 用於辨識對應目標記憶體位址之記憶體屬性單元之區域之區域辨識操作 | |
CN101504704B (zh) | 由星型信任链支持的嵌入式平台应用程序完整性验证方法 | |
US11829299B2 (en) | Technologies for execute only transactional memory | |
US20090193211A1 (en) | Software authentication for computer systems | |
US20150074387A1 (en) | System and method for auto-enrolling option roms in a uefi secure boot database | |
US9075751B2 (en) | Secure data protection with improved read-only memory locking during system pre-boot | |
CN105378663A (zh) | 更新引导代码 | |
CN104217139B (zh) | 处理系统 | |
CN110674494B (zh) | 进程的保护方法、系统及数据处理方法 | |
WO2012125345A1 (en) | Methods and systems for measuring trustworthiness of a self-protecting drive | |
US20100115004A1 (en) | Backup system that stores boot data file of embedded system in different strorage sections and method thereof | |
US10824710B2 (en) | Method and device for authenticating application that requests access to memory | |
US9639477B2 (en) | Memory corruption prevention system | |
US10095855B2 (en) | Computer system and operating method therefor | |
CN108073411A (zh) | 一种补丁的内核加载方法及装置 | |
CN108537066B (zh) | 安全代码跳转和执行选通 | |
US9026859B1 (en) | Safer mechanism for using pointers to code | |
CN106650455B (zh) | 一种系统安全启动方法及装置 | |
US11055202B1 (en) | Compilation scheme for tagged global variables | |
CN105790953A (zh) | 双接口认证设备及其工作方法 | |
CN105335659A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |