基于LSM的轻量级透明加密设计与实现
2014-07-18陈莉君于运超
陈莉君, 于运超
(西安邮电大学 计算机学院, 陕西 西安 710121)
基于LSM的轻量级透明加密设计与实现
陈莉君, 于运超
(西安邮电大学 计算机学院, 陕西 西安 710121)
为了防止数据失窃需要对敏感数据进行加解密处理,提出一种基于Linux安全模块框架的轻量级透明加密方法。该方法主要是对文件进行写操作时,使用LSM钩子实现对文件的加密操作;当用户试图读取文件时触发内核读系统调用服务例程并在该例程中实现文件的解密操作。测试结果发现基于LSM的透明加密在确保数据安全的情况下对读写性能影响不大。
数据安全;Linux安全模块(LSM);用户空间;透明加密
透明加密技术[1-3]是数据泄漏防护系统中常用的一种技术,用于实现对文件系统中文件的加解密操作。Windows上实现透明加密主要通过应用层和内核层实现。在应用层通过系统提供的钩子函数实现,当特定的消息发出后并且在没有达到目的窗口前,钩子函数率先捕获并进行相应的处理。内核层实现透明加密主要通过文件系统过滤驱动[4-5]来实现,对操作系统的I/O[6]进行拦截,从而进行相应的加解密处理。
借鉴Windows实现透明加密的思想,可以在Linux用户层和内核层实现透明加密。用户层实现主要考虑用户态与内核态切换时带来的时间上的损失,例如加密文件系统(Cryptographic File System,CFS)[7]就是在用户层面上实现的。相比来说,内核层实现在安全性与读写性能上都比较有优势。由于CFS运行在用户模式下,在上下文切换和数据在内核和用户空间交互时,带来性能上的损失,而透明加密文件系统(Transparent Cryptographic File system,TCFS)是CFS的扩展,只适用于2.2.17内核或者更早的内核,所以针对CFS以及其扩展TCFS文件系统的不足,将基于Linux安全模块(Linux Security Modules,LSM)的钩子技术与加解密技术相结合,实现一种内核态轻量级并且适用新内核的文件加密系统。
1 透明加密设计与实现
1.1 透明加密设计
基于LSM的透明加密是通过LSM框架加解密操作结合实现文件的透明加密。Linux安全模块是一种轻量级、通用的访问控制框架,适用于安全增强Linux(Security Enhanced Linux,SELinux)、Linux入侵检测系统(Linux Intrusion Detection System,LIDS)等访问控制策略,在它上面以内核可加载模块的形式实现[8]。在加密文件中结合LSM,可以更细粒度的对文件进行访问控制限制,从而更好的实现文件的安全。透明文件加密设计图见图1。
图1 透明加密实现
透明加密由LSM加载模块和内核修改两部分构成。在LSM加载模块里面完成对文件的保护。文件保护涉及到用户合法性判断、合法用户执行进程的合法性、执行权限的合法性以及加密操作。其对应的保护规则见图2。
图2 文件保护规则
文件的解密操作在内核实现。通过分析读系统的调用过程,找到执行磁盘数据拷贝到内核缓冲区的函数do_generic_file_read(),然后在该函数中添加解密操作。
1.2 透明加密实现
1.2.1 加密算法的选择
在对称密码体系里确保文件安全的因素是密钥的长度。密钥的长度越长,破解密码的时间也就越长。在确保安全性的同时也要提高算法的加解密速度。表1[9]给出了常用算法的加解密数据。其中Blowfish算法是一种分组密码,主要特点是快速、易于实现以及安全性可变;数据加密算法 (Data Encryption Standard ,DES)是以64位为分组对数据进行加密的分组算法;三重DES加密算法(Triple Data Encryption Standard,3DES)具有足够的安全性;DESX是DES的另一种改进,利用一个随机的二进制数与加密前的数据以及解密后数据异或;国际数据加密标准 (International Data Encryption Algorithm,IDEA)属于数据块加密算法;CAST是由Carlisle Adams和Stafford Tavares共同设计的一种分组算法;RC2是由密码学家Ron Rivest设计的一种传统分组加密算法,可以作为DES的替代算法。
表1 常用算法加解密数据时间 /s
通过表1可以看出,RC4算法[10]加解密速度最好,但是RC4是公钥密码中RSA[11]的演变,RC4算法的安全取决于密钥生成器生成密钥的随机性,如果生成的伪随机密码存在弱密钥,则会对算法安全构成很大威胁。所以选择高级加密标准(Advanced Encryption Standard,AES),该算法是典型的迭代式分组密码,其分组长度和密钥长度可以独立指定为128位,192位和256位。并且选择128位密钥需要进行10轮加密;选择192位密钥需要进行12轮加密;并且选择256位密钥需要进行14轮加密。
在每轮操作中主要执行以下几个函数:ByteSubs(state)将消息x与S盒进行字节代换操作;ShiftRows(State)对消息矩阵State做行移位操作;MixColumns(State)对消息矩阵做列混合操作;AddRoundkey(State,Roundkey)将消息矩阵State与轮密钥Roundkey进行密钥异或运算。
1.2.2 加解密实现
当用户要对文件进行写操作时,通过系统调用之后进行自主访问控制和LSM hook file_permission()实现更细粒度的权限检查,file_permission()钩子函数主要对打开文件的访问权限进行控制,函数执行过程如图3。
图3 file_permission函数执行过程
应用程序进行读数据时,由于不能从LSM框架内部获得加密数据,所以不能在LSM钩子函数中实现。通过两种方法解决,其一是系统调用截获,通过系统调用返回用户态之前截获解密消息并返回给用户[12],这样做利用了内核加载模块的漏洞,不是一个安全的方法。其二是修改内核,通过分析读操作系统调用服务例程SYSCALL_DEFINE3(read, unsigned int, fd, char __user*, buf, size_t, count)。内核对读操作处理也分为两种情况,其一是与存储介质直接交互数据,这种常见于数据库的应用,函数do_blockdev_direct_IO()是处理直接数据存储的函数。其二是读操作与系统中页缓存结合,要读取数据时,系统先在内核页缓存中查看是否有数据保存,如果缓存中存在,则直接返回应用程序,否则需要从磁盘获取数据并将数据存放至缓存中以备数据下次被访问。这种情况最终通过函数do_generic_file_read()读取数据并将数据发送到用户缓冲区。
2 性能测试
该系统的安全性已经通过选取的加密算法AES保证安全,接下来性能测试需要关注的重点就是加解密对文件操作延迟的影响。测试系统环境为4G内存,500G硬盘,CPU:Intel(R) Pentium(R) 2.60GHz,主要测试未加密的日志式文件系统EXT3[14](Third Extended File System)和实现透明加密的文件系统中读写速率。测试使用Linux下的dd块拷贝命令测试文件的读写速率。
要对写速率进行测试,可以通过
time dd
if=/dev/zero
of=test
bs=**KB
count=100
实现,同样使用
time dd
if=/dev/sda
of=/dev/null
bs=**KB
count=100
可实现对文件读速率进行测试。其中if=输入文件名,of=输出文件名,bs=bytes 读入/输出字节大小,count=blocks 拷贝blocks个块且每个块的大小为bytes字节。比如要对4M的数据进行写速率测试,只需使用
time dd
if=/dev/zero
of=test
bs=4KB
count=1024
测试读写速率时也可以使用FIO工具进行测试[13]。测试结果如表2所示。
表2 文件读写速率对比 /s
(1)通过数据发现文件的写操作时间明显大于文件读操作时间。这是因为在写文件时需要对文件进行同步加锁保护,防止多个进程同时对文件操作,破坏数据的一致性。所以在对文件进行大量写操作时会延长加密的时间。
(2) 对文件进行读写操作时,文件系统缓存机制发挥了积极的作用。比如对1024×4KB文件进行读操作时,第一次耗时0.0518s,第二、三次分别耗时0.0018s和0.0016s,相比第一次耗时减少,说明对第二次和第三次文件的读取使用到了文件系统缓存机制。适当的利用操作系统的缓存机制,在文件安全的前提下可以实现文件的快速操作。
通过对测试结果数据进行分析,在文件安全的情况下可以得出加解密对文件的读写时间影响是有限的,可以通过合理的使用系统缓存机制改善加解密带来的时间延迟。
3 结论
设计并实现了基于LSM的文件透明加密系统。该系统的实现降低了文件加解密的复杂度,避免了CFS上下文切换和数据在内核和用户空间交互带来性能上的损失。同时对文件元数据的加密操作,进一步提高了文件的安全,改善了TCFS未对元数据进行加解密的缺陷。通过性能测试,结果表明文件透明加密系统对文件操作影响不是很大,可以对核心文件进行加密处理。
[1] 邹家银,李培峰.透明加解密系统原理与实现分析[J]. 计算机与现代化,2012,199(3):86-90.
[2] Li Shaobo, Jia Xiaohui . Research and Application of Transparent Encrypting File System Based on Windows Kernel[C]//Computational Intelligence and Software Engineering(CiSE).Wuhan:IEEE, 2010:1-4.
[3] Lee Jacheung, Heo Junyoung, Park Jaemin,et al. Buffer cache level encryption for embedded secure operating system[C]//FIB International Conferenece on Embedded and Ubiquitous Computing, EUC Taipei,Taiwan:IFIP International Federation for Information Processing, 2007:346-355.
[4] 钱涛, 郑扣根. 驱动模式的Windows进程合法性验证[J].计算机应用, 2009, 29(12): 3398-3402.
[5] Xie Liling. Research and Application of theTransparent Docunment Encryption Gataway in Information Leakage Prevention[C]//Internet Technology and Applications. Wuhan: IEEE, 2010:1-3.
[6] 谭文,杨潇,邵坚磊. 寒江独钓:Windows内核安全编程[M]. 北京:电子工业出版社,2009:163-280.
[7] Blaze M. A Cryptographic File System for Unix[C]//Computer & Comm. Security. NY,USA:ACM, 1993:9-16.
[8] 苏锦绣.基于LSM的文件系统安全机制的研究[D].西安:西安邮电大学,2012:15-20.
[9] 刘富星,高辉.常用加解密算法及其时间分析[J].科技信息,2008(1):84.
[10] William S. 密码编码学与网络安全[M]. 刘玉珍,王丽娜,傅建明,等译.3版.北京:电子工业出版社, 2004:141-144.
[11] 范九伦,张雪锋,刘宏月,等. 密码学基础[M].西安:西安电子科技大学出版社,2008:77-82.
[12] 苏锦绣,陈莉君.基于系统调用的日志系统的设计与实现[J].西安邮电学院学报,2011,16(4):59-65.
[13] 陈莉君,王森,康华.日志结构云存储中缓存的设计与实现[J].西安邮电大学学报,2013,18(5):76-80.
[14] 金霞. EXT3文件系统结构研究及入侵检测的实现[D]. 郑州:解放军信息工程大学,2004:1-4.
[责任编辑:祝剑]
Study of transparent encryption technology based on LSM
CHEN Lijun, YU Yunchao
(School of Computer Science and Technology,Xi’an University of Posts and Telecommunications,Xi’an 710121, China)
A lightweight transparent encryption method based on the framework of Linux security modules (LSM) is proposed to meet the need for encrypting and decrypting on sensitive data from being stolen.The method uses the LSM hooks to encryption file while writing file, and triggers the kernel read system call service routine to decrypt file in the routine when user attempts to reading file. Testing results show that this method not only can ensure data security but also have little influence on reading and writing file.
data security, Linux security modules (LSM), user space, transparent encryption
10.13682/j.issn.2095-6533.2014.01.017
2013-10-24
陕西省教育厅基金资助项目(11JK1037)
陈莉君(1964-),女,硕士,教授,从事Linux操作系统研究。E-mail:cljcore@126.com 于运超(1987-),男,硕士研究生,研究方向为嵌入式系统设计与开发。E-mail: yuyun_chao@126.com
TP309.7
A
2095-6533(2014)01-0078-04
数中实现解密操作的主要流程都是一样的。先判断文件标志flags是否为1,如果为1表明要读取的文件经过加密操作,需要调用解密函数;否则直接读取并返回用户缓冲区。