SDC相当于给文档增加了一层保护外壳,它将文档数据和安全属性进行严格的加密封装,对上层应用透明。SDC实质上可以看作是在终端计算机中动态构建的一个虚拟的进程隔离运行环境,对访问保护文档的进程实施文件访问、网络访问和进程间通信等三方面的监控。进程只能在SDC中使用解密的文档数据,所有试图将访问的数据写到不可信存储区域或者发送给不可信进程的操作都将被禁止。因此,不论是授权的正常用户,还是获取用户授权的非法进程,都不可能将保护文档泄漏出去。
SDC自身的完整性以及数据加解密密钥由底层TPM模块提供保证。终端系统中的进程访问文档时,SDC主动检测文档相关的使用环境,包括系统平台、硬件平台和加解密密钥等,并对用户或进程进行身份验证,确保文档被授权用户在可信的环境中使用,并且使用方式必须符合数据保护的预期。
SDC实施的检查流程如下:
1) 通过可信计算平台模块TPM验证自身是否完整可信?如果不可信,则拒绝对文档的访问;
2) 检查访问文档的用户是否可信?如果不可信,则拒绝解密文档;
3) 检查访问文档的进程是否可信?包括进程的身份和行为(如读、写、复制、另存、网络发送、打印和解密等);
4) 检查文档当前所处的环境是否与预期的一样。这种环境包括文档所在的终端系统,物理存储设备,是否具有对应的存放密钥和证书的安全硬件(如USBKEY)等;
SDC通过上述各方面的检查,可以确认“谁于何时何地对其进行了何种操作”,保证文档的可信授权使用。
2.2 安全数据容器框架
SDC主要是为数据使用构建一个虚拟隔离环境。图2给出了一个SDC的实施框架。
图2 安全数据容器框架
数据对象(Data Object)是一个抽象概念,它既可以是一段数据内容,也可以是原来的一个数据文件,甚至可以认为是一个存有数据的存储设备。而SDC相当于为数据对象增加的安全保护外壳,通过透明加解密提供数据的安全存储,并通过进程隔离确保数据对象的可信使用。其主要功能说明如下:
(1) 进程隔离:SDC通过监控网络,磁盘文件和进程间通信,对与数据对象关联的进程实施隔离控制,防止进程将获取的文档内容泄露出去,因此包括网络隔离、文件隔离和进程通信隔离;
(2) 透明加解密:通过底层透明加解密以及与TPM相关的密钥管理提供安全可靠的数据存储;
(3) 证书密钥管理:通过与TPM通信,对身份和数据加密密钥相关的安全证书进行管理和维护;
(4) 环境验证控制:动态检测当前使用环境,并根据TPM中存储的环境相关证书进行验证;
(5) 自保护验证:安全容器作为数据对象的解释和数据安全控制的载体,首先必须保证自身的安全。SDC通过底层TPM模块对自身完整性进行验证。
从以上功能可以看出,通过底层TPM可以验证SDC的可信,而SDC通过透明加解密可以确保存储的可信,通过环境验证可以确保使用环境的可信,通过进程隔离可以确保文档使用的可信,从而构建从底层TPM到上层应用控制的信任链,不仅解决哪个主体(如进程),以何种方式访问和使用数据的问题,也从技术上保证了数据被谁使用和在什么环境下可以使用的安全问题,保证机密数据在安全可信域内被访问和使用。
3 文档主动防护模型的实现
文档主动防护模型实现的关键是隔离环境的构建与信任链的建立。根据文档视图的不同,可以在不同层次构建隔离环境。目前各种文档处理软件的设计大都是基于MVC(Model-View-Controller)模式[15]实现文档/视图的结构,图3是从访问控制的角度给出的文档视图结构示意图。扇区视图、文件视图和用户视图分别是底层数据通过磁盘驱动器、文件系统和应用程序进行解析处理后展现给上层的视图。
图3 文档视图结构示意图
为说明主动防护模型的实现,本文在文件视图层,基于微软的文件系统过滤驱动模型Minifilter 实现了一个虚拟的隔离环境,并将其应用到移动介质保护中,实现一个具有主动防护能力的安全U盘UTrustDisk。
3.1动态隔离文件系统的实现
Weiqing Sun[16]在Linux系统平台下基于单向隔离实现了一个隔离文件系统(Isolation File System, IFS)。IFS的主要目的是为了防止不可信软件对系统资源的完整性造成破坏,因此为保证一致性,在确认对文件的修改不会造成危害后还需要执行提交操作(commit)将修改同步到原文件中。而对于可能造成数据泄漏的写操作,直接禁止或者执行不带提交的重定向操作。
本文实现的动态隔离文件系统(Dynamic Isolation File System, DIFS)针对指定磁盘卷中的文档保护,在文件系统过滤驱动层进行控制。文件过滤驱动是位于I\O管理器和基本文件系统之间的过滤驱动,可以监控进程的所有与文件相关的操作请求(I/O Request Packet,IRP)。Minifilter框架为每种操作请求设定相应的回调函数,通过修改相应的回调函数可以对访问操作进行控制和重定向。主要实现的回调函数如表1所示。
表1 文件过滤驱动模块主要函数说明
应用程序在操作文件之前,首先都要发送IRP_MJ_CREATE类型的IRP以获取文件句柄。MJFSPreCreate和MJFSPostCreate函数中,根据当前请求的进程号和文件句柄建立进程与文件的关联链表。当有新的操作请求时,先判断当前进程是否关联到要保护的文件。如果没有关联,直接将操作请求发送给下一层文件系统。如果存在关联,则要判断当前操作文件的路径:如果该文件位于保护磁盘卷中,直接放行操作;如果其位于临时文件中,则通过重定向操作将请求重定向到保护磁盘卷中的临时区域;如果位于其他目录,则拒绝操作。IRP_MJ_CLOSE类型的IRP是在文件关闭时调用,根据当前请求的进程号和文件句柄将相应的关联节点信息删除。
(责任编辑:)