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扫描结果
|
|
已知的HTTP服务器,通过BusyBox的telnet服务器,以及8600端口(尚未检查)。27页的在线手册完全没有提及这个Telnet端口。我们该怎么称呼这个端口?调试端口?还是后门端口?我们拭目以待。我手动尝试了3个root用户的密码,但都没有成功,于是继续探索。
双重盲注命令注入
IP摄像头可以按计划将照片上传到配置的FTP服务器。当我配置时,它完全无法工作,服务器报错用户名/密码无效。经过调试发现问题出在密码中包含特殊字符$。这才是真正冒险的开始。我确信这是一个命令注入漏洞,但不确定如何利用。多重因素使得利用更加困难。我称这个漏洞为"双重盲注命令注入"。第一重"盲"是因为我们看不到命令输出,第二重"盲"是因为命令运行在与Web服务器不同的进程中,因此任何涉及sleep的时间盲注都不是真正的解决方案。
但第三个问题最严重:限制32个字符。我通过DNS泄露了一些信息,比如用以下命令可以看到当前目录:
|
|
但当我尝试从/etc/passwd泄露信息时都失败了。我尝试了$(reboot),结果证明这是个糟糕的主意——摄像头陷入无限重启循环,而且硬件复位按钮也失效了。真是"有趣"的时刻。
以下是我拼命尝试获取shell访问权限的一些例子。在此要感谢EQ在黑客之夜的帮助和他的好点子。
|
|
当我最终黑进摄像头后,发现了问题所在:设备上没有head、tr、less、more或cut命令…也没有netcat或bash…
我还尝试了commix,它在YouTube上看起来很强大。可以把commix想象成sqlmap,但是用于命令注入。不幸的是,这个双重盲注对自动化工具来说太难了。
芝麻开门
在花费了过多时间却毫无进展后,我终于找到了"芝麻开门"的密码:
|
|
现在,通过telnet登录:
|
|
太棒了 :) 我很快发现了命令注入问题的根源:
|
|
当在FTP密码字段输入命令时,它会被复制到这个脚本中,脚本被调度执行后,命令会被shell解释执行。之后我开始惊慌,因为我忘记保存/etc/passwd文件内容了,怎么破解默认telnet密码?“幸运的是”,重启摄像头恢复了原始密码。
|
|
不需要启动老牌的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末尾添加了这些行:
|
|
如果你想,也可以通过注释掉/system/init/ipcam.sh中的telnetd来禁用telnet服务。
如果你想禁用云连接(这会使移动应用无法使用),在/system/init/ipcam.sh开头添加以下行:
|
|
你可以使用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),扫描这些用户名/密码对:
|
|
更新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/