在MLS/DBMS的实际使用过程中,攻击者有可能构造一组表面上看起来合法的操作序列,将高安全等级数据传送到低等级用户。这种隐蔽的非法的信息通道,称为隐蔽通道。隐蔽通道传递1bit数据需要进行一系列的操作,不过由于计算机处理速度很快,还是可能导致大量的敏感数据信息泄露。进行隐蔽通道分析的目的就是要找到系统中可能存在的隐蔽通道,估计它的带宽并且采取消除和限制措施。
Tsai在1990年提出的隐蔽通道定义是目前为止使用最广泛的定义,定义如下:
给定一个非自主的安全模型M,以及系统对该模型的解释I(M)。在任何两个主体I(Sh)和I(Sl)之间的信道是隐蔽通道,当且仅当在模型M中,对应主体Sh和Sl之间的任何通信都是非法的。
这个定义将访问控制策略模型与解释分开,说明隐蔽通道根源于模型和解释之间的不一致性,阐明了隐蔽通道与各种访问控制策略的关系。具体来说,定义表明以下4点内容:
1)隐蔽通道与自主安全策略模型无关。隐蔽通道的定义中明确规定只针对非自主的策略模型。
2)隐蔽通道依赖于具体的非自主策略模型。一个信道是不是隐蔽通道,主要取决于策略模型是否允许两个主体通过这个信道通信。如果一个模型允许这样的通信,那么它就不是隐蔽通道,反之就是。
3)隐蔽通道既与机密性模型有关,也与完整性模型有关。对于非自主机密性模型的系统来说,隐蔽通道是从高安全等级向低安全等级的非法信息通道。类似地,对于非自主完整性模型系统来说,隐蔽通道是从低完整性等级向高完整性等级的非法信息通道。
4)隐蔽通道依赖于TCB规则。当改变TCB规则时,可能会消除或者引入隐蔽通道。例如,在多级安全数据库中,如果TCB规则规定在一个多级数据表插入了高等级数据后,低等级用户就不能改变表的模式,就会引入一个隐蔽通道。如果改变TCB规则,规定低等级用户任何时候都可以改变表的模式,就可以消除这种隐蔽通道。
根据隐蔽通道通信过程中是否使用了存储变量,信息在传递过程中是否失真,是否有多个信道共享同步信号等特征,可以对隐蔽通道实行不同分类。
(1)双向同步隐蔽通道和单向同步隐蔽通道
为了让一个进程通知另外一个进程已经完成了对一个数据的读或者写,在使用隐蔽通道传递信息之前,信息发送者和接收者之间必须规定好同步方式。根据发送者与接收者之间的同步关系,可以将隐蔽通道分为双向同步隐蔽通道和单向同步隐蔽通道。
如果一个隐蔽通道中除了包含一个传输用户数据的变量外,还包括两个同步变量:一个同步变量用于发送者到接收者的同步,另一个用于接收者到发送者的同步,那么这种隐蔽通道称作双向同步隐蔽通道。有些安全模型和它们的解释允许一类接收者到一类发送者的通信。这类系统中从发送者到接收者的同步也不可缺少,这种隐蔽通道称作单向同步隐蔽通道。
(2)存储隐蔽通道和时序隐蔽通道
一个信道中可以使用数据和同步信号两种变量。通常把同步信号变量和数据变量都是存储变量的隐蔽通道称为存储隐蔽通道。如果其中至少一个变量是时序变量就称作时序隐蔽通道。
存储隐蔽通道和时序隐蔽通道本质上没有区别,但是在实际使用过程中需要加以区分。两者的不同之处在于:存储隐蔽通道的发送者可以直接或间接地修改一个存储变量,接收者通过读取同一个存储变量获得信息。而时序隐蔽通道的发送者通过对使用资源时间的影响来发送信息,接收者通过观察响应时间的变化来接收信息。
(3)无噪声隐蔽通道和有噪声隐蔽通道
接收者收到的符号与发送者发送的符号完全一样的可能性为l的信道称为无噪声信道,否则称为有噪声信道。对于隐蔽通道来说,每个符号就是一个比特。对于无噪声隐蔽通道,不管系统中用户的行为如何,发送者可以保证接收者每次都能正确地接收到一个比特信息。
(4)聚集隐蔽通道和非聚集隐蔽通道
一个同步变量可以供同一对发送者和接收者之间的多个数据变量同时传递信息,这种信道称为聚集隐蔽通道,反之称为非聚集隐蔽通道。聚集隐蔽通道中不同的数据变量共同使用同一个同步变量的情况,会降低通信的同步对资源的消耗。
根据发送者和接收者读/写数据变量方式的不同,聚集隐蔽通道可以分为串行隐蔽通道、并行隐蔽通道和混合隐蔽通道。如果对所有的数据变量的读/写操作是按顺序进行的,那么这个隐蔽通道就是串行隐蔽通道。如果对所有的数据变量的读/写是由一组不同的发送进程和接收进程并行执行,那么这种隐蔽通道就是并行隐蔽通道。如果两者兼具的话,称为混合隐蔽通道。
分析隐蔽通道的基本步骤如下:
1)隐蔽通道分析前的准备。确定隐蔽通道分析的要求和目标,准备相应的系统文档,采用信息流分析技术,对系统文档进行依赖关系分析,并对所有标识的资源和资源属性赋予全等级。
2)识别隐蔽通道。根据依赖关系分析的结果,识别可能的隐蔽通道,确定潜在的隐蔽道是否有可能被实际利用。
3)评估隐蔽通道的带宽。通过信息论分析或实验测试,计算估测隐蔽通道的带宽。
4)处理隐蔽通道。对实际存在的隐蔽通道进行必要的限制和处理。
首先介绍进行隐蔽通道分析前的准备工作,包括隐蔽通道分析的目标和对象、依赖关系分析和安全策略扩展。
根据相关的评估要求,隐蔽通道分析的目标如下:
1)隐蔽通道的识别。寻找系统中存在的隐蔽通道,说明每个隐蔽通道通信的具体步骤。
2)确定隐蔽通道的最大可能带宽。在正确合理的假设下,通过信息论分析或实验测试,确定隐蔽通道的最大带宽。
3)处理隐蔽通道。根据评测标准的要求,采用消除、限制、审计等方式处理隐蔽通道。
4)编写相关文档。编写相关文档,说明系统中的隐蔽通道已经按照要求处理。
从最抽象的层次“系统的详细顶层规范”到最具体的层次“系统机器代码”等不同的层次,进行隐蔽通道分析。隐蔽通道分析的对象包括以下内容:
1)详细的顶层规范。(www.xing528.com)
2)TCB的源代码和机器代码。
3)系统参考手册。它包括TCB原语的描述、TCB的参数和CPU指令等。
在顶层规范中引入的隐蔽通道必然会出现在低层的设计中。如果要求对隐蔽通道进行彻底的搜寻,应该在源代码一级进行。但一般情况下,可以先对详细的顶层规范进行隐蔽通道分析。当发现可能存在隐蔽通道时,再进行代码分析,确认其是否是隐蔽通道。
依赖关系分析是采用信息流分析的观点,确定哪些系统输入或者系统状态信息,在哪些条件下流向哪些系统输出。下面介绍如何进行依赖关系分析,这里假设分析的对象是详细顶层规范。
(1)资源标识
依赖关系的分析需要确定TCB控制下的所有资源及其属性。一般情况下,存储资源比时序资源容易确定。在标识资源时,应该注意可能会导致其他操作执行时间变化的操作,且定义一个时序资源变量与这个操作关联起来。
一般采用的方法是通过分析详细的顶层规范,找出所有的非临时变量,这些变量的值能够在一个操作结束后到下一个操作之前保持不变。
因为时序资源变量较难识别,特别是在高层次的系统描述中,一般不会涉及时序关系的规定,所以,在寻找这类变量时,就需要注意那些可能会导致其他操作执行时间变化的操作,并确定引起执行时间变化的源资源变量,然后为这样的操作分配一个时序资源变量。
另外,还需要定义用户或系统的输入、用户或系统的输出两个伪资源。
(2)规范的分解
列出详细顶层规范的所有依赖关系,可以方便隐蔽通道的分析。在依赖关系分析中,目标资源变量是指操作要修改的变量,源资源变量是指目标资源直接获取信息的来源,条件资源变量是指修改目标变量操作的执行条件。这样就可以通过观察目标资源变量是否变化来推测条件资源属性的真假值。
一种常用的做法:首先根据操作列表,对每个操作引起的依赖关系进行分析,找出与每个操作有关的所有源资源变量、目标资源变量和条件资源变量。由于某些操作可能很复杂,所以需要进一步分解为最简单的依赖关系,每个依赖关系中仅包含一个目标资源变量,通常的步骤如下:
1)把规范分解为条件赋值语句。可以把系统规范或者程序代码中的语句分为条件判断语句和非条件赋值语句两类。非条件赋值语句的条件可以看做是永真的。条件表达式是一个比较特殊的可以影响目标资源的资源变量,因此可以通过条件语句中的目标资源变量推测到条件表达式中的信息。为了分析条件资源属性,条件表达式一般分为三种类型:第一种类型是无条件赋值语句,这时条件资源为true;第二种类型是根据条件表达式是否为真,执行不同的两个赋值语句;第三种类型是嵌套条件表达式。
2)标识条件赋值中的源资源变量和目标资源变量。
(3)规范分解的渐进分解策略
当系统比较复杂时,为了减少工作量,在第一遍分析时可以采用保守的策略,分两种情形:一个情形是子程序或者函数不涉及全局变量,最坏的情况就是它的所有输出与所有的输入有依赖关系;另一个情形是涉及全局变量时,只需根据实际情况把全局变量加入到源资源变量或者目标资源变量即可。如果采用保守的最坏分析,得到没有隐蔽通道的结果,那么可以肯定确实没有隐蔽通道。否则,需要对操作进行分解,直到确定没有隐蔽通道为止。
隐蔽通道分析的目的就是要找到违反安全策略的信息流信道。为了进行隐蔽通道分析,需要对所有标识的资源和资源属性赋予安全等级。但是有一些资源变量没有确定的安全等级,这时就需要对安全策略模型进行扩展,使得每个资源变量都有安全等级。对于安全策略已经明确要求和限制的情况,必须按照策略要求赋予安全等级,否则应该寻找一种赋予安全等级方法以尽可能避免隐蔽通道。
在依赖关系分析的基础上,确定哪些信息流是非法的方法很多,这些方法包括信息流分析方法、共享资源矩阵方法及非干扰分析方法等。下面简单介绍这3种方法。
1)信息流分析方法。信息流公式,也称为安全验证条件,一般用于对形式化的系统描述进行自动化的信息流分析。在依赖关系分析基础上,生成信息流的合法性公式,然后用定理自动证明工具证明这些公式是否成立。
2)共享资源矩阵方法。共享资源矩阵方法是一种被广泛使用的隐蔽通道分析方法。共享资源矩阵的每一行对应一个资源变量,每一列对应一个操作,矩阵中每个单元的值是R或M。其中,R表示对应的操作读对应的资源变量,M表示对应的操作执行完后,对应的资源变量值被修改。可以对共享资源矩阵进行细化,发现对应的系统是否存在安全漏洞,并进一步确定存在的安全漏洞是否可以被利用作为隐蔽通道。该方法应用范围广泛,对存储隐蔽通道和时序隐蔽通道的处理方式相同,不需要对TCB的内部变量赋予安全等级,消除了大量的伪非法信息流。但是,这种方法也有缺点:一是它不能证明单个的TCB原语是否安全;二是共享资源矩阵会发现一些伪隐蔽通道。
3)非干扰分析方法。这种方法的思想是如果一个用户看到的系统运行情况与另一个用户的操作行为无关,那么它们之间就不会存在隐蔽通道。这种方法的主要优点是分析结果中不包含伪隐蔽通道,而且可以进行递增的分析,即只需要对每个新增加的操作进行非干扰分析。其主要缺点是只能用于形式化的系统规范或者源代码,并且必须有自动化工具支持。
找到实际可用的隐蔽通道后,就可以根据计算或者测量获得该通道的带宽。
下面介绍基于信息论的带宽估计。为了估计最大带宽,假设在系统中同时只有两个进程:一个是隐蔽通道的信息发送进程,另一个是接收进程。这两个进程的同步时间可以忽略不计。在这种情况下,大多数的隐蔽通道都可以用有限状态机作为模型。通常的隐蔽通道采用只有两个状态的状态机来建模。
一个隐蔽通道的最大带宽可以由下式确定:
式中,Ni(t)表示从状态i开始,经过时间t最大可能的状态转移次数。一般地,有:
式中,n是状态数目;Tij是从状态i转移到状态j所需的时间。
非形式化的带宽估计。在没有其他进程干扰的情况下,有一种简单的最大带宽估计公式如下:
式中,n是不同状态转移的数目,对于两个状态的隐蔽通道通信模型,发送的代码为1或者0,则n=4;Ts(i)是状态i时设置一个符号的时间;Ts是设置一个符号需要的平均时间;Tr(i)是状态i时读取一个符号的时间;Tr是读取一个符号需要的平均时间;Tenv是通信环境建立时间;B(0)是隐蔽通道的最大估计带宽;b是编码因子,一般为1;Tcs是进程切换时间。
一般可以采用以下3种方法处理发现的隐蔽通道:
1)消除隐蔽通道。为了消除隐蔽通道,需要更换系统设计或者实现的方式。具体方法为通过预留资源的方法消除资源共享,取消或修改引起隐蔽通道的接口或机制。
2)限制隐蔽通道带宽。限制隐蔽通道带宽的具体方法包括增加每次传递一个符号的时间、增加信道噪声、限制每次可以传递的信息量等。当消除隐蔽通道不适合时,可以采用限制隐蔽通道带宽方法。
3)审计。为了防止对隐蔽通道的滥用,可以对隐蔽通道的使用进行审计,以便及时发现非法使用,并对其进行必要的处理。隐蔽通道的审计内容包括使用隐蔽通道的发送者和接收者、被利用的隐蔽通道。审计机制不能被绕过。需要注意的是,由于发送者可以使用加密的方法传输,所以审计方法不太可能发现隐蔽通道传输的具体信息。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。