前言
随着科技的不断发展,智能设备的数量也在逐年增长。咖啡机、手环、冰箱、汽车等一系列日常实用的工具正不断变得“智能”起来。除此之外,我们还可以看到智慧街道、智慧道路,甚至是智慧城市的出现。
对于许多人来说,智能摄像头等设备一直都是日常生活中的一部分,大家借助智能摄像头作为聊天设备、安全设备和视频监控系统中的设备,或者用来时刻关注自家的宠物。
现在,很多新型的智能摄像头都可以连接到云端,从而让客户能够使用各种设备来远程观看。
由于智能摄像头的日益普及,其安全性也变得越来越重要。卡巴斯基实验室ICS CERT的研究人员对目前流行的智能摄像头进行了一次研究,并试图找出如何防范联网摄像头被滥用的解决方案。本次研究中所涉及的摄像头,不同于普通网络摄像头,它们都具有丰富的功能,可用作婴儿监视器、家庭安全系统组建或是监控系统中的一部分。
借助于对已知来源的初步分析,我们发现在互联网上的这些摄像头中,有近2000个具有公共IP地址。
Hanwha SNH-V6410PN/PNW智能摄像头
该设备能够以1920×1080、1280×720或640×360的分辨率捕捉视频,具有夜视能力,内置运动传感器,并支持双向通信。举例来说,除了捕捉视频和声音之外,该摄像头还可以使用内置的扬声器播放声音。该摄像头借助于云服务工作,它并不会直接与用户的计算机等设备相连接。如果要对摄像头进行配置,那么需要在摄像头上创建一个无线热点,并将该热点连接到主路由器(Wi-Fii)上。用户可以使用他们的智能手机、平板电脑或电脑来控制摄像头。需要特别说明的是,摄像头的数据只能上传到云端,用户和摄像头之间没有其他的通信方式。
该摄像头基于Ambarella S2L系统(ARM架构),其初始加载器为Amboot。在经过标准引导过程后,Amboot使用特定的命令作为参数加载Linux内核:
console=ttyS0 ubi.mtd=lnx root=ubi0:rootfs rw rootfstype=ubifs init=/linuxrc model=SNH-V6410PN ethaddr=************ sn=ZC7D6V2H*********
s=c
随后systemd启动,之后系统正常启动,将会挂载不同分区,并执行rc.local中的命令。在执行rc.local时,文件mainServer会以守护进程模式启动,该模式是摄像头控制逻辑的核心所在。mainServer会执行经UNIX套接字/tmp/ipc_path通过二进制协议发送给它的命令。一些以PHP语言编写的CGI脚本用于处理用户文件。在启动时,mainServer会打开UNIX套接字/ipc_path。我们对PHP脚本进行了分析,结果表明,负责与mainServer通信的主要函数是在/work/www/htdocs_weboff/utils/ipc_manager.php之中。
与用户的通信
当接收到来自用户的命令(例如旋转摄像头、选择追踪区域、切换到夜视模式)时,就会对其进行分析。针对每个命令或参数,都有相应的标志分配给它们,该标志是一个常量。主标志被记录在/work/www/htdocs_weboff/utils/constant.php中。随后,将会创建数据包头部和有效载荷,并通过UNIX套接字/tmp/ipc_path将请求发送到mainServer。
通过对文件ipc_manager.php的分析,我们发现在这个阶段没有使用认证。该请求是以用户“admin”的名义发送的。
function makeHeader($cmd, $act, $type, $len){
$header = array();
$header = array_fill(0, 77, 0x00);
$header[HEADER_OFF_MAGIC_NUMBER] = 0xFE;
$header[HEADER_OFF_MAGIC_NUMBER+1] = 0xFF;
$header[HEADER_OFF_MAGIC_NUMBER+2] = 0xFE;
$header[HEADER_OFF_MAGIC_NUMBER+3] = 0xFF;
$header[HEADER_OFF_MAJOR_VERSION] = MAJOR_VERSION; //Major Version
$header[HEADER_OFF_MINOR_VERSION] = MINOR_VERSION; //Minor Version
int2byte($header, $cmd, HEADER_OFF_COMMAND); //Command
$header[HEADER_OFF_ACTION] = $act; //Action
$header[HEADER_OFF_MSG_TYPE] = $type; //Type
$header[HEADER_OFF_ERROR_CODE] = 0xFF; //Error Code
int2byte($header, $len, HEADER_OFF_MSG_LENGTH); //Length
str2byte($header, “127.0.0.1“, HEADER_OFF_PEER_IP, 40); //Peer IP[40]
int2byte($header, 80, HEADER_OFF_PEER_PORT); //Peer Port
str2byte($header, “admin“, HEADER_OFF_PEER_ACCOUNT, 16); //Peer Account[16] – Current user name
$header = array_merge($header, array_fill(0, 8, 0xFF)); //Reserved[8]
return $header;
}
摄像头通过HTTP API和SmartCam应用程序进行通信时,会使用此通信命令中的方法。当使用SmartCam应用程序时,数据包会在应用程序之中生成,将通信内容放在消息体中,使用XMPP协议发送。当通过HTTP API和SmartCam应用程序从外部访问该文件时,只能通过Web服务器摘要认证访问该文件。
入侵者可以利用的漏洞
在研究中,我们发现了如下漏洞:
- 固件更新期间,使用了不安全的HTTP协议;
- 在通过HTTP API进行摄像头交互时,使用了不安全的HTTP协议;
- 可通过文件“dnpqtjqltm”实现Web界面切换的未公开(隐藏)功能;
- “dnpqtjqltm”文件切换Web界面过程缓冲区溢出;
- 具有root特权的远程命令执行漏洞;
- 远程更改管理员密码漏洞;
- SmartCam拒绝服务漏洞;
- 摄像头的管理员账户密码存在暴力破解风险;
- 在服务器xmpp.samsungsmartcam.com上注册摄像头时未进行严格密码强度检查,从而导致SmartCam应用程序用户易受攻击;
- 可通过云服务器与其他摄像头进行通信;
- 可在云服务器上拒绝新摄像头注册;
- 可绕过SmartCam验证更改管理员密码或远程执行命令;
- 可恢复SmartCam云账户的摄像头密码。
通过深入研究,我们确定这些问题不仅仅存在于我们此次研究的摄像头之中,并且还存在于Hanwha Techwin所生产的所有智能摄像头中,而该公司还为三星的摄像头提供固件。
接下来,我们详细介绍后续的研究发现。
未公开的功能
如上所述,我们发现了一个未公开的功能,可以使用摄像头的Web界面进行操作。
有趣的是,我们还在这个Web界面中发现了一个缓冲区溢出漏洞。在发现后,我们及时向制造商报告了该问题,目前该问题已经修复。
云服务器结构中的漏洞
在云服务器的体系结构中,我们还发现了另外一个高危的漏洞。由于在架构设计上出现了一些问题,导致入侵者可以通过云端访问所有摄像头并对其进行控制。
其中,主要问题在于它是基于XMPP协议。实质上,整个Hanwha智能摄像头云平台是一个Jabber服务器。在该服务器上,有所谓的房间(Rooms),每一个房间代表着一种类型的摄像头。攻击者可以在Jabber服务器上注册一个任意账户,并访问该服务器上的所有房间。
下图为使用XMPP协议发送消息,创建一个测试帐户:
下图为上述消息解码后的内容:
在与云平台进行通信的过程中,摄像头会发送用户的凭证和一组常量。我们分析了发送的数据,发现凭借该数据,远程攻击者可以在云平台中对尚未注册的现有摄像头进行注册。而一旦攻击者进行了注册,实际拥有者就不能再在云中注册。此外,攻击者可以以任意摄像头的名义与云平台进行通信,也可以通过云平台控制任意摄像头。
攻击场景
其中,一个有趣的攻击维度是对摄像头中设置的指定DNS服务器地址进行欺骗攻击(Spoofing)。该攻击被证明是可行的,因为更新服务器被指定为摄像头配置文件中的URL地址。即使摄像头没有全局IP地址并位于NAT子网中,我们也可以实施此类攻击。该攻击是利用Hanwha SmartServer云架构的特性和其中存在的漏洞来实现的。此类攻击可能导致经过修改的固件被推送到存在未公开功能的摄像头之中。因此,摄像头就可以作为攻击本地(NAT子网中)或全局网络中设备的一个攻击源。
另一个攻击场景是,我们可以克隆任意摄像头,并伪造其图像信号展现给最终用户。为了实现这一目的,入侵者需要在摄像头与云平台的交互过程中找到目标摄像头的型号、序列号和MAC地址。随后,攻击者可以借助密码生成算法中的漏洞来重置密码,并修改克隆摄像头(攻击者所拥有的相同摄像头)的固件。随后,受害者的摄像头被远程禁用,受害者将会受到来自攻击者克隆的相机的视频信号。
此外,还有其他攻击场景。用户可以使用摄像头向不同的社交媒体和在线服务(如Twitter、Gmail、YouTube等)指定他们的凭据。该功能用于将摄像头捕获到的各种事件发送给用户。攻击者可以利用这一功能,进行网络钓鱼活动或发送垃圾邮件。
总结
经过我们的研究,发现攻击者可以利用智能摄像头实现多种攻击。
举例来说,攻击者可以远程修改管理员的密码、在摄像头上执行任意代码、访问摄像头云平台并对其进行控制,或者构建一个易受攻击的摄像机僵尸网络。攻击者可以访问任意的SmartCam以及任何Hanwha智能摄像头。
对于普通用户来说,远程攻击者可以看到摄像头所拍到的画面、将语音消息发送到摄像头的内置扬声器播放、使用摄像头的硬件资源进行加密货币挖掘等。此外,远程攻击者还可以将摄像头停用,从而导致用户要花费一定的时间对其进行恢复。
在发现漏洞的第一时间,我们就向制造商报告了上述内容。截至目前,一些漏洞已经进行修复。根据制造商的反馈,其他漏洞很快就会被完全修复。
已修复的漏洞被分配了如下CVE编号:
CVE-2018-6294
CVE-2018-6295
CVE-2018-6296
CVE-2018-6297
CVE-2018-6298
CVE-2018-6299
CVE-2018-6300
CVE-2018-6301
CVE-2018-6302
CVE-2018-6303