UniSan:防止操作系统内核中由未初始化导致的信息泄漏
2016-02-05卢康杰
文/卢康杰
UniSan:防止操作系统内核中由未初始化导致的信息泄漏
文/卢康杰

卢康杰
佐治亚理工学院一名5年级计算机科学博士生,导师为Wenke Lee和Taesoo Kim。他的研究兴趣是发现并解决系统安全,软件安全,及手机安全领域的根本性安全问题。他的研究成果颇受学术圈认可,目前他已经发表8篇四大顶级安全会议的文章。
个人主页:
http://www.cc.gatech.edu/~klu38。
操作系统内核作为可信计算基(TCB),其安全性是至关重要的。为保证内核的安全性,多种安全机制已经被普遍应用,其中主要包括kASLR和StackGuard。然而这两种安全机制的有效性的前提是内核中没有信息泄漏。换句话说,如果有信息泄漏,kASLR和StackGuard将会变得没有意义,因为它们所依赖的一些随机值会被泄漏。那么问题来了,内核中是否存在大量的信息泄露?我们通过调研分析发现答案是肯定的:内核中存在大量的信息泄漏漏洞。比如,仅2013年就有近60个有CVE的Linux内核信息漏洞。随着进一步研究发现大部分信息泄漏(大约60%)是因为读取未初始化内存(uninitialized data read)导致,如图1所示。
可以想象一下,如果建立一个内存对象(memory object)但不去初始化它,那么读取这个内存对象所得到的数据将会是以前遗留在内存中的一些数据。如果这些数据包含kASLR随机过的地址,StackGuard使用的随机canary,或者是之前用户遗漏的密码等重要信息,那么就会造成这些重要信息的泄漏。而导致读取未初始化内存的原因又分为两种:程序员的疏忽和编译器的优化。编译器的问题导致了一个严重且普遍的问题:即使程序员初始化一个对象中的所有成员,仍然有一些字节没有被初始化。……
