FahadUmar10422/firmware-security-rehosting
GitHub: FahadUmar10422/firmware-security-rehosting
固件重宿分析工具,用于固件逆向工程和安全评估。
Stars: 0 | Forks: 0
# 固件重宿
这是在伯明翰大学使用树莓派2040进行的固件分析的一部分。任务分为三个部分,请查看README.md,在每个任务中都需要以特定格式查找标志。这项活动的目的是理解SPI、UART和固件重宿的概念。
## 作业总结
在展示了你在自动化、模糊测试和漏洞报告方面的安全技能后,EvilCorp给你一个新的任务:帮助他们恢复关于其基于树莓派Pico的旧版硬件安全令牌的关键信息!
遗憾的是,最初创建令牌的工程师离开了公司,且缺少了文档。你需要探测不同的通信接口并恢复引脚代码以解锁设备。对于这个作业,你将收到硬件(每组1套)。请确保在完成作业后归还。
**作业** 你扮演外部网络安全顾问的角色,你的作业分为两部分:协议逆向工程和重宿。请参阅作业介绍幻灯片[链接]或录音以获取有关硬件的更多信息。对于第二部分,你还收到一组文件以执行你的任务:assignment2.zip 下载 assignment2.zip。
**第一部分:协议逆向工程** 备注:在整个作业中,你被要求检索不同的“标志”。在这个作业中,这些是遵循格式sshs{$random_string}的可读字符串。请在你的提交中包含检索到的标志。
## 目标:
**准备** 从讲师或助教那里获得硬件套件 将目标固件烧录到设备上 下载适用于您的操作系统的saleae Logic 2软件:https://www.saleae.com/pages/downloads 链接到外部网站。确保您可以通过USB与树莓派Pico通信,例如在Mac/Linux上使用minicom或在Windows上使用Putty。UART识别:使用Pico固件的菜单通过UART发送消息。每次选择菜单条目时都会发送一次消息。将逻辑分析仪连接到正确的引脚并使用Logic 2软件捕获流量。使用相应的协议解码器和解码UART消息。提示:
如果您在连接到Pico时遇到困难,查看Raspberry Pi Pico入门指南[链接]可能会有所帮助。连接到Pico且看不到任何输出时,请尝试输入一个数字并按回车键。Logic 2软件有一些很棒的功能可以帮助您检查信号甚至解码它们。如果您观察到帧错误,您的UART解码器设置可能不是100%正确。尝试查看信号(以及讲座幻灯片)并找出您遇到这些错误的原因。本练习中的SPI信号使用4根线。如果Logic 2工具报告它无法跟上所选的采样率,请考虑降低采样率。每个引脚都有有限的可用功能:查找树莓派Pico的数据表并仔细检查引脚分配。
**第二部分:重宿**
注意:对于这个作业的部分,你收到一个来自树莓派Pico的转储,在函数`assignment_2B_rehost`的入口点。这个转储包含:寄存器状态(regs.txt)、固件在闪存中的内容(`fw.bin`)、树莓派Pico的ROM内存(`rom.bin`)及其RAM中的内容(`sram.bin`)。此外,你收到`sshs.elf`,这是固件的编译版本,带有符号。您可以在Ghidra中加载此文件以帮助您在作业期间进行逆向工程。
### 目标:
创建一个Dockerfile,将提供的文件复制过来并设置unicorn及其所有依赖项 重宿函数`assignment_2B_rehost`并检索引脚:初始化Unicorn,包括寄存器状态和内存区域 识别需要跳过的函数并创建相应的钩子 识别输出函数并提供相应的钩子 识别读取输入的函数并提供将输入写入内存正确位置的钩子 在循环中执行重宿的函数,每次迭代使用不同的引脚猜测。如果猜测成功,你将在输出中看到标志。提示:
你可以选择任何语言与Unicorn交互。我们推荐使用Python;可以使用python3 -m pip install unicorn设置Unicorn for Python,假设已经安装了所有依赖项。Unicorn包含一些可以作为参考的示例。对于Python,您可以使用test_arm.py[链接]作为重宿脚本的起点。要跳过整个函数,可以在函数的入口点创建一个代码钩子。然后,将链接寄存器的内容写入程序计数器寄存器并退出您的钩子。有效的PIN在范围[0,9999]之间。在启动仿真时遇到问题?请确保您的地址包括Thumb位!尝试使重宿更高效 - 您可以在特定地址上安装钩子;全局钩子会为每个基本块调用,这将带来性能惩罚!不要尝试逆向工程decrypt_rehosting_flag函数。让重宿为您完成这项工作。 :) 可交付成果:
一份简短的PDF报告(最多2页),包含:3个标志 一个包含正确UART设置的截图 一个包含正确SPI设置的截图 解释您如何找到UART设置的文本说明 解释您如何找到引脚和SPI设置的文本说明 解释您必须钩子/拦截的函数以解决重宿挑战 文件和它所依赖的辅助文件的重宿脚本 您的重宿脚本和它所依赖的辅助文件 A Dockerfile和run.sh以执行您的重宿脚本 声明:我们期望每组提交一个zip文件,包含上述成果。
我们期望run.sh文件成功执行Dockerfile并运行重宿程序,因此请包括所有其他使您的docker容器正确运行的必需文件。我们将在安装了Docker的标准Linux机器上运行您的启动脚本。具体来说,我们将下载您的提交,导航到相应的目录,并运行名为“run.sh”的文件。我们不会添加任何其他文件。我们不会对环境进行任何更改或配置。如果我们需要更改您的dockerfile/启动脚本才能使其工作,您将失去相应的分数。如果我们不能在合理的时间内修复它,您将无法获得这些部分的分数。
您的容器构建时间不应超过5分钟,忽略“下载”基本镜像所需的时间。如果您修改docker文件以替换基本镜像,我们建议不要使用任何“latest”、“rolling”、“dev”等镜像。这些镜像可能在提交和评分之间发生变化,破坏您的提交。
请将提交命名为assignment2-teamXX.zip。
请勿上传大文件。作为一个经验法则,提交的zip文件应小于等于5 MB(除非有明确的理由说明为什么需要更大的文件)。没有正当理由的大文件将导致扣除分数。
请确保报告包含您的姓名和可选的电子邮件地址,但不要包含其他信息,如学生ID。
标签:请求拦截, 逆向工具