网站首页 > 技术教程 正文
出于各种各样的原因,拿开源代码或现成的一些工具用在自己的项目里向来很常见。不过近年来诸如Log4j漏洞等安全问题的爆发,也揭露了开源工具可能带来的安全风险。这一次,风险出现在现代汽车公司用来管理软件的产品中。
今年5-6月份,软件工程师Daniel Feldman连续发布四篇博客,记录了自己破解家中现代汽车信息娱乐系统的过程与方法。其中最关键的一步是要获取现代汽车公司用来管理软件的私钥。这原本是不可能的事情,但是他一时兴起去谷歌搜索了一下,居然真的搜到了那段私钥,然后成功破解了自己的汽车。
故事要从去年夏天这位工程师新买了一辆现代汽车(2021款Hyundai Ioniq SEL)说起。这是一辆混动车,支持安卓Auto或苹果CarPlay,可以无线充电、加热座椅,还配有天窗。Daniel本人特别喜欢这辆车的车载信息娱乐(IVI)系统,他发现菜单动画很流畅,说明运行的软件不那么臃肿,不会让CPU/GPU全负荷运转。程序员的天性让他想研究个彻底,尝试破解掉系统,获取root权限,加入自己编写的软件。
破解的第一步是先搞清楚这个系统到底是个啥以及以前有没有人破解过它。经过研究,Daniel发现这个IVI系统有两个版本,一个是基于Android 系统的导航,另一个是基于 Linux 的版本。前者只要通过工程菜单安装自己的APK就能破解,后者则还没有被攻破,而且可以调整为工程模式(相当于开发者的诊断、调试模式)。只要进入IVI系统的软件更新界面,快速在更新按钮左侧按10次,再在按钮右侧按一次就可以进入工程模式。进入之后,他又通过网上搜到的教程,找到了进入工程模式的密码。
进入工程模式之后,就能看到大量诊断、调试数据和隐藏的设置。其中的 USB 拷贝以及ISV设置中的“ADB TCP”选项与“软件测试工具”选项看起来是突破口。经过一番尝试之后,Daniel还是决定直接获取固件更新包(update.hyundai.com)再解压分析。不过,虽然获取到了固件压缩包,在解压时却遇到了麻烦——需要密码。不管用什么密码破解工具都行不通。这在日常安全研究中其实很常见。
无奈之下再去分析压缩包里的文件,根据关键词去网页里搜索,不过也没什么收获。但是,在现代汽车的更新网站中却发现了一个比较特殊的更新程序,下载之后有一组文件跟固件压缩包中的一个程序名对上了。再通过ZIP解压软件的对文件CRC进行校验,在一对匹配的文件中找到了 bkcrack明文。最后经过一系列解密、编程等操作,最终成功从加密的固件ZIP压缩包中提取了所有的文件,然后开始逆向。至此,破解IVI系统走到了关键路口。
在分析固件更新文件时,Feldman 发现了大量“enc_”前缀的文件,都是加密的,如果无法读取这些文件,就无法了解系统的更新过程。因为读取加密文件,就只能再次查看此前获取的一些信息,包括从Mobis网站中下载的开源代码。这一看,就找到了关键信息。在浏览代码时,他搜索了所有shell脚本文件,然后发现了 linux_envsetup.sh 文件,这是用于创建系统更新ZIP文件的脚本。系统更新必需的zip密码、加密方式、AES对称密码块链(CBC)加密密钥以及用来加密固件映像的IV(初始化向量)值都在脚本中写得明明白白。不过,脚本中也提到的还有一些私钥是用RSA算法加密的,源代码中并没有包含这部分密钥。
Feldman 拿脚本中的[AES]加密密钥到谷歌里一搜,发现这个密钥其实是 NIST 发布的SP800-38A文档(https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf)中列出的第一个AES 128位CBC示例密钥。这着实有些离谱。
首先,在加密领域,CBC加密方法用得较少,而且使用填充加密的AES CBC加密方法也没那么安全。其次,这是NIST的公开文档中发布的第一个例子。就算拿去用,也顶多用于测试,但是显然现代公司的开发人员直接拿公开文档中的密钥作为自家产品机密信息的加密密钥……这种行为与把“12345”作为开机密码还写在便签纸上贴在电脑上也差不了多少。你以为别人不会看,但别人想看就分分钟能打开你电脑。
最后,Feldman用这个密钥解开了其中一个压缩包,然后成功从加密的固件映像文件中提取出了更多文件,并找到了处理IVI系统更新的软件,还找到了更新程序所需要的RSA公钥。谷歌搜索的方法屡试不爽,他再次拿已知的公钥片段去搜索,结果发现,这又是一个公开的教程中举的例子:RSA Encryption & Decryption Example with OpenSSL in C(
http://hayageek.com/rsa-encryption-decryption-openssl-c/)。这个教程举例的项目在源代码中附有这个公钥和对应的RSA私钥。也就是说,现代汽车公司用了这个公开教程中举例的公钥、私钥对,还把公钥放到了产品源代码中。所以拿公钥一搜,就能搜到私钥。
解密所需要的密钥都集齐后,只待Feldman本人汽车型号对应的固件更新,就能开展行动。这一等就等到了2022年4月。Feldman早就通过 linux_envsetup.sh 脚本了解到加密固件更新的过程, 对应型号的固件更新后,他就创建了自己的固件版本,并创建了两个后门。最终,自制的固件更新包做好后,他通过最开始发现的USB拷贝功能把自制的更新包装入了IVI系统,并成功重启了系统。他通过后门就能访问、控制IVI系统,并加入了自制的程序。时隔大概一年,这位工程师终于随心所欲地控制了自己汽车信息娱乐系统。
与其他的破解相同,这次的探究出于极客的天性、需要一定的技术基础。不同之处就在于用于解密的关键密钥是直接从谷歌中搜索来的。作为车企的研发人员,直接拿网上公开教程的例子来作为真实产品的私钥,着实为安全埋了一颗雷……当科技发展得越来越复杂,人犯的错看起来就越低级。这也验证了电影《我是谁?没有绝对安全的系统》里的名言:人才是网络世界中最大的BUG……
详细过程、方法及技术细节可参考Feldman博客:
https://programmingwithstyle.com/posts/howihackedmycar/
https://programmingwithstyle.com/posts/howihackedmycarpart2/
https://programmingwithstyle.com/posts/howihackedmycarpart3/
https://programmingwithstyle.com/posts/howihackedmycarguidescreatingcustomfirmware/
猜你喜欢
- 2025-04-09 超详细的CAD2015 破解版安装教程,每一个步骤让你不再烦恼
- 2025-04-09 一个最简单的通过WireShark破解SSL加密网络数据包的方法
- 2025-04-09 牢不可破的超大要塞,号称比利时巨锁,看德军亲自演示破解密钥
- 2025-04-09 索尼PS5已被破解?知名黑客发文称获得所有控制台秘钥
- 2025-04-09 有了量子芯片就能破解区块链秘钥么?
- 2025-04-09 还在使用简单密码?快修改!别让勒索软件攻击找上门
- 2025-04-09 了解加密与解密的初学者指南(了解加密与解密的初学者指南)
- 2025-04-09 嵌入式代码如何防破解(嵌入代码是什么意思怎么下载)
- 2025-04-09 【亲测有效的电脑技巧】:破解bitlocker
- 2025-04-09 支付中的加密/解密算法——RSA加密和AES加密
你 发表评论:
欢迎- 最近发表
-
- 函数公式的7大潜规则,这次给你讲透了
- 数据逆向查找不止有vlookup,你该知道的三种逆向查询操作
- Vlookup函数怎么一次查找能返回多个结果?
- vlookup函数的嵌套你用过吗?一次可以引用3个表格的数据
- Vlookup函数的新用法,查询合并单元格,很多Excel高手都不知道
- 分明有数据,公式也没错,为什么vlookup还是会返回错误值
- 条件判断还在用if函数就out了,vlookup函数模糊查询一键完成
- EXCEL函数 VLOOKUP函数 HLOOKUP函数
- excel中vlookup函数的用法(excel中vlookup函数公式)
- 自动获取vlookup函数的第三参数,再也不用一列一列的数了
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)