`
xitong
  • 浏览: 6197490 次
文章分类
社区版块
存档分类
最新评论

linux的lsm--TCB组成部分的新视角

 
阅读更多

可信路径的一端是任意用户,另一端是TCB,这条路经要做到尽可能短,从而加大消息在中间被拦截的难度,事实上,可信路径上的消息时不能被拦截的,否则就不叫可信路径了,可信路径的一端必须是绝对可信的,我们称为TCB,也就是可信计算基,然而TCB并不仅仅存在于可信路径的另一端,TCB是一整套安全环境的总称,包括很多元素,比如硬件隔离机制,OS内核的一切组件,事实上,TCB是一个抽象的概念而不是一个形象的实体,在linux中TCB还包括所有的suid程序,也就是说,TCB的元素一定是可以信任的,如果想让操作系统绝对安全,仅仅有一些可以信任的“基”还不行,虽然“基”是可以信任的,那么谁能保证调用“基”的程序是正常调用呢,如果一个恶意的程序调用了TCB,那么后果一样是很严重的,因此作为TCB本身的组成部分,有一个叫做访问控制监视器,这个监视器的作用就是监控任何受控调用比如系统调用的合法性,比如对于sys_mount来讲,访问监视器判断调用进程能否进行mount操作。
可悲的是,很多的操作系统并没有实现这个访问监视器,操作系统几乎在一开始设计的时候是不考虑安全的,而只考虑功能和效率,很多设计者都将安全这件事寄托给了硬件机制,比如Intel的rings以及arm的特权模式等等,事实上这种寄托很不严格,毕竟硬件的实现千差万别,设计者往往在出现了具体问题的时候才会考虑加入安全控制机制最终使得操作系统内核的代码杂乱无比,因此操作系统需要一个更加一致的TCB,便于实现统一接口下的不同实现以及扩充新的安全策略。如果实现了这么一个接口一致,仅仅实现的机制的安全控制机制的话,那么可以说TCB包含了三部分,一个是寄托给硬件的那部分(所谓的内核模式),提供OS作为服务提供者的保护机制,一个是访问监视器,就是上面说的那个一致的接口,另外一个是用户空间的一些门(gate)程序,对于linux来讲就是suid程序。现在看看linux的lsm,它实际上就是一个访问监视器框架,然后你可以用任何方式实现它,用访问监视器的视角来理解lsm的话,可以很清晰的弄明白为什么它的调用点存在于一个地方而不是另一个地方。lsm提供了两种实现访问监视的方式,一种是单独模块的方式,这种方式下只要你提供了一个lsm实现并且注册了它,那么就不能再注册第二个了,也就是说系统中只允许注册一个lsm实现,另一种方式是堆栈模块的方式,security_operations本身提供了register_security回调函数,任何一个lsm实现都可以重载这个回调函数以允许系统中存在很多lsm实现,从而实现串行的访问控制过滤。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics