看雪论坛的各位朋友们大家好,我们是来自于美国加州大学河滨分校(University of California, Riverside)的钱志云老师安全研究小组,去年我们曾在论坛上发表了题为“安卓一键Root软件揭秘和海外留学机会”的帖子(http://bbs.pediy.com/thread-212575.htm),分享了我们2015年的CCS论文,并且表达了我们希望看雪论坛上有志于从事安全研究的各位朋友能够加入我们研究小组的愿望。去年的帖子发出后,得到了论坛管理员的大力支持和大家的热情回应,钱老师也先后收到了许多朋友的联络邮件,我们慎重地结合多方面因素进行考虑,最终成功地通过看雪论坛招收到了一名优秀的同学加入我们。在此我们对大家的积极支持和参与表示诚挚的感谢!
我们要介绍的漏洞存在于一个ION所管理的内存堆-CMA堆上。CMA的全称是Contiguous Memory Area (连续内存区域)(https://lwn.net/Articles/486301/),这个区域是一片被系统保留的连续的物理内存,其存在目的是为了给有需要的硬件设备提供连续的物理内存,这样一来,在硬件设备需要时,系统就不必费力地从所有可用内存中寻找物理地址连续的区域,而只需要简单地从CMA区域中划分出一块即可。听起来很有效率,但是这其中还有一个问题,那就是并非在系统运行的所有时间都会有硬件设备需要大量的物理连续内存的,很有可能在很多时间段内,CMA区域处于不被需要的空闲状态。这样的话,假如我们从一开始就将CMA区域划分为保留区(只接受硬件设备的内存请求,而不对一般的用户进程开放),那么显然这将是一种内存资源的浪费(硬件设备不需要使用,一般用户进程又无法使用)。为了解决这个问题,CMA机制被设计为在空闲时刻也允许一般的用户进程使用,但是一旦硬件设备有需求,则硬件设备具有高优先级,可以抢占式地分配CMA内存,而此时CMA区域中正在使用的属于用户进程的物理页面内容则会被系统复制到其他CMA区域之外的物理页面上(整个过程对用户进程是透明的,因为在物理页面复制后系统只需要简单地更改页表映射关系,用户进程看到的虚拟地址保持不变)。因为这样的特性(用户进程在CMA区域的物理页面有可能会在某个时刻被复制出去),所以一般而言,系统不会轻易为用户进程分配来自CMA区域的内存(因为稍后可能的页面复制会带来额外的开销),而只有当其他正常内存区域的空闲内存不太够的时候才会考虑CMA区域。
以上是对CVE-2015-8950漏洞原理和利用的介绍,该漏洞是我们在研究Android ION系统时发现的一个主要漏洞,而实际上ION系统在设计和实现上还存在着其他很多问题(如拒绝服务漏洞),在深入研究ION内存管理系统的基础上,我们将这些发现汇集在一篇论文中(Android ION Hazard: the Curse of Customizable Memory Management System),并发表在2016年CCS会议上,我们将论文附在帖子之后,感兴趣的朋友可以下载阅读,如有任何问题也欢迎和我们交流。
技术分享部分之后,我们循例附上钱志云老师2018年度的招生启事:
Dr. Zhiyun Qian at the Computer Science and Engineering department in University of California Riverside is hiring multiple motivated PhD students in the area of system and network security. Qian's work has led to security flaws discovered in Android, Linux, Mac, and firewall vendors such as Check Point. The projects are not only published in top-tier security conferences but also frequently covered by major tech news. More details can be found in his webpage is at http://www.cs.ucr.edu/~zhiyunq/
Any students with strong background on the system and/or networking knowledge, or with good programming or reverse engineering skills are encouraged to apply. Security background, static or dynamic program analysis, or formal verification experiences are not required but big pluses. If you are interested in practical security problems and enjoy hacking, the position would be an excellent fit. Students with Bachelor or Master degrees are both welcome to apply. All applications need to be submitted through the official admission website. However, if you have questions or are really interested in the research topics and want to introduce yourself, you can drop your CV and transcript (unofficial is fine) at zhiyunq@cs.ucr.edu.