基于长短码联合控制的程序完整性校验方法*

2021-04-20 01:36姬一文王玉成杨诏钧
网络安全与数据管理 2021年4期
关键词:哈希完整性校验

姬一文,杨 钊,王玉成,杨诏钧,康 昱

(麒麟软件有限公司,湖南 长沙410000)

0 引言

随着计算机的普及,人们每天都通过计算机和互联网获取信息、进行各种活动,信息技术已经成为人们生活中不可分割的一部分。但计算机与网络空间并不总是安全的,在给人们带来便利的同时也会带来巨大的安全威胁。 病毒、木马等非法或恶意代码是通过篡改或替换系统应用程序而达到对系统进行攻击, 进而试图进入系统以获取其非法目的。传统常规的安全防护手段已无法实时保障计算机的安全可靠,需要一种可靠、高效和实时的完整性度量校验机制来解决存在的问题。

目前程序完整性度量广泛应用于个人计算机、手机、门禁监控、智能电网、信息系统等多个领域,近年来许多专家学者对完整性度量机制展开了研究,取得了较显著的成果。 DAVI L[1]提出了一种动态完整性度量与验证架构,采用加载时度量结合动态跟踪方式来实现完整性度量验证。 宋生宇[2]提出了一种基于软件行为分析的动态完整性度量模型,该模型引入进程监控器,通过监控进程的修改行为来判断是否对其进行完整性度量。 张帆[3]等提出了可信度量的一种无干扰行为可信性分析方法,利用无干扰等式判定软件的真实行为与系统调用安全域的预期行为是否存在偏差,实现对软件的可信实时度量。 黄杜娟[4]等从单个的组件可信度量出发,根据不同组件的权重和不同的组合方式,建立了相应的系统可信度量模型。 于学军[5]等在软件开发阶段植入可信埋点用于获取行为动作路径,并针对这种路径提出了显式和隐性判定指标,在度量上提出基于K-means 聚类的隐性指标判定模型。 尹超[6]等基于ARMTrustZone 设计出一种安全世界和非安全世界交互的主动可信度量机制。 周敦凯[7]提出一种基于DRTM 的完整性度量模型,引入了DIMM 架构和FPGA 动态重构技术搭建可信试验平台。陈志锋[8]等提出了基于内存取证的内核完整性度量方法,提取静态和动态度量对象,提出了一种随机化算法弱化TOC-TOU 攻击,通过采用哈希和加密运算相结合提高度量的安全性。 王效武[9]等提出了软件源的可信管控模型,实现软件的安全认定、度量基准值统一计算采集以及可信第三方的集中管控。 龙奔[10]等提出了一种基于度量认证的协同集成度量方法,在软件部署双方建立安全传输通道。 马纳[11]等通过可信密码模块检测RTU 各软件模块的完整性,阐述了一种RTU 的可信度量认证技术。 迮恺[12]通过引入可信代理模块,设计一种多级安全访问控制策略,分别从实体完整性和机密性两方面对系统中实体进行动态可信性度量。 张家伟[13]提出一种使用星型-链式相结合信任度量模型的主动免疫可信体系结构。 吴涛[14]等提出了一种基于邻接点的动态完整性度量方法,以邻接点作为度量模块的宿主,通过面向内存页的完整性模型和评估算法,实现动态完整性度量。 彭朝英[15]等提出了一种基于最小熵的完整性度量。

传统的完整性度量校验以某一时刻计算程序文件的哈希值作为基准值,另一时刻再对该文件进行度量,根据两次度量的结果比对来进行程序文件的完整性校验,若一致则该文件完整性未遭到破坏,否则表明该文件完整性遭到破坏。

度量和验证是保障系统和应用程序完整性的主要技术。 度量就是采集所需检测的应用软件的状态,验证是将度量结果和预期度量值比对,如果一致表示验证通过,否则表示验证失败。

目前度量方式存在以下不足:

(1)度量为逐级度量,根据系统引导从一个被信任单个组件度量扩展到整个系统,当某个中间组件完整性遭到破坏,并不能迅速找到存在问题的环节,需要再从头开始逐级度量,这将导致较多不必要的度量时间浪费;且随着系统中被度量的组件应用增多,组件新增或更换删除这种时刻变化的状态也将影响信任链的稳定性。

(2)现有应用程序完整性度量校验是通过对程序的完整性计算对比校验的方法。 在操作系统层有海量的应用需要执行和度量,现有的度量校验算法效率会影响操作系统启动和运行时间,给用户带来不好的使用体验。

针对目前存在的不足,本文提出一种长短码联合度量校验方法来实现对应用程序实时高效的控制。

1 长短码联合度量校验方法

常规的度量方式即通过计算系统中可执行文件的哈希值来进行文件的完整性度量,每次对可执行文件进行动态度量时都需要对该文件进行密码学的哈希计算,需要耗费较大的时间成本。 本文在该基础上增设了文件标记并与哈希计算结合实现完整性度量,度量之前采集应用程序文件的长短码基准值;设置了监控模块,当文件内容被修改时监控模块能快速识别然后自动更改其短码标记;在进行实时度量时先检测短码标记,短码标记则为常规的字符串,完整性度量简洁高效。 若短码标记被修改,再检测文件的哈希值与基准值对比来决策是否执行该文件,这种度量方式有效提高了应用程序完整性度量的效率。 以下给出该度量方式关键模块的介绍。

1.1 长短码联合度量校验的基准

长短码联合度量校验之前首先需要采集度量对象的基准值,以该基准值为之后的校验提供参照标准。 长短码联合度量校验分为短码检测和哈希度量校验两个部分,所以在基准采集部分需要采集短码标记和哈希值两个基准。 应用程序文件的短码标记是根据该文件的创建类型来决定其初始的类型,定义n类短码标记A={A1,A2, …,An}(可信优先级递增),优先级最低的短码标记A1为唯一不可执行的标记,如未知文件或遭到破坏的文件;An为可信优先级最高的短码标记,如始终可信的文件。 并且制定相应规则:

(1)当应用程序pa创建新的应用程序文件pb,pb的短码标记会被自动设置为比pa短码标记优先级低的标记;

(2)当应用程序文件pm内容遭到更改破坏,则其可执行操作的短码标记会更改为优先级最低的不可执行操作的短码标记。

系统中的应用程序组件处于新增或更换删除这种时刻变化的状态,按照以上策略设置应用程序的短码标记可实现在动态复杂的状态下自动精细地控制应用程序的权限,保证应用程序执行的安全可靠稳定。

基准的来源存在较多种,这里主要介绍具有代表性的采集方式:系统首次安装后的程序文件长短码采集。

在系统安装后第一次引导时,系统将初始化采集白名单。 通过扫描采集系统中可执行文件的哈希值并设置可执行文件的短码标记来完成采集,采集对象包含:系统二进制文件、动态链接库、内核模块和可执行脚本文件。 采集完成后存储到白名单数据库中,其中白名单数据库包含采集对象的文件路径、文件的哈希值以及短码标记。 当以上采集对象的采集存储操作完成后,在系统中设置初始化完成标记来表示初始化白名单采集存储过程的结束。 系统初始采集流程见图1。

图1 系统初始化白名单采集流程

1.2 长短码联合度量校验

1.2.1 长短码联合度量校验方法

系统启动后,当应用程序执行时,会触发长短码联合度量校验模块,实现对该应用程序实时的度量和校验,长短码联合度量校验模块分为短码标记检测和哈希度量校验两个部分。

短码标记检测:请求执行的应用程序文件进行短码标记的检测。 短码标记的检测主要基于LSM(Linux Security Module)框架实现,LSM 是一个轻量级通用访问控制框架,它的各种不同的安全访问控制模型能够以Linux 加载内核模块的形式实现出来,用户可以根据其需求选择适合的安全模块加载到Linux 内核中,提高了访问控制机制的灵活性和易用性。 LSM 通过在内核源码中放置钩子函数,在应用程序执行前通过钩子函数调用设置好的安全模块函数来获得访问控制权,钩子函数收到安全模块返回的访问信号便会决定该应用程序可否执行。

本文的长短码联合度量方法的执行控制安全模块采用:检查主体的短码标记是否为可执行标记来进行控制访问,如果执行控制的主体为非优先级最小的短码标记A1,则允许执行控制的应用程序执行操作;否则安全模块拒绝访问,应用程序不允许执行。

长码度量校验:计算该文件的哈希值并与该应用程序文件的哈希基准值进行校验,若校验通过则表明该文件的完整性未遭到破坏,允许该文件执行。长码度量校验的前提条件:对应用程序文件进行短码标记的检测,若短码标记为可执行标记则表明该文件的完整性未遭到破坏,则该应用程序可以直接执行操作; 否则表明该应用程序文件的内容被更改,需要再进行长码度量校验。

1.2.2 长短码联合度量的监控模块

当文件被访问,如执行、读操作、写操作等事件发生时,将会触发内核完整性监控模块。 文件完整性监控模块对文件的读操作、写操作、重命名操作、移动操作等均有监控,当这些事件触发时,该监控模块将检查文件内容的完整性,如果文件内容有变更,即完整性被破坏了,将触发应用程序短码标记变更,并同步白名单数据库的对应项,显示为已被篡改,可达到通过短码标记实时显示标记文件完整性的功能;如果文件内容未变更将返回。

监控模块也是基于LSM 框架实现的,LSM 会在内核源码中放置钩子函数。 当应用程序文件被访问控制,如写操作、重命名操作、移动操作等触发到监控模块,监控模块会通过钩子函数调用相应的安全模块来对被操作的应用程序文件标记更改。 根据1.1 节的规则(2),当执行控制客体文件被执行写操作时,会触发钩子函数调用相应的安全模块,来更改该文件的短码标记为最小优先级A1,表明该文件的内容遭到更改,完整性遭到破坏,并将标记同步到白名单数据库相应的项。 如果非写操作则文件内容未遭到破坏,则直接省去了哈希值度量的时间上的浪费,极大提高了度量校验效率。 监控模块可以细分为以下几种监控:

(1)普通文件的监控

普通文件的监控是利用LSM 框架中的钩子函数file_permission 和inode_permission 实现的,这两个函数负责访问权限的过滤和普通文件的执行请求控制。 若应用程序被执行的是写操作,则修改实时的短码标记为A1,表明该文件的完整性被破坏,下次该应用请求执行时便不会允许该程序执行。

(2)内核模块的监控

内核模块的监控只有拥有系统自带或第三方应用标记的内核模块才允许被加载,模块被修改后标记将丢失。 在LSM 模块的函数中通过检查模块文件的执行控制标记来实现对模块加载的控制。

(3)共享库的监控

二进制程序通过mmap 调用来对需要的共享库进行加载和映射,在LSM 模块的file_mmap 钩子函数中,先过滤映射类型和请求权限,然后只对请求执行权限的非匿名非共享映射的文件进行标记检查即可。

2 长短码联合度量校验模型

2.1 基本定义

定义1(度量基准):度量基准是在度量校验前采集的参考标准,如系统初始化中采集的应用程序哈希值和短码标记构成的集合;度量基准中哈希集合记为TP={t1,t2,…,tn},每个元素ti(1≤i≤n)表示应用程序的基准哈希值;度量基准中短码标记集合记为LP={l1,l2,…,ln},每个元素li(1≤i≤n)表示应用程序的基准短码标记。 设定TPS={ts1,ts2,…,tsn}表示应用程序实时的哈希值tsi(1 ≤i≤n)的集合,LPS={ls1,ls2,…,lsn}表示应用程序扩展属性中的实时短码标记lsi(1≤i≤n)的集合,初始阶段LPS=LP,TPS=TP,即t1=ts1,t2=ts2,…,tn=tsn;l1=ls1,l2=ls2,…,ln=lsn。

定义2(监控操作):监控函数fmonitor用于监控应用程序pi∈P(P为当前运行应用程序的集合)的文件内容是否被更改,若是被执行写操作则文件内容被更改,将应用程序的实时短码标记lsi设置为A1;否则不做任何操作。

定义3(检测函数):检测函数fdetect用于检测应用程序pi的文件短码标记是否为可执行标记。 如果lsi=A1,则fdetect(pi)=false;否则fdetect(pi)=true。

定义4(校验函数):校验函数fcheck用于校验应用程序此时的哈希值是否与度量基准中的哈希值相同,如果t1=ts1,则fcheck(pi)=true,否则fcheck(pi)=false。

定义5(决策函数):决策函数fdecision用于判断应用程序pi是否允许执行,按照下文2.2 节的决策规则来判断该文件的完整性和决定fdecision(pi)的取值,fdecision(pi)=true 即运行执行,fdecision(pi)=false 即不允许执行。

定义6(更新函数):更新函数fupdate用于更新应用程序pi的实时短码标记和哈希基准值,当fdetect(pi)=false 并且fcheck(pi)=true,则会将li赋值给lsi,将tsi赋值给ti。

2.2 决策规则

基于长短码联合度量校验的控制决策规则如下:

首先利用fdetect检测应用程序pi文件的短码标记是否为可执行标记;若fdetect返回true,则表明文件内容未被修改, 程序文件的完整性未被破坏,fdecision(pi)返回true,pi允许继续执行;否则需要再用fcheck来校验pi的哈希值,若fcheck返回true,则fdecision(pi)返回true,允许pi继续执行并通过fupdate来执行更新操作;否则fdecision(pi)返回false,pi被拒绝继续执行。

3 长短码联合度量校验流程

基于长短码联合度量校验的总体控制流程如图2 所示。

长短码联合度量校验总体步骤如下:

(1)系统启动,判断是否首次启动,如果不是则直接转步骤(2);否则按1.1 节的方式进行初始化白名单采集,如果有需要验签的软件包通过验证也将进行白名单采集, 得到哈希基准集合TP={t1,t2,…,tn}、哈希的实时度量集合TPS={ts1,ts2,…,tsn}、短码标记基准值集合LP={l1,l2,…,ln}和程序实时的短码标记集合LPS={ls1,ls2,…,lsn}。

(2)将核外白名单哈希表的数据拷贝至内存。

(3)应用程序pi请求执行,利用fdetect检测pi的实时短码标记lsi是否等于不可执行标记A1,如果该函数返回true 则转步骤(5),否则转步骤(4)。

(4)计算应用程序pi的实时哈希值lsi,如果此时的哈希值lsi与哈希基准集合TP 中pi的哈希基准值相同,即li=lsi,则执行fupdate将短码标记基准中pi的短码标记li更新程序实时短码标记lsi,实时哈希值tsi更新哈希基准值ti,转步骤(5);否则表明程序不合法或完整性遭破坏,pi不被允许执行,流程结束。

(5)应用程序文件的完整性未破坏,应用程序允许执行,流程结束。

图2 长短码联合度量校验总体流程图

4 实验结果及分析

将本文提出的长短码度量和常规Hash 度量、仅标记度量进行对比, 这三类度量方法都运行在FT-1500A(64 位,4 核)CPU、8 GB 内 存 和Linux-4.4.4.131 内核的PC 上。 利用测试工具UnixBench 对这三类度量方法进行系统调用和系统整体性能方面的测试比较,结果对比见表1。 表1 分别列出在4 核CPU 单进程和多进程实验下的对比结果,其中系统调用为考察每秒钟可以执行的Execl 系统调用的次数。

表1 常规Hash 值度量和长短码度量以及原始系统的结果对比

本文提出的基于长短码联合度量校验方法是先度量请求执行程序的短码标记,即较快速的字符串比较,仅当该应用程序实时短码标记为A1时才进入耗时的Hash 度量,相比常规的度量(仅Hash 度量)具有较大的性能优势;与仅标记度量相比能有效避免较多错误的决策判断,如仅改变标记为可执行的应用程序文件的路径会导致标记变为A1,仅标记度量则判断该应用程序为不可执行,但是文件的完整性未遭到破坏,而长短码度量通过再次Hash度量和更新应用程序的实时标记能有效避免类似情况的发生。 实验结果表明在Execl 系统调用和系统整体性能上本文所提方法明显优于仅Hash 度量,并与仅标记度量基本持平。 实验结果验证了该方法的有效性。

5 结论

本文综合分析了Linux 操作系统文件系统的机制特点,设计文件监控模块,实现对文件完整性实时标记,当文件被改动时,可主动标记区分识别被篡改文件。 结合文件完整性度量校验方法,优化度量和校验流程,结合文件完整性监控模块和文件度量校验模块, 联合实现对文件长短码联合度量校验,大大提高度量校验的准确性和高效性。

猜你喜欢
哈希完整性校验
使用Excel朗读功能校验工作表中的数据
基于特征选择的局部敏感哈希位选择算法
石油化工企业设备完整性管理
哈希值处理 功能全面更易用
文件哈希值处理一条龙
炉温均匀性校验在铸锻企业的应用
莫断音动听 且惜意传情——论音乐作品“完整性欣赏”的意义
电子式互感器校验方式研究
精子DNA完整性损伤的发生机制及诊断治疗
巧用哈希数值传递文件