摘要
为了加深对OS X
系统在应用层堆内存分配的了解,对libmalloc
进行了阅读与理解。
- 加强对堆上内存分布的理解
- 遇到内存泄露问题需要处理时,对堆分配策略的了解,可以提高分析的速度与精确度
- 遇到堆内存漏洞利用时,可以更加清楚的理解
EXP
的原理,做出更精准的分析
阅读本文之前可以先稍微了解一下OS X
在堆上的内存处理的大致情况,点这里。了解大致情况之后,才能更好的理解源码的设计。
胸口写一个勇字
为了加深对OS X
系统在应用层堆内存分配的了解,对libmalloc
进行了阅读与理解。
EXP
的原理,做出更精准的分析阅读本文之前可以先稍微了解一下OS X
在堆上的内存处理的大致情况,点这里。了解大致情况之后,才能更好的理解源码的设计。
在研究Mach-O
的重定向相关内容时,就一定会遇到nlist这个数据结构,他定义在
在10.11.4
版本开始着手研究OS X
系统安全方面的知识,上周苹果发布了10.11.5
版本,10.11.4
版本的补丁中还有大量的漏洞没有研究完,又放出了新的版本,这里稍微做一下总结。
因为刚开始研究OS X
系统,花了一部分时间研究了mach-o文件格式的知识,在后续的漏洞分析中发现,mach-o文件的知识还不够扎实,还会有很多似懂非懂的问题。
主要分析了两个漏洞CVE-2016-1757以及CVE-2016-1749。两个漏洞一个是应用层一个是内核层的,在分析研究漏洞的过程中,也熟悉掌握了ida,bindiff,lldb等一系列工具的实际操作。在分析另外一个内核漏洞的过程中,发现在内核框架的掌握上有比较大的缺憾,所以花了大量的时间熟悉了内核开发与一些相关部分的源码,所以有半个月时间左右没有通过日志总结学习的小结,在10.11.5
版本的漏洞研究时将补充相关的内容。
通过对CVE-2016-1757的POC
进行分析,已经完全了解了这个这个漏洞的成因,这里带来其一个Exploit
的分析。
相关的poc
可以到我的github
上面获取
https://github.com/turingH/exploit
或者直接在google
的project zero
中下载。
https://bugs.chromium.org/p/project-zero/issues/detail?id=676&can=1&q=OS%20X&sort=-id
在计算机安全领域,沙盒(英语:sandbox,又译为沙箱)是一种安全机制,为运行中的程序提供的隔离环境。通常是作为一些来源不可信、具破坏力或无法判定程序意图的程序提供实验之用[1]#cite_note-1)。
沙盒通常严格控制其中的程序所能访问的资源,比如,沙盒可以提供用后即回收的磁盘及内存空间。在沙盒中,网络访问、对真实系统的访问、对输入设备的读取通常被禁止或是严格限制。从这个角度来说,沙盒属于虚拟化的一种。
沙盒中的所有改动对操作系统不会造成任何损失。通常,这种技术被计算机技术人员广泛用于测试可能带毒的程序或是其他的恶意代码[2]#cite_note-2)。
— 维基百科,沙盒 (计算机安全)
这样一段话说的已经很清楚了,关于在OS X
系统中沙盒的简单应用,也有文章解释过了,这些不是本文的核心内容,有兴趣的读者可以自行google
。
在OS X
以及IOS
系统中限制了进程对一些资源的访问权限,例如网络、某些特殊路径、文件的读写等等,限定了进程的一些行为,从而保证进程不会做出超越权限的操作。
分析CVE-2016-1757的EXP过程中,发现EXP通过对kextload程序的patch,绕过了OSX
对驱动扩展数字签名的检测,成功加载未签名的驱动扩展。
灵犀一指可攻可守,进攻时也是一指,是天下第一指法,与移花接玉这个天下第一掌法同样都是非兵刃的第一绝技
—陆小凤传奇
最近的10.11.4补丁修复了一个利用条件竞争获得代码执行权限的漏洞,经过对内核源码以及poc的理解之后,先对问题作出一个简单的分析。
研究OS X
安全方面的知识需要对mach-o
加载的流程需要有一个比较完整的理解,断断续续一个月的时间里面,通过对源码的阅读对mach-o
的加载有一个比较基本的认识,在遇到各个具体的问题是才能更好的理解和操作。
其他相关文章可以看这里,基本涵盖了从内核态到应用层的相关源码的简单分析。还有不足之处在遇到相关的问题时也会加到这一系列文章中。
1.mach-o加载流程学习-dyld对主image的处理流程
2.mach-o加载流程学习-dyld对依赖库的加载流程
3.mach-o加载流程学习-内核对mach-o文件的加载流程(本文)
通过一张图片,可以比较清楚的理解整个流程。