本系列是自己水过的一些项目,现在发上来共享下。

1.需求分析:

1、强制性加解密

根据文档密级规则,用户身份,动态地、强制性地对电子文档进行加解密(保存的时候加密存盘、打开的时候解密打开),不需要由终端用户来判断这个文档是否需要加密;不改变用户正常的工作习惯。

在内网使用者使用时,加密的文档与非加密文档,应该有一种显著的识别方式(易于让使用者区分);

一定程度上,防止加密文档的数据内容复制。比如通过截屏、粘贴板等方式复制数据内容;

支持在指定经过认证的计算机终端进行文档解密,方便文档外发管理。

支持txt、word、ppt、excel、cad等常见文件格式类型;

在文档的加密标记中GUID值确定本文档的加密层级,同时设定为关键进程(加密进程)的程序只能用来编辑加密文件。

采用RSA公钥密码体制进行密钥交互,使用RC4流加密算法进行文档内容加密,对于不同密级的文档,有不同的公钥,用户在开始编辑文档时候,客户端自动将私钥加密传送到驱动层。驱动层使用公钥进行文档加密,使用私钥进行文档解密(公钥存放在程序中,暂时认为是固定不变的)。

在用户使用机密进程期间,如果发生用户使用剪贴板或者截屏方式(假设截屏所生成的文件保存在剪贴板中),系统通过对剪贴板进行实时监控的方式防止恶意用户将机密文件中的内容拷贝到非机密文件中。

由于文档使用公钥加解密,在指定受限主机上直接对机密文件使用私钥解密即可获得正常文档,方便文档外发管理。

机密进程名

文件类型

notepad.exe

txt

winword.exe

doc/html/txt/rtf/xml/dot

tmp/docx

excel.exe

xls/xml/mht/htm/html/xlt

cad.exe

cad

powerpnt.exe

ppt/tmp/rtf/pot/ppsm/mht/mhtml/htm/html/pps/ppa/pptx/potx/ppsx/mh_/ht_

 

2、文档保护

当文档流转到外部系统时,未经授权用户打开文档将以乱码文件形式展现,无法识别。

有效保护:防止文档内容在使用的过程中被轻易的以明文方式流出。

文档仅允许指定应用程序打开,防止恶意程序打开后,通过其它未能控制的方式泄漏信息

针对系统采用休眠时,将数据带出的情况,应当采用有效的方式控制

加解密驱动只安装在受信客户端上,保证只有内部安装了透明加密驱动的客户端有能力编辑加密文件。

在使用过程中暂不考虑HOOK与恶意过滤驱动的情况(假定本机杀毒软件可以进行安全清理),对于Windows独有的内存映射文件机制,我们采取及时刷新系统缓存的技术。

文档仅允许指定应用程序打开,在IRP_MJ_READ、IRP_MJ_WRITE等的预处理函数中,会自动对于打开进程名进行解析,若不符合预定的机密进程名则设置IoStatus.Status为STATUS_ACCESS_DENIED并且直接返回FLT_PREOP_COMPLETE,即拒绝对文件的操作。

而对于恶意程序伪装机密进程的行为,我们交给上层应用软件完成,对程序做HASH值并与原HASH值进行对比,若存在差异则也是返回拒绝操作。

当系统处于休眠状态前,系统会自动将内存中的数据写入到硬盘上,针对这种情况,在每次计算机休眠前我们会自动关闭文件并且释放StreamContext。

3、身份鉴别

需要一种有效的身份鉴别方式,以防止不同系统部署之间的身份混乱或角色冒充。(通常采用数字证书)

对于确有需要移动办公的, 可以对移动笔记本进行相关的认证,并可在非可控范围内,受限的使用指定的文档。

能够对文档的使用期限或打开次数做出限制。超期的或者超出打开次数的,应当不允许使用;

对于任一客户端发放一张绑定本地MAC地址的数字证书,客户端向服务器发出申请,服务器端对于客户端的数字证书进行验证并决定是否传送私钥(暂不考虑客户端与服务器端安全通信问题)。

对于文档的受限打开,即对于移动笔记本客户端(服务器在发放数据证书的时候会记录是发给PC还是笔记本的),传输的私钥的结构体中设置参数UseCountActiveTime,记录私钥可以用来使用的次数与使用时限,实现了对于打开次数的限制。