频道栏目
首页 > 资讯 > 交换机 > 正文

我是如何Hack TP-LINK家用交换机的

16-06-06        来源:[db:作者]  
收藏   我要投稿

 

LinkSwitchHeader.png

我买了一个小型的TP-LINK TL-SG105E(version 1)交换机,它有一个非常有用的端口镜像功能——比如,它可以把一个端口上的所有数据发送到另一个端口上,这使我很容易嗅探接口上通过的数据。

这篇文章不讨论端口镜像问题,我们涉及到的是交换机的管理接口,如何解码管理设备时的通信流量并从中获取信息,比如设备的登录凭证。

可以看到,这个交换机定位为家用,它没有web界面,使用了一个定制的程序(Easy Smart Configuration Utility),你可以用这个程序通过定制的协议配置交换机。

LinkSwitch1.png

通信流量

我在使用交换机的同时,利用Wireshark嗅探网络流量。这是嗅探到的会话的截屏:

LinkSwitch2.png

上图中最重要的两个会话是最底下的两个,包含了从我的笔记本(192.168.0.2)到交换机(192.168.0.2)的在udp 29808端口上的流量。

可以看到所有的流量都发送给了一个广播地址,255.255.255.255:

LinkSwitch3.png

这意味着任何子网的设备(比如,任何连接到这个交换机的设备)都可以收到这个数据!

或许我们能从中获取交换机的登录凭证,我们先看下数据流:

LinkSwitch4.png

它看起来以某种方式编码了。我们可以看到数据有重复,如果我们使用十六进制查看数据包:

LinkSwitch5.png

可以看到每个包都以5d 74开始,这暗示了使用了简单的不变化的编码模式,要么只是做了XOR或移位,要么使用静态密钥加密。

要解码这段数据,需要知道程序是如何编码数据的。

逆向应用程序

简单查看这个安装后的应用程序,知道它是用Java写的,它已经被编译成了可执行文件(PE文件)。可以用7-zip打开它,提取出编译好的Java Classes:

LinkSwitch6.png

打开之后,class文件可以提取到临时文件夹下,在jd-gui反编译工具中打开,它是jd Java反编译器的图形界面程序。搜索反编译后的class文件,有一个com.tplink.smb.easySmartUtility.RC4类,这里面提示了加密算法,并且包括一个用于加密的密钥:

LinkSwitch7.png

现在,我们知道了加密算法,知道它使用了一个固定密钥,并且获取了这个密钥,下一步就是解密了。

解密文本

我写了一个简单的POC,首先获取Wireshark session中保存的内容,以Raw选项保存数据,这样就将之保存成了下面的十六进制串:

5d746a047dbeb0b2971adf7535477e53422ba2f5d78baeed508f463dc202909aa4ec81c6

5d75ae6a62b7dd37971adf7535477e5c422ba2f5d787aeed508f463dc202909a521281c6d8d52b36

5d77ae6a62b7dd37971adf7535477e5f422ba2f5d797aeed508f74b0c202909a591381c0464e465f27d942b5a44608403418222a80b19b77

5d75ae6a62b7dd37971adf7535477e5e422ba2f5d787aeed508f74b0c202909a5b1981c6d8d52b36

5d75ae6a62b7dd37971adf7535477e59422ba2f5d787aeed508f74b0c202909a5b1181c6d8d52b36

5d75ae6a62b7dd37971adf7535477e58422ba2f5d787aeed508f74b0c202909a5b1a81c6d8d52b36

5d75ae6a62b7dd37971adf7535477e5b422ba2f5d787aeed508f74b0c202909a521281c6d8d52b36

5d77ae6a62b7dd37971adf7535477e5a422ba2f5d793aeed508f4e5cc202909a591381c0464e465f27d942b5a44608403418222a7c4e9b77c7eb7608

5d75ae6a62b7dd37971adf7535477e45422ba2f5d787aeed508f4e5cc202909a491381c6d8d52b36

5d75ae6a62b7dd37971adf7535477e44422ba2f5d787aeed508f4e5cc202909a6b1381c6d8d52b36

5d75ae6a62b7dd37971adf7535477e47422ba2f5d787aeed508f4e5cc202909a6b1281c6d8d52b36

5d75ae6a62b7dd37971adf7535477e46422ba2f5d787aeed508f4e5cc202909a7b1381c6d8d52b36

5d75ae6a62b7dd37971adf7535477e41422ba2f5d787aeed508f4e5cc202909a1b1381c6d8d52b36

每一次换行是一个数据包。每一行都以相同的值开始,可以推测是对每一个数据包分别加密的。

我在github上发布了一个RC4函数的python脚本,我移除了里面的key,这样可以防止脚本小子滥用它。

下面是python代码执行后,解密出的内容:

LinkSwitch8.png

用红框标注的字节是admin的登录凭证(admin:admin),这样,我就可以控制这个交换机了。

如何防护

它是一个安全问题吗?或许是的,如果你使用了这个交换机,或者同一系列的产品(SG-108e),那么其通信流量是不安全的。

理论上,你可以配置VLAN,只使用一个接口进行管理,解决这个问题。

我和TP-LINK的技术支持进行了讨论,他们回复很积极:

1、通过广播发送管理工具和交换机之间的流量

管理工具与设备之间使用广播通信是一般的做法,其它产品也是这种方式,比如NegGear。

如你所说,广播的确有其缺点,但在大多数情况下,局域网是相对安全的环境。我们在局域网的出口使用NAT路由器和防火墙。但是如果局域网不安全了,即便我们没有使用广播,其它的方法,比如ARP欺骗,也可以获取管理工具和交换机间的通信流量。

2、关于逆向管理工具和固定密钥加密

我们的Easy Smart Switch是家用或小型办公室用的产品,芯片无法满足非常高的安全性。

由于管理工具使用Java语言编写,这意味着其无法避免被反编译——这是Java的特点,我们无法改变。不过我们的研发人员会认真考虑这个问题,以保证下个产品更加安全。

相关TAG标签
上一篇:ElasticSearch(七)--请求体查询
下一篇:盗版用户面临的“APT攻击”风险 “:Bloom”病毒分析报告
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站