Solo固件安全分析:降级攻击与模糊测试漏洞挖掘

本文详细分析了SoloKeys固件v3.0.1的安全评估结果,重点揭示了固件降级攻击漏洞和TinyCBOR库的模糊测试漏洞,涵盖漏洞原理、攻击演示及修复方案。

安全分析背景

本博客文章总结了SoloKeys与Doyensec的合作成果,最初由Emanuele Cesena发表在SoloKeys博客上。
完整安全审计报告可在此下载

Doyensec对SoloKeys固件v3.0.1进行了安全评估。在10人/天的项目周期中,发现了3个漏洞,其中2个为信息类问题,1个为高危漏洞(已在v3.1.0中修复)。本文提供高级别摘要。

为何进行安全分析?

Solo的Kickstarter活动后,社区首次要求进行独立安全审计。2019年底因资源不足关闭该请求,引发社区抱怨。
随着基于NXP LPC55S69微控制器和Rust重写的新固件开发,现有STM32固件仍需支持。因此当前是进行安全分析的合适时机。
Doyensec提供了详细过程和发现,以便未来验证Rust新固件。计划对新固件进行另一轮分析(暂无具体计划)。

主要发现:降级攻击

安全审查包括手动源代码审查和固件模糊测试。一名研究员在2020年1月21日至31日进行了两周审查。
发现降级攻击:通过上传多个无序固件块,“升级”到旧版本。降级攻击通常敏感,因可利用旧版本已知漏洞。
但攻击需物理访问密钥或恶意网站上的WebAuthn窗口用户确认。密钥基本安全,建议使用官方工具升级固件。
固件经数字签名,攻击无法绕过签名验证,仅能安装约20个旧版本。漏洞已立即修复。

降级攻击原理

问题代码:[链接],补丁:[链接]。
Solo固件更新为二进制blob,最后4字节代表版本。安装时检查版本是否高于当前版本,并验证数字签名(攻击无关签名,仅允许安装旧签名版本)。
固件按块写入密钥,每次写入更新最后写入地址指针,最终指向新版本末尾。问题:未强制块仅按顺序写入一次。补丁要求严格按升序写入块。
示例:运行v3.0.1,取旧固件v3.0.0,查找可解释为高于v3.0.1的4字节。先发送整个v3.0.0固件,指针指向末尾(版本v3.0.0)。
再重写选定的4字节到原位置,指针指向固件中间,这些字节被解释为“随机”版本。v3.0.0固件含可解释为v3.0.37的字节——完成攻击![概念验证链接]

使用AFL模糊测试TinyCBOR

研究员集成AFL(American Fuzzy Lop)模糊测试固件。固件依赖外部库tinycbor解析CBOR数据。
约24小时执行,测试超1亿输入,发现超4000个错误输入导致tinycbor误解和固件崩溃。初始输入由FIDO2测试框架生成。
模糊测试器将集成到测试工具链中。社区有兴趣贡献修复tinycbor漏洞者可联系获取详情和示例。

总结

委托安全工程公司(Doyensec)进行固件安全审查。阅读完整报告了解过程和降级攻击详情。
如有问题或协助tinycbor模糊测试,请通过Twitter @SoloKeysSec或hello@solokeys.com联系。
感谢Doyensec帮助保护SoloKeys平台。访问其网站,并关注其即将推出的黑客主题手机游戏!

其他相关文章

  • On Bypassing eBPF Security Monitoring (11 Oct 2022)
  • CSRF Protection Bypass in Play Framework (20 Aug 2020)
  • LibreSSL and OSS-Fuzz (08 Apr 2020)
  • Don’t Clone That Repo: Visual Studio Code^2 Execution (16 Mar 2020)
  • 2019 Gravitational Security Audit Results (02 Mar 2020)
  • Signature Validation Bypass Leading to RCE In Electron-Updater (24 Feb 2020)
  • Heap Overflow in F-Secure Internet Gatekeeper (03 Feb 2020)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计