微信号:gh_5d09761c59df

介绍:开测是以技术开放的心态,提供给中小开发者一个快捷完整的自动测试系统。

终端文件加密软件测试浅析

2016-11-25 16:50 文/wuhq

在风云突变的加密市场上,终端文件加密已经成为市场追逐的主流,各种加密软件在市场上角逐,希冀占领一席之地。快速提高用户体验和产品竞争力,提高加密软件的质量,成为厂家占领市场重中之重,这其中封堵密文破解和逃逸就成为厂家首要考虑的问题。鉴于密文破解和密文逃逸的重要性。笔者不才,根据多年测试密文破解和逃逸经验,和大家分享一下相关的心得和经验,希望对同学们和从事与加解密相关的同事有所帮助。

首先,来理解一下何谓密文,通俗的讲就是对于你不愿意让别人看到的数据,用可靠的加密算法,只要破解者不知道被加密数据的密钥和算法,对方就不可解读这些数据;不管作者是否愿意让用户(合法用户或 Cracker)看见这些数据,程序最终总要在机器上运行,对机器而言它就必须是明文。既然机器可以“看见”这些明文,那么 Cracker,通过一些技术和手段,也可能看到这些明文,造成密文的泄露。

从理论上而言,任何软件加密技术都不是铁桶一块,只是破解的难易程度不同而已。如果在产品设计之初没有考虑到涉密的环节,密文泄露将成为不可避免的挑战。针对加密技术破解,有的不费吹灰之力,有的要让最高明的 Cracker 忙上几个月几年甚至更长时间。关键的因素还是在于思路。

在阐述密文逃逸之前,先简单介绍一下驱动是怎么控制应用层的,供大家参考,有欠妥之处欢迎大家拍砖。

在操作系统中,文件的操作均通过文件系统进行,虽然不同的操作系统支持的文件系统不同,但对文件的访问方式基本相同,在Windows系统中,文件系统是以设备驱动程序形式存在的。Windows的设备驱动程序采用分层方式,允许在应用程序和硬件之间存在多个驱动程序层次,其中过滤驱动程序是一种特殊类型的中间驱动程序,它们位于其它驱动程序的上层或下层,截获发送给低层驱动程序设备对象的请求,在请求到达低层驱动程序之前,过滤驱动程序可以更改该请求,而低层驱动程序完全不知道在其上层驱动中发生的一切操作。在这个环节上,针对文件的拦截和破解有很多文章可做,如下图所示。


上图引用《现代密码学的理论

文件系统的这种组织结构决定了文档安全加密系统的实现方式,在数据从应用程序访问文件所经过的每个层次中,均可对访问的数据实施加密/解密操作:

  1. 层次I,可以获取应用程序自身读写的数据,其他应用程序的数据不经过该层,因此,在层次I中只能实现静态加密,无法实现动态加密(静态加密和动态加密的定义详见附录);

  2. 层次II,也并不是所有文件数据均通过该层,但在该层可以拦截到各种文件的打开、关闭等操作;

  3. 层次III和IV属于操作系统内核层,只有在层次III和IV中才能拦截到各种文件操作,因此,真正的动态加解密产品只能在内核层进行实现。


经过如上的简单了解,下面笔者通过几个例子来介绍下常见的几种由于设计考虑不周造成的密文泄漏场景:


场景一.    进程伪造

安全企业在设计加密文件格式时,一般都会在格式文件中插入企业标识的字头,通过文件字头来识别文件的加密情况。文件字头中通常含有该文件识别的进程标记,打开密文要以识别进程为前提条件。样本图示如下:



在应用层做文章的思路,通常会采用伪造进程方法。譬如:如果厂家没有对受保护的进程进行数字签名,用户采用假冒进程打开时,就可能导致密文被伪进程读取成功。用户通过伪进程识别的方式欺骗加密进程,以达到密文逃逸的目的。

合法进程签名后,系统可以识别到伪造进程,则动态加解密系统不会对伪造进程读取的文件进行解密。譬如:doc/docx格式的文件必须用word.exe 进程打开。如果word.exe进程没有做准入数字签名处理,就会造成很大的漏洞。

举例一:把notepad.exe进程修改为word.exe进程,如下图所示。通过仿冒的word.exe进程打开doc/docx格式的密文。如果终端进程被准入签名了(准入签名定义详见附录),伪进程在打开密文时就会校验失败,密文无法被打开。安全企业对这种进程校验方法,有种口语化的称谓:真的假不了,假的真不了。


 

举例二:飞鸽传书作为一款局域网即使通信软件,支持局域网内跨平台文字、文件、文件夹的高速传输,可以利用软件的文件识别发送功能,欺骗密文识别进程。方法如下:


因飞鸽传书程序自身有传递文件的特点,且进程保护不严格,修改飞鸽传书的进程用以伪造合法进程,采用下面的步骤,可验证漏洞是否存在:

  1. 修改飞鸽的进程名为密文进程。

  2. 通过自定义的飞鸽进程,在局域网内把密文发送到没有安装加密终端的机器上。

  3. 接收密文后,用密文的合法进程打开,如果可以无障碍的阅读,这个漏洞也就存在无疑了。


场景二.    劫持驱动和关闭

动态加解密一般可通过Hook或过滤驱动等方式嵌入到文件系统中,使其成为文件系统的一部分,从某种意义上来说,第三方的动态加解密产品可以看作是文件系统的一个功能扩展,这种扩展往往以模块化的形式出现,能够根据需要进行挂接或卸载。在测试这类驱动加密的软件时,就可以采用摘钩子或者却持驱动的方法让驱动停止工作,释放出对应用层的控制,然后在应用层把密文通过进程识别方法打开密文。

另一种可行方法,使用第三方工具把驱动层的控制强行关闭,达到新建文件不再加密,此方法在测试的时候为必须验证项,考验驱动的自我保护能力。

譬如常用工具:冰刃IceSword

        

在内核模块中,找到终端的驱动进程,强行结束,监测驱动是否可以自动被拉起。拉起失败,说明终端的自我保护失败。


场景三.    临时文件泄漏

Windows操作系统在读取文件时,会通过内存作为缓存。如果加密软件设计时,如果没有考虑到内存中和临时文件加密,那么透明加密文件在内存中和临时文件中会以明文形式遗留在TMP 目录中,在密文没有关闭之前,临时文件不会自动删除,将成为密文泄露的途径之一。

举例一:譬如WORD中的临时文件名称一般为~xxxx.tmp,文件在读取过程中会产生临时缓存文件,生成的临时文格式如下:

A) *~*.TMP 

B)*\~*.TMP

                   

举例二:

在Windows XP及其以后的操作系统中,增加了预读取功能,该功能可以提高系统的性能,加快系统的启动、文件读取的速度,这些预读文件保存在%systemroot%\Prefetch目录中,以*.pf为扩展名。在访问文件主体时,会产生各种临时文件,虽然这些临时文件在大多数情况下,会被应用程序自动删除,但某些情况下,会出现漏删的情况,即使临时文件被删除,但仍然可以通过各种数据恢复软件将其进行恢复。在实际应用中,这些临时文件一般不会被加密,从而成为信息泄密的一个重要渠道。更进一步,即使将临时文件也进行了加密处理,但系统的页面交换文件等(如Windows的Pagefile.sys等,除文件系统内嵌的加密方式外,第三方动态加解密产品一般不能对系统文件进行加密,否则会引起系统无法启动等故障)也会保留用户访问文件的某些信息,从而引起信息的泄密。

上诉两种场景,都是测试员必须要考虑和验证的对象,否则将成为密文泄露的途径之一,同时也是安全企业设计加密类软件必须要考虑和设计的环节。


场景四.    文件插入对象导致密文泄漏

office文档中插入对象,可以在一个文档中展示多种文件形式,该功能提供了插入文本文件、Word文档、音乐视频文件等各种文件,并且也都可以直接打开,这个功能对于我们需要嵌套某个文件的Word文档来说,非常的实用。

该功能方便用户的同时也带来了加密类软件的困惑,利用插入对象的方法把密文插入到明文中,脱离加密终端后,采用明文进程打开密文。

该场景在测试过程中要检查密文识别进程的校验情况。如果密文进程没有做合法校验,密文被作为对象插入到明文中,脱离加密场景后,将成为泄密的途径。

此外,还有一些其他方法作为参考,不再详细阐述。现列举几个,供其他同学在加密文件功能场景中参考:

  1. 邮件系统外发:如采用其它不常用的邮件系统等,进行破解的漏洞。

  2. 挖取内存法:通过内存识别工具从内存中提取读取到的密文,转存成明文。

  3. 管道重定向法:通过管道重定向,把密文导入到一个新文件中,脱离密文进程的保护,进行密文破解。

  4. Zip 包携带:将密文作为对象压缩打包到zip包中,携带出加密场景造成密文泄露。


加密软件逃逸测试方法作为辅助,主要目的是为了提高加密软件的质量,不以破解密文为目的。上述几种测试逃逸方法作为抛砖引玉,有些许心得和体会:

  1. 对于密文逃逸测试,不但需要测试人员不断的研究方法和多角度尝试,还要有灵活的头脑,开发出新思路。

  2. 不要局限于常规的测试方法,而止步不前,固步自封。想当然的认为某一种方法就应该是对的,实际执行起来,完全不是那么回事。

  3. 密文破解没有任何运气的东西存在,不要迷信那些所谓的大牛人物的不费出灰之力,更不要指望研发人员给你预留后门。

  4. 不断的提高自身的技能和专业水平,深入研究和学习加密原理,再加上测试人员的非常规思维,提高软件质量才能有据可循。


附录:(引用自360百科)

静态加密:是指在加密期间,待加密的电子文件处于已存在但未使用状态,操作者通过输入密码或密钥证书或数字签名等方式,对电子文件进行加密。加密文件使用时,需要操作者通过输入密码或密钥证书或数字签名等解密信息,在得到明文后才能使用。目前市场上许多应用系统中(如WORD的“加密文件”功能等)的口令或密钥证书功能,就属于这种加密方式。

动态加密:也称为实时加密或透明加密技术,是指电子文件在使用过程中,如新建文件、编辑文件,计算机自动对电子文件进行加密操作,无需操作者对电子文件进行人工干预。经过动态加密的电子文件,对于“合法”操作者来说,无需对电子文件进行解密即可使用,访问或操作加密文件与访问未加密电子文件操作动作相同。因此,对于“合法”操作者,经过动态加密的电子文件是“透明”的,好像没有进行过加密。而对“非法”操作者,即使通过其它渠道得到这些电子文件,由于电子文件经过动态加密,使其无法使用。即使能够打开电子文件,计算机界面上也只是一些“乱码”而已,更谈不上对电子文件进行阅读、编辑和打印。动态加密技术的主要特征为电子文件从创建开始,就处于加密状态,保存在计算机存储器中的电子文件也是加密的。

准入签名:通过控制台以进程ID作为唯一识别依据收集终端进程,将收集到的进程纳入白名单资源池,进程启动时先校验合法性,校验通过允许加解密,失败则视为伪进程或者无效进程。


 
开测 更多文章 直击jmeter源码结构与二次开发 LR实战-测试终端安全产品 服务端性能测试方案选型 浅谈NGD之云存储融合VDI、VOI Linux内核测试套件LTP初探-服务器篇
猜您喜欢 深度学习及其在淘宝图像应用探讨 GPS和WiFi位置时间攻击及防御 - 阿里移动安全BlackHat Europe议题 python程序员必备:bpython超级强大的Python Shell 手慢无|StuQ 邀你免费参加移动测试付费小班课首节预演 干货!差分信号之剖析与探讨