BLOG

拾闻对谈 040|为了把车钟改回一小时,他把整台车机越狱了

永亮说AI
AI
广告 · Advertisement

开场小对谈

拾闻:11 月 2 日,爱沙尼亚的伦理黑客 Rasmus Moorats 在博客发了一篇文章,标题很直白:为了改车上的时钟,他越狱了自家车的导航系统。车是 2014 年的雷诺 Latitude,车机是 TomTom Carminat LIVE,跑着基于 2011 年代 Linux 2.6 内核的定制系统。文章冲上 Hacker News,超过 500 分、两百多条评论。有意思的是,技术路线极端,目标极小:把差了一小时的车钟调对。永亮,这是个什么故事?

永亮:起因很日常。爱沙尼亚有夏令时,10 月底从 UTC+3 切回 UTC+2,车钟就慢了一小时。他翻遍设置菜单,找不到改时间的选项。前车主卖车时提醒过他:改时钟需要一张导航地图 SD 卡。他当时不信,觉得多半是前车主不会进菜单,卡就没要。后来逆向确认,前车主说得对:设置菜单的定义本身就存在那张卡里,没有卡,车机连怎么进设置程序都不知道。

Q1:一张 SD 卡,怎么就把时钟锁死了?

拾闻:那就想办法搞一张卡呗,复制一张不行吗?

永亮:不行,这是第一道墙。系统带 DRM:校验 SD 卡的 CID(烧录在卡里的唯一 ID),文件签名也绑定这个 CID,把文件复制到空白卡会被直接拒掉。Moorats 推测这套 DRM 是为了防地图盗版。他查过第三方卖真卡的渠道,连运费到爱沙尼亚大约 60 欧。他转述自己的原话大意是:我不想要地图,我用手机导航,我只是想改该死的时间。于是他做了一个让全网先笑后沉默的决定:不买卡,自己把车机 root 掉。

拾闻:从投入产出看,这不是完全不划算吗?

永亮:算账的话当然不划算,60 欧一次转账就解决,越狱是好几周的无偿劳动。但对他来说这不是成本问题,是原则问题:车是我花钱买的财产,可它最基本的功能之一被一张专有卡扣着。这正是维修权争论的核心场景:你以为你买到了产品,其实你只买到了产品的使用许可,许可的钥匙握在供应商手里。

Q2:破解链条是怎么一环扣一环的?

拾闻:拆开讲讲他的技术路线。第一步做什么?

永亮:第一步是找前人的肩膀。他找到一个前人留下的逆向仓库(法语写的,仓库作者自述重度使用 LLM 辅助),从里面拿到固件下载 URL。固件里一个叫 ttsystem 的文件是 ext3 文件系统,相当于设备的根文件系统。然后他做了我认为最职业的一步:用 QEMU 搭模拟器,定制同版本 2.6 内核、打上补丁、再配一个简易 CAN 模拟器。系统每 3 秒就想重启,他打了补丁直接忽略 reboot 系统调用,强行把它按住。有了模拟器,不碰真车就能反复测攻击思路。

拾闻:模拟器里看到了什么?

永亮:看到这个 2011 年的设备挂载面严得出乎意料:rootfs 只读,SD 卡是 vfat 且 noexec,上面还叠了一层 unionfs,几乎所有分区要么只读要么禁止执行。他的感慨是,2011 年的设备有这么强的安全设置,令人意外。他还逆向了车机自定义 UI 脚本语言的解析器 ttn,发现每次开机都会加载一个叫 master.script 的脚本文件,攻击面就在这门脚本语言里。

拾闻:脚本语言给了他什么武器?

永亮:两个半成品。第一个是 SHEX 命令,能让 execve 执行任意二进制,但只接受一个空格分隔的 token:能控制跑哪个程序,传不了参数。SD 卡虽然 noexec,可以用 /bin/sh 加载卡上脚本的方式绕过,可传不了参数,路就走不通。第二个是 LOG 命令,能向指定路径写一行可打印 ASCII,LOGFILE 定义支持 ../ 路径穿越,而 ttn 以 root 运行,理论上能往系统任何地方写字。但 rootfs 只读,其他分区 noexec,写进去也执行不了。他还用 Unicorn 对图片解码器做模糊测试,拿到不少越界读,没有可用的写。手上两块拼图,哪块都塞不进锁孔。

拾闻:那最后是怎么拼上的?

永亮:这是全篇最漂亮的一段。他想起内核漏洞利用里的经典技巧 core_pattern:往 /proc/sys/kernel/core_pattern 写一个管道符加命令,程序崩溃时内核会以 root 身份启动这个命令处理 coredump。该特性 2.6.24 引入,车机内核恰好是 2.6.28。于是他用 LOG 的路径穿越把 LOGFILE 指到 core_pattern,写入以 /bin/sh 执行卡上 payload 脚本的管道命令,再用 SHEX 跑 /bin/dbus-monitor:这个程序连不上系统总线时会 SIGABRT 自尽,产生 coredump,又不会连带整机重启。内核一看有 coredump,就乖乖以 root 执行了他 SD 卡上的脚本。最终的 master.script 只有三行。拿到执行权后,他第一件事是用 dd 全量备份 eMMC,然后发现时间存在 /mnt/flash/settings.dat 里,车机根本没有时区概念,从 GPS 取时间、本地偏移按分钟数存:他的是 180,改成 120,收工。

Q3:评论区在吵什么?

拾闻:HN 两百多条评论,主要在说什么?

永亮:高赞方向出奇一致:时钟问题的荒谬是行业病。一位老资格用户说,VCR 时钟难设是 90 年代的老梗,但那时至少还能设;没有专有 SD 卡就完全无法修正时钟,称得上用户不友好设计的极致。还有人举身边的例子:一位亚利桑那的职业程序员说,他的新本田 CRV 时钟半年差一小时,至今没搞明白怎么设。另一位想 root 自己 2014 年的本田车机,理由只是受不了它每次蓝牙连接就自动发播放命令。加拿大的网友更担忧:好几个省明年春天起不再调表,大批车机的 DST 规则不会更新,会遇到同款问题。

拾闻:有没有说他绕远路的?

永亮:有。有人说作者当初该直接买下前车主那张卡,有时候普通用户是对的;有人给出商业解法:直接换后装车机,确认支持方向盘控制之类的功能就行。还有位斯柯达车主说,自己车菜单里就有 DST 开关,顺手吐槽雷诺在人机工程乃至固件上的糟糕设计多年如一。几种声音指向同一个事实:有的厂商把时区切换做成一个开关,有的厂商把它锁进 DRM。差别不在技术难度,在把用户当什么。

Q4:企业软件里,这张 SD 卡长什么样?

拾闻:你带了十七年技术团队,这种剧情眼熟吗?

永亮:太眼熟了。这是我的经验,不是统计:几乎每家大企业的采购史上都有同款剧本。某个系统说这功能要加购模块,某个模块说运行要靠它的 license 服务器,导出格式是私有的,想迁移数据,还有一套只认它的接口在等你。雷诺用的是一张卡,企业软件用的是一纸合同,结构完全一样:供应商锁定的从来不是它卖给你的东西,而是你离不开它的那个环节。DRM 名义上防地图盗版,实际效果是把改时钟这种基本功能扣为人质。当防盗版的手段开始妨碍物主使用自己的财产,它就过界了。

拾闻:作者说 2011 年的安全强得意外,这份意外到 2026 年怎么样了?

永亮:被一个有决心的个人加一套开源工具链拆掉了。QEMU、Unicorn 加上逆向工具全是免费的,靠模糊换安全的策略有保质期,保质期长短由逆向的成本曲线决定。而这条曲线正在被 AI 压低,文章里就摆着证据:作者依赖的那个前人仓库,自述重度使用 LLM 辅助。逆向工程过去是小圈子里的专家技能,现在准入成本明显在降。对厂商来说,这意味着用私有格式锁用户的护城河在变浅:破解不了的用户会乖乖买卡,破解得了的用户一分钱不花。锁定策略的定价权,正在从供应商手里漏出去。

Q5:抛开争议,工程师能抄走什么?

拾闻:这篇文章对做技术的人有什么可学的?

永亮:三件事。第一,自建反馈回路。他一开始不情愿花时间搭模拟器,后来承认模拟器极其有用:没有真机反馈就自己造反馈,试错成本立刻降一个量级。我带团队时也是这个规矩,任何验证不了的环境,第一件事先搭测试工装。第二,把限制当求解条件。不能执行就让内核替你执行,传不了参数就找一个自己会崩的程序,高手的差别不在权限多少,在规则之内还能不能出棋。第三,动手之前先备份。他拿到执行权第一件事是 dd 全量备份 eMMC,这个习惯值得每个工程师原样抄走。

拾闻:评论区有个声音引起了不少共鸣:把发现写下来,留给未来的自己。

永亮:对,有人提醒作者:幸好写下来了,因为半年后夏令时再切换,他还得重来一遍。底下好几个人说这太真实了,个人项目也该把发现写下来给未来的自己。越狱的另一面不是叛逆,是过日子。最后说说我的总体判断:这个故事会被维修权争论反复引用,因为它把设备主权的现价标出来了。改一小时,一位伦理黑客需要搭模拟器、逆向脚本解析器、借内核机制绕一圈;普通人的选项只有掏 60 欧买卡。当一种自救只对专家开放,它就不是选项。厂商真正该害怕的不是有人越狱,而是越来越多的人越狱得起。


署名:永亮

广告 · Advertisement

常见问题

为什么Rasmus Moorats要越狱车机?

因为车钟慢了一小时,而修改时钟需要一张专有SD卡,Rasmus Moorats认为这是对消费者维修权的限制。

越狱过程中遇到了哪些技术难题?

系统有DRM保护,SD卡CID校验和文件签名绑定,以及复杂的文件系统设置,如rootfs只读、SD卡noexec等。

Rasmus Moorats是如何最终解决问题的?

他利用了内核漏洞和脚本语言,通过一系列复杂的步骤,最终成功修改了车钟时间。