文件落地是一个很场景化的描述,比如:微信收到了对方发来的一个Word文件;将U盘中的CAD图纸拷贝到了桌面……这些行为我们都可以理解为文件落地。如果站在技术角度来看待文件落地行为,我们可以理解为某个应用调用了(Nt)CreateFile创建了一个文件。在11月要发布的版本中,我们会引入对文件落地加密的支持,这个功能我们称之为:新建文件加密。
文档透明加密的核心逻辑是将指定进程配置为授信进程,授信进程创建的文件自动加密,打开文件则自动解密;其余非授信进程则不具备打开查看文件解密视图的能力。在此基础上衍生出来半透明加密的概念,即:打开文件自动解密,但是创建文件不加密。这里面的一个重要的概念是授信进程。文件落地加密功能与文档透明加密核心的不同之处在于,文件落地加密没有授信进程的概念,这个很好理解,因为我们无法控制,到底是哪个软件进程实现了落地,比如:浏览器、网盘、QQ、微信、迅雷等软件都可以下载一个文件,这个过程就是文件落地,但是我们无法把这些软件设置为授信软件。
因此,在策略的交互设置中,我们仅仅设置了:加密的路径、加密的文件类型、忽略的路径、忽略的文件类型。通过这些组合,我们实现了全盘或者局部的指定文件类型的落地自动加密。
文件落地加密在使用场景上是简单易理解的,但是在技术细节上,会有若干问题,下面我将对其进行阐述说明。
1、优先执行授信软件的规则行为,并且规则匹配成功后不再匹配执行新建文件加密规则。
举个例子,我们设置了如下语义的新建文件加密规则:
对在 D:\Test1 目录下新建 *.txt 文件进行加密;
对在 D:\Test2 目录下新建 *.log 文件进行忽略;
同时,我们的透明加解密核心设置了针对记事本(notepad.exe)操作 *.txt 和 *.log 文件类型透明加解密的规则。那么会有以下几个问题:
1、记事本在 D:\Test1 中创建了一个 *.txt 文件,文件是否会被加密。
答:会被加密。加密是因为匹配到了授信软件的规则。
2、记事本在 D:\Test1 中创建了一个 *.log 文件,文件是否会被加密。
答:会被加密。加密是因为匹配到了授信软件的规则。
3、记事本在 D:\Test2 中创建了一个 *.log 文件,文件是否会被加密。
答:会被加密。因为系统会优先执行授信软件的规则行为,哪怕新建文件加密规则设置了:在 D:\Test2 目录下新建 *.log 文件进行忽略。
4、非授信软件在 D:\Test1 中创建了一个 *.txt 文件,文件是否会被加密。
答:会被加密。因为触发了新建文件加密规则。
2、Ping32仅支持针对新建文件对象的连续写入进行加密。
举个例子,我们需要将 123456 这几个字符写入到一个txt文档中。
一般来说,软件的API执行流程是CreateFile -> WriteFile(“123456”) -> CloseFile,针对这种API调用顺序,Ping32可以正常加密。但是如果软件的API调用风格是这样的:CreateFile -> WriteFile(“123”) -> CloseFile -> OpenFile -> WriteFile(“456”) -> CloseFile。那么这个场景使用新建文件加密是不安全的。事实上,这种场景是理论不严谨、存在安全缺陷的,即使我们引入某些算法进行优化,也很难保证都能得到妥善处理。
3、Ping32不支持网络路径的新建文件加密。
无论是通过映射网络驱动器的方式,还是直接通过网络共享路径直接访问,即使规则对路径匹配成功,Ping32都不会对网络路径下的新建文件进行加密。这个行为是符合设计意图的,并非缺陷。
4、请勿设置 ‘针对全盘范围对常见的文件类型进行落地加密’ 这种过于宽松的规则。
比如:全盘范围,新建 *.png 类型文件进行加密。很多软件后台默认行为可能会随时产生*.txt、*.jpg、*.png等常见文件类型的临时文件,这个过程用户如果不借助专业的工具是无法察觉的,如果借助ProcMon则一目了然。如果对这些后台行为产生的文件落地加密,则可能导致软件工作不正常的问题。所以请勿设置过于宽泛的规则。如果由于宽泛的规则导致某个软件使用的文件被加密了,可以使用本地加密文件扫描工具扫描并解密。
5、某些软件下载接收文件时,在完成前,文件后缀可能并非是实际后缀。
相信很多人都注意到这个现象,比如某个软件下载一个 *.mp4 文件,在下载过程中即创建一个新的文件用来接收数据流,但是这个新的文件类型可能并非 *.mp4,有可能是 *.mp4.xltmp,针对这种场景,需要设置正确的文件类型。