Geek
“我黑进了一列火车的厕所”
我前几天在英国坐了一次800型列车。这是一个设计用来替换我怀念的、将会深深想念的老HST火车的"城际快车"。
英国的现代火车都有配备电动门的无障碍厕所。这些厕所的旧款型号在门里面有“开”、“关”和“锁”按钮,你必须按“关”等门关上之后再按“锁”。没有独立的“解锁”按钮;在门里面按“开”按钮会自动解锁并打开门。
当然,将关门和锁门功能分开、却不将开门和解锁功能分开是有原因的:它避免了拒绝服务攻击的可能,这种攻击是指有人只要按“关”然后在门关上之前跳出去。如果门里面的“关”按钮自动锁门,这就会导致厕所永久无法使用。
这种设计的问题在于大多数人不了解状态机制,这种设计让很多人感到困惑,他们无法正确地锁住门,或者他们以为锁住了门其实并没有。
因此,现在火车上的新款无障碍厕所通常有一个你必须移动的锁门的杆:
这种设计的改进之处在于它对大部分人来说更容易理解。当然,这个杆并不是一个实际上直接连接着锁门机制的“真”杆,而只是微控制器的一个输入指令。这就引出了一个问题,当杆的状态和门的状态不一致时会发生什么,以及微控制器会如何处理这种情况。
英国的一些火车型号通过让杆在你试图在门开着的时候把它移动到“锁定”位置时自动弹回到“解锁”位置,来稳妥地解决这个问题。这个杆返回机制在门的状态不对的时候可能是由电磁激活的。
然而,日立选择了一个无功之举:当你不应该能把门把手从“解锁”状态转到“锁定”状态时,一个微小的金属插针会凸出来。这个插针本身就把锁定手柄固定在解锁位置。
这种设计的问题在于,关于杆的确切位置和微控制器识别为“锁定”位置的位置有一些差异。因此,你可以关上门,然后把杆停在刚过插针 engages的位置,但没有达到“锁定”的位置。然后你可以打开门,但插针却伸进了空气,这样杆就自由了,可以转到锁定位置。门关门按钮仍然可以使用,然后你就可以关上门。我确定,一旦门关上,门立即就锁上了。由于我可以这样做然后在门关上之前就跳出去,这个问题实质上是火车上的厕所拒绝服务攻击的漏洞。
在这里,我发布了一段视频来演示这个问题。在上面的图片中你也可以看到这个插针。正常情况下,你应该看不到插针凸出来,但因为我把杆停在了一个逻辑认为它处于解锁位置的地方,但又足够远到插针不能触碰到它的地方,所以插针凸出到了空气中。
这是我第二次在800型列车上测试这个问题。在这次测试这个漏洞的时候,我似乎真的让厕所门的控制器混乱了,它决定“去它的”,然后进入了“故障”模式,这在第一次测试的时候并没有发生。当我下车的时候,厕所又开始正常工作了;我不知道它是在一段时间之后自动重置了还是火车上的某个人重置了它。
着实有趣的是,我在火车上发现的这个漏洞并不是它的第一个漏洞。