Jump ESP, jump!: 我是如何黑掉我的IP摄像头并发现这个后门账户的
时机已到。我购买了第二个物联网设备——一台廉价的IP摄像头。由于它是所有选项中价格最便宜的,我对它的安全性期望很低。但这台摄像头仍然让我大吃一惊。
也许我稍后会在博客中披露这次黑客攻击中使用的摄像头型号,但首先,我会尝试就这些问题联系相关人员。不幸的是,似乎很多不同的摄像头都有这个问题,因为它们都是基于相同的SDK开发的。再次强调,我对这方面的期望很低。
明显的问题
我打开盒子,迎接我的是一个四位数字的密码。这是“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扫描
让我们对这台设备运行一次快速的nmap扫描。
|
|
已知的HTTP服务器、通过BusyBox的telnet服务器,以及端口8600(至今未检查)。27页的在线手册没有提到任何Telnet端口。我们该如何命名这个端口?调试端口?还是后门端口?我们会看到。我手动尝试了root用户的3个密码,但由于这些密码不起作用,我继续前进。
双盲命令注入
IP摄像头可以按计划将照片上传到配置的FTP服务器。当我配置它时,不幸的是,它根本不起作用,我在服务器上收到了无效的用户名/密码。经过一些调试,发现问题是我在密码中有一个特殊的$
字符。这就是真正旅程开始的地方。我确信这是一个命令注入漏洞,但不确定如何利用它。有多个问题使得利用更加困难。我称这个漏洞为双盲命令注入。第一个盲点是我们无法看到命令的输出,第二个盲点是因为命令在与Web服务器不同的进程中运行,因此任何涉及睡眠的基于时间的注入都不是真正的解决方案。
但第三个问题是最糟糕的。它限制在32个字符。我能够通过DNS泄漏一些信息,比如通过以下命令我能够看到当前目录:
$(ping%20-c%202%20%60pwd%60)
或URL解码后清理:
$(ping -c 2 \
pwd`)`
但每当我尝试从/etc/passwd泄漏信息时,都失败了。我尝试了$(reboot)
,这是一个相当糟糕的主意,因为它将摄像头变成了无限重启循环,摄像头上的硬重置按钮也无法工作。有趣的时光。
以下是我拼命尝试获取shell访问权限的一些例子。现在是时候感谢EQ在黑客会话之夜提供的帮助以及他的好主意。
|
|
在我最终黑掉摄像头后,我看到了问题。这台设备上没有head、tr、less、more或cut……也没有netcat、bash……
我还尝试了commix,因为它在YouTube上看起来很有前途。把commix想象成sqlmap,但是用于命令注入。但不幸的是,这种双盲黑客攻击对这个自动化工具来说有点太难了。
但在花了太多时间没有进展之后,我终于找到了打开芝麻的密码。
$(echo 'root:passwd'|chpasswd)
现在,通过telnet登录
|
|
哇哦 :) 我很快注意到了命令注入问题的根源:
|
|
每当一个命令被放入FTP密码字段时,它就会被复制到这个脚本中,并且在脚本被调度后,它会被shell解释为命令。之后,我开始恐慌,因为我忘记保存/etc/passwd文件的内容,那么我将如何破解默认的telnet密码?“幸运的是”,重启摄像头恢复了原始密码。
root:LSiuY7pOmZG2s:0:0:Administrator:/:/bin/sh
不幸的是,没有必要为这个任务启动老旧的John The Ripper,因为Google可以告诉你这是密码123456的哈希值。它比行李密码安全一点。
总结
现在是时候回顾一下我们有什么了。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摄像头的人认为它们会安全。现在我明白了随IP摄像头而来的贴纸。
当在《Mr. Robot》的下一集中,你看到有人通过telnet以root:123456登录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:“由于代码重用,漏洞存在于大量摄像头列表中(尤其是InfoLeak和RCE),这允许我们对1250多个具有预认证漏洞的摄像头型号执行root命令。”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/