软件的完整性保护问题
原创
©著作权归作者所有:来自51CTO博客作者wenbomao的原创作品,请联系作者获取转载授权,否则将追究法律责任
软件的完整性保护问题不仅是个老话题,也是当前的一个重要而未解决的问题. “重要而未解决”这一断言是以目前计算机网络病毒,恶意代码,流氓软件,木马程序肆虐横行的现实情况来佐证的. 的确,许多这一类的攻击手段都利用到了目前缺乏有效手段对软件提供完整性保护这一薄弱环节,使攻击者得以将一个本来语义或行为基本上正确或至少是非恶意的软件的代码部分篡改成错误的甚至是恶意的版本.
对于一般的用户级软件,完整性保护至少有两个方面需要防范:即,软件在内存中及在外存中都需要保护. 前一种情况是指一个软件的代码(包括有些数据)已经被加载入计算平台的内存中后,在执行的时候平台对内存内容实行完整性保护. 在这一情况下,软件完整性的定义是一个比较复杂的问题(例如需要区分软件代码的合法自身修改与被非法篡改,另外在内存中一个软件可以有动态联结部分). 所以目前在内存中对软件的完整性保护手段很有限. 我们在道里项目中也(暂时)回避了对用户级软件在内存中作完整性保护. 对于后一种情况,由于软件在外存(如磁盘)中的完整性定义要比在内存中的情况简单的多.就是指一般意义上的数据完整性,手段不外乎使用更改检测码(modification detection code, MDC, 可以用哈希函数来实现),所以保护手段就相对比较成熟. 目前在研究与实践中很热门的"可信计算"(Trusted Computing)方法就是将一个软件代码的MDC哈希值存入计算平台上的一个密码芯片中保护起来. 下一讲我会介绍可信计算技术并对该技术应用于保护软件在外存上的完整性给出讨论.
在"应用程序间的安全隔离问题(1,2)"系列杂文中我介绍过可以采用硬件虚拟化技术来实现用户程序之间,包括用户程序对操作系统的安全隔离.其原理是使用虚拟机监控器(Virtual Machine Monitor, VMM)来截获用户程序为请求使用物理内存时所发出的中断,从而能够为用户程序提供妥善的内存管理服务.由于VMM对中断的截获具有不可被旁路的性质,所以这样的内存管理具有强制性.也许我们会这样想:这种具有强制性的内存管理服务是否可被利用到对用户级软件在内存中进行完整性保护呢?这的确是一个很值得研究的课题.
可是我们要注意到VMM本身也是以软件的形式存在于一个计算平台的外存上,并服务于平台之内存中的. 那么该软件自身的完整性,或者说它所具有的强制性内存管理这一语义行为的正确与否又是怎样得到保护的呢? 对于VMM在外存上的完整性保护问题,我将在下一讲介绍可信计算技术时再作讨论. 至于该软件被加载入内存中之后的代码完整性,我想如下的观察应该是比较合理的:VMM是系统程序栈中特权级别最高的一个软件,一旦被加载入内存中跑起来之后便开始执行强制性内存管理,所以一个攻击软件在VMM的监控之下很难对VMM所使用的内存区域进行任何形式的访问.另外值得一提的是VMM的执行代码部分可以做成一个静态程序. 所以说VMM在计算平台内存中的完整性保护问题倒反而是一个简化了的问题. 这似乎是一个好消息,一个硬件虚拟化技术给软件完整性问题带来的好消息.
上一篇:可信计算技术(1)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章