0x01 前言

我家里有1个萤石摄像头与2个小蚁摄像头作为安防设备,但在过去的一年里爆出多起网络摄像头泄露隐私的事件,让我不得不重新审视网络摄像头联网的问题。

之前我也想过安防设备联网导致隐私泄露或其他安全问题,为了安全起见,我决定逐步将所有IOT设备的网络连接截断,再使用家里的服务器抓取数据并保存。

首先要对网络摄像头动手。

0x02 基础环境

在这里有个建议,如果要购买这类网络摄像头,建议购买海康威视的品牌,家用级别可以选择他家的子品牌:萤石。

因为使用萤石和海康威视的网络摄像头都可以使用他家的监控软件iVMS,以下是下载地址:

安装和使用都是傻瓜式的,如果摄像头与软件位于同一网络,还可以使用自动扫描的方式添加设备。

但是我家里还有2个小蚁的摄像头,所以需要另寻办法进行录像,因为海康威视的软件不支持主动获取RTSP流。

为此我选择一款开源的监控软件iSpy,以下是官网:

有了软件还需要设备支持,我家里萤石摄像头的型号为:C6H,长这样:

因为是云台,所以我将它挂到了墙上。另外两个小蚁是第一个版本,长这样:

萤石的C6H支持APP在线预览的同时还支持海康威视的软件,而且RTSP协议是开放的,这个没什么问题。

小蚁走的是封闭的线路,仅支持APP在线观看,而且在没有公网连接的情况下是无法查看的,会提示设备已断开!而且小蚁的RTSP协议是关闭的。

0x03 小蚁

因为小蚁关闭了RTSP协议,所以要手动将RTSP协议打开。在这里要使用Yi-hack project这个项目的代码:

首先将所有代码克隆到本地或下载zip到本地:

我们只会用到SD文件夹下的文件,该目录下有一个home文件,这是小蚁的固件,另外还有一个名为test的文件夹,主要包含配置文件。

首先需要修改几个文件,进入test文件夹,找到wpa_supplicant.conf这个文件,修改以下内容:

#wifi名称
ssid="your_wifi_ssid"

#wifi密码
psk="your_password"

修改完成后保存即可。然后再打开test目录下的yi-hack.cfg文件,修改以下内容:

#root密码
ROOT_PASSWORD=1234qwer

#摄像头IP信息
IP=192.168.1.121
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
NAMESERVER=192.168.1.254

#LED灯控制
LED_WHEN_READY=-boff -bon

#时区
TIMEZONE=GMT0BST,M3.5.0/1,M10.5.0

#NTP服务器
NTP_SERVER=0.uk.pool.ntp.org

#除错模式
DEBUG=no

这里有几点需要注意的:

  • ROOT密码必须修改,否则会有被入侵的危险!
  • 请问摄像头配置一个固定IP,然后根据实际情况修改配置文件中的IP信息
  • LED状态灯为镜头下方的小灯,这里控制的是摄像头启动成功后的状态灯,有以下几种配置:
    • -boff -bfast : 蓝灯闪烁
    • -boff -bon : 蓝灯常亮
    • -boff -boff : 关闭蓝灯
    • -boff -yfast : 黄灯闪烁
    • -boff -yon : 黄灯常亮
    • -boff -yoff : 关闭黄灯
  • 请配置正确的时区,这个会影响到录像中的时间水印正确与否,我国的时区为:CST-8
  • 请配置正确的NTP服务器,可用的NTP服务器地址请自行查找
  • 除错模式请保持关闭状态!

到这里,基础配置已全部完成。

这时候可以将SD文件夹下的所有文件复制到SD卡中,请注意该SD卡需要预先格式化为FAT32格式。

请注意!不是将SD文件夹复制到SD卡中,而是把SD卡下home文件与test文件夹复制到SD卡中!

在将SD卡插回摄像头前请先重置摄像头,找一根细长的东西戳一下摄像头背部的重置按钮即可。重置完成后先将摄像头断电,再将SD卡装回摄像头,最后接上电源启动。

成功启动后即可通过APP连接摄像头。

如果一切正常,通过浏览器访问摄像头的IP会显示以下内容:

上图箭头所指的地方是RTSP协议高码率的地址,下面为低码率的地址,最底下为音频地址。

如果电脑上安装了popplayer或其他支持RTSP协议的播放器,还可以进行预览测试。

0x04 yi-hack 安全

这个yi-hack是利用了旧版本的固件:

Software and hardware informations
Hardware version informations : 
    hwplatform=2
Software version informations : 
    [sys]
    version=1.8.5.1M_201512011815
    [kernel]
    version=3-0.8
    provider=18e
    devtype=18e
Firmware letter is : 'M'

从上面的代码可以看出其使用了1.8.5.1M_201512011815这个版本,而最新的版本已经到了2017。

因为旧版本并未关闭RTSP协议,具体的关闭时间可以自行了解。同时针对旧版本的固件做了一些自定义hack,所以在test目录下有配置文件。

从配置文件(equip_test.sh)中可以看到他还启动了以下服务:

# * network configuration done in this file. No more need to use a Xiaomi app on a smartphone!
# * http server   : port 80
# * telnet server : port 23
# * ftp server    : port 21
# * rtsp server   : port 554
#      rtsp://192.168.1.121:554/ch0_0.h264     : replace with your ip
#      rtsp://192.168.1.121:554/ch0_1.h264     : replace with your ip

其中80端口为web服务器,就是刚才打开的那个页面;23位Telnet、21为ftp与RTSP的554端口。

为了安全起见,我会将除554以外的服务都关闭,也就是不启动。

先打开test目录下的equip_test.sh文件,找到80与81行,将其注释掉即可禁止Telnet服务自动启动:

### Launch Telnet server
#log "Start telnet server..."
#telnetd &

然后找到345至351行,将349与350行注释掉即可禁止http服务自动启动:

# start the server
log "Start http server : server${HTTP_VERSION}..."
if [[ $(get_config DEBUG) == "yes" ]] ; then
    ./server${HTTP_VERSION} 80  > /${LOG_DIR}/log_http.txt 2>&1 &
#else
#    ./server${HTTP_VERSION} 80 &
fi

最后找到320至326行,将324与325行注释掉即可禁止ftp服务自动启动:

### Launch FTP server
log "Start ftp server..."
if [[ $(get_config DEBUG) == "yes" ]] ; then
    tcpsvd -vE 0.0.0.0 21 ftpd -w / > /${LOG_DIR}/log_ftp.txt 2>&1 &
#else
#    tcpsvd -vE 0.0.0.0 21 ftpd -w / &
fi

如果需要启动以上服务,只需要将yi-hack.cfg配置文件中的DEBUG除错模式启用即可。

请注意!该设备没有配备防火墙,位于同一网络的其他用户都可以访问该设备。为了安全起见,请将不必要的服务关闭或将其放置到不同网段中!

0x05 iSpy

因为该监控软件需要长时间运行,建议将其放置在虚拟机中或其他可长时间开启的设备中运行。同时禁止该设备与公网通讯,以确保安全!

可以通过以下地址下载软件:

安装完成并运行,首先需要配置监控软件的数据存储位置,首先点击软件上的settings并定位到store标签:

然后单击add添加一个存储文件夹,这里可以添加多个,如果有不同组别的摄像头,则可以为不同摄像头配置不同的目录。

如果需要空间自动管理,则需要勾选storage management并配置目录最大大小与旧文件的超时时间。

上图中我配置的目录最大大小为4G,当该目录使用率超过70%的时候会自动删除15天以前的录像。

完成存储配置后点击左上角的“Add”按钮添加设备:

在弹出的对话框中输入RTSP地址并单击test进行连接测试:

萤石的RTSP地址格式如下:

rtsp://admin:[Verification code]@[your cam ip]:554/h264/ch1/main/av_stream

其中Verification code为摄像头底部贴纸上的验证码,请注意大小写;your cam ip为摄像头的IP地址。

小蚁的RTSP地址格式如下:

rtsp://[your cam ip]:554/ch0_0.h264

其中your cam ip为摄像头的IP地址。

测试通过后会显示Connected,然后单击OK。在弹出的对话框中可以做一些配置:

  • Name:监控设备名称
  • Timestamp:录像水印格式
  • Maximum Framerate:在线查看的最大帧数,如果网络状况不好,请下调帧数,15帧已经很流畅了。
  • When Recording:录制时的最大帧数,如果网络状况不好,请下调帧数,15帧已经很流畅了,而且帧数越大,录像文件越大。

最后定位到告警标签:

当启用移动侦测的时候,如果触发告警,还可以与其他设备联动,不过我用不上,需要将Alerts Enable与Messaging两个选项的勾去除。

然后定位到录像标签:

选择录像模式为“record on movement detection”,即检测到移动后开始录像。

  • Max. Calibration delay:校准延迟
  • Inactivity Record:无移动时间,如果30秒内再无移动则停止录像

其他内容保持默认即可,随后定位到存储标签:

  • Media Location:录像存储根目录
  • Directory:该摄像头的目录
  • enable storage management:启用存储空间管理,这对空间不足的情况非常有用:
    • Max folder size MB:该摄像头目录的最大大小
    • Max age hours:最大存储时间,超过该时间即删除录像
      • Archive Instead of delete:存放而不删除,如果勾选此项,达到设定的文件夹大小或超过最大存储时间就会将该旧的录像存放至存档目录

配置完成后即可保存退出。如果一切正常,就可以看到摄像头的数据了:

上面的截图好像没啥意义,因为涉及隐私,所以我将大部分内容都抹掉了。不过在右下角有几个按钮非常有用:

  • All on / All off:全部打开或关闭摄像头
  • Apply Schedule:启用时间表控制
  • record on detect / record on alert:检测到移动或有告警时录像
  • record off / record all / stop record:立即关闭录像、立即开始录像、立即停止录像。
  • alerts on / alerts off:开启告警或关闭告警
  • snapshot all:摄像头快照

0x06 结语

这款软件毕竟是开源的,消耗的CPU资源很高,内存占用倒很少。有其他摄像头监控软件,欢迎给我留言,我也测试一下。

另外群晖也有一款摄像头录像软件,名为Surveillance Station,功能同样强大,不过只支持在群晖中运行,装个黑群晖也是不错的。

完成这一切配置后,我将摄像头与运行着iSpy的虚拟机都禁止连接公网,安全第一!