OSX内核调试技巧分享

http://www.freebuf.com/articles/system/90049.html

熊猫正正2015-12-18共438557人围观 ,发现 15 个不明物体系统安全

原创作者:熊猫正正

一、前言

随着移动互联网时代的到来,android/ios系统已成成为当今客户端主流系统,不管是手机,平台电脑,还是其它各种智能,可穿戴移动设备,操作系统已经被android/ios占领大部分市场,随着市场份额份的不断增大,之前大部分瞄准windows系统的黑(灰)产人员也转移到了android/ios两大市场,根据《阿里移动发布2015第三季度安全报告》《2015年末最流行手机木马趋势分析报告》,可以看出最近几年android/ios的木马,漏洞不断增加,有利益的地方,就有人想从中获利,随着市场的越来越大,肯定会有越来越多的黑(灰)产人员想从中获利。

以前大家都觉得IOS系统很安全,其实从报告中可以看出,IOS系统也并非大家“想象”中的那么安全,其实国外一直有团队在研究OSX/IOS安全,国内这方面的人不太多,据我了解,现在公开研究IOS安全的团队:盘古、太极、KeenTeam等独立安全公司(不过,目前估计只有盘古没有被收购了,呵呵),其次就是360NirvanTeam团队(主要研究OSX/IOS系统,应用安全),阿里集团安全(IOS安全团队),腾讯各BG的一些IOS安全团队(比较分散,趋向于自己的部门的应用业务安全,对OSX/IOS内核研究方面不太多),以及还有现在新成立的一些小的安全公司,可能也会有一些IOS安全研究人员,相对于国内Android的安全研究,IOS安全研究显得不那公开,因为IOS系统源码未公开,研究起来比较麻烦,再加上设备要求比较高,导致这方面的研究人员不多。

最近IBM已经使用Mac作为办公用机,而且每年OSX系统的电脑售量不断上升,今后会有越来越多的人使用OSX/IOS系统的电脑(平板电脑),未来几年OSX/IOS的病毒木马,系统漏洞等一定会越来越多(个人想法),对于一名安全人员,对OSX/IOS系统必然要加强了解,以对应未来的OSX/IOS安全攻防战,虽然IOS系统,苹果没有开源,但是OSX系统的源码,苹果很早就开源了,而且IOS系统本身就是根据OSX系统编写的,我们可以先研究OSX系统,再来研究IOS系统,今天我就带大家一起搭建一个OSX内核调试环境,然后教大家如何进行简单的调试,致于能不能挖到漏洞就得多花时间研究了,祝大家玩的开心!

二、搭建OSX/IOS调试环境

搭建环境

1.系统OSX 10.11.2 (OSX EI Capitian)

2.KDK (Kernel Debug Kit 10.11.2 Build 15C50)

3.VMWare Fusion (Professional Version 7.1.3) 

操作步骤

1.在VMWare中安装OSX EI Capitian系统,安装过程,我就不多说了,按照安装OSX系统的步骤走完就好了,如图所示:

2.和以前调试Windows内核一样,我们在虚拟机安装好OSX系统之后,要如何对虚拟机中OSX系统设置呢?有没有啥参考资料呢?

其实苹果的官方文档就已经很充足了,苹果在这方面做的很不错,对开发者提供了非常全的官方指导文档KDK文档,我们可以从这里下载KDK,因为我们的操作系统为10.11.2,所以我们也要下载相应的KDK,如图所示:

下载完成之后,我们在VMWare和真机中都安装上KDK,安装目录在:

/Library/Developer/KDKs/KDK_10.11.2_15C50.kdk,里面会一个ReadMe.html,如图所示:

调试过Windows的内核的都知道,我们在调试开始的时候前,都需要下载Windows的符号表,我们这里可以直接把KDK里的kernel.development拷贝到/Systems/Library/Kernel中,但是因为我们使用的OSX EI Capitian系统,它使用了“rootless”的机制,导致我们拷贝的时候会失败,ReadMe.html中给我们提供了方法,关闭System Integrity Protection机制,步骤如下:

(1)重启OSX系统,然后按住Command+R

(2)出现界面之后,选择Utilities menu中Terminal

(3)在Terminal中输入csrutil disable 关闭SIP(csrutil enable打开SIP)

(4)重启reboot OSX系统

这样就关闭了SIP机制,如图所示:

然后我们再复制kernel.development到/Systems/Library/Kernel下,并调置系统调试参数,命令如下:

sudo nvram boot-args="debug=0x141 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"

boot-args:系统的启动参数

debug=0×141,表示系统可以进行远程链接调试

kext-dev-mode=1 表示系统可以加载未签名的kext(驱动程序)

kcsuffix=development 允许我们启动系统,通过development,与之前我们copy到/Systems/Library/Kernel下的kernel.development对应,如果我们之前拷贝的是kernel.debug,那么这里填kcsuffic=debug

pmuflags=1  禁定看门狗定时器

-v 调试内核的时候,对调试有帮助,可以显示一些有用信息

具体内容,可以参考Kernel Programming Guide,链接

最后我们还需要记注两样东西,方便我们进行远程连接调试,VMWare中OSX系统的IP地址和物理地址,可以通过ipconfig命令得到,如图所示:

ether:00:0c:29:d2:03:47 ip:192.168.117.132

3.最后我们需要设置sudo kextcache -invalidate /,让虚拟机中OSX系统的kext cache无效,使用新的内核调试,如图所示

4.虚拟机中的OSX系统内核调试环境已经设置完毕,因为我们的主机同样是OSX10.11.2系统,我们在主机上也安装KDK10.11.2,设置主机的arp指向虚拟机OSX系统的地址,方便我们进行链接调试,命令:

sudo arp -S 192.168.117.132  00:0c:29:d2:03:47

(这一步也可以不用设置,我们也可以通过设置虚拟机的启动参数进行设置,设置boot-args中的参数为DB_ARP就可以了)

5.上面的设置都完成了,我们的内核环境也就搭建成功了,那接下来我们要如何调试呢?Windows的调试有神器中windbg,那osx系统下有这样的调试工具吗?到目前还没有这种调试工具,但我们可以通过gdb/lldb进行远程连接调试,我这里用lldb(也许有人习惯gdb,不过在osx系统下,可能lldb更应合,必竟lldb就是苹果xcode自带的调试工具),下面我们来介绍一下OSX内核调试方法。 

三、OSX内核调试手法

1.启动lldb,然后创建OSX内核调试任务,如图所示:

2.然后重启我们上面设置好的VMWare虚拟机,它会提示等待远程调试链接,如图所示:

3.然后通过kdp远程链接调试目标:kdp-remote 192.168.117.132,然后虚拟机就会显示连接成功,等待调试,如图所示:

4.这时候,我们就可以做任何你想做的事了,调试任何你想要调试的东西,前段时间正好苹果开源了osx10.11的源码,我马上全部下载回来了,地址里面有xnu最新版源码xnu-3247.1.106(不得不吐槽一下苹果内核源码的版本号……),我这里随便举个调试例子,主要讲思路(授人以鱼,不如授人以渔),大家想调试什么就自己按我的思路去做就好了,比方我拿源码中security中audit比较感兴趣,里面有一个audit_syscalls.c源码,然后我给里面的一个函数下断点就好,命令如下:breakpoint set –name audit,audit的源码如下所示:

continue虚拟机OSX系统,它会就断在audit函数里,如图所示:

然后我们可以对照的源码进行调试了,里面有一个kauth_cred_get()函数,我们单步进入这个函数,如图所示:

同样源码我们可以从如下目录中找到,如图所示:

找到源码,找到kauth_cred_get(void)函数,如下所示:

这样我们就可以调试osx内核里的任何东西了,内核的东西都可以调试了,应用层的东西,还有什么不能做的呢?呵呵,相信对windows内核调试比较了解的人,对osx内核调试一定大为不爽,为啥它就没有一个osxdbg可以用呢?哈哈!!!

5.我们需要在要调试的地方下好断点,不然等我们继续执行的时候,OSX就会启动完毕,这里整个OSX内核就启动完毕了,如果需要再次调试OSX内核,则需要重启OSX系统了,如图所示:

到目前为止,整个OSX内核搭建与调试过程就介绍完毕了,其实也并不复杂,下面就可以干你想干的事了,至于LLDB如何使用,可以参考这里,能不能挖到好的漏洞,就得多花时间和你对OSX源码的熟悉程度了,多读源码,研究完OSX系统,IOS系统就可以通过同样的方式,进行调试了,只是它不是开源的,咱们只能用ida看ARM汇编代码进行调试,没有源码进行参照吧了,是不是很有意思,来吧,一起加入到OSX/IOS安全的队伍中,随着苹果市场的进一步扩大,针对苹果系统的病毒木马,漏洞也会越来越多,很多时候,也许你不知不觉你已经中了木马,只是你还不知道,Windows下的病毒木马,恶意程序已发发展了快二十年,但现在对未知木马的检测能力,国内的安全厂商也还是没有能力,更何况OSX系统下的病毒木马,就更别说“检测未知恶意样本”的能力了,现在大家又在聊啥,“动态感知”,“情报威助”,反正我是不太懂,因为我比较LOW,呵呵

四、展望与未来

随着苹果市场的越来越大,国内研究IOS安全的人也越来越多,同时因为IOS系统不开源的原因,研究它的人肯定会更多,一部分隐藏的黑(灰)人员早已将目光转向了OSX/IOS这块肥肉,在大家还没引起警觉的时候,他们已经收获了大部分Money在自己手中,将来随着苹果市场的进一步扩大,在移动智能设备,可穿戴设备,汽车,家用电器方面,苹果的渗入,相信这些人也一定早就开始打起这些设备的注意,在攻与防的世界中,对操作系统有一个充分认识,更好的保障用户的安全,面对这些威助,我们能做的就是加强自身的业务能力,能应对各种安全事件,只要有利益的存在,就一定攻与防,不要太相信OSX/IOS系统,你能保障,你的Mac系统(Mac Book Pro、Air、Iphone、Ipad、iMac)中目前就全是安全的?说不定,你的信息早已被盗,设备早被控制,只是你不知道吧了,哈哈,最后,欢迎大家与我交流,本人主要研究客户端恶意程序,应用系统安全方面。

*本文作者:熊猫正正,本文属FreeBuf原创奖励计划,未经许可禁止转载

这些评论亮了

发表评论

已有 15 条评论

  • 听鬼哥说故事 (1级) 2015-12-18回复1楼

     

    给力的正正

    亮了(7)
     
  • bingghost (1级) 2015-12-18回复2楼

     

    围观 板凳 虽然不懂

    亮了(3)
     
  • 骗子 2015-12-18回复3楼

     

    正正牛逼

    亮了(4)
     
  • k0_pwn007 (3级)一只二进制小菜鸡k0shl 2015-12-18回复4楼

     

    楼主可是看雪的熊猫正正吗!

    亮了(4)
     
    • 明明知道 (8级)be kind to one another 2015-12-18回复

       

      @ k0_pwn007  :!: 如假包换~

      亮了(5)
       
  • evilknight (2级) 2015-12-18回复5楼

     

    不错呀!又学会新技能了!

    亮了(3)
     
  • 虚无 2015-12-18回复6楼

     

    最后我们还需要记注两样东西,方便我们进行远程连接调试,VMWare中OSX系统的IP地址和物理地址,可以通过ipconfig命令得到 , 应该是ifconfig

    亮了(3)
     
  • nycode 2015-12-18回复7楼

     

    能跑得了OS X虚拟机的配置应该也好得不得了

    亮了(4)
     
  • Feng 2015-12-18回复8楼

     

    cmd环境下的ls、ifconfig是那么别扭

    亮了(3)
     
  • Fiend520 (7级) 2015-12-18回复9楼

     

    谢谢分享

    亮了(3)
     
  • 静似月动 2015-12-24回复10楼

     

    MAC有没有杀毒软件?

    亮了(2)
     
    • ss 2017-09-13回复

       

      @ 静似月动
      有,如Avira等

      亮了(0)
       
  • 赵成辉V 2015-12-25回复11楼

     

    不专业

    亮了(2)
     
  • heiniao 2017-01-12回复12楼

     

    我想知道正正是哪家公司的

    亮了(1)
     
  • Builder 2017-02-23回复13楼

     

    请教大神一个问题:Mac端实现DLP应用,需要拦截mac系统所有数据的传输,如网络请求、USB拷贝、蓝牙传输等,这样的hook应该如何实现呢?
    查了一些资料不知道对不对,通过内核扩展 hook IOKit的系统调用表,不知道能否实现底层数据拦截?