智能家居黑客术:入侵摩天楼系列(下部)——深入KNX协议与攻防实战

导语:如果说BMS是楼宇的大脑,那KNX就是它的神经系统——大脑决定该做什么,神经系统把信号传递到正确的部位,让建筑真正做出响应。上一期我们介绍了BMS的结构和KNX的基础知识,这一期我们深入技术细节,展示如何实际攻击KNX网络。结论很直接:一个配置不当的KNX系统,可以让黑客从酒店房间的一只智能开关出发,搅乱整栋楼的正常运行。


一、KNX的世界

KNX的应用范围相当广泛。比如,体育场的室内外照明控制、大型商业建筑的照明系统,都大量依赖KNX。一旦你开始留意,会发现KNX几乎无处不在,是serious建筑自动化的标配协议。

首先,让我们看看一条KNX-TP消息(即电报 telegram)的结构。以下是KNX消息的总体格式。

KNX消息结构

我们不会在帧结构的枯燥细节上花太多时间。更有意思的字段是TPCI和APCI,因为这里才是消息告诉我们”正在进行什么类型的通信”的地方。

TPCI APCI帧

TPCI字段告诉我们这条电报携带的是数据还是控制信息。当通信在多个电报之间进行时,它还与序列号协同工作。简单说,如果一条消息被拆分成多个帧,序列号帮助保持顺序。帧数可以很多,当序列号达到15时会回绕到0重新开始。

APCI字段通常定义了消息的语义含义——帮助我们理解这条消息实际上想做什么。正如所料,不同命令类型有不同的代码。

APCI命令

在这些命令中,最值得关注的是MemoryRead(内存读)、MemoryWrite(内存写)和UserMessage(用户消息)。还有一个重要命令叫Escape(转义),它用来扩展APCI代码以支持额外命令。这些在纸面上看起来枯燥,但一旦开始在现场测试协议,就变得非常有意思了。

这就是理解KNX帧(通过KNX-TP传输)的核心信息。提醒一下,KNX-TP就是那根两根线的线路,同时为节点提供电力和数据。我们故意保持解释的简洁,因为这样才能看清更大的攻击面。

二、我们在研究什么

我们把研究重点放在了IP路由器上。下图解释了原因。

KNX组网方案图

一个典型的KNX网络包含连接到总线的传感器和执行器。总线可以通过线路耦合器或IP路由器连接到主干线,而主干线通常连接到以太网。从那里,楼宇系统可以与其他工程系统交互,在某些情况下甚至可以与企业网络连通。一旦这种情况发生,你大概已经能想象到有趣的部分在哪里了。

我们刻意选择了一个非常hard的场景:想象一下,入住酒店后,打开墙壁开关,直接连接到KNX-TP总线。这对普通住客来说是想都不会想的事,但从黑客的角度,这是一条值得关注的路径。

三、搭建测试实验环境

要创建KNX项目,需要ETS5软件——这可不便宜。在现场配置节点之前,还需要启用设备的编程模式。

搭建测试实验环境

这通常意味着要按下设备上的一个小按钮。按钮旁边会亮起一盏灯,表示节点已准备好接受配置。是的,真的需要物理接触设备。在某些安装场景中,这甚至意味着要爬进阁楼,或者到隔壁建筑的机房去找到硬件。然后,像一个正经的集成商那样,你坐下来,掏出笔记本电脑,打开ETS,开始配置节点,让BMS正常工作。

实验环境中的不同设备

在我们自己的测试中,我们简化了环境,搭建了一个小型实验网络:一台Gira IP路由器通过以太网连接到ETS5,一个智能按钮作为传感器,一个调光器作为执行器,还有一台IP路由器用于”接入开关然后黑掉BMS”的场景研究。

当开始研究一个尚未被广泛关注的系统时,你常常会发现手头没有所有想要的工具。KNX-TP收发器就是一个例子。如果没有收发器,可以用路由器直接连接KNX-TP线路。你可以用Wireshark捕获流量,但输出读起来并不愉快。

Wireshark中的KNX-TP流量

有些工具可以把流量转换成CSV格式,让分析变得更轻松。

CSV格式的KNX-TP流量

我们自己还做了一个实用工具,把二进制数据解析成字段,并逐字段给出解释,这样就能更清楚地理解数据流。

KNX-TP分析工具

另一个需要自己动手开发的是网络扫描器。ETS5虽然价格不菲,但在只有三到五个节点的小型网段上,有时也会漏检设备。看起来ETS5是在x.y.0到x.y.255范围内发送255个低优先级请求,然后等待响应。我们的工具用了更简单的思路:提高优先级,向目标设备发送请求,稍等响应,如果没有返回就认为该地址没有设备。这种方法更慢,但能可靠地找到线上的所有设备。

扫描完成后,你可以识别出所有存在的设备。这些设备还会发送一个所谓的掩码版本(Mask Version),由2个字节组成。

KNX-TP中的掩码

根据掩码版本,你可以估算一个设备有多大的研究价值,预测IP路由器在哪里,判断一个节点只是一个简单按钮还是更强大的设备。

四、拒绝服务攻击(DoS)

一旦黑客理解了KNX网络中通信的工作方式,下一步自然就是尝试DoS攻击。在测试中,我们发现攻击一个节点,就可以让整个网段瘫痪。这听起来可能不够刺激,但想象一下在酒店或体育场的影响:酒店老板不想面对一排抱怨灯不亮的客人,体育场运营商更不想在比赛即将开始时照明系统掉链子。

KNX还缺乏对消息重放的防护。如果一条KNX电报被拦截——比如KNX流量恰好经过酒店公共Wi-Fi——它可以在之后被重新发送。这意味着黑客可以通过重放流量,随意开关隔壁房间的灯。

这不是纯粹的理论推演。耶稣· Molina(Jesus Molina)在他的不安全家庭自动化部署研究中,就描述过这种场景。

五、实战案例:ABB酒店解决方案

让我们看一个ABB酒店解决方案的例子。

ABB酒店解决方案

在这里我们可以看到,门禁控制系统与KNX总线是集成的。在这种设置下,发送正确的KNX-TP命令,可能就有机会打开隔壁酒店房间的门——这已经超出了我们本次研究的范围,但这种可能性是存在的,而且足以让这个架构值得深入研究。

六、数据泄露

玩够了灯和门之后,是时候谈谈窃取企业机密了。在这条路径上,你很可能会遇到将网络分段的路由器或网关。假设集成商做得不错,配置了过滤规则,只有特定的KNX消息才能通过网关。

但别忘了APCI命令:MemoryReadMemoryWriteUserMessage

我们为工具扩展了读内存命令。在观察KNX流量时,我们注意到与节点的通信涉及授权。文档提到使用BCU密钥进行密钥授权和安全认证。我们实现了这个机制,收到了二进制数据作为响应。经过进一步改进工具,我们成功从地址0x0到0xFFFF获取了IP路由器应用程序内存的完整转储。

从IP路由器的内存转储中,我们提取出了配置数据,包括IP地址、子网掩码、网关和友好名称。还可以判断路由器使用的是标准多播地址224.0.23.12:3671还是自定义地址。最重要的是,我们识别出了控制电报转发的特定字节——这意味着我们可以看清消息是被允许进入以太网,还是在到达网络其他部分之前就被丢弃了。

到了这一步,我们又加了写内存功能。测试成功后,我们成功修改了这些字节,在没有启用编程模式、没有使用授权密钥的情况下,获得了KNX网络以太网侧的访问权限。这个测试是在ABB路由器上完成的。

七、不同厂商的差异

受到这次成功的鼓舞,我们用同一套流程在Gira路由器上重复了一遍。第一次内存读取失败了——相同的脚本,相同的逻辑,没有任何结果。分析流量后发现,Gira会拒绝授权密钥并终止会话。于是我们去掉授权,把交互简化为只请求给定地址的内存。出乎意料的是,路由器返回了内存数据。同样的方法写内存也成功了。这意味着我们可以在ABB路由器、Gira路由器和西门子路由器上读写IP路由器内存,全程不需要启用编程模式,也不需要提供授权密钥。

有了这个能力,我们可以扩展到其他主干线和区域,执行同样的操作——无论是控制系统还是发起DoS攻击。

八、总结

在这一部分中,我们深入了解了KNX在建筑自动化中的工作原理,重点分析了其电报结构、IP路由器及其产生的攻击面。我们还介绍了实验环境搭建、设备扫描、拒绝服务测试、重放攻击可能性,以及跨厂商的内存读写滥用,展示了这些技术如何扰乱楼宇系统。

在第三部分(最终篇)中,我们将公布本次测试使用的硬件设备详情。

出处:本文译自Hackers Arise,原文链接:

  • 上部:https://hackers-arise.com/smart-home-hacking-hacking-skyscrappers-part-1-building-management-systems-and-knx/
  • 下部:https://hackers-arise.com/smart-home-hacking-hacking-skyscrappers-part-2-working-with-knx/

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容