IP摄像头发现工具
当我的女儿出生时,我决定购买一个IP摄像头放在她的婴儿床上方,以便在夜间随时查看。我选择的是Storage Options品牌的摄像头。在查看随附信息时,我注意到了这样一行描述:
随附软件可为您管理设置过程。支持动态IP地址和DDNS,通过无线连接,您无需担心在家中或办公室布线。
此外,还有“自动注册”和“轻松远程监控”等功能的提及。这些描述让我感到不安,因此决定深入调查。
初步调查
设备可通过有线或无线网络运行。我设置让所有流量经过我的笔记本电脑,启动Wireshark并开启设备。有两个流量特别突出:发往路由器的UPnP流量和发往域名ipcam.hk的Web流量。UPnP流量试图让我的路由器打开一个PAT端口,基本上允许外部世界完全访问摄像头的Web界面——这很不安全!分析Web流量后发现,这是DDNS设置过程。
设备带有一个唯一的6字符代码,手册说明可用于外部查看。例如,如果我的代码是abcdef,则浏览http://abcdef.ipcam.hk即可查看我的摄像头。DDNS的设置方式相当有趣:所有子域名都解析到ipcam.hk域名,而不是返回摄像头的外部IP。浏览子域名时,页面会进行302重定向到摄像头的IP。这是一个巧妙的设计,因为摄像头使用默认端口81而非通常的80端口,用户无需在URL中添加:81,符合易用性目标。
问题所在:摄像头枚举
每个成功注册服务的摄像头,其IP和端口都对任何查询服务的人可用。如果我想要查看代码为xxxxxx的摄像头是否注册,只需浏览xxxxxx.ipcam.hk并查看重定向位置。如果用户的UPnP请求成功,我将直接访问其摄像头的Web界面。批量请求多个URL并不难——问问HD Moore就知道了!
我编写了一个脚本扫描一系列代码,查看返回的IP,并检查是否需要身份验证。我发现了很多开放的摄像头,大多数很无聊,但也有一些有趣的。
后续发展
几个月过去了,不幸的是我没有时间整理所有工作。后来我被邀请在OWASP Leeds演讲,认为这是发布信息的完美机会。我决定获取新数据,但发现ipcam.hk服务已关闭,只有之前收集的数据。我演讲时指出,研究人员的发现通常只在短时间内有效,应尽快发布。我以为事情就此结束,便继续前进。
这一切发生在两年前。现在我们有了第二个孩子,决定也给他买一个摄像头。最终我选择了一个非常相似的摄像头,因为许多公司都在重新品牌化相同的基本摄像头。这个摄像头也宣传相同的功能,但这次使用不同的DDNS提供商:tenvis.info。这次我不会让数据溜走。
凭借之前的经验,我决定放弃之前的Ruby脚本,用Lua编写我的第一个nmap脚本。这相对容易,并且有一个很大的优势:有人负责处理线程、网络和其他底层细节,我不必关心。我设置脚本向tenvis.info域发出HTTP请求,然后解析结果。对于已注册的摄像头,我在一个受密码保护的页面上执行HEAD请求,该页面如果摄像头在线则应存在。这告诉我摄像头是否存在,以及是否需要身份验证。如果我选择,还可以简单地添加检查非常可猜测的默认凭据“admin”和无密码的功能。
所有结果都记录到一个文本文件中,供后续处理。
结果
文本很好,但图片更好,而完全交互式的Google地图甚至更好。我决定将发现的摄像头IP地址通过geo-ip服务处理,看看结果如何。我测试的每个摄像头都返回了一个位置。最后一步是将所有数据操作到JavaScript中,看看效果如何——即使我自己说,看起来真的很棒!你觉得呢?
全球分布
数据来自从aaaa到zzzz的各种范围扫描,全球共有616个摄像头。
英国
注意小红标记,那是一个没有密码保护的摄像头。
德国、比利时和荷兰
一些摄像头和另一个未受保护的摄像头。
更多信息
我为标记添加了气球弹出窗口,以便点击并查看摄像头的更多信息。
代码和数据发布
我考虑过发布收集的代码和数据,但决定不这样做。虽然有一定编码技能的人相对容易重现我所写的内容,但我想至少设置一个入门级的障碍,以防止人们完全滥用这个相当脆弱的生态系统。然而,只要我觉得可以信任,我很乐意与任何人深入讨论这个问题。
结论
这些可以分为三类…
用户
确保您了解连接到网络的任何产品的功能。如果您不知道如何查明,请询问。我知道这说起来容易做起来难,但如果您找到了这个博客,可能至少对安全有一定兴趣,因此请查看论坛和邮件列表。
如果您要将某些东西放在互联网上,请确保它受到适当保护。始终更换默认密码,如果可能,还要更换用户名。如果开发人员留下了未记录的后门账户,这并不总是有帮助,但至少尽您所能。
如果您有其中一个摄像头,请检查您的路由器,看看是否设置了端口映射。如果您不使用它,请删除它;如果您使用,请考虑添加额外保护,可能增加一些隐蔽性,并将其移动到高随机端口。我的摄像头允许禁用DDNS和UPnP功能,因此我也建议这样做。
开发者
考虑您创建的任何功能的潜在攻击面。添加使最终用户生活更轻松的功能通常会降低安全性,但这不应该是必须的。在这种情况下,在打开摄像头到整个互联网之前询问用户是否愿意,可以解决许多问题。我怀疑大多数拥有这些摄像头的人远程访问它们,因此不需要该功能。
强制用户在首次使用设备时设置管理员用户名和密码,可以消除默认账户的问题。
为您无法直接预防的事情制定缓解策略。这里的例子是对DDNS服务的请求进行速率限制。单个IP不需要在一小时内发出超过1000个请求,早期检测并阻止它。
研究者
如果您进行研究,请发布它。我很幸运这一切再次出现,我能够发布它,否则它可能只是丢失在源代码目录中的某个地方。