当前位置:物联网市场动态 → 正文

物联网设备安全分析之MAX! Cube LAN Gateway篇

责任编辑:editor007 |来源:企业网D1Net  2016-12-26 20:41:06 本文摘自:51CTO

前言

在这篇文章中,我们将为读者介绍如何对物联网设备进行安全评估。这里将会详细介绍进行评估所需的基本方法:对于不同的任务需要使用哪些工具,以及如何解决在分析过程中可能出现的问题。本文的目标读者对为对物联网设备安全分析感兴趣的朋友,对逆向工程感兴趣的读者,或者只想了解如何通过技术手段来处理未知设备的读者。

本文的重点不在于揭示某种设备的某种漏洞,而在于阐释影响各种IoT设备的安全弱点,因此,本文介绍的内容同样适用于其他的设备和场景。

分析对象

本文的分析对象是来自eQ-3公司的 MAX! Cube LAN Gateway (以下称为“Cube”)。实际上,许多产品都捆绑了该设备,比如我的加热控制系统中就带有该设备。通过该设备名称中的“Cube”不难猜出,它只是一个LAN网关,通过RF技术实现真正的“物联网设备”或“智能设备”之间的通信。在本文中,我们将重点介绍以太网通信,因为它是管理软件的主要通信方式。

搭建中间人攻击场景

为了全面地了解该设备的通信状况,我搭建了一个简单的中间人攻击场景。我在自己的系统上使用了一个USB网卡,并将其直接连接到Cube。首先,打开Cube,但是不要使用任何管理客户端或其他需要通信的软件,这样就能了解Cube自身发送了什么数据包。我们发现,它只是试图通过DHCP获得IP,然后开始解析ntp.homematic.com。

为了让Cube可以访问互联网,我已将自己的USB网卡配置为Cube的路由器。为了在不使用DHCP的时候可以通过192.168.0.222访问Cube,我把设备的IP地址设为192.168.0.1/24,并进行了如下所示的配置,以允许通过USB网卡的NAT访问互联网:

sysctl net.ipv4.ip_forward=1

iptables -t nat -A POSTROUTING -o enp0s25 -j MASQUERADE

iptables -A FORWARD -i enp0s20u9u3 -o enp0s25 -j ACCEPT

iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

注意:设备enp0s20u9u3是连接到Cube的USB网卡,enp0s25是系统上的另一个网卡,该网卡连接到具有互联网连接的路由器上。

因为Cube会向默认的路由器发送DNS查询,所以,我们可以在机器上设置一个DNS服务器,或者直接将DNS查询转发给相应的域名服务器(例如OpenDNS服务器):

iptables -t nat -A PREROUTING -i enp0s20u9u3 -p udp --dport 53 -j DNAT --to 208.67.222.222:53

iptables -t nat -A PREROUTING -i enp0s20u9u3 -p tcp --dport 53 -j DNAT --to 208.67.222.222:53

这样一来,我们就能设法观察Cube发送的所有的数据了,例如使用Wireshark或tcpdump等工具来嗅探连接到Cube的NIC上通信数据。

发现网络中的Cube设备

为了方便管理员自动识别本地网络上的Cube设备,Cube提供了相应的网络发现功能。下面的Wireshark屏幕截图展示了由本地管理软件发送的数据包:

该软件会向23272端口上的多播组地址224.0.01发送UDP数据包。在右下方,标记出来的hexdump部分是有效载荷(eQ3Max * x00 ********** I)。这是一个所谓的身份消息,用来命令Cube向数据包的源主机报告其序列号。下面的截图显示了Cube的响应:

同样,这里响应的有效载荷也在右下侧(eQ3MaxApKMD1016788> I)做了标记。 我的设备的序列号是KMD1016788,所以一切正常。现在,我们只要发送这样的UDP数据包,就能轻松找出本地网络上所有的Cube设备。同时,我们也可以检查某个主机是否是使用单播数据包的Cube设备。

我们自己也可以发送所有这些数据包,甚至单播数据包。对于这些任务,我更喜欢使用Scapy来完成。因为有了它,我们就可以在交互式Python shell中创建、发送/接收和操作数据包,这样做是很方便的,因为这样可以同时进行其他任务,如进行计算或数据转换。Cube使用的UDP端口是23272。我们可以从前面的示例中获取相应字符串(这是一个“身份消息(identity message)”,由有效载荷末尾的“I”表示),并将其发送到目标主机:

>>> p = Ether()/IP(src="192.168.0.1", dst="192.168.0.222")/UDP(sport=23272, dport=23272)/Raw("eQ3Max*

关键字:cubeffff哈希值

本文摘自:51CTO

x 物联网设备安全分析之MAX! Cube LAN Gateway篇 扫一扫
分享本文到朋友圈
当前位置:物联网市场动态 → 正文

物联网设备安全分析之MAX! Cube LAN Gateway篇

责任编辑:editor007 |来源:企业网D1Net  2016-12-26 20:41:06 本文摘自:51CTO

前言

在这篇文章中,我们将为读者介绍如何对物联网设备进行安全评估。这里将会详细介绍进行评估所需的基本方法:对于不同的任务需要使用哪些工具,以及如何解决在分析过程中可能出现的问题。本文的目标读者对为对物联网设备安全分析感兴趣的朋友,对逆向工程感兴趣的读者,或者只想了解如何通过技术手段来处理未知设备的读者。

本文的重点不在于揭示某种设备的某种漏洞,而在于阐释影响各种IoT设备的安全弱点,因此,本文介绍的内容同样适用于其他的设备和场景。

分析对象

本文的分析对象是来自eQ-3公司的 MAX! Cube LAN Gateway (以下称为“Cube”)。实际上,许多产品都捆绑了该设备,比如我的加热控制系统中就带有该设备。通过该设备名称中的“Cube”不难猜出,它只是一个LAN网关,通过RF技术实现真正的“物联网设备”或“智能设备”之间的通信。在本文中,我们将重点介绍以太网通信,因为它是管理软件的主要通信方式。

搭建中间人攻击场景

为了全面地了解该设备的通信状况,我搭建了一个简单的中间人攻击场景。我在自己的系统上使用了一个USB网卡,并将其直接连接到Cube。首先,打开Cube,但是不要使用任何管理客户端或其他需要通信的软件,这样就能了解Cube自身发送了什么数据包。我们发现,它只是试图通过DHCP获得IP,然后开始解析ntp.homematic.com。

为了让Cube可以访问互联网,我已将自己的USB网卡配置为Cube的路由器。为了在不使用DHCP的时候可以通过192.168.0.222访问Cube,我把设备的IP地址设为192.168.0.1/24,并进行了如下所示的配置,以允许通过USB网卡的NAT访问互联网:

sysctl net.ipv4.ip_forward=1

iptables -t nat -A POSTROUTING -o enp0s25 -j MASQUERADE

iptables -A FORWARD -i enp0s20u9u3 -o enp0s25 -j ACCEPT

iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

注意:设备enp0s20u9u3是连接到Cube的USB网卡,enp0s25是系统上的另一个网卡,该网卡连接到具有互联网连接的路由器上。

因为Cube会向默认的路由器发送DNS查询,所以,我们可以在机器上设置一个DNS服务器,或者直接将DNS查询转发给相应的域名服务器(例如OpenDNS服务器):

iptables -t nat -A PREROUTING -i enp0s20u9u3 -p udp --dport 53 -j DNAT --to 208.67.222.222:53

iptables -t nat -A PREROUTING -i enp0s20u9u3 -p tcp --dport 53 -j DNAT --to 208.67.222.222:53

这样一来,我们就能设法观察Cube发送的所有的数据了,例如使用Wireshark或tcpdump等工具来嗅探连接到Cube的NIC上通信数据。

发现网络中的Cube设备

为了方便管理员自动识别本地网络上的Cube设备,Cube提供了相应的网络发现功能。下面的Wireshark屏幕截图展示了由本地管理软件发送的数据包:

该软件会向23272端口上的多播组地址224.0.01发送UDP数据包。在右下方,标记出来的hexdump部分是有效载荷(eQ3Max * x00 ********** I)。这是一个所谓的身份消息,用来命令Cube向数据包的源主机报告其序列号。下面的截图显示了Cube的响应:

同样,这里响应的有效载荷也在右下侧(eQ3MaxApKMD1016788> I)做了标记。 我的设备的序列号是KMD1016788,所以一切正常。现在,我们只要发送这样的UDP数据包,就能轻松找出本地网络上所有的Cube设备。同时,我们也可以检查某个主机是否是使用单播数据包的Cube设备。

我们自己也可以发送所有这些数据包,甚至单播数据包。对于这些任务,我更喜欢使用Scapy来完成。因为有了它,我们就可以在交互式Python shell中创建、发送/接收和操作数据包,这样做是很方便的,因为这样可以同时进行其他任务,如进行计算或数据转换。Cube使用的UDP端口是23272。我们可以从前面的示例中获取相应字符串(这是一个“身份消息(identity message)”,由有效载荷末尾的“I”表示),并将其发送到目标主机:

>>> p = Ether()/IP(src="192.168.0.1", dst="192.168.0.222")/UDP(sport=23272, dport=23272)/Raw("eQ3Max*

关键字:cubeffff哈希值

本文摘自:51CTO

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^