时序安全属性检测(一)

      程序的“时序安全属性(temporal safety properties)”是描述“某些坏的事情不会发生”的一类属性.通常,时序安全属性规定了一系列有序的事件,要求在程序中不能发生这些事件.在程序中,它表现为一系列先后有序的操作(通常是和安全相关的操作,至少有一个是这样的,不然不会发生安全问题)。

      例子:

      下图展示了一个时序安全属性的例子。在某进程调用系统调用chroot限制其访问在一子文件系统后,必须、立即紧跟一个对chdir的调用,更改进程的工作目录到这个子文件系统中。如果没有这个调用,如b所示,则事实上当前目录仍然是/var/ftp,某恶意的用户有可能请求程序打开文件"。。/。。/etc/passwd"(这里,输入../..总是显示网站的名称,用中文的代替了)并获得成功,这样就对系统的安全造成了威胁。

      自然地,可以想到,对时序安全属性的刻画,可以采用有限状态自动机FSA(Finite State Automaton)表示,如图中a所示,每个圆圈代表一个状态,双圆圈表示进入了危险状态,这应该是被避免的,也是我们检测的内容,边上的标志表示执行的操作,系统通过执行相应的操作状态发生改变。

实际的系统中,通常会有很多和时序有关的安全属性,而且涉及很多系统调用和变量的变化,因而得到的FSA也是很庞大的(即所谓的状态爆炸)。这些调用之间又是过程间调用,调用的关系可能是非常复杂的,以至于超出了我们人工控制的范围。因此,如果靠人工检测一个系统的时序安全属性,将是十分低效、辛苦的,正确性也得不到保证。

由自动机理论,知FSA可以用正则文法来表达,这样为我们检测时序安全属性提供了编程基础。

posted on 2010-04-27 18:32  小交响曲  阅读(341)  评论(0编辑  收藏  举报

导航