OSX被动Fuzz框架

###1. 这是什么?

本框架基于内核模式中的被动 inline hook机制,主要用于fuzzing OSX内核漏洞。

简单来说,这是一个典型的内核驱动,它inline-hook了与IOKit框架和内核服务相关的导入API。

如果内核发生了crash,你可以收集内核dump文件来重现漏洞。

你可以关注我的twitter:@Flyic (of moony li) 来获得更多详细信息。

我们将会在东京的PacSec 2016(10.26/10.27) 大会上,进行“Active fuzzing as complementary for passive fuzzing”的主题演讲,这之后,才会公布相关源代码。

PacSec Applied Security Conference: Tokyo, Japan

这个被动fuzzing框架是基于fG! 所写的针对OSX平台的

“the_flying_circus”Rootkit。在此特别感谢fG!

(A Mountain Lion rootkit for Phrack #69! Copyright (c) fG!, 2012, 2013 - reverser@put.as - Reverse Engineering and Security for fun and pleasure! All rights reserved.)

###2.运行要求

原则上,这个被动fuzzing框架支持Mac Pro/Air上的普遍OSX版本。

根据我们的经验,从10.11到10.11.6的内核版本对被动fuzzing几乎没有干扰。

这个框架已在Mac Pro,10.11.6,KDK_10.11.6_15G31.kdk上测试。

###3.如何使用?

重要提示:

运行内核驱动会导致内核突然崩溃,使得你失去所有的数据。请自行承担使用这个内核驱动的风险。

####3.1 快速开始

如果你只是为了好玩而尝试这个被动fuzz,请按照这样快速操作:

a. 加载快速被动fuzz的驱动

sh-3.2# chown -R root:wheel ./quick-pasive_kernel_fuzz.kext

sh-3.2# kextutil ./quick-pasive_kernel_fuzz.kext

b. quick-pasive_kernel_fuzz会在内核模块中出现

sh-3.2# kextstat

然后你就会在内核模块列表中看到这个驱动

####3.2使用ThunderBolt线进行调试的完整调试

这个开始引导适用于任何运行Mac OSX系统的机器(例如:MacPro, MacAir, Mac Mini)

这个方案要求需要另外一台被调试用的OSX机器和额外的ThunderBolt线。

ⅰ.在被调试的OSX机器上

a. 准备KDK和nvram

Ⅰ.下载KDK_10.11.6_15G31.kdk(以这个KDK为例)并且安装在你的Mac电脑上。

Ⅱ.将kernel.development拷贝到系统目录文件夹并且同步内核缓存

sh-3.2#cp -fr

/Library/Developer/KDKs/KDK_10.11.6_15G31.kdk/System/Library/Kernels/kernel.development* /System/Library/Kernels/

sh-3.2# kextcache -invalid /

sh-3.2# reboot

Ⅲ.设置用以调试的启动参数

sh-3.2# nvram boot-args="debug=0x566 kdp_match_name=firewire fwkdp=0x8000 pmuflags=1 kext-dev-mode=1 -v"

sh-3.2# reboot

b.加载用来被动fuzzing的内核驱动

sh-3.2# chown -R root:wheel ./pasive_kernel_fuzz.kext

sh-3.2# kextutil ./pasive_kernel_fuzz.kext

c.你的Mac可能会在等待进一步调试时发生内核崩溃

ⅱ.在OSX主机上:

重要提示:

请保持ThunderBolt始终连接在两台机子上,因为即插即用(PnP)机制不支持已崩溃的内核。

a.准备KDK

1.下载KDK_10.11.6_15G31.kdk(以这个KDK为例)并且安装在你的Mac上。

这个步骤不是必须的,但是我们强烈建议这样做。在接下来的步骤中调用lldb,lldb会在调试主机和被调试机间匹配*.dSYM符号文件。否则,在你的调试过程中,符号信息不会显示。

b.调试已崩溃的目标机

Ⅰ.启动fwkdp服务

flyic-pro:pasive_kernel_fuzz.kext root1$ fwkdp

Ⅱ.lldb 调试

sh-3.2# cd /Library/Developer/KDKs/KDK_10.11.6_15G31.kdk/System/Library/Kernels

sh-3.2# lldb ./kernel.development

(lldb) kdp-remote localhost

The debugger would wait until the target machine crashes, and then you can type any command for debugging including collect core dump file.

####3.3 使用有线局域网进行完整调试

因为只有老式的OSX机器支持有线局域网(例如:旧的MacMini),所以这种类型的调试并不普遍。

等待被完善。

文章首发于看雪安全论坛
原文链接:GitHub - SilverMoonSecurity/PassiveFuzzFrameworkOSX: This framework is for fuzzing OSX kernel vulnerability based on passive inline hook mechanism in kernel mode.
译者:银雁冰

1 个赞