实测一款IoT路由的安全性如何?从web到硬件,我们进行了全面的漏洞挖掘和分析(上)
2019-09-02
EwoPrivKeyHeader.pngEwoPrivKeyHeader.png

以Ewon IoT 200 Flexy路由器为例

1.png1.png

Ewon所生产的设备已在全世界范围内被广泛使用,以下是Ewon给出的统计数据:

2.png2.png

eWON公司成立于2001年,在过去的十几年里,eWON已成为智能互联网远程访问产品市场的领导者。2016年年初eWON成为瑞典HMS工业网络公司旗下品牌,为自动化设备和系统连接到工业网络提供相关产品。HMS eWON主要产品:工业VPN路由器、工业VPN LAN路由器、工业VPN ADSL路由器。

3.png3.png

进入Web界面

直接接上电源,即可使用Ewon IoT 200 Flexy路由器。默认情况下,设备的IP地址被设置为10.0.0.53,默认帐户为:

用户名:adm;

密码:adm;

WEB——基本身份验证

Ewon Web应用程序会对其用户进行基本身份验证:

4.png4.png

验证是通过HTTP进行通信的,而不是HTTPS。 不过我们在测试时,验证过程并不顺利,设备返回了以下警告:

“基本认证不安全,请不要登录此设备”

WEB——XSS

以下就是认证过程发生的事情:

5.jpg5.jpg

所以,我们盗用了一些身份认证信息,因为基本身份验证的base64 cookie太差了!

获取主解密密钥

事实证明,无论是通过XSS进行网络钓鱼,还是将其保留为默认值,一旦你成功访问了该设备,就可以为所欲为了。不过,我们忽略了一件事,就是管理员帐户和较低级别用户帐户之间的授权分离。

在查看Web应用程序或访问存储敏感数据的文件时,它们似乎是以我们以前从未见过的自定义方式加密的。这引起了我们的兴趣,所以我们进行了仔细的分析。

下图是经过身份验证的用户在输入值后,并将其存储在配置中后看到的内容:

6.png6.png6.1.png6.1.png

或者你可以只做一个简单的post请求,并获取加密的VPN私人证书:

7.png7.png

现在,就让我们开始破解这些存储的字符串。

我们将使用密码字符串,因为它现在要小得多,但同样适用于更大的VPN证书和密钥。

这是输出的管理员用户的用户名和存储的密码:

[“ptp”,”#_1_EHyXHCXlKSnkcW2f7kthnIg=”]

现在,敏锐的人将立即看到一个有前缀和一个经过base64编码的值。

“#_1_” = Prefix
“EHyXHCXlKSnkcW2f7kthnIg=” Base64 Encoded data.

如下所示,解码后的数据无法使用:

8.png8.png

如果这个问题不解决,我们就无法知道实际的密码。

由于我们已经知道XSS /不安全HTTP通信中的密码,但是如果可以解密数据,则是否意味着我们也可以解密VPN私钥呢?

首先,我们将另一个用户添加到Ewon路由器,并将密码设置为可接受的最小长度——“aaa”。

测试用户密码被加密为“#_1_BXWfyGY =”,然后我们删除前缀“BXWfyGY =”并解码base64数据。它为我们提供了一些随机查看数据“.u.Èf”。

由于我们只输入3x“a”作为密码,但在解码后的字符串的末尾却添加了一些额外的字符,这是为什么呢?

在没有完全理解加密方法的情况下,我们决定将密码修改为“aba”,以查看它是如何更改的?结果密码被修改为“#_1_BXafyJY=”。

显然以下两个输出的密码之间有一些相似之处:

“BXWfyGY =”= aaa
“BXafyJY =”= aba

由于前两个字符是相同的,这是否意味着它是按每个字符加密的?

于是我们再次将输入的密码改为“aab”,进行输出结果验证:

“BXWfyGY=”-  “.u.Èf” = “aaa”
“BXafyJY=” -  “.v.È.” = “aba”
“BXWciGc=” -  “.u..g” = “aab”

经过分析,确实是对每个字符进行了加密,然后在最后添加一些内容。我们猜想,可能是使用了XOR方法。

现在,让我们启动CyberChef,CyberChef是英国情报机构政府通信总部发布了一款新型的开源Web工具,为安全从业人员分析和解密数据提供了方便。

GitHub链接:https://github.com/gchq/CyberChef

由于我们知道了密码“3”的长度,也知道它的明文变体是“aaa”,所以我们用CyberChef来进行进一步分析,分析结果如下。

9.png9.png

以上的分析结果部分验证了我们刚刚的猜测,之所以说是部分,是因为最后仍然有两个结尾的字符无法符合我们的猜想。现在让我们先忽略这些问题,看看是否可以获取完整的22个长度的密码。

虽然可以,这对CyberChef来说是非常费力的,所以我们编写了一个python脚本来让这个过程自动化,并让它继续运行:

10.png10.png

那么这个密钥也适用于PTP用户的原始密码吗?

11.png11.png

经过测试,确实可以,它也会执行私有证书数据:

12.png12.png

另外,我们还在众多Ewon Flexy设备上尝试过这种方法,在所有设备上都能运行。

这就是说,我们可以通过XSS从有效用户窃取凭证,或者如果我们在同一个LAN上,也可以获取加密的敏感数据并对其进行解密等,我们可以使用存储在配置中的私钥和密码进入现有的VPN连接。

目前,我们向Ewon披露了这个漏洞。因为从理论上讲,必须通过身份验证才能进入设备。此外,这些设备都不应连接到互联网。

WEB——默认认证

现在让我们说说默认的认证,这些机制在Ewon的产品中被广泛使用。对于初始设置,这是理想的。但是,当你进入设置向导时,用户名和密码都是默认填写的:“adm:adm”!

13.png13.png

Ewon应该在这里设置一些检查,来阻止人们接受默认值,只有进行了修改才能点击“下一步 ”。

如果你看看第一幅图中,Ewon产品使用的广泛程度,以及之前的Shodan.io搜索,你就可以知道,有多少人因为没有改变默认值而遭殃了吧!

此外,默认的认证还会被用于在同一主机上运行的FTP服务。

14.png14.png

默认情况下,Web Portal和ftp分别设置在端口80和21上,并且在端口81上为Web门户设置了一个辅助端口,稍后我们将对此进行详细介绍。

路由硬件分析

路由硬件分析,由于Ewon设备是一个具有许多可用功能的物联网设备,所以攻击面会很多。

把Ewon Flexy拆卸后,就可以很清晰地看到其中的电路板。它看起来像是外围电路设备/子板的单个控制器以及后开槽的操作系统板:

15.png15.png

共有四个插槽可供连接电路子板,以及一个SD卡插槽和4个ETH端口:

16.png16.png

背面有一个操作系统板插槽和一些可用的测试板:

17.png17.png

我们感兴趣的是操作系统板上的NAND闪存,操作系统板上的测试板和墨盒插槽旁边的主板上的3个测试板。

JTAG接口分析

当我们看到左上2行5列圆形测试板时,我们立即想到“JTAG”,但说实话,知道这个是没有任何意义的。你可以在左上角看到有一个2-20个插槽连接器,我们怀疑它可以用来快速连接到JTAG编程器并闪存设备。

我们将电线焊接到测试焊盘上并启动一个JTAGulator,测试图如下:

118.png118.png

经过测试,这就是JTAGulator所说的引脚

19.png19.png

获取设备的ID得到如下输出:

JTAG   d
TDI not needed to retrieve Device ID.
Enter TDO pin [1]:
Enter TCK pin [4]:
Enter TMS pin [2]:
All other channels set to output HIGH.
Device ID #1: 0000 0001001010000001 00000100001 1 
-  Manufacturer ID: 0x021
-  Part Number: 0x1281
-  Version: 0x0

经过一些搜索,我们发现它像一个莱迪思半导体公司生产的设备,而不是ATMEL公司生产的设备。

我们不确定到底发生了什么,但它确实停止了JTAG枚举和其余部分的连接:

  halt
Halt timed out, wake up GDB. timed out while waiting for target halted

串行接口分析

接下来,让我们用另一组看起来很有趣的测试板来接着测试。对我们来说,一排三个既可以表示串行接口,也可以表示串行调试接口,所以首先要做的是将Saleae逻辑分析仪连接到三个引脚上,看看发生了什么。

这三个引脚可通过设备底部接入,甚至在塑料外壳上有一个切口。

22.png22.png

我们把一些电线焊接到板子上,并将它们连接到Saleae,看看是否能读到可以帮助我们的东西:

23.png23.png

为了清晰起见,来一个放大图:

24.png24.png

可以看到,BOOTLOADER过程开始了!BOOTLOADER一般分为2部分,汇编部分和c语言部分,汇编部分执行简单的硬件初始化,C部分负责复制数据,设置启动参数,串口通信等功能。在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。

现在我们需要把注意力放在如何让设置具有交互性。我们打开USB 串口,把电线接上,用一个通用终端连接到设备上:

25.png25.png

可以看出,是Linux 3.2.11版本。不过,我们也可以停止启动过程,希望是一个shell:

MMC: mci: 0
In: serial
Out: serial
Err: serial
Net: macb0
Hit any key to stop autoboot: 0
Net: enable eth switch
U-Boot  help
U-boot console is locked
U-Boot  ?
U-boot console is locked
U-Boot 

以上并不是我们想要的,继续:

U-Boot  unlock pw
Var pw not def
U-boot console is locked

以上的内容才是我们想要的!

本文,我们讲了IoT路由的设备在理论上的安全性和可能的安全漏洞。下篇,我们就来实测一下。


上一篇:2019网络与信息安全领域专项赛Web Writeup
下一篇:没有了