OBO 2025 徽章与挂绳挑战赛 | STAR Labs
目录
引言
我们带着第二届Off-By-One会议回归——比特遇见面包板,漏洞备受庆祝!🐛⚡
如果您热衷硬件和物联网安全,有一件事是肯定的:STAR Labs SG徽章绝非普通的会议装饰。今年的徽章不仅是收藏品,更是好奇者的游乐场,充满了数月研究和黑客灵感的挑战。是的,CTF回归了,带有更多极客元素。
在深入新内容之前,让我们快速回顾去年的Octopus徽章。那个小家伙有个性——字面意思。两个圆形屏幕作为眼睛,与会者乐此不疲地赋予他们的章鱼伙伴各种情绪。有些人甚至发挥创意,黑客了自己的自定义图形。向那两位加拿大人致敬。
与常见的插入USB、解决谜题的徽章不同,我们不断尝试增加学习价值。我们将徽章变成了硬件黑客的实践入门——想想I2C、SPI和MicroPython的怪癖。哦,还记得迷你电压毛刺挑战吗?没错,都在同一块板上。我们希望它为首次涉足硬件的人带来一些“啊哈!”时刻。
快进到2025年:我们把极客🤓刻度调到了最高——注入一点“回到未来”的能量(顺便说一句,这也是今年T恤设计之一)。是的,我们正式全力推进:挂绳现在成了挑战的一部分。您没听错——挂绳黑客现在成了现实。
为了给您内幕消息,我们请Sarah和Manzel带您了解幕后——从设计选择到构建可黑客硬件的愉快混乱。系好安全带。这将是一次有趣的旅程。
挂绳挑战
嗨,我是Sarah,STAR Labs的创意负责人 :)
我被 tasked 为今年的Off By One 2025创建一个挂绳挑战,说实话,我不知道如何着手。是的,我听说过加密和密码,但从未真正用它们构建过谜题。
我们想要一个需要多个挂绳匹配并按正确顺序排列以显示密钥/标志的谜题。
总共有四种挂绳颜色:与会者、演讲者、工作人员和赞助商。棘手的部分?我们没有制作相同数量的每种颜色!赞助商有绿色挂绳,可用数量最少——这正是最终谜题隐藏的地方。
只有按正确顺序排列挂绳,正确的代码才会出现。这是我最初玩的一个早期版本,采用MD5哈希和nyctograph密码。起初我想把密码剪开,分布在挂绳上,让人们必须相应匹配以获取全文。
我联系了几位同事,包括Jacob,寻求想法,最终决定使用ROT13而不是MD5哈希。我们还放弃了将密码切成碎片的计划。
我们确实在办公室进行了现场测试以确保可解,但工作人员花了一些时间才理解他们在看什么;很多人认为密码只是设计的一部分。低音谱号 subtly 隐藏在挂绳中,以帮助指示正确的顺序。
看着学生们一旦意识到挂绳上的“随机”符号 actually 有意义时 scrambling around,既好笑又满足。一旦他们有了标志/密钥,就可以用它解锁今年徽章中隐藏的最终密钥短语。
趣闻:
徽章中埋有一个线索——爱丽丝梦游仙境中白兔的插图,带有“跟随白兔”的字样。这既是一个提示也是一个彩蛋,因为nyctograph密码是由Lewis Carroll本人发明的!
徽章设计
现在让我们讨论并看看我们全新的徽章设计!我们的新设计是一个机器人角色,融合了复古主题的用户界面。
在硬件组件方面,我们探索了具有相对高分辨率图形和显示更新率的LCD。有了这个,我们能够包括GIF播放支持,这让我们为我们的小机器人朋友带来了可爱的动画面部表情。
作为一个不错的点缀,我们还为演讲者添加了定制名片。
现在让我把时间交给Manzel,这位创建了电路和CTF挑战的电子 wizard。
硬件电路
嗨,我是Manzel,STAR Labs SG的硬件工程师。
思考一个新的硬件电路总是有趣的,因为我们 aim 纳入我们在研究过程中 previously 看过的新功能。
去年的一个关键反馈是徽章太重,因此我们决定减少到2节AAA电池,有效减轻25%的重量。然而,由于电池容量减少,我们改用更新的ESP32-C3,它比ESP32-S3稍微更省电。它还有一个单RISC-V核心,这也是学习RISC-V架构的好平台。
内部,我们做了3个原型,它们看起来像这样:
我们的第一个蓝色原型是一个LED位矩阵。它收到了良好的反馈,因为它很好地捕捉了会议的复古主题。然而,我们后来发现故障率很高,因为小LED很脆弱。
用塑料LED进行DIY修复并不容易。这意味着 desoldering 修复工作可能会 risk 损坏/过热周围的LED。
因此我们决定转向LCD显示屏。对于绿色原型,我们考虑了两个不同的显示屏。
虽然较大的矩形显示屏有更好的比例,但像素密度和对比度较差,使我们的艺术品看起来太模糊。
较小的LCD具有更高的像素密度和刷新率。由于会议时间紧迫,我们决定采用较小的LCD,因为我们可以呈现GIF动画,这在其他会议徽章中不常见。
总体时间线如下:
23 Jan: 蓝色原型制造
6 Feb: 蓝色原型反馈与测试
5 Mar: 绿色原型制造
17 Mar: 绿色原型反馈与测试
7 Apr: 最终徽章大规模制造
25 Apr: CTF挑战编程
8 May: 会议日!
通常,每个原型需要约2周制造,硬件和固件测试约3周。
硬件CTF挑战
对于今年的挑战,我们决定专注于硬件外设,如引导程序和内部寄存器。此外,我们将简要看看复古无线通信。
1. 欢迎标志(类别:欢迎)
挑战:欢迎来到硬件黑客!这里有一个标志:
第一个标志是一个理智检查,与会议的复古主题一致。条形码的历史可以追溯到1950年代,之后迅速被采用用于库存跟踪。
注意屏幕的黑色边框在某些手机应用中干扰扫描。您可以拍摄特写照片或裁剪屏幕边框 before 扫描。
扫描条形码以获取标志。
标志:{WelcomeToObo2025}
2. 复古音乐(类别:通信)
挑战:我的老板让我创作一些音乐。我改用AI为我生成。
在这个挑战中,播放一系列音调。仔细聆听,我们识别出2个 distinct 音调。因此,我们可以立即排除莫尔斯电码,因为莫尔斯电码由 varying 长度的单音调组成(即长或短哔声)。
相反,我们推断2个 distinct 音调可以表示二进制。这是频移键控(FSK)的一个简单例子。特别是,它是二进制FSK(BFSK),用于仅用两个 distinct sets of [音频]频率表示二进制0和1。
FSK尤其用于早期无线电通信,如寻呼机和拨号调制解调器。
我们可以使用音频频谱分析仪识别它们。如果没有计算机,可以使用移动应用——例如Spectroid。
从频谱图中,我们首先识别幅度最大的2个峰值频率。在这种情况下,我们看到2730Hz和3141Hz的脉冲随着音乐播放。我们可以放大这个范围并忽略其他频率的噪声。
通过检查,“0”选择低频音调,而“1”选择高频音调。从这里,它可以转换为标志的ASCII表示。
标志:{FSK_On_A_Budget}
活动展位(类别:通信)
挑战:我找到了一个遥控器,似乎能做更多。我设法用Flipper Zero捕获了信号。
文件类型:IR信号文件
版本:1
名称:button_name
类型:raw
频率:38000
占空比:0.5
数据:1040 104 208 104 416 104 520 104 104 104 104 104 104 104 104 104 520 104 104 520 104 104 520 208 104 208 104 104 104 104 520 312 104 104 104 104 104 104 520 104 520 104 104 104 520 104 416 208 104 104 520 208 208 104 312 104 520 104 104 104 104 208 208 104 520 208 104 208 312 104 520 104 520 104 104 104 520 104 104 208 104 208 104 104 520 208 312 104 208 104 520 208 208 208 208 104 520 208 104 208 312 104 520 104 104 416 208 104 520 208 104 208 312 104 520 104 104 104 104 208 208 104 520 312 104 208 208 104 520 104 520 104 104 104 520 104 624 208 520 104 104 416 104 208 520 104 624 208 520 104 104 416 104 208 520 104 104 104 520 104
文件结束
这个挑战涉及红外(IR)信号转储。IR通信通常用于遥控器向其他设备(如电视或声霸)发送命令。有许多工具可以复制这些IR信号并重放它们。
从文档中,我们理解Flipper Zero将解调信号保存到.ir文件中:
Flipper Zero用其内置IR接收器捕获和解调载波频率为38 kHz的IR信号。对于已知协议的遥控器,Flipper Zero自动解码IR信号。如果遥控器的协议未知,Flipper Zero将以RAW格式记录信号。
我们还看到.ir文件格式以微秒呈现原始数据。这是逻辑电平变化的时间,因为它在数字逻辑1和0之间交替。参考Infrared Flipper File Formats。
因此,从提供的数据:1040 104 208 …,逻辑捕获将看起来像这样:
我们可以先将其转换为比特流。
|
|
然而,这个比特流还不能直接解释为数据。通信协议可能包括额外的比特,如前导比特、校验和或指示帧开始和结束的比特。因此手动解析它将很繁琐。
通常,工程师会使用逻辑分析仪程序如PulseView来识别和解码未知信号。这是一个开源程序,支持 numerous 不同协议的 decoding。
导入数据后,我们可以缩小到仅异步协议,因为只提供了1个信号/通道。同样,我们通过取最短脉冲104us来确定波特率,这给我们 approximately 9600 Hz。
最后,我们可以将其导入为.csv文件,然后信号可以解码为波特率9600的UART。
放大后,还可以观察起始比特和停止比特是如何检测的。
标志:{UART_Over_Infrared_?!?!}
诊断模式(类别:引导程序)
挑战:糟糕!工程团队在生产固件中留下了诊断测试模式。可能有一个彩蛋。
诊断模式或内部菜单通常在电子设备中找到,以检查硬件和软件问题。例如,您可能在打开设备时按住某些键组合以进入智能手机的恢复模式或笔记本电脑的诊断模式。
有用的是,ESP32-C3微控制器的引导程序支持测试模式。测试应用可以通过启动时按钮按压触发。参考CONFIG_BOOTLOADER_NUM_PIN_APP_TEST的说明。
如果我们按下向下按钮重启徽章,它会启动到测试模式。完成诊断过程以在屏幕上看到标志。
标志:{Disable_Unnecessary_Diagnostics_Or_Engineering_Test_Modes_If_Possible}
隐藏分区(类别:引导程序)
挑战:我不知道IoT微控制器可以有多个分区。
要解决这个问题,我们需要理解引导程序支持分区。存在一个分区表。在ESP32-C3中,分区表默认位于闪存0x8000。
https://docs.espressif.com/projects/esp-idf/en/stable/esp32c3/api-guides/partition-tables.html
我们可以使用esptool和gen_esp32part.py从这个偏移量转储闪存中的分区表。
|
|
这里我们注意到分区名称flag_xorkey位于偏移0x9000,flag_enc位于偏移0x3ff000。
以下是使用esptool转储内容的方法
|
|
最后,我们可以将内容异或在一起以获取标志。
|
|
ESP分区表将闪存划分为段,如引导程序、应用、ota更新和数据存储。我们可以将多个应用嵌入到单个闪存中,加密分区并隐藏一些标志{IoT_Device_Bootloader_Partition_Scheme}。
标志:{IoT_Device_Bootloader_Partition_Scheme}
HMAC Oracle(类别:引导程序)
挑战:您找到了某人的硬件令牌。显然它可以生成HMAC,您能找到密钥吗?通过USB串行访问。提示:ESP32-C3上的HMAC外设。
首先,这是一个硬件挑战,而不是加密挑战。我们应该首先理解HMAC硬件外设如何工作。
HMAC(基于哈希的消息认证码)模块为SHA256-HMAC生成提供硬件加速,使用烧录到eFuse块中的密钥。HMAC与预共享秘密密钥工作,并为消息提供真实性和完整性。
有一些对eFuse块的引用。它是一个一次性可编程区域,通常用于IoT系统中的永久配置。在这种情况下,它用于存储仅由HMAC外设使用的密钥。
这里的一个配置错误是未启用密钥保护。写入eFuse的HMAC密钥可以使用编程工具espefuse.py读出。
|
|