RTSP协议分析与安全实践

RTSP协议,全称实时流协议(Real Time Streaming Protocol),前文已经简单介绍了RTSP相关协议;

RTSP和RTP(RTCP)

这里再提一下RTSP和RTP/RTCP、RSVP的关系;如图:

请添加图片描述

RTSP和HTTP

  • 相似性:RTSP和HTTP协议都使用纯文本来发送消息,而且RTSP协议的语法也类似于HTTP。 RTSP一开始就是这样设计的,主要是为了能兼容使用之前编写的HTTP协议分析代码。
  • 区别:RTSP是有状态的,需要知道当前处于什么状态,也就是说RTSP的命令总是按照顺序发送,某个命令总在另一个命令之前发送。无论处于什么状态,RTSP都不会断开连接。而HTTP则无状态,发送一个命令后,连接就会断开,命令之间没有依赖性。另外,RTSP协议使用554端口,HTTP使用80端口。

RTSP交互过程

RTSP Client RTSP Server OPTIONS request--询问S有哪些方法可用 OPTIONS response--S回应信息中包括提供的所有可用方法 DESCRIBE request--要求得到S提供的媒体初始化描述信息 DESCRIBE response--S回应媒体初始化描述信息,主要是sdp SETUP request--设置会话的属性,以及传输模式,提醒S建立会话 SETUP response--S建立会话,返回会话标识符,以及会话相关信息 PLAY request--(with Session ID)C请求播放 PLAY response--S回应该请求的信息 Streaming Data (RTP over UDP/TCP) PAUSE request (with Session ID)--C请求关闭会话 PAUSE response TEARDOWN request (with Session ID) TEARDOWN response RTSP Client RTSP Server

RTSP交互过程的请求数据解析

由于RTSP跟HTTP的相似,除了在wireshark上捕获RTSP请求,burpsuite一类http流量的测试工具也可以捕获RTSP流量;
请添加图片描述

OPTIONS

请求服务器提供的可用方法;

OPTIONS rtsp://192.170.1.1/xxx RTSP/1.0
CSeq: 34
User-Agent:VLC media player (LIVE555 Streaming Media v2005.11.10)

服务器返回对应的可用方法,常见包含OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE,GET_PARAMETER

RTSP/1.0 200 OK
CSeq: 34
Date: Tue, May 07 2024 07:32:10 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE,GET_PARAMETER //服务器提供的可用的方法

DESCRIBE

请求会话描述信息(SDP)

DESCRIBE rtsp://192.170.1.1/xxx RTSP/1.0
CSeq: 35
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
Accept: application/sdp

详细SDP信息参考SDP协议解析

RTSP/1.0 200 OK
CSeq: 35
Date: Tue, May 07 2024 07:32:11 GMT
Content-Type: application/sdp
Content-length: 414
Content-Base: rtsp://192.170.1.20/xxx/

v=0
o=StreamingServer 3331435948 1 IN IP4 192.170.1.20
s=RTSP Session
c=IN IP4 0.0.0.0
t=0 0
a=control:*
a=range:npt=0-
m=video 0 RTP/AVP 96
a=control:trackID=0
a=rtpmap:96 H264/90000
a=fmtp:96  packetization-mode=1; profile-level-id=4D0033; sprop-parameter-sets=J00AM+dAPAET8s1AQEB8AAADAAQAAAMAyMQAAfoYAAF7k///wKA=,KO48gA==;
m=audio 0 RTP/AVP 97
a=control:trackID=1
b=as:32
a=rtpmap:97 L16/16000/1

SETUP

客户端提醒服务器建立会话,并确定传输模式;通过trackID参数进行控制,0表示rtp包,1表示rtcp包

SETUP trackID=1 RTSP/1.0
CSeq: 37
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
Transport: RTP/AVP/TCP;unicast;interleaved=2-3
Session: 1012;timeout=65

服务端返回会话标识,Session值;

RTSP/1.0 200 OK
CSeq: 37
Date: Tue, May 07 2024 07:32:11 GMT
Transport: RTP/AVP/TCP;unicast;destination=192.170.1.20;source=192.170.1.20;interleaved=2-3
Session: 1012;timeout=65

PLAY

播放请求;

PLAY rtsp://192.170.1.20/xxx/ RTSP/1.0
CSeq: 38
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
Session: 1012;timeout=65
Range: npt=0.000-

返回流数据;

RTSP/1.0 200 OK
CSeq: 38
Date: Tue, May 07 2024 07:32:11 GMT
Range: npt=0.000-
Session: 1012
RTP-Info: url=rtsp://192.170.1.20/;seq=0

$../....H.....tx'k..K4{s>/..f..BI.....22 .(`.o%....$.........tz.....E= ...........#$.......H.....tx(.<.$....`..H.....tx<.. ..F!.....1d.....%2.h 6...h%q.|.te.zs........u.5..X...)y..x...t.C....6s..SE..F.....m[..... .'b/.^.GbV..^n.E.5=7....g..v.ZD;..-z.-..S%...
....4M..>E6.TK....I2pC.....aE.epb.....{.. ....~..h*.7...MY...."..x....Om....|T.7...TI,B+DO+z.b.Z...E..3.-.|T..,.....P%.G.../...V.H.Y.....><......... ..]...1_qq......+[............?.c^....\...y.........*8T....3L.....>3_x.=.84.WG!r..k....V.......x#..a}./J..?t...C...2...W...U....X.[.CB...?v...e..

TEARDOWN

客户端发起关闭请求;

TEARDOWN rtsp://192.170.1.20/xxx/ RTSP/1.0
CSeq: 38
Session: 1012
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

服务器回应关闭会话;

RTSP/1.0 200 OK
Server: UServer 0.9.7_rc1
Cseq: 38
Session: 1012

SDP协议

SDP(Session Description Protocol)是一个描述多媒体通信会话的格式,用来在会话发起者和参与者之间交换会话的参数和能力。SDP 本身并不传送媒体数据,它只描述了媒体流的元数据,比如媒体类型(音频、视频、文本等)、格式、传输协议和网络地址。

v=0
o=StreamingServer 3331435948 1 IN IP4 192.170.1.20
s=RTSP Session
c=IN IP4 0.0.0.0
t=0 0
a=control:*
a=range:npt=0-
m=video 0 RTP/AVP 96
a=control:trackID=0
a=rtpmap:96 H264/90000
a=fmtp:96  packetization-mode=1; profile-level-id=4D0033; sprop-parameter-sets=J00AM+dAPAET8s1AQEB8AAADAAQAAAMAyMQAAfoYAAF7k///wKA=,KO48gA==;
m=audio 0 RTP/AVP 97
a=control:trackID=1
b=as:32
a=rtpmap:97 L16/16000/1
  1. v=(版本) - 指定SDP的版本号,目前通常为0。

  2. o=(所有者/创建者和会话ID) - 描述会话的所有者,包含用户名、会话ID、会话版本、网络类型、地址类型和所有者地址。

  3. s=(会话名称) - 会话的名字。

  4. c=(连接信息) - 网络类型、地址类型和连接地址。

  5. t=(时间描述) - 会话的开始和结束时间。

  6. a=(属性) - 会话属性描述(可选),可以是媒体属性或会话属性,不同的属性有不同的含义。

  7. m=(媒体描述) - 描述媒体类型、端口、协议和格式。

  8. i=*(会话信息) - 提供有关会话的额外信息(可选)。

    i=A Seminar on the session description protocol
    
  9. u=(URI) - 描述与会话相关的更多信息的URI(可选)。

    u=http://www.example.com/seminars/sdp.pdf
    
  10. e=(电子邮件地址) - 提供会话联系人的电子邮件地址(可选)。

    e=j.doe@example.com
    
  11. p=(电话号码) - 提供会话联系人的电话号码(可选)。

    p=+1 617 555-6011
    
  12. b=(带宽信息) - 指定会话或媒体的带宽信息(可选)。

    b=CT:384
    
  13. r=*(重复时间) - 会话的重复时间(可选)。

    r=604800 3600 0 90000
    
  14. z=*(时区调整) - 会话的时区偏移量(可选)。

    z=2882844526 -1h 2898848070 0
    
  15. k=*(加密密钥) - 指定媒体加密的密钥(可选且不推荐使用)。

    k=clear:1234
    

以上是SDP协议中的一些主要字段。SDP是非常灵活的,可以包含多个媒体描述m和多个属性a,每个描述可以有自己的设置,如编解码器、带宽限制和其他媒体特定属性,业务上可以在这个参数上自定义使用。

RTSP安全测试

python脚本

import cv2

# RTSP URL of the video stream
rtsp_url = 'rtsp://192.168.137.81:554/xxx'

# Create a VideoCapture object
cap = cv2.VideoCapture(rtsp_url)

# Check if the video stream is opened correctly
if not cap.isOpened():
    print("Error: Could not open video stream.")
else:
    print("Video stream opened successfully.")

# Loop to display the frames
while cap.isOpened():
    # Capture frame-by-frame
    ret, frame = cap.read()
    
    # If frame is read correctly ret is True
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    
    # Display the resulting frame
    cv2.imshow('RTSP Stream', frame)
    
    # Press 'q' on the keyboard to exit
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything is done, release the VideoCapture object
cap.release()
# Closes all the frames
cv2.destroyAllWindows()

VLC等连接工具

请添加图片描述

burpsuite等http流量请求抓包工具

请添加图片描述

RTSP安全实践

使用RTSPS

观察RTSP的交互过程后,我们可以发现RTSP没有任何权限验证,也没有加解密过程(即使有加密,也是明文传输加密密钥)。因此,RTSP并不是一个安全的协议,与http类似,RTSP有自己的安全版本RTSPS,通过SSL/TLS进行通道加密,以确保传输数据的保密性和完整性。然而,RTSP常用于嵌入式设备摄像头中,这类IoT的场景由于性能等原因的限制,无法使用RTSPS。那么,针对这类场景,有哪些相对安全的方案可以使用呢?

身份验证

因为RTSP是基于HTTP实现的,所以也可以使用HTTP相关的认证服务,包括不限于

  • HTTP基础认证(Basic Authentication)
  • HTTP Digest 认证
  • WS-Security(Web Services Security,简称WSS)

基本就是在服务之前添加一个认证授权,但是在局域网环境下,在配网阶段或者服务第一次开启的时候,需要让用户配置一个账号密码;

私有加密

获取RTSP流量后,主要包括视频和音频流。如果对数据进行加密处理,即使被获取,也无法解析播放。

常见的加密或数据处理方法包括:

  • 数据偏移(非加密)
  • 新增一个字段(非加密)
  • 使用AES加密或其他常见的加密方案

虽然在私有加密中出现了多个非加密的方案,但由于视频流需要实时率,加上嵌入式设备的数据处理能力有限,视频流的数据量较大,因此前两种方法是常见的处理方案。

即使采用AES加密视频流数据,加密key也需要在发送端和接收端存储,且通常是固定的key。一旦被分析提取,其效果等同于未加密。在性能允许的情况下,相对安全的方案是通过用户在身份验证过程中配置的账号密码来衍生对应的加密key。这样,两端都有key并且key不是固定的,但在实际场景下这种方案较难实现。

其他

  • 限制连接数
  • 网络隔离

这里是有一些特定场景的限制,具体也要看业务需求;当然局域网服务本身就很难实现的不存在风险一说,这里也只是为了在有限的条件下达到最好的效果,如果还有其他更好的方案也可以交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/736261.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux简单使用——配置仓库

虚拟机和Xshell连接 在虚拟机上打开终端查看IP 在Xshell上建立会话 输入ssh root192.168.231.123 防火墙关闭 、 重启计算机命令 删除文件 然后ls查看 清除之前的垃圾 最后做一下命令缓存

借助AI快速提高英语听力:如何获得适合自己的听力材料?

英语听力是英语学习中的一个重要组成部分&#xff0c;它对于提高语言理解和交流能力至关重要。可理解性学习&#xff08;comprehensible input&#xff09;是语言习得理论中的一个概念&#xff0c;由语言学家Stephen Krashen提出&#xff0c;指的是学习者在理解语言输入的同时&…

全栈人工智能工程师:现代博学者

任何在团队环境中工作过的人都知道&#xff0c;每个成功的团队都有一个得力助手——无论你的问题性质如何&#xff0c;他都能帮助你。在传统的软件开发团队中&#xff0c;这个人是一个专业的程序员&#xff0c;也是另一种技术的专家&#xff0c;可以是像Snowflake这样的数据库技…

[Spring Boot]Netty-UDP客户端

文章目录 简述Netty-UDP集成pom引入ClientHandler调用 消息发送与接收在线UDP服务系统调用 简述 最近在一些场景中需要使用UDP客户端进行&#xff0c;所以开始集成新的东西。本文集成了一个基于netty的SpringBoot的简单的应用场景。 Netty-UDP集成 pom引入 <!-- netty --…

自2008年金融危机以来首次,欧洲AAA级CMBS投资者面临亏损

在欧洲预期损失之前&#xff0c;美国AAA级CMBS投资者已经遭受了打击。即便是最高信用等级的投资也不再安全&#xff0c;全球金融系统可能存在一些严重的问题。 历史罕见&#xff0c;最安全的AAA级债权人&#xff0c;在没有发生经济危机的情况下&#xff0c;出现了损失&#xff…

【jenkins1】gitlab与jenkins集成

文章目录 1.Jenkins-docker配置&#xff1a;运行在8080端口上&#xff0c;机器只要安装docker就能装载image并运行容器2.Jenkins与GitLab配置&#xff1a;docker ps查看正在运行&#xff0c;浏览器访问http://10....:8080/2.1 GitLab与Jenkins的Access Token配置&#xff1a;不…

快排(前后指针实现)

前言 快排解决办法有很多种&#xff0c;这里我再拿出来一种前后指针版本 虽然这个版本的时间复杂度和霍尔一样&#xff0c;逻辑也差不多&#xff0c;但是实际排序过程&#xff0c;确实会比霍尔慢一点 快排gif 快排前后指针实现逻辑&#xff1a; 前后指针实现逻辑(升序):单趟排序…

西瓜视频基于 Hertz 的微服务落地实践

# 1. 西瓜视频微服务架构设计 ## 1.1 西瓜视频介绍 **西瓜视频**是一个开眼界、涨知识的视频 App&#xff08;Informative Video Platform&#xff09;&#xff0c;作为国内领先的**中长视频**平台&#xff0c;它源源不断地为不同人群提供优质内容&#xff0c;让人们看到更丰…

从零开始搭建一个酷炫的个人博客

效果图 一、搭建网站 git和hexo准备 注册GitHub本地安装Git绑定GitHub并提交文件安装npm和hexo&#xff0c;并绑定github上的仓库注意&#xff1a;上述教程都是Windows系统&#xff0c;Mac系统会更简单&#xff01; 域名准备 购买域名&#xff0c;买的是腾讯云域名&#xf…

【web1】标签,css,js

文章目录 1.标签&#xff1a;input1.1 html&#xff1a;HTML&#xff08;用于创建网页结构&#xff09;&#xff0c;CSS&#xff08;对页面进行美化&#xff09;&#xff0c;JavaScript&#xff08;用于与用户交互&#xff09;1.2 文本标签&#xff1a;字体属性1.3 a标签&#…

win32API(CONSOLE 相关接口详解)

前言&#xff1a; Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&#xff0c;它同时也是⼀个很⼤的服务中⼼&#xff0c;调⽤这个服务中⼼的各种服务&#xff08;每⼀种服务就是⼀个函数&#xff09;&#xff0c;可以帮应⽤程式达到开启视窗、描绘图形…

解析JSON字符串

QJsonDocument类用于解析JSON字符串&#xff0c;

android studio 模拟器文件查找

android studio 模拟器文件查找 使用安卓模拟器下载文件后通常无法在系统硬盘上找到下载的文件&#xff0c;安卓 studio studio 其实提供了文件浏览工具&#xff0c;找到后可以直接使用 Android studio 打开 打开 Android studioview 菜单view > Tool Windows > Device…

智慧校园的作用是什么?

在近几年&#xff0c;智慧校园以其独有的姿态&#xff0c;悄然改变着教育的面貌。想象一下&#xff0c;当物联网、大数据、人工智能这些前沿技术与传统校园深度融合&#xff0c;教育空间不再局限于实体教室&#xff0c;知识获取也不再受制于时间与地点&#xff0c;一个更加开放…

物联网系统运维——数据库部署,Linux环境下MySQL安装,使用phpMyAdmin管理MySQL,实验CentOS 7安装MySQL

一.MySQL 1.概要 MySQL是一种关联数据库管理系统&#xff0c;关联数据:而不是将所有数据放在一个大仓库内&#xff0c;这样就增加了速度并提高了灵活性库将数据保存在不同的表中。性能高、成本低、可靠性好&#xff0c;已经成为最流行的开源数据库。 二.MySQL安装与配置 1. …

P1223 排队接水

题目描述 有 &#x1d45b; 个人在一个水龙头前排队接水&#xff0c;假如每个人接水的时间为 &#x1d447;&#x1d456;&#xff0c;请编程找出这 &#x1d45b; 个人排队的一种顺序&#xff0c;使得 &#x1d45b;个人的平均等待时间最小。 输入格式 第一行为一个整数 &a…

python 字符串驻留机制

偶然发现一个python字符串的现象&#xff1a; >>> a 123_abc >>> b 123_abc >>> a is b True >>> c abc#123 >>> d abc#123 >>> c is d False 这是为什么呢&#xff0c;原来它们的id不一样。 >>> id(a)…

OOM日志分析

目录 1. 日志分析2. MAT 工具2.1 日志打印方式2.1.1 HeapDumpOnOutOfMemoryError&#xff08;推荐&#xff09;2.1.2 jmp 命令 2.2 MAT分析方式2.2.1 饼图分析2.2.2 树形图分析2.2.2 泄漏疑点 3. 优化 首先说一下结论&#xff1a;通过MAT工具分析才是最精准的&#xff0c;直接通…

Java程序之简单“记事本”

要求&#xff1a;如下图所示&#xff0c;记事本具有新建、打开文本、保存、关闭等功能。 算法思路&#xff1a; 这是一个使用Java Swing库创建的简单文本编辑器。它包含一个菜单栏&#xff0c;其中包含“文件”菜单以及四个子菜单项&#xff1a;“新建”、“打开”、“保存”和…