智能家居设备安全分析手记。随着智能家居的兴起,黑客和安全研究人员也逐渐将目光转向智能家居技术。在本文中,我们将深入研究一款用于控制智能家居系统的设备,称为“eibPort”,该设备的供应商为 BAB TECHNOLOGIE GmbH。这款设备可以利用不同的技术,例如EnoCean或KNX等技术来控制智能家居系统,具体采用哪种技术取决于设备的版本。eibPort提供了一个可视化操作界面来控制整个系统,并且其代码是在web服务器上运行的。通过这个可视化的界面,用户可以打开或关闭窗户,调节不同房间的温度,甚至可以通过简单地点击符号来打开或关闭报警系统。以下截图展示了该界面:
因此,eibPort可以说是系统安全的核心部分,因为eibPort附带的各个软件的安全问题都会系统产生举足轻重的影响。通过本文的分析,将会帮助大家发现其中的一些漏洞。
分析UpdateTool
与其他嵌入式设备解决方案不同的是,BAB TECHNOLOGIE GmbH是通过单独的更新工具来更新设备的,实际上,这个工具就是一个简单的Java Jar文件。这种方法非常有趣,因为更新过程本身与其他解决方案不同。通常来说,更新是在web应用程序中安装的,并提供一个存储所有更新相关数据的独立文件。但是,这里的更新文件将提交给UpdateTool,然后,由这个更新工具将数据传送到设备。所以,我们不妨仔细考察一下这个UpdateTool,有可能发现非常有趣的东西。
UpdateTool启动后,它会搜索位于同一网络中的eibPort设备。如果找到了eibPort,则将显示关于设备的信息,例如IP地址、序列号、安装的固件版本以及各种端口等。
智能家居设备安全分析手记
由于这个更新工具并不复杂,所以我们不妨直接来查看一下它的源代码。当我们编译Java代码的时候,这些代码将会被转换为一种中间形式(JVM字节码),该中间形式保留了原始Java代码中的大量信息。这使得反编译Java代码变得非常容易,就本例来说,我们要处理的.class文件位于Jar文件中。
更新工具的源代码
在使用Java反编译器打开文件“UpdateTool-20141219.jar”之后,我们可以看到更新工具中包含的软件包的代码结构。
其中,有两个名为“babtec”和“eibport”的包引起了我们的注意。在分析源代码以及不同类和方法之间的关系之后,我们在类“KeyStorageStatic”中找到了一个加密的DSA私钥。
实际上,这个密钥是方法“startUpdate”和“getRescueVersion”以用户“bt1”连接到eibPort时的凭证。事实上,此DSA私钥是加密的,并且将在另一个类中用于连接设备,这表明还必须有加密密钥来解密它。另一个可能情况是,如果更新工具要连接到eibPort,则必须输入密码以解锁密钥,但事实上并非如此。经过进一步的研究,我们发现一个字符串非常符合DSA私钥的上下文,并且看起来像是一个密码。该字符串位于类“UpdateController”中,如下图所示:
智能家居设备安全分析手记
连接EibPort
根据上面收集的信息,我们可以尝试通过SFTP连接到设备。因为我们已经知道了用户名、加密的DSA私钥以及解锁密钥的密码。
正如上图所示,已经成功连接上了,并进入位于"/config/chroot/"的chroot环境。
然而,如果要想获得一个具有更多功能的shell,我们可以上传一个php shell,因为从HTTP响应头X-Powered-By中可以发现,该系统运行的PHP版本为“4.3.1”。在将PHP文件上传到bt1用户的主目录之后,我们就可以通过Web浏览器来访问该文件了。
一旦上传了webshell,我们就获得了该设备的root权限。这是因为,这个Web服务器以root权限运行的,因此上传的PHP脚本也具有同样的权限。这样一来,我们就完全控制了该设备,进而控制智能家居系统。我们不仅可以控制灯和电源插座,还可以打开窗户或门,甚至可以关闭报警系统。
接下来,我们将对这个web应用程序本身进行一番考察,同时还要了解一下它所提供的功能。我们发现一个PHP脚本看起来很有趣,因为它可以提取数据。这个脚本通过GET参数“src”和“dst”来接收两个值。这两个参数的处理过程如下所示:
“exec(“unzip ../..”.$src.” -d ../..”.$dst);”
这两个参数没有对恶意输入进行过滤,而是将输入直接交由方法exec进行处理,然后用于unzip命令。对于不可信的用户输入来说,这种处理方式有可能导致远程代码执行。因为,它可以轻松地逃出实际的unzip命令的上下文,并执行其他操作系统命令,并且也以root权限来执行它们。
智能家居设备安全分析结论
智能家居设备(如eibPort)是智能家居装置的重要组成部分。虽然人们希望能够从任何地方控制他们的家,但他们却没有意识到这种需求背后所隐含的安全隐患。
通过Google搜索或通过编写一个简短的python脚本(可针对特定路径进行爬网),我们可以非常轻松地找到这些设备。如果你知道eibPort上的web应用程序的结构,你可以在互联网上找到数百个可用的eibPort,其中一些甚至没有激活任何认证机制,其后果可想而知。
BAB TECHNOLOGIE GmbH已经为受影响的eibPort版本(2.1)提供了更新。eibPort 2.1的用户应尽快更新其设备,并按照BAB TECHNOLOGIE提供的建议进行相应的处理。这个更新可以在这里找到。