网盾科技IT教育,只培训技术精英
全国免费咨询电话: 15827351614
智能家居被破解比针孔摄像头可怕多了

最近我的同事安装了一套Fibaro智慧家居,他也是一个技术达人,所以我们就向他提出请求,看能否破解他们家中的设备。没想到,他竟然同意了。

潜在的攻击向量

首先,我们将介绍我们对Fibaro智能家居攻击面的分析,并考虑每个攻击向量。

就像真正的黑客一样,我们一开始也是从开放的资源中收集了Fibaro的一些设备情况和相关信息。

虽然智能家居设备相当昂贵,但由于Fibaro已经在线发布其设备的大量细节,因此无需拥有特定设备即可获得所需的设备信息。另外,登录公司官网的常见问题解答板块,还能发现一些用户在实践中所碰到的具体使用问题。例如,Home Center可以直接从home.fibaro.com管理,甚至可以通过短信管理。很明显,当网络访问可用时,系统就会连接到云,并且可以通过云进行控制。

另外,从该板块,我们还可以发现Home Center使用Z-Wave协议管理Fibaro设备。该协议通常用于自动化家庭进程,因为它具有比蓝牙更大的范围,但功耗却比Wi-Fi更低。

另一个有趣地发现是,如果网络中接入了某种不属于Fibaro的智能设备(例如,IP摄像头),Fibaro提供了各种插件来将设备集成到一个复杂的设备中,并通过Home Center进行管理。

后来,我们的同事通过wLibraryhich提供了其智能家居的静态IP地址,这大大简化了我们的攻击任务,这样,我们可以访问管理面板登录表单。

智能家居被破解比针孔摄像头可怕多了

管理面板登录表单

扫描显示,这个IP地址只打开了一个可以从外部访问的端口,并将其转发到路由器上的Fibaro Home Center管理面板。所有其他端口都被阻止,开放端口的存在违反了Fibaro的安全建议。但是,如果我们的同事使用VPN访问Home Center,那么我们的分析就无从下手。

来自开源的信息(更准确地说,来自Fibaro的官方网站)足以拼凑出几个可用于对付我们同事家的攻击载体。

通过Z-Wave攻击

这种攻击可以在设备附近发起攻击,攻击者需要对Z-Wave通信模块的代码进行反向工程,且需要在Z-Wave协议上运行的设备的范围内运行这些经过反向的代码。不过,我们没有这么做。

通过管理面板Web界面进行攻击

众所周知,智能家居系统具有用于设备管理的管理面板。这意味着有问题的设备上存在某种后端和数据存储。大多数情况下,由于嵌入式和物联网设备中缺少RAM和持久性内存,服务器角色由PHP或CGI(与轻量级Web服务器一起运行)执行,而文件系统或文件数据库(例如,SQLite)充当存储。有时,服务器端逻辑完全由Web服务器处理,Web服务器采用已编译的二进制ELF文件的形式。在本文的示例中,软件栈由PHP,Lua,nginx,C ++服务器和lighttpd组成,而数据存储在SQLite数据库和文件系统的特殊部分。 管理面板通过PHP编写的API进行操作,这一事实促使我们继续进行调查。要在此阶段使用白盒测试来调查管理面板的漏洞,我们必须获取管理面板源代码和智能家居本身的固件。这将更清楚地了解其体系结构及其内部逻辑进程的结构,例如扫描和下载/安装更新。

通过云攻击

这种类型的攻击可以通过两种方式进行:

1.通过尝试通过已经访问过类似Fibaro设备的云来访问设备;

2.通过尝试访问云,无需访问任何Fibaro设备;

此向量意味着测试软件逻辑,该软件逻辑通常位于供应商的服务器上。正如我们在侦察阶段发现的那样,Home Center可以通过home.fibaro.com、移动应用程序或短信进行管理。即使你没有静态IP地址,也可以通过网络访问你的设备。这意味着设备连接到服务器(很可能是供应商的服务器),从而允许攻击者通过供应商的公共网络访问另一个智能家居。

Web API

Web服务器具有完整记录的API,用于描述方法、参数名称以及它们在请求中可以采用的值。但是,事实证明,要获取这些重要信息,必须登录管理面板。

唯一可以在未经授权的情况下获得的信息是设备序列号:

智能家居被破解比针孔摄像头可怕多了

通过Web界面访问具有完整记录的API

此外,可以在nginx web服务器配置文件中看到,有些请求被代理到用c++编写的本地服务器,有些请求被代理到lighttpd,后者使用mod_cgi在PHP中执行代码。这些PHP请求处理程序被称为“services”。

智能家居被破解比针孔摄像头可怕多了

简化的nginx服务器配置

服务

如前所述,大多数API请求由C ++二进制服务器处理。但是,由于无法解释的原因,开发人员只挑出了部分逻辑(重启设备、恢复出厂设置、创建备份副本等等),并用PHP编写它。

用C ++编写的Web服务器接受来自nginx的所有请求,我们无法直接访问它。因为,我们无法向其发送随机生成的HTTP请求,这大大缩小了此Web服务器的攻击面。

因此,我们对用PHP编写的这部分逻辑非常感兴趣,因为它是可能发起攻击的惟一入口点。

序列号和硬件密钥

每个设备都有一个序列号和一个硬件密钥,用于在云中对其进行授权。每次设备想要执行以某种方式连接到云的操作时。例如,向设备所有者发送SMS或电子邮件,将备份副本上载到云,下载备份副本,设备都会向服务器发送一个HTTP请求,该请求含有序列号和硬件密钥参数。这些参数在云中进行安全检查,以确保数据库中的合规性。如果授权成功,则执行操作。

上面我们讲过,序列号可以通过API请求获取。比如,我们遇到的序列号对应于正则表达式(HCL|HC2)-(d{6})。

由于通过设备序列号就可以进行扫描和检查更新,这使得通过序列号从云端下载任何更新变得非常简单。

获取硬件密钥

存储个人用户数据的设备必须尽可能安全,以防止硬件密钥被获取。为了提高保护级别,设备开发人员有时会剥夺系统中超级用户的权限。在这种情况下,只能开发人员执行相关的操作。但是,有时这种方法会不起作用,因为如果设备所有者想要调整或修复设备中的某些内容(例如,手机代码中的漏洞),他们将无法独立完成。他们需要设备开发人员的帮助,此时,设备开发人员可以使用修复程序发布更新,但不会像人们希望的那样快。因此,开发者通常会选择给予所有者某些超级用户的权限。

不过,Fibaro的开发人员是不会给予Home Center所有者超级用户权限的。因此,我们将从管理面板提升系统权限的选项视为完全的漏洞。

在我们为Fibaro Home Center构建的威胁模型中,首要任务是保护硬件密钥。该设备具有向智能家居所有者发送通知的功能,当智能家居设备报告的问题需要其参与解决时,该通知就会发送给智能家居所有者。任何硬件密钥所有者都可以发送消息,并且不以任何方式控制特定硬件密钥所有者可以联系的收件人列表。

来自云的消息来自地址SERIAL_NUMBER@fibaro.com,其中SERIAL_NUMBER是所有者设备的序列号。可以假设并非所有设备所有者都记得住他们的Home Center序列号。他们可能没有注意到发件人地址中的序列号被替换,确认消息是从@fibaro.com服务器发送来的就足够了。

由于从设备的持久存储器中提取硬件密钥的问题在大多数情况下是时间问题,因此开发人员可能想要改变发送消息和短信的机制。

攻击场景设置

在Fibaro Home Center管理面板中,可以创建“场景”,由在指定条件下执行的Lua编程语言编写的块或脚本组成的行为场景。

Lua提供了一个创建隔离环境的选项,,程序员可以在这个环境中执行Lua中的任意脚本。众所周知,该语言还具有各种各样的漏洞,比如,字节码验证器模块中Lua 5.0.3中最近发现的一个漏洞。不幸的是,我们运气不好,在我们检查的设备上,安装了没有字节码验证器模块的Lua解释器的更新版本(5.2),并且没有任何已知的简单方法可以从Lua沙箱中逃脱。在我们的示例中,在隔离环境中查找漏洞的任务被简化为直接在Lua解释器中搜索漏洞。这个任务非常耗时,因此我们认为从这个角度发起攻击是不合理的。

智能家居被破解比针孔摄像头可怕多了

插件

Fibaro Home Center的许多插件可用于管理可能不属于Fibaro的设备,此功能为我们的攻击提供一个攻击入口,通过插件访问Home Center控制的设备的黑客也能够攻击Home Center并获得访问权限。

云通信

要与云通信,设备将执行以下3个步骤:

1.获取它应该连接到的IP地址和端口;

2.与服务器建立SSH连接;

3.将SSH端口22转发到指定的端口;

因此,Fibaro控制中心可以通过云服务器使用私有SSH密钥连接到Home Center,以执行由设备所有者发送的任何命令,例如通过SMS或通过网站发送的命令。

身份验证

管理员密码SALT值不是为每个设备单独生成的,而是在PHP代码中严格定义的。如果攻击者想要访问所有Fibaro设备,那么他们的目标将变得更加容易。黑客可以下载所有Fibaro智能家庭用户的所有已保存备份副本,然后找到与相同密码相对应的相同哈希值。

漏洞扫描

我们在研究过程中首先关注的是用PHP实现的API部分,对我们来说,测试登录背后的方法是非常有趣的,但是如果没有登录的能力,这个研究向量将不会产生任何攻击效果。

我们实际上调查了我们能找到的唯一入口,但一无所获,看起来研究已经进入了一个死胡同,但是我们决定通过云来研究攻击向量。

我们也无法访问通过其管理智能家居的云(即home.fibaro.com),因此我们只能从访问它的设备上的脚本收集有关云的信息。通常,对云的请求是使用命令行工具cURL从设备发出的。在所有请求中,最有趣的是那些将备份副本上传到云中并从云中下载到设备的请求。

AUTH绕过

在测试处理来自设备的请求的云方法之后,我们发现了一个与授权错误相关的漏洞,允许攻击者列出任何用户的备份副本,将备份副本上载到云,并在没有系统任何权限的情况下下载它们。

这个问题发生在PHP代码中,很可能是由于错误地处理了将硬件密钥的传递值设置为null的情况。

我们认为这个漏洞很重要,因为它允许访问从所有FibaroHome 中心上传到云端的所有备份副本。稍后我们将介绍,使用管理面板中的备份副本和远程代码执行漏洞,可以在不与所有者交互的情况下完全控制Home Center。

远程代码执行

几个远程代码执行漏洞与PHP中的弱隐式类型有关。让我们考虑一个简化的PHP代码片段,其中我们发现了一个漏洞:

智能家居被破解比针孔摄像头可怕多了

简化的PHP代码段

在Fibaro设备上,设备管理的重要部分是使用bash脚本实现的,而bash脚本又调用命令行实用程序来直接执行系统中所需的操作。其中一些可执行脚本使用exec命令直接从PHP代码调用。由于在上面的代码片段中,用户控制的参数随后包含在命令行参数中,因此需要对其进行过滤。如果无法避免执行bash脚本,最好的解决方案是不在bash shell中解释这一行,而是通过pcntl_exec函数以execve()样式运行这个命令。但是,由于PHP中的弱类型,以及$_GET[' parameter_name ']必须接受一个字符串值,这个参数可以等于1234some_data_here_or_may_be_code_injection,在这种情况下,它将通过if($parameter_value>0)检查。因此,利用此漏洞可以从管理面板远程执行代码,并获得设备上的根访问权。

SQL注入

另外,我们还检测到了与注入SQL代码相关的几个漏洞。

随着智能家居软件的发展,引入新的组件和依赖是必然的。但与此同时,它们必定占有有限的内存大小。因此,开发人员不得不质疑系统中是否需要每个新文件,以避免将来为每个设备增加内存而产生不必要的消耗。因此,嵌入式设备的开发人员常常试图尽可能地减少安装到设备上的可执行文件和库的数量。这可能就是Home Center没有一个用于SQLite和PHP交互的库的原因,这个库可以在准备好的语句的帮助下通过设计漏洞实施SQL注入。

智能家居被破解比针孔摄像头可怕多了

包含漏洞的简化代码示例

从上图中可以看出,系统开发人员希望通过使用非常有趣的过滤技术来避免SQL注入。但是,这样的过滤是不够的,因为引号仍然可以使用第一个参数中的反斜杠进行转义。如果有人插入了这样的反斜杠,将导致第二个参数中的字符串上下文断开,并可能导致数据库查询中的SQL注入。

在4.540以前的版本中,所有数据库查询都使用的是事先准备好的语句进行修改和安全重写。

攻击过程

使用识别出的漏洞,我们设法从我们同事的设备中检索了一个备份副本,其中只有一个文件是我们感兴趣的:SQLite数据库文件。仔细检查这个文件,发现里面有很多有价值的信息:

1.我们同事的密码缓存形式与添加的密码盐值;

2.设备所在的精确位置;

3.我们同事的智能手机的地理位置;

4.我们同事在Fibaro系统中注册时使用的电子邮件地址;

5.我们的同事在家中安装的有关物联网设备(包括不属于Fibaro的设备)的所有信息,包括设备型号,文本形式的用户名/密码,内部网络中设备的IP地址等。

请注意,以文本形式存储Fibaro Home Center-integrated IoT设备的密码允许具有访问Home Center和SQLite数据库权限的攻击者访问家中的所有其他设备。

离线强行输入同事密码的尝试没有任何结果,而且家中其他设备的密码都不能用于home Center control panel。然而,如果这样一个简单的攻击就成功了,则不太现实。

如果我们可以暴力破解密码,就可以进入Home Center control面板。然后,为了提高在系统中的权限,我们需要利用上面描述的远程代码执行漏洞。在这种情况下,要访问设备,不需要用户的参与。但是,我们没有这样做。

我们创建了一个特殊的备份副本,其中放置了一个可以执行任何命令的受密码保护的PHP脚本。之后,我们使用相关的云功能,向我们的同事发送了一封电子邮件和一条短信,让他通过从云中下载我们准备好的备份副本来更新设备上的软件(相当于是钓鱼过程)。

不出所料,我们的同事安装了备份副本。

用于执行PHP脚本的Web服务器在具有超级用户权限的设备上运行。因此,在设备所有者安装了备份副本后,我们获得了访问智能家居的最大权限。

这意味着,我们现在可以对同事家中的设备为所欲为了。不过鉴于是测试,我只是改变了他家中闹钟的铃声。

但对于真实的攻击者来说,攻击对象可能是警报器、监控摄像头、空调系统等。

总结

在本研究过程中,我们通过上传和下载备份副本,获取同事的智能家居的root访问权限后,可以通过云获得所有FibaroHome Center的访问权限。