2024年网络安全最新【项目简记】逆向工程裸机内核镜像

由于我们不是在处理实际的硬件,因此我们不能使用引脚来与设备交互。

例如,假设我们要模拟一个名为kernel.img的内核,我们需要运行以下命令来运行它:

- qemu-system-aarch64 -M raspi0 -kernel kernel.img -serial null -serial stdio

如果我们想做同样的事情,但是我们可以连接到GDB,我们可以运行以下命令:

- qemu-system-arm -M raspi0 -kernel kernel.img -serial null -serial stdio -S -gdb tcp::4269 -boot c

此命令具体打开一个GDB服务器,我们可以通过gdb-multiarch连接到它,并与之交互。要连接到它,我们运行以下命令。

- gdb-multiarch
- add-symbol-file kernel.elf <addr> — Run this command if you have an elf file for your kernel, otherwise, it is optional. 
- target remote localhost:<port>

我强烈建议将其制作成gdb脚本文件。这样,您也可以使gdb更易于管理。有关GDB脚本的优秀教程可以在这里找到:

  • https://www.adacore.com/gems/gem-119-gdb-scripting-part-1
  • https://www.adacore.com/gems/gem-120-gdb-scripting-part-2

您也可以使用GEF进行调试;然而,您需要运行以下命令:

gdb-gef-multiarch (or however you bring it up on the console)
set architecture arm 
add-symbol-file kernel.elf <addr>
gef-remote -q localhost:<port>

现在我们已经有了执行代码的环境,我们可以评估内核的几种方法。除了GDB,我们还需要一个反汇编器/反编译器,如Binary Ninja或Ghidra。这将在我们逆向工程内核时提供帮助,特别是对于裸机程序。

裸机软件是指直接在硬件上运行的软件,没有操作系统功能。有时甚至没有标准库,如stdio.h或stdlib.h。

因此,除非我们有ELF文件,否则我们不会有符号。即使如此,如果使用标准库,反编译器和反汇编器也可能无法识别它们。

最后,学习如何阅读ARM汇编代码至关重要。大多数嵌入式系统使用ARM架构;然而,一些仍然使用MIPS,而在极少数情况下使用Power PC。您需要熟悉的术语有:

  • Calling Conventions
  • Prolog
  • Epilog
  • Registers
  • Memory

在继续之前,您应该做的一个很好的教程是Azeria的教程。

它有七个部分,您将能够开始学习如何逆向和利用基于ARM的代码。完成所有部分!链接:

https://azeria-labs.com/writing-arm-assembly-part-1/

您可能要考虑的其他一些事情:

  • 开始学习一些Python,您将经常使用它来进行漏洞利用和逆向工程脚本(这将使您的生活变得更加轻松)。
  • 获取pwntools,这将帮助您进行漏洞利用,并支持arm和aarch64 -
https://docs.pwntools.com/en/latest/

  • 获取angr:这将帮助您找到漏洞并逆向工程重复任务 - https://docs.angr.io/

现在您准备好了!现在您应该尝试解决CTF挑战或逆向工程您感兴趣的内核。稍后,我将介绍一些您可能错过的重要概念(并且我是通过艰难的方式学习的)。

CTF(Capture The Flag)挑战是一种网络安全竞赛,参赛者需要在限定的时间内找到并提交目标程序中的隐藏标志。CTF挑战通常涉及到各种网络安全技术和技巧,包括逆向工程、漏洞利用、密码学、网络分析等。

逆向工程重复任务是指对已经编译的程序进行反编译,并对其代码进行逐行分析,以理解其功能、查找漏洞或进行修改在CTF挑战中,参赛者可能需要逆向工程一个二进制程序,以找到隐藏在其中的标志或秘密信息。


下一步工作:

现在我们的环境已经设置好了,我们准备好对二进制文件进行逆向工程了!

如何使用我为UMDCTF编写的CTF挑战Furor进行基本的ret2text漏洞利用。你可以在这里下载副本:https://github.com/UMD-CSEC/UMDCTF-2021-Public-Challenges/tree/master/Pwnables/furor

由于仅解决此CTF挑战就涉及很多概念,我们主要需要了解两个方面的内容:

  • 一专注于初始的高级逆向工程
  • 二专注于ARM的深入逆向工程和漏洞利用。

要做的事情:

  • 如何找到关于裸机固件映像的关键信息
  • 了解如何找到目标设备的信息
  • 如何设置Ghidra,以便它能够理解如何找到信息(例如,更容易找到我们的目标函数)

当你开始开始对任何东西进行逆向工程时,首先要确定它是什么。

虽然我们从文章的标题中对其有了很好的了解,但在大多数情况下,我们并没有这种上下文。

固件映像有点奇怪,因为它们可以包含其中的多个文件或是一个二进制blob。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值