—144—
Linux
文件加
/
解密过滤驱动的设计与实现
戴 浩,刘嘉勇,方 勇
(四川大学信息安全研究所,成都 610064)
摘 要:应用 Linux 内核中的系统调用劫持技术和模块动态装载机制,研究与开发 Linux 下的文件过滤驱动。通过对文件标识的注入与识
别,采用 blowfish 加密算法,设计和实现内核级的文件加/解密服务,并对软件的性能进行分析。结果表明,在内核级增添软件功能,可以
提高软件的运行效率,而计算机主机系统的安全性在内核机制的安全保障下得以增强。
关键词:过滤驱动;系统调用;内核
Design and Implementation of Filtering Driver Based on
File Encryption/Decryption Under Linux
DAI Hao, LIU Jia-yong, FANG Yong
(Information Security Research Institute, Sichuan University, Chengdu 610064)
【Abstract】With Linux system call interception and loadable kernel module technique, the file filtering drive is studied and developed. And a file
encryption/decryption server is implemented using blowfish algorithm on kernel-level about file filtering drive and its analysis of performance is
p
resen
t
ed. The result shows that, if the software functions are added to kernel-level, the kernel mechanism greatly improves the operation efficiency
of the software and enhances the safeness on Main Machine System(MMS).
【Key words】filtering drive; system call; kernel
计 算 机 工 程
Computer Engineering
第 35 卷 第 9 期
ol.35 No.9
2009 年 5 月
Ma
V
y
2009
术·
文章编号:1000—3428(2009)09—0144—03
文献标识码:A
中图分类号:TP393.08
·安全技
1
概述
随着
Linux
操作系统在计算机应用中的日益发展,对数
据的加密保护已经成为越来越重要的日常事务。为了防止计
算机主机系统中的敏感数据泄密,用户通常会寻求一种高质
量的、需要最少额外需求的方法来保护自己的数据信息。
Linux
操作系统在设计之初并没有像
Windows
操作系统那样
预留了文件过滤驱动层,因此,
Linux
下过滤驱动的相关研
究成果还不多。文献
[1]
提出了一种在虚拟文件系统层上实现
的加密文件系统。文献
[2]
提出了一种基于
NFS(Network
Filesystem)
的加密文件系统。由于它们都实现为复杂的文件
系统,不利于在其他文件系统上的扩展加密,使得开发商并
不能将之灵活地应用到各种商业文件系统中去。对于用户来
说,系统的性能至关重要,而加密的耗时性就必然促使开发
商既要提高系统的性能,又要避免开发一种新的文件系统所
耗费的大量资金。本文以内核可装载模块方式开发
Linux
下
的文件过滤驱动,不仅给众多商业文件系统提供了增强功能
的新方法,而且可以在不需要更改底层文件系统驱动的情况
下,完成对现有文件系统功能的扩展。通过文件过滤驱动,
在内核级提供文件的加
/
解密服务,既提高了服务性能,又得
到了内核机制的安全保障,从而,增强了计算机主机系统的
安全性能。
2
文件过滤驱动模块的相关技术
2.1
系统调用劫持
在
Intel x86
系统上,每一个系统调用都是通过
int $0x80
这条软中断指令,促使系统切换到内核态执行第
128
号异常
处理程序
system_call()
。对于一种系统调用,系统会赋予一
个独一无二的可以关联到系统调用的系统调用号,并通过
eax
寄存器传递给内核,内核记录所有已注册过的系统调用,并
存储在系统调用表
sys_call_table
中
[3]
。
在
Linux
系统中,如果要在内核中劫持系统调用,就需
要修改
sys_call_table[]
中相应的入口地址。
Linux
上劫持系统
调用的一般方法参见文献
[4]
。
2.2
文件的加密与解密
为了防止机密数据被非法用户拷贝到非本地主机,避免
应用级加密对系统所带来的负担,在文件过滤驱动模块中增
添加解密功能,可以大大提高读写速度,而且无须设计自己
的文件系统来实现加密数据的存储。在模块投入运行过程中,
可以利用系统调用劫持技术,拦截用户的写请求,将普通文
件、目录文件等加密存储于磁盘上,而当合法用户的读请求
到来时,拦截读请求,解密数据
(
对于非法用户不予解密
)
。
本文选择
blowfish
加密算法
(
一种可变长密钥
64 bit
块加
密系统
)
。相对于
DES
算法的庞大和慢速,它具有快速、简
洁和开源性,更适合
Linux
下的软件开发。算法可分为密钥
扩展部分和数据加
/
解密部分,密钥扩展部分最多可用
448 bit
可变密钥长度,这里选择密钥长度
128 bit
,加密块
4 096 Byte
。
2.3
文件标识的注入与识别
当用户需要对涉密文件应用保密策略时,软件会自动创
建
cryptinfo.txt
文件,并将用
blowfish
加密算法加密后的涉密
文件的
i
节点号写入
cryptinfo.txt
文件中。当内核模块取得加
密后的
i
节点号后,对其解密,这样内核模块就能够通过文
件的
i
节点号识别出需要保密的文件。保密策略的安全性很
作者简介:戴 浩(1983-),男,硕士,主研方向:信息处理与信息
安全;刘嘉勇,教授;方 勇,副教授、博士
收稿日期:2008-10-08 E-mail:dhajj3344@163.com