我破解列车上厕所的故事

前几天,我在英国乘坐了一列 800 型列车。这是 “城际特快 “列车,旨在取代古老的 HST(城际 125 号列车,配备 Mark 3 型客车,我对这辆列车有很多回忆,也会深深怀念它)。

在英国,现代列车上的残疾人厕所配有电动门。这些厕所的老式型号内侧有 “打开”、”关闭 “和 “锁定 “按钮,您必须按下 “关闭 “键,等待门关闭,然后再按下 “锁定 “键。没有单独的 “解锁 “按钮;按下内侧的 “打开 “按钮,门会自动解锁并打开。

当然,将关门和上锁功能分开,而不将开门和解锁功能分开是有原因的:这样可以避免拒绝服务攻击,即有人可以在门关闭之前按下 “关门 “键,然后跳出去。如果内部的 “关闭 “按钮会自动锁门,这将导致厕所永远无法进入。

这种设计的问题在于大多数人不了解状态机,这种设计让很多人感到困惑,他们无法正确地锁门,或者认为自己已经锁门,但实际上并没有。

厕所门控制状态机(在老式列车上)

因此,火车上较新的残疾人厕所往往有一个杠杆,你必须移动它才能锁门:

列车残疾人卫生间内部控制装置(800 级)

这种设计是一种改进,因为它对大多数人来说更直观易懂。当然,这根杠杆并不是直接连接到锁闭装置的 “真正 “杠杆,而只是微控制器的一些输入。这就提出了一个问题:当杠杆的状态与门的状态不一致时会发生什么,微控制器又该如何处理?

英国某些型号的列车可以很好地解决这个问题,如果在车门打开时试图将控制杆移到 “锁定 “位置,控制杆会弹回到 “解锁 “位置。据推测,只要车门处于错误状态,控制杆就会被电磁激活,从而使控制杆弹回。

然而,日立选择了一种不同的策略:每当门把手无法从 “解锁 “移动到 “锁定 “位置时,就会伸出一根细小的金属针。这根金属针本身会将门锁把手锁定在开锁位置。

这样做的问题是,在微控制器检测到控制杆处于 “锁定 “位置时,控制杆上会有一些间隙。因此,你可以先关上门,然后握住控制杆,使其刚好超过锁定销与控制杆啮合的位置,但还没有达到读数为 “锁定 “的位置。然后您就可以打开车门,但锁销却会凭空弹出;这样控制杆就可以自由移动到锁定位置。关门按钮保持激活状态,然后就可以关门了。我确认,只要门一关上,门就会立即锁上。由于我可以这样做,然后在门关闭之前跳出去,这实际上是火车上厕所的 DoS 漏洞。

我在这里发布了一段视频,演示了这个问题。

在上图中还可以看到锁销。通常情况下,应该看不到它的投影,但由于我将手柄放在了逻辑认为处于解锁位置的精确点上,但又离它足够远,以至于锁销无法接触到,所以锁销投影到了空气中。

这是我第二次有机会在 Class 800 上测试这个问题。在这次测试漏洞时,我似乎真的把厕所门控制器弄糊涂了,以至于它决定 “去他妈的”,进入了失灵模式,而第一次和前一次都没有发生这种情况。当我下火车时,厕所又开始工作了;我不知道它是在一段时间后自动重置的,还是火车上有人重置了它。

有趣的是,这已经不是我在火车上发现的第一个 DoS 漏洞了,但这还得等下一篇文章。


由于有些人似乎误解了这篇文章,我想澄清一下:我之所以这样做,只是因为我可以在不给任何人造成不便的情况下这样做。当时周围没有人等着上厕所,而且列车上有多个厕所。我没有预料到厕所会 “失灵”,也不完全清楚为什么会发生这种情况,但无论如何,厕所在重启后不久就恢复了正常。无论如何,这段视频并不是我试图真的 DoS 马桶,只是为了证明这是可能的。

本文文字及图片出自 I hacked a train toilet

阅读余下内容
 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注


京ICP备12002735号