预计阅读本页时间:-
9.3.8 隐蔽信道
所有的关于形式模型和可证明的安全系统听上去都十分有效,但是它们能否真正工作?简单说来是不可能的。甚至在提供了合适安全模型并可以证明实现方法完全正确的系统里,仍然有可能发生安全泄露。本节将讨论已经严格证明在数学上泄露是不可能的系统中,信息是如何泄露的。这些观点要归功于Lampson(1973)。
Lampson的模型最初是通过单一分时系统阐述的,但在LAN和其他一些多用户系统中也采用了该模型。该模型最简单的方式是包含了三个运行在保护机器上的进程。第一个进程是客户机进程,它让某些工作通过第二个进程也就是服务器进程来完成。客户机进程和服务器进程不完全相互信任。例如,服务器的工作是帮助客户机来填写税单。客户机会担心服务器秘密地记录下它们的财务数据,例如,列出谁赚了多少钱的秘密清单,然后转手倒卖。服务器会担心客户机试图窃取有价值的税务软件。
第三个进程是协作程序,该协作程序正在同服务器合作来窃取客户机的机密数据。协作程序和服务器显然是由同一个人掌握的。这三个进程如图9-14所示。这一例子的目标是设计出一种系统,在该系统内服务器进程不能把从客户机进程合法获得的信息泄露给协作进程。Lampson把这一问题叫做界限问题(confinement problem)。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

从系统设计人员的观点来说,设计目标是采取某种方法封闭或限制服务器,使它不能向协作程序传递信息。使用保护矩阵架构可以较为容易地保证服务器不会通过进程间通信的机制写一个使得协作程序可以进行读访问的文件。我们已可以保证服务器不能通过系统的进程间通信机制来与协作程序通信。
遗憾的是,系统中仍存在更为精巧的通信信道。例如,服务器可以尝试如下的二进制位流来通信:要发送1时,进程在固定的时间段内竭尽所能执行计算操作,要发送0时,进程在同样长的时间段内睡眠。
协作程序能够通过仔细地监控响应时间来检测位流。一般而言,当服务器送出0时的响应比送出1时的响应要好一些。这种通信方式叫做隐蔽信道(covert channel),如图9-14b所示。
当然,隐蔽信道同时也是嘈杂的信道,包含了大量的外来信息。但是通过纠错码(如汉明码或者更复杂的代码)可以在这样嘈杂的信道中可靠地传递信息。纠错码的使用使得带宽已经很低的隐蔽信道变得更窄,但仍有可能泄露真实的信息。很明显,没有一种基于对象矩阵和域的保护模式可以防止这种泄露。
调节CPU的使用率不是惟一的隐蔽信道,还可以调制页率(多个页面错误表示1,没有页面错误表示0)。实际上,在一个计时方式里,几乎任何可以降低系统性能的途径都可能是隐蔽信道的候选。如果系统提供了一种锁定文件的方法,那么系统就可以把锁定文件表示为1,解锁文件表示为0。在某些系统里,进程也可能检测到文件处于不能访问的锁定状态。这一隐蔽信道如图9-15所示,图中对服务器和协作程序而言,在某个固定时间内文件的锁定或未锁定都是已知的。在这一实例中,在传送的秘密位流是11010100。

锁定或解锁一个预置的文件,且S不是在一个特别嘈杂的信道里,并不需要十分精确的时序,除非比特率很慢。使用一个双方确认的通信协议可以增强系统的可靠性和性能。这种协议使用了2个文件F1和F2。这两个文件分别被服务器和协作程序锁定以保持两个进程的同步。当服务器锁定或解锁S后,它将F1的状态反置表示送出了一个比特。一旦协作程序读取了该比特,它将F2的状态反置告知服务器可以送出下一个比特了,直到F1被再次反置表示在S中第二个比特已送达。由于这里没有使用时序技术,所以这种协议是完全可靠的,并且可以在繁忙的系统内使它们得以按计划快速地传递信息。也许有人会问:要得到更高的带宽,为什么不在每个比特的传输中都使用文件呢?或者建立一个字节宽的信道,使用从S0到S7共8个信号文件?
获取和释放特定的资源(磁带机、绘图仪等)也可以用来作为信号方式。服务器进程获取资源时表示发送1信号,释放资源时表示发送0信号。在UNIX里,服务器进程创建文件表示1,删除文件表示0;协作程序可以通过系统访问请求来查看文件是否存在。即使协作程序没有使用文件的权限也可以通过系统访问请求来查看。然而很不幸,仍然还存在许多其他的隐蔽信道。
Lampson也提到了把信息泄露给服务器进程所有者(人)的方法。服务器进程可能有资格告诉其所有者,它已经替客户机完成了多少工作,这样可以要求客户机付账。如,假设真正的计算值为100美元,而客户收入是53 000美元,那么服务器就可以报告100.53美元来通知自己的主人。
仅仅找到所有的隐蔽信道已经是非常困难的了,更不用说阻止它们了。实际上,没有什么可行的方法。引入一个可随机产生页面调用错误的进程,或为了减少隐蔽信道的带宽而花费时间来降低系统性能等,都不是什么诱人的好主意。
隐写术
另一类稍微不同的隐蔽信道能够在进程间传递机密信息,即使人为或自动的审查监视着进程间的所有信息并禁止可疑的数据传递。例如,假设一家公司人为地检查所有发自公司职员的电子邮件来确保没有机密泄露给公司外的竞争对手或同谋。雇员是否有办法在审查者的鼻子下面偷带出机密的信息呢?结果是可能的。
让我们用例子来证明。请看图9-16a,这是一张在肯尼亚拍摄的照片,照片上有三只斑马在注视着金合欢树。图9-16b看上去和图9-16a差不多,但是却包含了附加的信息。这些信息是完整而未被删节的五部莎士比亚戏剧:《哈姆雷特》、《李尔王》、《麦克白》、《威尼斯商人》和《裘力斯恺撒》。这些戏剧总共加起来超过700KB的文本。

隐蔽信道是如何工作的呢?原来的彩色图片是1024×768像素的。每个像素包括三个8位数字,分别代表红、绿、蓝三原色的亮度。像素的颜色是通过三原色的线性重叠形成的。编码程序使用每个RGB色度的低位作为隐蔽信道。这样每个像素就有三位的秘密空间存放信息,一个在红色色值里,一个在绿色色值里,一个在蓝色色值里。这种情况下,图片大小将增加1024×768×3位或294 912个字节的空间来存放信息。
五部戏剧和一份简短说明加起来有734 891个字节。这些内容首先被标准的压缩算法压缩到274KB,压缩后的文件加密后被插入到每个色值的低位中。正如我们所看到的(实际上看不到),存放的信息完全是不可见的,在放大的、全彩的照片里也是不可见的。一旦图片文件通过了审查,接收者就剥离低位数据,利用解码和解压缩算法还原出743 891个字节。这种隐藏信息的方法叫做隐写术(steganography,来自于希腊语“隐蔽书写”)。隐写术在那些试图限制公民通信自由的独裁统治国家里不太流行,但在那些非常有言论自由的国家里却十分流行。
在低分辨率下观看这两张黑白照片并不能让人领略隐写术的高超技巧。要更好地理解隐写术的工作原理,作者提供了一个范例,它包含有图9-16b中的图像。这一范例可以在www.cs.vu.nl/~ast/上找到。只要点击covered writing下面以STEGANOGRAPHY DEMO开头的链接即可。页面上会指导用户下载图片和所需的隐写术工具来释放戏剧文本。
另一个隐写术的使用是把隐藏的水印插入网页上的图片中以防止窃取者用在其他的网页上。如果你网页上的图片包含以下秘密信息:“Copyright 2008,General Images Corporation”,你就很难说服法官这是你自己制作的图片。音乐、电影和其他素材都可以通过加入水印来防止窃取。
当然,水印的使用也鼓励人们想办法去除它们。通过下面的方法可以攻击在像素低位嵌入信息的技术:首先把图像顺时针转动1度,然后把它转换为JPEG这样有损耗的图片格式,再逆时针转1度,最后图片被转换为原来的格式(如gif,bmp,tif等)。有损耗的JPEG格式会通过浮点计算来混合处理像素的低位,这样会导致四舍五入的发生,同时在低位增加了噪声信息。不过,放置水印的人们也考虑(或者应该考虑)到了这种情况,所以他们重复地嵌入水印并使用其他的一些方法。这反过来又促使了攻击者寻找更好的手段去除水印。结果,这样的对抗周而复始。