深入分析网络智能摄像头的RTSP协议安全风险

本文为转载,原作者:山石网科安全技术研究院

网络摄像头作为现代安防体系的关键组成部分,已经广泛应用于各类场所,包括交通枢纽、教育机构、企业办公区、零售商场等公共和私人领域。它们主要负责提供实时视频监控,以加强安全性并防范事故。随着物联网(IoT)技术的不断发展,网络摄像头的功能日益智能化,不仅可以进行图像捕捉,还能进行事件检测、自动跟踪和数据分析等操作。

然而,随着技术的进步,网络摄像头的安全风险也日益凸显。由于这些设备经常配置为通过公网进行远程访问,因此它们本身存在安全漏洞、不当的安装和配置,以及缺乏持续的维护和更新,使其成为网络攻击的易目标。黑客可能会利用这些漏洞进行数据泄露、侵犯隐私,甚至发动更广泛的网络攻击。

网络摄像头所面临的威胁不仅限于黑客的恶意入侵,还包括软件缺陷、固件漏洞、默认密码的滥用以及不安全的网络通信协议等。在评估网络摄像头的安全性时,需要从设备、软件和网络三个层面来探讨潜在的风险和防御措施。

设备层面涉及网络摄像头的物理安全性和固件更新;软件层面关注摄像头的操作系统和应用程序的安全性;而网络层面则包括设备的网络配置、数据传输加密和访问控制策略等。只有全面理解并采取综合性的安全策略,才能有效地提升网络摄像头的安全防护能力,保护其免受网络威胁和滥用的危害。

01关于RTSP协议

RTSP(实时流协议)是一个网络控制协议,设计用于娱乐和通信系统中控制流媒体服务器。该协议用于建立和控制媒体会话中的时间同步流。RTSP 提供了一个可扩展框架,使得能够实现对实时数据,如音频和视频的控制。与HTTP不同,RTSP提供了对流数据的实时控制功能,比如可以随意快进或倒退。

RTSP 主要用于以下场景:

①视频监控系统

②会议系统

③媒体播放器与媒体服务器之间的交互

RTSP 协议通常运行在 TCP 或 UDP 协议之上,使用的端口是554。它允许客户端发送播放、暂停和停止等控制指令,以及进行实时播放位置的调整。

RTSP 与 RTP(实时传输协议)通常一起使用,其中 RTSP 负责控制和信令,而 RTP 负责数据的实时传输。

RTSP(Real Time Streaming Protocol)定义了多种方法(也称为命令或操作),用于客户端与流媒体服务器之间的通信。以下是RTSP协议中定义的一些常见方法:

①OPTIONS:用于查询服务器支持的方法和功能,客户端可以向服务器发送OPTIONS请求,以确定服务器所支持的操作。

②DESCRIBE:用于获取流媒体会话的描述信息,包括媒体类型、编解码器信息、媒体流地址等。

③SETUP:用于建立客户端和服务器之间的传输通道,包括传输协议(如RTP/UDP或RTP/TCP)、媒体流地址和端口等参数。

④PLAY:用于开始播放流媒体数据,客户端发送PLAY请求后,服务器开始向客户端发送媒体数据。

⑤PAUSE:用于暂停播放,暂停后可以通过发送PLAY请求来继续播放。

⑥TEARDOWN:用于关闭流媒体会话,释放相关资源。

⑦ANNOUNCE:用于向服务器发布新的媒体流,通知服务器有新的媒体流可用。

⑧RECORD:用于开始录制媒体数据,告知服务器将数据录制到指定的存储位置。

⑨REDIRECT:用于重定向客户端到另一个RTSP服务器或媒体流地址。

这些方法构成了RTSP协议中客户端和服务器之间的基本通信机制,通过这些方法可以实现对流媒体数据的控制和管理。

1.1 RTSP认证方式

RTSP(Real Time Streaming Protocol)支持多种认证方式,用于保护流媒体服务器资源,以下是一些常见的RTSP认证方式:

①基本认证(Basic Authentication):

基本认证是最简单的一种认证方式,客户端发送用户名和密码的组合给服务器,以进行身份验证。这种方式的安全性相对较低,因为用户名和密码会以明文形式发送,容易受到中间人攻击的威胁。

②摘要认证(Digest Authentication):

摘要认证是一种更安全的认证方式,它使用哈希算法来保护用户的密码。服务器向客户端发送一个随机数(称为nonce),客户端使用该随机数、用户名、密码等信息计算一个哈希值,并将其发送给服务器进行验证。由于密码在传输过程中不以明文形式发送,摘要认证比基本认证更安全。

③OAuth认证(OAuth Authentication):

OAuth是一种开放标准的认证协议,用于授权第三方应用程序访问用户的资源。在RTSP中,可以使用OAuth认证来实现对流媒体资源的安全访问控制。

④TLS/SSL认证(Transport Layer Security/Secure Sockets Layer Authentication):

TLS/SSL是一种基于公钥加密的安全传输协议,可以在RTSP连接上使用TLS/SSL来保护通信的安全性。客户端和服务器可以通过证书进行身份验证,确保数据在传输过程中不被窃听或篡改。

⑤IP地址认证(IP Address Authentication):

IP地址认证是一种简单的认证方式,服务器只允许特定IP地址范围的客户端访问资源。这种方式适用于需要限制特定网络或子网访问的场景。

1.2 RTSP流路径

RTSP(Real Time Streaming Protocol)中的路径指的是流媒体资源的标识符,用于客户端请求服务器上的特定媒体流或会话。RTSP路径通常由URL的路径部分表示,类似于HTTP URL中的路径。

RTSP URL的一般格式为:rtsp://<服务器地址>/<路径>

路径部分指定了服务器上的特定资源或媒体流。路径可以是相对路径或绝对路径,具体取决于服务器的配置和资源的存放方式。通常情况下,路径由斜杠(/)分隔成不同的部分,每个部分表示一个资源或目录。

|例如,一个RTSP URL可能是这样的:rtsp://example.com/live/stream1

在这个URL中,路径部分是/live/stream1,表示服务器上的一个名为stream1的实时媒体流,位于live目录下。客户端可以使用这个URL来请求并播放该媒体流。

02、shodan搜索网络摄像头

在shodan 使用语法 port:554 has_screenshot:true 进行搜索

打开VLC media player,配置流地址

播报rtsp流

03、摄像头rtsp安全测试

3.1 探测存活

使用nmap探测存活,命令:nmap -A --open -T4 -sV ip -p 554

编写python脚本扫描554端口,发送arp包获取mac地址,获取网卡厂商名称。

运行结果:

3.2 获取认证方式

获取rtsp协议认证方式,可以发送options和describe请求进行,如下图所示,获取到认证方式为401 Basic和Digest, 如果返回的状态码为200,说明存在未授权访问。

编写python脚本发送options和describe请求获取rtsp认证方式和未授权检测。

def get_auth_method(host, port):            
    sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)            
    try:            
        # print("check alive: {}:{}".format(host, port))            
        sk.settimeout(15)            
        sk.connect((str(host), port))            
        headers = "OPTIONS rtsp://{}:{}/ RTSP/1.0\r\n".format(host, str(port))            
        headers += "CSeq: 2\r\n"            
        headers += "User-Agent: LibVLC/3.0.18 (LIVE555 Streaming Media v2016.11.28)\r\n\r\n"            
        sk.send(headers.encode())            
        msg_recv = sk.recv(1024).decode()            
        if 'RTSP/1' in msg_recv:            
            dd = "DESCRIBE rtsp://{}:{}/ RTSP/1.0\r\nCSeq: 3\r\nUser-Agent: LibVLC/3.0.18 (LIVE555 Streaming Media v2016.11.28)\r\n\r\n".format(            
                host, port)            
            sk.send(dd.encode())            
            msg_recv = sk.recv(1024).decode()            
            # print(msg_recv)            
            if '200 OK' in msg_recv:            
                return (host, port, '未授权')            
            if 'WWW-Authenticate: Basic' in msg_recv:            
                return (host, port, 'basic')            
            if 'WWW-Authenticate: Digest' in msg_recv:            
                return (host, port, 'digest')            
            else:            
                return (host, port, 'unsupported')            
    except Exception as e:            
        pass            
    finally:            
        sk.close

3.3 爆..破用户名、密码和流路径

rtsp协议认证主要有Basic和Digest两种,它的rtsp url通常是这样的 rtsp://username:password@192.168.1.2/live/stream

我们可以通过字典穷举的方式,爆..破..用户、密码与rtsp流路径,rtsp流的路径可以通过ispyconnect进行收集,它包含了市面上几乎所有摄像头的rtsp流路径。

准备好字典后,我们就可以编写Python脚本进行自动化的爆破,代码的主要逻辑是通过遍历username、password、rtsp流路径进行爆破。

总结

网络摄像头在现代安防体系中扮演着重要的角色,摄像头的RTSP协议作为流媒体传输的重要组成部分,也存在着一系列安全挑战,对摄像头的RTSP协议进行安全分析和测试是确保网络摄像头安全的重要一环,通过深入理解协议特点和安全风险,以及采取相应的安全措施,可以有效提升摄像头系统的安全防护能力,避免被黑客攻击和滥用。

本文为转载,原作者:山石网科安全技术研究院

相关推荐
WilliamLuo14 小时前
MP4结构初识-第一篇
前端·javascript·音视频开发
音视频牛哥7 天前
Android平台如何拉取RTSP|RTMP流并转发至轻量级RTSP服务?
音视频开发·视频编码·直播
声知视界7 天前
音视频基础能力之 iOS 视频篇(一):视频采集
音视频开发
关键帧Keyframe9 天前
音视频面试题集锦第 15 期 | 编辑 SDK 架构 | 直播回声 | 播放器架构
音视频开发·视频编码·客户端
关键帧Keyframe15 天前
iOS 不用 libyuv 也能高效实现 RGB/YUV 数据转换丨音视频工业实战
音视频开发·视频编码·客户端
Crazy Struggle16 天前
.NET 全功能流媒体管理控制接口平台
.net·开源项目·流媒体
关键帧Keyframe16 天前
音视频面试题集锦第 7 期
音视频开发·视频编码·客户端
关键帧Keyframe16 天前
音视频面试题集锦第 8 期
ios·音视频开发·客户端
海思开发板总店19 天前
零基础玩转IPC之——如何实现远程实时查看监控视频(P2P)
h.265·p2p·h.264·流媒体·监控开发
蚝油菜花21 天前
MimicTalk:字节跳动和浙江大学联合推出 15 分钟生成 3D 说话人脸视频的生成模型
人工智能·开源·音视频开发