标签归档:安全操作系统

OSS实验 隐蔽通道场景演示

花了两天时间,搞定了OSS课程的一个实验。由于对linux环境不熟悉,所以被vi,gcc折腾的够呛.. 实验的要求是选择一个已经标识的隐蔽通道,通过在SecLinux环境中进行实际编程(C语言),完成发送程序、接收程序的编写,并进行收发场景的实际效果演示。 什么是隐蔽通道呢?简单的说就是允许进程以违反系统安全策略的方式传递信息的信道。一般而言,有存储隐蔽通道和时间隐蔽通道两种。 在具体的实验环境中有这样2点约束: (1)高级用户可以读低安全级文件,但是不能创建低安全级文件,也不能通过拷贝等方式向下传递信息。【不可下写】 (2)低级用户无法读高安全级文件。【不可上读】 那么高级用户要把机密信息传递给低级用户,就只有通过隐蔽通道,绕过OS的DAC,MAC机制。通常可以选用进程标识符、文件最近访问时间,消息队列等信道,这里我选择文件最近访问时间这一隐蔽通道来实现场景演示。 如何选择文件最近访问时间作为隐蔽通道呢? 首先,我们需要明确每当用户进程访问一个文件时,系统内核都会更新该文件的最近访问时间。并且根据系统的安全策略,允许高安全级用户读低安全级的文件,低安全级用户的可以察觉到这种访问。 如此一来,高安全级用户可以读取机密文件,根据该文件内容的当前字节的2进制位信息决定怎样访问的低安全级用户的文件,而低安全级用户则可以检测到哪些文件的最近访问时间被修改,从而还原出高安全级用户发送的字节。 例如假设低安全级用户创建了b1到b8一共8个文件,高安全级用户读取到“A”,“A”的ASCII码为65,即01000001,因此高安全级用户访问b1和b7两个文件。低安全级用户检测到b1和b7的最近访问时间变化了,而其余文件的最近访问时间不变,故可以还原出01000001,即可得到“A”。 可见,上述利用最近访问时间的方案是非常直观的,主要瓶颈在于最近修改时间只能精确到秒,所以一定程度上使得此信道的传输率较低。思路是清晰的,道路却是曲折的。在实现过程中,需要考虑发送端和接受端的同步,以及重传纠错机制,增强程序的健壮性。 下面给出具体实现的有限自动机说明: 发送端: 描述: S1: 发送端启动,检测start文件是否存在,若存在则进入S2,若不存在则停留在S1。 S2: 读取机密文件dataIn一个字节,判断是否EOF,若是则进入S3,若不是则进入S4。 S3: 修改end文件的最近访问时间并结束。 S4: 先修改byteBegin文件的最近访问时间,再根据读入的字节的2进制位信息修改对应的b1–b8的最近访问时间,最后修改byteEnd文件的最近访问时间,并进入S5。 S5: 检测temp文件的最近访问时间是否更新,若更新则进入S6,若未更新则停留在S5。 S6: 判断temp文件中写入的数据是否为刚才发送的一个字节。若是则修改right文件的最近访问时间,并进入S2读取下一个字节;若不是则修改wrong文件的最近访问时间,并进入S4重传。 标签:安全操作系统, 源代码, 隐蔽通道

发表在 学无止境 | 标签为 , , | 13 条评论