我是Greg Heffner,这是关于好莱坞黑客如何使用监控摄像头的对话。 你们中的某些人也许不知道,当我第一次发表有关该主题的文章时,路透社互联网门户上出现了一篇文章。

对我来说,作为演讲者,真的很棒。 但是问题是,这篇文章决定强调我是在一个由三个字母组成的名称的特定机构工作的,最近在新闻界对此的关注很少。 此外,他们走得太远,以至于他们声称我在BlackHat上介绍了我为这个三字母代理机构所做的工作。 这份出版物引起了我前任老板的一些非常有趣的电话。
幸运的是,我们有可以接听我电话的人,所以基本上他们是向他们喊叫,而不是向我喊叫,但是我仍然必须向人们保证,最后,我能够说服前雇主有时在互联网上也是如此。
因此,非常明确地说,我将解释说,今天的演讲不是关于我曾经为前雇主所做的任何工作,而是关于我为现任雇主所做的工作。 我是Tactical Network Solutions的全职漏洞分析器,我还教授嵌入式设备操作课程,并偶尔涉足入侵无线设备。
今天,我将讨论监视摄像机的安全性,或者说缺乏这种安全性。 从2011年初开始,我开始研究连接到监视网络的摄像机固件的安全性问题,并发现了许多有趣的事情。
我将抛弃“零时差”威胁,当我谈到它时将首先讨论,首先,我将向您展示如何以真正的好莱坞黑客的方式利用我发现的漏洞。
因此,当我开始学习监控摄像机时,必须说我学习了许多内置设备,但没有学习摄像机,所以我想从简单的事情入手,这肯定可以确保我获得胜利。 我之所以选择D-Link,是因为他们从不失望。

我选择了DCS-7410,价格在900美元左右,这是最昂贵的户外天气摄像机D-Link之一,可在日夜模式下工作。 像我们今天将要讨论的其他摄像机一样,它具有管理界面,支持通过Internet访问视频流到Web服务器,并且还通过网络(PoE)供电。 这使其成为攻击者非常有吸引力的目标。
特别是,此相机使用Lighttpd II,这是一种不经常与嵌入式设备一起使用的开源Web服务器。 开发人员创建了一个合理的配置和规则,限制了对通过Web服务器可以访问的内容的访问。
在下一张幻灯片上,您将看到如果要在cgi / admin管理目录中获得某些内容,则需要具有管理员权限。 如果要在video目录中获取内容,则可以是任何用户,但必须经过授权。 它们具有Web界面中每个单独目录的条目和登录规则,但cgi-bin目录除外。


大多数相机cgi脚本位于受cgi保护的目录中。 不受保护的cgi-bin目录仅包含一个文件rtpd.cgi,这是一个bash shell脚本,用于实时启动和停止RTP摄像机传输协议。

但是,rtpd.cgi脚本有一个严重的缺陷。 它通过用空格替换$ QUERY_STRING字符串中的所有&字符来解析查询参数,然后使用eval函数获取结果:

因此,如果您只想停止摄像头,只需发送一个请求:rtpd.cgi?Action = stop。 当按预期使用时,以下HTTP请求将更改名称?Action,其值将设置为“开始”位置:
$ wget http://192.168.1.101/cgi-bin/rtpd.cgi?action=start
但是由于$ query_string中的数据是通过eval方法盲目执行的,因此攻击者只需将其指定为http GET参数的一部分即可执行任何命令:
$ wget http://192.168.1.101/cgi-bin/rtpd.cgi?reboot
因此,黑客可以重新启动相机。 实际上,我很难对此漏洞进行分类,因为它甚至不是命令的注入,我们不输入任何内容,而只是允许使用其他参数来执行该程序。 我将此漏洞称为“ Ron Burgundy”,因为它实际上可以完成您在查询字符串中输入的所有内容。

攻击者可能利用此漏洞从NVRAM获取普通的摄像机管理员密码。 重启后,相机启动脚本将执行以下命令,并向浏览器发送此类响应:

现在,您不仅具有root用户访问权限,因为在收到密码后,您还将成为管理员,因此您可以使用相机和视频进行任何操作。
事实证明,与许多制造商一样,D-link确实很喜欢通过安装相同的固件来重用代码,这在他们的许多产品中都是如此。 但这不仅影响D-link产品,因为Trendnet和此类设备的其他“非品牌”制造商也采用了类似的做法。 现在,相同品牌的制造商之间以及不同品牌之间的代码重用都非常普遍。 此漏洞包含在Shodan Dork计算机漏洞集合资源中索引的许多相机型号的固件中。

对于某些人来说,此漏洞可能看起来很熟悉,这可能是因为在我就此主题发言之后,Core Security为这些产品设置了漏洞索引CVE-2013-1599,表明该漏洞仅存在于D-link设备中,而未提及任何漏洞。从另一家制造商在其设备中使用相同的固件。 即使其中一家制造商纠正了新固件版本中的错误,大多数设备还会在接下来的3年内保持脆弱状态,因为通常没有人按时更新固件,而有些人也不知道它是什么。 就像我说的那样,D-link产品是最便宜的攻击目标之一,因此让我们看一下来自知名厂商的摄像机,例如Cisco的PVC 2300型号,这是一款价值500美元的中档商务级IP摄像机。

它目前还具有Web服务器,并且使用HTTP格式的密码文件提供身份验证。

大多数人都熟悉此系统-您可以在要使用密码保护的任何目录中安装HTTP密码文件或更准确地说是指向集中式密码文件的链接。 因此,如果您查看固件,则每个目录的Web界面都包含一个.htpasswd密码文件,但位于/ usr / local / www / oamp的目录oamp除外。

它包含一堆XML文件,而不是密码文件,这些XML文件充当到二进制文件oamp.cgi的链接。 让我们看看这个cgi的作用。 事实证明,它实现了一种微型API,该微型API与Web界面中运行的所有其他东西完全分开。

他希望您被要求采取某些措施,包括下载配置文件,更新配置文件,下载固件更新文件,更新固件等等。 开发人员不是那么愚蠢,因此在执行您的请求之前,oamp.cgi会检查您是否具有正确的有效会话ID。

如果您没有有效的会话标识符,那么它唯一可以做的就是输入登录名。

这本身很有趣,因为他们实现了接口中其他任何地方都未使用的身份验证检查。 我开始了解它们如何控制输入,即登录。 他们依靠您的用户名和密码,没有其他惊喜。


然后,他们对PRO_GetStr函数进行了两次调用,我不知道它们会影响什么。 但是我知道第一次调用此函数会给它两行-OAMP和用户名L1_usr,第二次调用-再有两行,OAMP和密码L1_pwd。


然后,返回用户L1的第一个值,并将其与认证期间指定的用户名用户L1_usr进行比较,还返回字符串的第二个值-密码password L1_usr,将其与用户在登录时输入的密码进行比较。


大概是这个L1用户名和密码,无论取什么值,都可以为该OAMP接口提供正确的登录名。 我在固件中可以找到的唯一与用户名和密码确实相关的其他位置是在配置文件中。

并且这些值在操作期间使用OAMP节配置文件的设备中进行了硬编码。 您会看到在L1_admin行中设置了L1用户登录值,并且在L1_51行中设置了用户密码值。
这是一个真正的问题,因为所有这些OAMP接口和这些硬编码帐户都是完全没有文档的,因此,除了那些费心地研究固件的人之外,没人知道它们在那里。 当然,管理员永远不会这样做。
但是,即使他知道了这一点,也无法更改这些值,因为此摄像机中没有管理员界面。 硬编码的秘密密码的问题在于,由于使用了后门,它们在短时间内仍然是秘密的。
因此,我们可以使用这些后门帐户登录并获取会话ID。 现在,我们可以将此会话ID与请求一起发送,我们还可以调用oamp.cgi支持的任何其他操作,包括下载设置配置文件。


问题是,如果您尝试使用Base64对其进行解密,那么这将无法正常工作,您只会收到一堆垃圾。 当Base64不是Base64时就是这种情况。

当您在PVC-2300固件本身的二进制文件中查看Base64最终代码时,其原因变得很明显-此处创建了编码基础,但是它使用了非标准的Base64密钥字符串,该字符串是在分析代码64的加密和解密时发现的。使用Python,很容易将Python Base64模块中的密钥字符串更改为自定义密钥字符串,如幻灯片所示。

因此,使用几个Python字符串,我们可以轻松地解密配置文件并将其转换为纯文本,从而在管理员登录名下提供了登录选项。

获得了摄像机的控制权之后,我们可以看到服务器机房。 问题在于查看服务器机房确实捕获了最初的10秒,但随后却变得相当无聊。

因此,我返回了代码,开始研究下载固件的可能性。 这实际上非常有趣,因为您可以指定自己的URL,而不是从官方站点将固件文件下载到设备,而是设备将转到该地址并下载其认为是固件的内容。

在调用libc系统函数之前,system2函数仅根据格式字符串和url生成命令,这使攻击者可以通过url参数输入任意的shell命令。 攻击者的命令将以超级用户权限执行,并且由于检查是通过url值执行的,因此在以下脚本的帮助下,绕过它非常容易:
$ wget --header=”sessionID: 57592414” http://192.168.1.101/oamp/System.xml?action=loadFirmware&url=https://127.0.0.1:6 5534/;reboot;
之后,位于此URL的计算机将重新启动,您可以运行所需的任何命令。

此漏洞已经在Cisco监控摄像机的两种型号的所有固件版本-PVC-2300和WVC-2300(具有两个天线的类似摄像机)上进行了测试。 在撰写本文时,Shodan展示了属于旅馆,服务器机房和工程公司的500多个公共IP摄像机,这些摄像机可能为国际空间站开发设备。
因此,尽管您知道这些摄像头不是其主要产品,但D-link和Cisco无法正确保护监视摄像头。 因此,让我们看一下专门设计和制造监控摄像机的品牌。 我选择了IQ Invision,该公司生产昂贵的高清摄像机,例如IQ 832n,每台价格超过1000美元,这一点都不便宜。

我感兴趣的主要原因是这些人将相机安装在我工作的公司大楼内,因此有个人原因。 那么,使用一千美元的专业监控摄像机,您会得到什么呢?
默认情况下,这些摄像机提供未经身份验证的视频图像,并且没有详尽的摄像机安装研究能够更改此默认设置。 虽然管理界面受密码保护,但用户界面无需身份验证即可访问任何摄像机资源,这会造成广泛的攻击。

管理员可以更改管理员的身份验证设置,但是尝试猜测有多少管理员在不更改默认设置(几乎所有内容)的情况下将其相机连接到了Internet。 但是,我们综合大楼中的大多数管理员都很聪明,可以更改这些设置,因此我开始研究不用身份验证还能做些什么。 原来,我可以自由访问该页面。

它包含大量的相机设置,例如焦点设置,这些设置不如用户名和密码有趣。 更有趣的是此oidtable.cgi页背后的代码。 如果您反汇编此二进制文件,则可以看到该页面仅接受一个参数grep,该参数用于过滤返回oidtable.cgi页面的结果。

在检查提供的参数值是否少于32个字符长后,oidtable.cgi将此值放在命令行上,并将其传递给popen:


我所看到的使我刻画了“ facepalm”,并促使我注入了一些团队。

您会在这里看到,就像D-Link一样,我可以执行PS命令并将输出发送回我的浏览器。 因此,无需身份验证,我可以轻松输入将作为root用户执行的任意shell命令。 进程列表表明,这些摄像机中已经安装了Netcat,并且可以输入破折号,所以我敢肯定,与该进程列表相比,这里的大多数人都会想出更多有趣的命令来执行。 但是,我的主要目标是进入管理面板,并且我想出了方法。
16:30分钟
黑帽美国会议。 好莱坞黑客如何使用监控摄像头。 第二部分感谢您与我们在一起。 你喜欢我们的文章吗? 想看更多有趣的资料吗? 通过下订单或将其推荐给您的朋友来支持我们,
为我们为您发明的入门级服务器的独特模拟,为Habr用户提供
30%的折扣: 关于VPS(KVM)E5-2650 v4(6核)的全部真相10GB DDR4 240GB SSD 1Gbps从$ 20还是如何划分服务器? (RAID1和RAID10提供选件,最多24个内核和最大40GB DDR4)。
VPS(KVM)E5-2650 v4(6核)10GB DDR4 240GB SSD 1Gbps至12月免费,在六个月内付款时,您可以
在此处订购。
戴尔R730xd便宜2倍? 仅
在荷兰和美国,我们有
2台Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100电视(249美元起) ! 阅读有关
如何构建基础架构大厦的信息。 使用价格为9000欧元的Dell R730xd E5-2650 v4服务器的上等课程?