利用 ARM 核间调试漏洞获得 SoC 硬件最高权限(下)

本文是关于如何利用 ARM SoC 的核间调试漏洞获取硬件最高权限的实验指南,主要介绍了 LKM 的使用、实验步骤和注意事项。文章指出,实验依赖 LKM 作为注入脚本,并提供了加载、卸载和观察 LKM 运行结果的方法。动手部分包括查看调试接口、查找寄存器基址和在不同核心上执行代码的步骤。虽然不提供具体代码,但给出了可能遇到的问题及解决建议,包括内核崩溃的处置。最后,讨论了 Nailgun 攻击的安全性和预防措施,并提到了 OSR 开发的自动化检测工具。
摘要由CSDN通过智能技术生成

前情提要


在 上篇 中,我们给出了大致的漏洞原因和攻击链,在本篇中,我们将给出具体的实验思路和步骤。出于对法律风险的考虑,我们不会给出源码和具体的参数。有兴趣的读者可以根据思路和论文,自行摸索。如有意探讨更多技术细节,请联系我们:zheng.liu@osr-tech.com 。

以下实验步骤在 AArch64 上适用。

LKM 的使用


由于实践环节大量依赖 LKM (Loadable Kernel Module) 作为注入脚本。在此为不熟悉 Linux 内核编程的小伙伴简要介绍一下要点。

LKM 是能够在内核态运行的程序,由 insmod 接口在 root 权限下加载。

如何使用 LKM

  • 查看该 SoC 是否有开发板,因为开发板往往会提供开源的内核源码,有内核源码也就有了内核头文件

  • 查看该 SoC 是否被某个版本的 Linux 内核 mainline 所接受,尝试更换内核到该版本

  • OEM 原则上来说应该对所使用的内核开源(比如安卓手机厂商),找到该内核源码

  • 逛逛爱好者论坛,寻找第三方做好的 ROM 或 kernel,再依此寻找第三方内核源码

  1. 内核头文件

    LKM 的编译过程需要运行 LKM 平台的内核信息。主要是一些模块符号和内核头文件中函数的格式,以便 LKM 在运行时正确地找到所需的内核接口。一般而言,x86 平台 Debian 系 mainline 的头文件通过 apt install linux-headers-$(uname -r) 可以自动获得。但与 x86 平台基本就 I 家和 A 家设计厂商不同,以嵌入式设备为主的 ARM 平台,各个设计厂商对自家 SoC 设计方案五花八门,使得 Linux 内核对不同 SoC 驱动支持程度不一;或者由于设备上资源所限,OEM 对内核进行了定制化修改,使得该设备的内核头文件无法通过 apt 等主流渠道获得。

    此时要找到内核编译 LKM 所需的内核头文件,建议以下方式:

  2. 加载 LKM

    通过 insmod 和 rmmod 可以方便的加载和卸载 LKM。需要注意的是 LKM 的编写与平常的程序代码有所不同,内核函数与 libc 的差异自不必说,LKM 需要有特定的加载和退出函数,请自行查阅。

    </
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纽创信安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值