APP下载

Linux磁盘剩余信息保护技术研究

2018-07-05陈莉君郑华利西安邮电大学计算机学院陕西西安710121

计算机应用与软件 2018年6期
关键词:调用内核加密

陈莉君 田 野 郑华利(西安邮电大学计算机学院 陕西 西安 710121)

0 引 言

随着计算机的普及和互联网的发展,人们在工作生活中对于计算机越来越依赖。随之而来的计算机数据的使用、操作、存储等安全问题日渐突出,在操作系统上直接使用系统命令对文件进行删除已经变得不再可靠[1]。由于数据没有及时销毁,造成的泄密事件接连发生。比如,2007年9月,英国EDS公司丢失一块硬盘,硬盘上包含有“英格兰和威尔士全国罪犯管理署”雇员的资料,造成数百万英镑的损失;2008年11月,某政府部门在更新办公设备时,将一批旧计算机卖给旧货市场,导致计算机磁盘内的大量未安全删除的信息泄露等。

为此,政府机关、国防、军队等许多有高度安全保密需求的单位要求,计算机上的机密文件删除时必须要彻底的销毁,不能够被恢复。硬盘作为数据文件交换和存储的介质,在日常工作中会被频繁使用。对于这些介质的不合理使用,会使得不法分子有机会通过一些恶意手段获取到用户的重要数据。通过对存储介质上的剩余信息进行恢复处理来窃取曾经存储的机密信息,导致信息泄露,已经成为威胁信息安全的重要隐患。

所谓剩余信息保护主要是指对用户使用过的信息,当该用户不再使用或者不再存在时,应当采取一定的措施进行保护。针对这一需求,已经有政府及信息安全组织将剩余信息保护划分安全等级并加入相关标准中,如美国国防部的《可信计算机评估准则》(TCSEC,1985)、《信息技术安全性评估准则》(CC准则)中都对剩余信息保护进行了一定的描述[2]。我国2008年颁布的GB/T22239-2008《信息技术信息系统安全等级保护基本要求》[3]以及JR/T 0060-2010《证券期货业信息系统安全等级保护测评要求》[4]行业标准中,将剩余信息保护加入三级以上的要求。

随之而来也提出了多种符合标准的剩余信息保护实现方式,但由于这些方式都是单一的采取覆写[5]的方法实现,对于大文件来说,这些方法的性能受到了限制。因此,本文提出了一种基于LKM的加解密的剩余信息保护方法。

1 现有安全删除方式分析

剩余信息保护有覆写、消磁、销毁三种方式。对连续运行的操作系统,消磁、销毁的方法虽然对数据的销毁比较彻底,但由于在消磁、销毁过程中存在费用和环保等因素,因而基本是不可行的。为此政府安全部门提出的剩余信息保护都通过多次覆写的安全删除来实现,如:

1) Guttmann Method[6]:重写数据区35次,只考虑数据销毁的彻底性。

2) US DoD 5220-22.M[7]:美国国防部《清理和消毒标准》中的一部分,对所要清除的数据区进行三次覆盖。

3) US National Security Agency(NSA) guidelines:利用随机数覆写7次。

以上的三种方式都是采用0、1或随机序列直接进行多次覆写[8]。针对这些方法相关人员开发了一些对应的安全删除工具,如secure delete安全删除套件(支持磁盘和内存中数据的安全删除)、wipe(支持磁盘上的安全删除)等。这些方式核心实现均是直接采用多次覆写方式,无论是磁盘数据还是内存数据。当用户需要安全删除一个文件或者目录时,直接调用相关的命令进行删除操作即可。

针对这几种工具,经过调研测试,发现其都是用户态实现,有多次上下文切换和数据拷贝的消耗,并且随着覆写次数增多及文件的增大,均会产生了严重的耗时问题。本文选取工具secure delete套件进行磁盘文件安全删除性能测试比对,如图1所示。

由图1可以发现同一个文件随着覆写次数的增多,所耗费的时间呈线性增加;同样的覆写次数,文件越大覆写耗费的时间越大。

图1 secure delete磁盘覆写耗时对比

2 相关技术

2.1 系统调用劫持技术

Linux系统调用[9]发生时,CPU从用户态切换到内核态并执行int 0x80汇编指令产生一个软中断,也就是执行中断向量表IDT中的第0x80号中断处理函数,从而跳转到system_call()的入口。该函数检查EAX寄存器中的系统调用号,然后在系统调用表sys_call_table中找到与系统调用号对应的内核函数的入口地址,从而执行相应的内核函数。系统调用劫持[10]就是通过修改系统调用表sys_call_table中对应内核函数的地址,以达到劫持的作用。

出于安全的考虑Linux 2.4版本以后的内核,不再导出sys_call_table,也就是无法在内核模块中直接使用,并且sys_call_table所在的内存页是只读的。对于这两个问题,内核中均可以通过一定的方法予以解决。问题一可以通过从/proc/kallsyms内核符号表中获取到sys_call_table的地址。问题二可以通过lookup_address()找到对应的虚拟地址所在的页表地址,然后根据需要重新设置地址对应的页表项的读写属性。

系统调用劫持的整个过程都是通过LKM[11](Loadable Kernel Modules)实现的,它是一种可加载的内核模块程序,可以动态的扩充内核的功能,即在Linux操作系统运行过程中就可以添加新的功能,不需要重新编译内核。

2.2 eCryptfs加解密技术

eCryptfs是在Linux内核2.6.19中引入的一种堆栈式加解密文件系统,插在VFS(虚拟文件系统层)和下层真实物理文件系统之间,支持内核版本2.6.19后的所有Linux文件系统,为应用程序提供动态、高效、透明和安全的加密功能。它已经合并到内核主分支中,对于目前主流的Linux操作系统都是通用的。其数据的加解密都是通过调用内核加密API来实现,其过程对用户完全透明,并且每个文件都对应一个独有的加密密钥[12]。

使用eCryptfs透明加解密文件系统,会将文件的加密元数据和文件的内容存储在一起[13],每个文件在底层分为文件头和数据本身两部分。文件头中记录该文件的加密元数据信息,数据本身即已被加密数据的密文内容,底层文件存储格式如图2所示。

图2 eCryptfs底层文件格式

3 设计与实现

3.1 设计概述

本文根据剩余信息安全标准和现有的实现方法,设计了一种可以提高安全删除速度并且符合安全标准的剩余信息保护方法。主要由系统调用劫持和覆写两个部分组成,均以LKM的方式实现,使得所有的操作完全工作在内核态,对于用户而言是完全透明(用户无感知)的,不改变用户的使用习惯,内核模块实现可以动态地加载与卸载,对于目前主流的Linux操作系统都是可通用的。在指定策略(指定目录、挂载点或全部的删除操作)下的所有文件数据都生效,其框架模型如图3所示。

图3 结构框架

用户态下使用rm命令发起删除文件的请求,陷入内核,调用对应的内核系统调用进行删除操作。可以使用strace命令跟踪查找内核系统调用对应为unlinkat,也就是删除文件最终会调用内核函数unlinkat实现。因而可以对unlinkat系统调用进行劫持修改,添加安全删除逻辑。

系统调用劫持部分:在请求陷入内核后不是直接调用unlinkat进行删除操作,而是定义自己的安全删除函数,判断发起的请求是否是指定策略目录中的文件,可能只是一个普通的删除操作,并不需要安全删除。若请求的是要安全删除的文件,然后通过Linux内核中存放系统调用与相应的服务例程的系统调用表sys_call_table,就可以获取到原始的unlinakt系统调用的地址,再将其替换为自定义的my_unlinkat函数,无论用户态应用是通过系统命令还是函数接口的方式来请求删除文件,最终都会调用自定义的my_unlinkat来实现文件的安全删除操作。

覆写部分:针对较少IO操作的大文件场景,添加eCryptfs加解密模块。首先使用eCryptfs对指定挂载点或者目录中的文件进行透明加密,然后在删除时就可以根据底层文件存储格式的不同,对文件头和文件密文分别进行不同次数的覆写操作,以达到高效的安全删除效果。具体的文件覆写操作,由于涉及到加密后文件头和密文位置的定位问题,可以直接使用eCryptfs中的写操作函数eCryptfs_write对文件头和文件体进行不同粒度的同步覆写操作,从而完成安全删除中最重要的覆写部分。对于常规场景来说,文件的覆写操作直接调用通用的内核write函数全文覆写即可。

3.2 实 现

为了验证本文提出的磁盘剩余信息保护方法的正确性,根据给出的框架模型进行实现。基本的流程如图4所示。

图4 删除处理流程

整体安全删除处理流程描述如下:

1) 应用程序发起删除文件的请求,通过rm命令陷入内核,调用unlinkat系统调用。

2) 拦截系统调用unlinkat,判断是否满足自定义的策略(指定后缀、目录或者进程),满足则需要安全删除,进入自定义的安全删除逻辑,否则调用原始的unlinkat进行文件删除操作。

3) 文件名可能会暴露信息,对其进行随机命名操作。

4) open打开文件,获取文件描述符号,使得文件的引用计数i_count不为0,从而可以在后续成功删除文件后根据文件描述符对文件进行覆写操作。

5) 获取到文件描述符后,调用原始的unlinkat对文件进行删除操作,删除成功则进行覆写,否则rename文件为原始文件名,然后退出。

6) 成功删除文件,若是通用文件场景,调用常规内核write()函数进行全文覆写操作;若是较少IO操作的大文件场景,则调用ecryptfs中的函数ecryptfs_write()对第5步获取到的文件描述符进行写操作,实现对文件头和文件体不同粒度的覆写。文件头存储有加密相关的元数据信息,并且占用空间少,可以进行较多次数的覆写,以提高密钥的安全性;而文件体存储的就是文件本身的密文数据,占用空间较多,因而进行较少次数的覆写操作。从而整体上提高安全删除的性能。

4 实验分析

4.1 实验环境

为了验证本文所提出的磁盘剩余信息安全删除方法,设置实验环境如表1所示。

表1 实验环境和工具

4.2 测试方法

为了测试该方法的正确性和可用性,先进行正常文件删除的恢复以验证本文提出的方式的正确性,然后使用传统的安全删除工具和本文提到的方式进行数据的安全删除性能的比较。

正常的文件删除,由于没有使用随机字符进行覆写,因而使用表1中提到的数据恢复工具extundelete(有多种数据恢复工具,本文采用extundelete进行实验,其他方式等同),对其进行恢复,可以正确恢复出已删除文件中的数据,并可以查看到文件的内容也是正确的,如图5所示。

图5 正常文件删除恢复

接下来挂载本文的LKM程序,对其正确性进行测试,由于在删除文件前对文件数据使用随机字符进行了多次的覆写操作,因而使用extundelete数据恢复工具是不能正确恢复出原本的文件数据的,如图6所示。

图6 本文方式的删除恢复

由图6可知,恢复出的文件内容为随机字符,并且文件名也被随机字符覆写了。由此可见,本文提出的方式是正确的。

传统用户态实现方式需要频繁地在用户态和内核态进行上下文切换,并且还需要进行缓冲区覆写数据的多次拷贝,这两个过程都是非常耗时的。而本文的方式是基于LKM实现的,不仅可以减少读写函数的上下文切换,而且还可以减少覆写数据的拷贝次数,整体来说性能有所提升。接下来通过多场景实验来比较两者的性能差异。

针对通用的文件删除场景,选取10 MB大小的文件,分别使用本文提出的方式和现有同类型应用(secure delete、shred)进行相同次数的覆写操作,其性能对比如图7所示。

图7 通用场景性能对比

针对较少IO操作的大文件场景,选取250 MB大小的文件,分别使用本文提出的方式和现有同类型应用(secure delete、shred)进行性能对比。为了最大化地确保两种方式具有相同的安全性,对本文提出的方式中数据量较小的文件头部分采用和同类型应用同等次数的覆写操作;文件体以加密后的密文数据形式存在,为提高剩余信息安全删除整体的性能,使得数据量大的文件体部分的覆写次数比现有同类型应用secure delete、shred的覆写次数少一次,保证了本文实验的安全性至少不低于同等次数的传统方式。其性能对比结果如图8所示。

图8 大文件场景性能对比

由上边两个性能对比图可知,不管是本文提出方式的通用场景还是大文件场景明显都比现有同类型应用secure delete、shred耗费的时间更短,因此本文提出的方式是可用的,其性能是有所提升的。

接下来对于加解密本身与文件的一次覆写的性能消耗进行测试,如图9所示,当文件小于200 MB时加密操作比覆写一次稍微耗时一点,但是随着文件的增大(>200 MB),覆写一次的时间消耗逐渐的高于加解密操作。因而,对于本文中的大文件且IO少的场景来说,加密操作本身的性能消耗是可以忽略的。

图9 覆写与加解密性能对比

最后,利用LTP(Linux Test Project)系统测试套件对正常Linux操作系统和挂载了本文中实现的内核模块的Linux操作系统分别进行系统稳定性测试,如图10所示,两者之间稳定性基本持平,因而本文提出的方案的在系统中是稳定的。

图10 系统稳定性对比

5 结 语

本文提出了一种基于LKM的加密剩余信息保护方法,并且可以只对指定策略(目录、挂载点、以.doc为后缀等)的文件进行安全删除。不仅对用户透明,而且还可以减少上下文的切换和数据的频繁拷贝次数。通过该方法可以有效提升文件数据的安全删除性能,满足了剩余信息保护标准。剩余信息不仅存在于磁盘中,而且也存在于内存中,本文中实现了磁盘中的剩余信息保护,对于内存中的剩余信息还无法做到,因此内存中的剩余信息保护是下一步的研究重点。

[1] 李杰.面向安全删除的Flash数据加密存储机制研究[D].解放军信息工程大学,2015.

[2] 中国国家信息安全测评认证中心 GB/T 18336-2001,信息技术安全性评估准则[S].中国:国家质检总局,2001.

[3] 公安部信息安全等级保护评估中心 GB/T 22239-2008,信息安全技术.信息系统安全等级保护基本要求[S].中国:国家质检总局,2008.

[4] 中国证券监督管理委员会 JR/T 0060-2010,证券期货业信息系统安全等级保护测评要求[S].中国:中国证券监督管理委员会,2011.

[5] 卢兴华,刘增良.数据残留与安全删除方法研究[J].微计算机信息,2005,21(33):11- 13.

[6] Gutmann Perter.Secure Deletion of Data from Magnetic and Solid-State Memory[C]//San Jose,California:The Sixth USENIX Security Symposium Proceedings,1996:77- 90.

[7] US.NISPOM-DoD 5220.22-M,National Industry Security Program Operating Manual Chapter 8[S].US,January 1995.

[8] Bauer S, Priyantha N B. Secure Data Deletion for Linux File Systems.[C]// Usenix Security Symposium, August 13- 17, 2001, Washington, D.C. Usa. DBLP, 2001.

[9] 牛晗晖.Linux系统调用及其安全测试自动化的研究[D].北京交通大学,2009.

[10] 耿显虎.Linux下LKM安全的分析与改进研究[D].电子科技大学,2008.

[11] 徐伟, 贾春福. 扩充Linux系统功能的LKM技术[J]. 计算机应用研究, 2003, 20(4):100- 102.

[12] 唐晓东, 付松龄, 何连跃. 基于eCryptfs的多用户加密文件系统设计和实现[J]. 计算机应用, 2010, 30(5):1236- 1238,1242.

[13] 易争鸣.基于ecryptfs的GPU加密文件系统的研究与实现[D].兰州大学,2014.

猜你喜欢

调用内核加密
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
保护数据按需创建多种加密磁盘
电力安全防护加密装置
核电项目物项调用管理的应用研究
微软发布新Edge浏览器预览版下载换装Chrome内核
系统虚拟化环境下客户机系统调用信息捕获与分析①
加密与解密
SQL server 2005数据库加密技术