Off-By-One 2024 大会徽章硬件CTF挑战全解析

本文详细介绍了STAR Labs为Off-By-One 2024大会设计的章鱼徽章硬件架构,包含6个硬件CTF挑战的完整技术细节,涉及USB描述符分析、固件提取、硬件随机数生成、I2C通信破解、时序攻击和电压毛刺攻击等嵌入式安全技术。

Off-By-One 2024大会徽章硬件CTF挑战

引言

我们如期在活动结束一个月后发布徽章固件和本文,让感兴趣的参与者可以继续探索。章鱼徽章作为Off-By-One 2024大会的亮点,内置了以硬件为核心的CTF挑战。本文将深入解析徽章的设计过程和技术实现。

硬件设计

徽章采用ESP32-S3作为主处理器,驱动两个GC9A01 OLED显示屏作为章鱼眼睛。用户可通过物理按钮和方向摇杆交互,ATmega328P协处理器通过I2C协议通信。电路设计使用KiCad完成,提供三种配色版本区分参会者身份。

硬件CTF挑战

1. USB字符串描述符

欢迎flag隐藏在USB描述符中,可通过Linux的dmesg或Windows设备管理器查看:

1
2
3
$ dmesg -w
[3240249.488872] usb 3-3.2: Product: #BadgeLife
[3240249.488892] usb 3-3.2: SerialNumber: {Welcome_To_OffByOne_2024}

2. C编译内部库

flaglib模块通过MicroPython REPL暴露:

1
2
>>> import flaglib
>>> flaglib.getflag("{my_compiled_python_library}")

由于未加密的固件存储,可通过esptool.py提取闪存内容:

1
2
$ esptool.py read_flash 0x0 0x400000 fw-backup.bin
$ strings fw-backup.bin | grep {

3. 硬件随机数生成器

通过分析roulette.mpy文件发现,RNG使用ADC噪声作为熵源。将指定引脚接地可控制随机数生成:

4. Arduino协处理器

I2C总线上的0x30地址直接返回flag:

1
2
>>> arduino.i2c.readfrom(0x30, 100)
b'starlabs{i2c_flag_1}'

5. 时序攻击

0x31地址需要精确控制读取时机:

1
2
3
4
5
6
def derp(x):
  arduino.off()
  time.sleep(1)
  arduino.on()
  time.sleep(x)
  return arduino.i2c.readfrom(0x31, 200)

通过200-220ms的精细控制逐字符获取flag。

6. 电压毛刺攻击

Arduino的UART端口显示验证代码:

1
2
for (i = 0; i < 123456; i++) k++;
if (k != 123456) { unlock(); }

通过精确控制电源通断制造指令跳过:

1
>>> arduino.on(); arduino.off(); arduino.on()

成功时显示:

1
Unlocked. Here is your flag starlabs{voltage_glitching_is_cool}

结语

该徽章设计成功展示了嵌入式系统安全的关键技术,包括硬件接口分析、固件提取、物理层攻击等,为参会者提供了宝贵的硬件安全实践机会。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计