MAC kernel panic分析(1)

admin 2024年12月18日22:10:45评论3 views字数 7910阅读26分22秒阅读模式

0x01 前言

我的好兄弟使用mac的时候突然蹦掉了,我想这要是弄个提权漏洞或者RCE不是美滋滋,因此开始了我的MAC kernel 分析之旅。

0x02 前期准备

除了正常的分析工具之外特别需要准备的就是一台MAC机器或者是一台MAC系统的虚拟机。

windows VMware MAC虚拟机安装

可以从如下地址获取你想要的mac镜像

https://sysin.org/blog/macOS-Big-Sur/#1-macOS-Big-Sur-正式版发布

虚拟机安装mac系统可以参照

https://sysin.org/blog/how-to-install-macos-big-sur/

0x03 分析

panic分析

这里我以如下例子举例分析

panic(cpu 1 caller 0xffffff800c06520a): Kernel trap at 0xffffff800c047fd2, type 14=page fault, registers:
CR0: 0x0000000080010033, CR2: 0x0000000000000000, CR3: 0x0000000163ef10c9, CR4: 0x00000000003626e0
RAX: 0x0000000000000060, RBX: 0x0000000000000000, RCX: 0x0000000000134750, RDX: 0xffffff802b756a00
RSP: 0xffffff812acbbb10, RBP: 0xffffff812acbbb80, RSI: 0x0010000114660000, RDI: 0xffffff8036214a80
R8: 0xffffff803800fa00, R9: 0xffffff802464ed38, R10: 0x0000000000000000, R11: 0x0000000000000001
R12: 0xffffff8036214a80, R13: 0x0000000163ef1000, R14: 0x0010000114660000, R15: 0x0000000000000000
RFL: 0x0000000000010206, RIP: 0xffffff800c047fd2, CS: 0x0000000000000008, **: 0x0000000000000010
Fault CR2: 0x0000000000000000, Error code: 0x0000000000000000, Fault CPU: 0x1, PL: 1, VF: 0

Backtrace (CPU 1), Frame : Return Address
0xffffff812acbb570 : 0xffffff800bf3bb1b
0xffffff812acbb5c0 : 0xffffff800c0733e5
0xffffff812acbb600 : 0xffffff800c064e5e
0xffffff812acbb650 : 0xffffff800bee2a40
0xffffff812acbb670 : 0xffffff800bf3b207
0xffffff812acbb770 : 0xffffff800bf3b5eb
0xffffff812acbb7c0 : 0xffffff800c6d24f9
0xffffff812acbb830 : 0xffffff800c06520a
0xffffff812acbb9b0 : 0xffffff800c064f08
0xffffff812acbba00 : 0xffffff800bee2a40
0xffffff812acbba20 : 0xffffff800c047fd2
0xffffff812acbbb80 : 0xffffff800bfed197
0xffffff812acbbe70 : 0xffffff800bfe44a3
0xffffff812acbbf20 : 0xffffff800c48862e
0xffffff812acbbf40 : 0xffffff800c59acba
0xffffff812acbbfa0 : 0xffffff800bee3206

BSD process name corresponding to current thread: AMPLibraryAgent

Mac OS version:
19C57

Kernel version:
Darwin Kernel Version 19.2.0: Sat Nov 9 03:47:04 PST 2019; root:xnu-6153.61.1~20/RELEASE_X86_64
Kernel UUID: C3E7E405-C692-356B-88D3-C30041FD1E72
Kernel slide: 0x000000000bc00000
Kernel text base: 0xffffff800be00000
__HIB text base: 0xffffff800bd00000
System model name: MacBookPro14,1 (Mac-B4831CEBD52A0C4C)
System shutdown begun: NO
Panic diags file available: YES (0x0)

System uptime in nanoseconds: 30452255637
last loaded kext at 17250673476: >AudioAUUC1.70 (addr 0xffffff7f8f565000, size 32768)
loaded kexts:
com.intel.driver.EnergyDriver3.5.5
>AudioAUUC1.70
@fileutil20.036.15
>!APlatformEnabler2.7.0d0
>AGPM111.4.1
>X86PlatformShim1.0.0
@filesystems.autofs3.0
>!AUpstreamUserClient3.6.8
>!AHDAHardwareConfigDriver283.15
>!AHDA283.15
>!AGraphicsDevicePolicy4.5.21
@AGDCPluginDisplayMetrics4.5.21
>!AHV1
>AGDCBacklightControl4.5.21
|IOUserEthernet1.0.1
|IO!BSerialManager7.0.2f4
>pmtelemetry1
>!A!IPCHPMC2.0.1
>!ABacklight180.1
>!A!IKBLGraphics14.0.3
@Dont_Steal_Mac_OS_X7.0.0
>!A!ISlowAdaptiveClocking4.0.0
>!ASMCLMU212
>!AGFXHDA100.1.422
>ACPI_SMC_PlatformPlugin1.0.0
>!AMCCSControl1.13
>!A!IKBLGraphicsFramebuffer14.0.3
>eficheck1
>!AThunderboltIP3.1.3
>!AFIVRDriver4.1.0
>!ACameraInterface7.6.0
>!AFileSystemDriver3.0.1
>!AVirtIO1.0
@filesystems.hfs.kext522.0.9
@!AFSCompression.!AFSCompressionTypeDataless1.0.0d1
@BootCache40
@!AFSCompression.!AFSCompressionTypeZlib1.0.0
>!ATopCaseHIDEventDriver3420.1
@filesystems.apfs1412.61.1
>AirPort.BrcmNIC1400.1.1
@private.KextAudit1.0
>!ASmartBatteryManager161.0.0
>!AACPIButtons6.1
>!ARTC2.0
>!ASMBIOS2.1
>!AACPIEC6.1
>!AAPIC1.7
$!AImage41
@nke.applicationfirewall303
$TMSafetyNet8
@!ASystemPolicy2.0.0
|EndpointSecurity1
@kext.triggers1.0
>DspFuncLib283.15
@kext.OSvKernDSPLib529
>!AGraphicsControl4.5.21
|IOAVB!F800.17
>!ASSE1.0
|IO!BHost!CUARTTransport7.0.2f4
|IO!BHost!CTransport7.0.2f4
>!ABacklightExpert1.1.0
>!AHDA!C283.15
|IOHDA!F283.15
@!AGPUWrangler4.5.21
|IOSlowAdaptiveClocking!F1.0.0
|IONDRVSupport569.3
>IOPlatformPluginLegacy1.0.0
>!ASMBus!C1.0.18d1
@!AGraphicsDeviceControl4.5.21
|IOAccelerator!F2438.2.8
|IOGraphics!F569.3
>!ASMBusPCI1.0.14d1
>X86PlatformPlugin1.0.0
>IOPlatformPlugin!F6.0.0d8
>!AThunderboltEDMSink4.2.2
>!AThunderboltDPOutAdapter6.2.4
>!A!ILpssUARTv13.0.60
>!A!ILpssUARTCommon3.0.60
>!AOnboardSerial1.0
@plugin.IOgPTPPlugin800.14
|IOEthernetAVB!C1.1.0
|IOAudio!F300.2
@vecLib.kext1.2.0
|IOSerial!F11
|IOSurface269.6
@filesystems.hfs.encodings.kext1
>!AActuatorDriver3420.2
>!AHIDKeyboard209
>!AHS!BDriver3420.1
>IO!BHIDDriver7.0.2f4
|IO!B!F7.0.2f4
|IO!BPacketLogger7.0.2f4
>!AMultitouchDriver3420.2
>!AInputDeviceSupport3420.4
>!AHSSPIHIDDriver58
>!AThunderboltDPInAdapter6.2.4
>!AThunderboltDPAdapter!F6.2.4
>!AThunderboltPCIDownAdapter2.5.2
>!AHPM3.4.4
>!A!ILpssI2C!C3.0.60
>!AHSSPISupport58
>!AThunderboltNHI5.8.1
|IOThunderbolt!F7.4.7
>!AXsanScheme3
|IO80211!F1200.12.2b1
>mDNSOffloadUserClient1.0.1b8
>corecapture1.0.4
|IOSkywalk!F1
>!A!ILpssSpi!C3.0.60
>!A!ILpssDmac3.0.60
|IONVMe!F2.1.0
>!A!ILpssGspi3.0.60
>!A!ILpssI2C3.0.60
>usb.!UXHCIPCI1.2
>usb.!UXHCI1.2
>usb.!UHostPacketFilter1.0
|IOUSB!F900.4.2
>!AEFINVRAM2.1
>!AEFIRuntime2.1
|IOSMBus!F1.1
|IOHID!F2.0.0
$quarantine4
$sandbox300.0
@kext.!AMatch1.0.0d1
>DiskImages493.0.0
>!AFDEKeyStore28.30
>!AEffaceable!S1.0
>!AKeyStore2
>!UTDM489.60.3
|IOSCSIBlockCommandsDevice422.0.2
>!ACredentialManager1.0
>KernelRelayHost1
>!ASEPManager1.0.1
>IOSlaveProcessor1
|IOUSBMass!SDriver157.40.7
|IOSCSIArchitectureModel!F422.0.2
|IO!S!F2.1
|IOUSBHost!F1.2
>!UHostMergeProperties1.2
>usb.!UCommon1.0
>!ABusPower!C1.0
|CoreAnalytics!F1
>!AMobileFileIntegrity1.0.5
@kext.CoreTrust1
|IOTimeSync!F800.14
|IONetworking!F3.4
|IOReport!F47
>!AACPIPlatform6.1
>!ASMC3.1.9
>watchdog1
|IOPCI!F2.9
|IOACPI!F1.4
@kec.pthread1
@kec.corecrypto1.0
@kec.Libm1

第一部分

panic(cpu 1 caller 0xffffff800c06520a): Kernel trap at 0xffffff800c047fd2, type 14=page fault, registers:
CR0: 0x0000000080010033, CR2: 0x0000000000000000, CR3: 0x0000000163ef10c9, CR4: 0x00000000003626e0
RAX: 0x0000000000000060, RBX: 0x0000000000000000, RCX: 0x0000000000134750, RDX: 0xffffff802b756a00
RSP: 0xffffff812acbbb10, RBP: 0xffffff812acbbb80, RSI: 0x0010000114660000, RDI: 0xffffff8036214a80
R8: 0xffffff803800fa00, R9: 0xffffff802464ed38, R10: 0x0000000000000000, R11: 0x0000000000000001
R12: 0xffffff8036214a80, R13: 0x0000000163ef1000, R14: 0x0010000114660000, R15: 0x0000000000000000
RFL: 0x0000000000010206, RIP: 0xffffff800c047fd2, CS: 0x0000000000000008, **: 0x0000000000000010
Fault CR2: 0x0000000000000000, Error code: 0x0000000000000000, Fault CPU: 0x1, PL: 1, VF: 0

其中cpu1 caller 0xffffff800c06520a 是调用_panic 函数返回地址

Kernel trap at 0xffffff800c047fd2 表示 问题出现的位置 type 14是问题的类型

registers 为出现问题当时的寄存器情况。

第二部分

Backtrace (CPU 1), Frame : Return Address
0xffffff812acbb570 : 0xffffff800bf3bb1b
0xffffff812acbb5c0 : 0xffffff800c0733e5
0xffffff812acbb600 : 0xffffff800c064e5e
0xffffff812acbb650 : 0xffffff800bee2a40
0xffffff812acbb670 : 0xffffff800bf3b207
0xffffff812acbb770 : 0xffffff800bf3b5eb
0xffffff812acbb7c0 : 0xffffff800c6d24f9
0xffffff812acbb830 : 0xffffff800c06520a
0xffffff812acbb9b0 : 0xffffff800c064f08
0xffffff812acbba00 : 0xffffff800bee2a40
0xffffff812acbba20 : 0xffffff800c047fd2
0xffffff812acbbb80 : 0xffffff800bfed197
0xffffff812acbbe70 : 0xffffff800bfe44a3
0xffffff812acbbf20 : 0xffffff800c48862e
0xffffff812acbbf40 : 0xffffff800c59acba
0xffffff812acbbfa0 : 0xffffff800bee3206

主要记录发生崩溃前后的函数返回地址。

这个panic发生错误时的RIP为0xffffff800c047fd2

在分析时主要需要往下看,也就是看更高的地址。

第三部分

BSD process name corresponding to current thread: AMPLibraryAgent
Mac OS version:
19C57

主要是Mac系统的版本以及出现问题的线程对应的进程名。

第四部分

Kernel version:
Darwin Kernel Version 19.2.0: Sat Nov 9 03:47:04 PST 2019; root:xnu-6153.61.1~20/RELEASE_X86_64
Kernel UUID: C3E7E405-C692-356B-88D3-C30041FD1E72
Kernel slide: 0x000000000bc00000
Kernel text base: 0xffffff800be00000
__HIB text base: 0xffffff800bd00000
System model name: MacBookPro14,1 (Mac-B4831CEBD52A0C4C)
System shutdown begun: NO
Panic diags file available: YES (0x0)
System uptime in nanoseconds: 30452255637

主要是内核版本以及内核的一些加载地址。这在后面具体分析时会起到很重要的作用。

第五部分

loaded kexts:
com.intel.driver.EnergyDriver3.5.5
>AudioAUUC1.70
@fileutil20.036.15
>!APlatformEnabler2.7.0d0

kexts也就是内核拓展,这部分主要是说明当时加载的内核拓展。

具体分析

首先我们确定出现问题的是内核还是内核的拓展组件。

kernel分析

首先我们需要获取kernel的二进制文件也就是binary,这个文件存在于mac系统的/System/Library/Kernels/kernel 位置,把它从机器中拷贝出来拖入IDA分析。如下图

MAC kernel panic分析(1)

在分析前需要先调整程序基址也就是panic的Kernel text base: 0xffffff800be00000

在调整之后就可以一步步分析发生异常的流程了,在没法复现崩溃的情况下对我来说难度还是有点大。

定位到崩溃时的RIP地址对应代码如下图

MAC kernel panic分析(1)

是一个内存非法访问,通俗理解就是访问的地址不存在。(再见了我的RCE)。

0x04 小结

在缺少相关资料以及苹果系统的情况下路子偏了几次也踩了不少坑。后续可能会出kernel debug的内容。

原文始发于微信公众号(BeFun安全实验室):MAC kernel panic分析(1)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月18日22:10:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   MAC kernel panic分析(1)https://cn-sec.com/archives/1066061.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息