Analysis-video-traffic-with-wireshark
本文最后更新于:2023年6月19日 晚上
准备
在本次分析中,我选择了腾讯视频流量进行抓包分析。
首先,腾讯视频的流量是走的 tcp 协议,而且全站 https 加密,因此报文内容是乱码,需要解码。
以 windows 系统+Chrome 浏览器为例,首先要导出浏览器存储的密钥,通过计算机属性——高级系统设置——环境变量,新建一个变量名“SSLKEYLOGFILE”的变量,变量值是导出的密钥具体文件地址。
经测试,chrome 和 firefox 均无法导出密钥,最终找到解决办法如下。
运行命令
1 |
|
即可。
然后再在 wireshark 中绑定但是还是不行,不知道什么原因,可能是没有重启电脑?协商的 sslkey 不能随时更新到 log 文件中,我也不知道为什么,就先不管它的传输层 tcp 报文原始信息了。确实重启电脑就好了。
业务流程
网络视频业务可以从 1.主页访问,2.外链链入。
不同网站视频页面的 url 格式不同。
| 业务提供商 | 视频页面的 url 正则表达式 |
| :————: | :——————————————-: | ——————————————— |
| 优酷 | v\.youku\.com/vshow/id[A-Za-z0-9=]{17}.* |
| 优酷移动端 | .*api\.(mobile | 3g)\.youku\.com/videos/[A-Za-z0-9=]{17}/.* |
| 搜狐视频 | tv\.sohu\.com/[0-9]{8}/n[0-9]{9}.* |
| 腾讯视频 | v\.qq\.com/x/cover/[a-z0-9]{15}.* |
| 爱奇艺 | www\.iqiyi\.com/[a-z]_[a-z0-9]{10}.* |
| CNTV | tv\.cntv\.cn/video/[A-Za-z0-9=]{16}/.* |
| PPTV | v\.pptv\.com/show/[A-Za-z0-9=]{16}/.* |
用户在观看视频时,可能会有一系列交互动作,可以分成两类:播放操作与社交行为。
前者包括:
- 暂停
- 重新播放
- 跳转
- 调节清晰度
- 静音
- 调节播放速度等
后者包括:
- 评论
- 收藏
- 点赞
- 分享等
通信报文分析
【1】https://segmentfault.com/a/1190000018746027
【2】https://www.jianshu.com/p/a3a25c6627ee
【3】https://www.dell.com/community/
【4】https://imququ.com/post/http2-traffic-in-wireshark.html
对于腾讯视频 5 分钟的观看抓包。
得到以下结论:
- 首先进行 TCP 三次握手
- 然后进行 ssl 层的 tls 连接。
- Client Hello
- Client Hello 报文:客户端对加密算法的支持度不同,因此需要向服务端发送客户端支持的加密套件(Cipher Suite) ,同时还要生成一个 随机数 同时保存在客户端和发送给服务
- Server Hello
- ServerCertificate 报文:服务端收到 Client Hello 之后,向客户端发送 CA 认证的数字证书,用来鉴别服务端身份信息,同时还要生成一个 随机数 同时保存在服务端和发送给客户端
- Server Hello Done 报文:表示服务端宣告第一阶段的客户端服务端握手协商结束
- 可选:Certificate Request 报文:必要情况下,要求客户端发送证书验证身份
- 可选:Server Key Exchange 报文:如果 CA 认证的数字证书提供的信息不够,服务端还可发送提供补充信息
- Client Finish
- Client Key Exchange 报文:客户端收到 CA 数字证书并通过验证,然后通过 CA 公钥解密获取到 服务端公钥。Client Key Exchange 报文包括有一个随机数,这个随机数被称为 Pre-master key/secret;一个表示随后的信息使用双方协商好的加密方法和密钥发送的 通知 ;还有一个通过协商好的 HASH 算法对前面所有信息内容的 HASH 计算值,用来提供服务端校验。这些信息都通过服务端公钥加密传送给服务端
- ClientCipherSpec 报文:该报文通知服务端,此后的通信都将使用协商好的加密算法计算对称密钥进行加密通信(也就是使用两个随机数以及第三个 Pre-master key/secret 随机数一起算出一个对称密钥 session key/secret)
- Finished 报文:该报文包括连接至此的所有报文的校验值,使用服务端公钥进行加密
- 可选:ClientCertificate 报文:如果服务端请求,客户端需要发送 CA 数字证书
- 可选:CertificateVerify 报文:服务端如果要求 CA 数字证书,那么需要通过 HASH 算法计算一个服务端发送来的信息摘要
- Server Finish
- 服务端最后对客户端发送过来的 Finished 报文使用服务端私钥进行解密校验
- ClientCipherSpec 报文:报文通知服务端,此后的通信都将使用协商好的加密算法计算对称密钥 session key/secret 进行加密通信
- Finished 报文:标志 TLS 连接建立成功
- TLS 握手成功此后通过对称密钥 session key/secret 加密通信
- 然后开始 http 请求对话,这里发出一个 GET 请求
可以看到目标 host 格式为 v.smtcdns.com,可见是一个 cdn 节点。
然后就是 TCP 流
这里无法解析 TCP 的报文具体信息,应该就是相应的视频流。
在所有 tcp 分片发完之后,然后服务器发送一个 http 200,返回的内容是 video,采用 MP2T 编码。
然后再次重复上面的过程。
整个观看视频过程中产生的 http 报文过滤后如下
使用 python 进行自动化分析与特征提取
【1】https://github.com/SewellDinG/scapy-ssl_tls-demo
【2】https://github.com/hackers-terabit/scapy-ssl_tls-python3
【3】http://blog.whiterabbitxyj.com/2017/11/07/python-scapy/
【4】https://wizardforcel.gitbooks.io/scapy-docs/content/3.html
【5】https://www.osgeo.cn/scapy/layers/http.html
【6】https://www.osgeo.cn/scapy/usage.html
【7】https://scapy.readthedocs.io/en/latest/api/scapy.layers.tls.html
首先,scapy 在 2.4.0 已经开始支持 http 和 tls 的解析,但是在默认配置中没有添加,可以通过
1 |
|
进行手动导入。
这里真的坑了我好久,我一直在安装那个 tls 的补充包,但安不上,读了很多文档才琢磨出来
不过也仅仅是能解析到 tls 层,而 http 层由于加密仍然无法解析。
1 |
|
暂时没有找到如何像 wireshark 一样可以实时绑定密钥进行会话解密的 python 命令行方式,所以提取特征只限制在 tls 层及以下。也就是说,诸如 http 的状态码,请求类型,实体内容类型都无法解析
提取特征
首先,确定提取的特征名称。
首先是五元组特征:(源 IP,目的 IP,源端口,目的端口,协议类型)
1 |
|
其中
- 13 个包的到达特征
1 |
|
- 15 个拥塞窗口特征
1 |
|
- 7 个包的数量特征
1 |
|
- 19 个包的总长度特征
1 |
|
- 12 个包的标志特征
1 |
|
- 6 个包的头部特征
1 |
|
这里介绍一种快速过滤的方法。
1 |
|
然后对于已知的流量包,去 github 上找了现成的轮子https://github.com/jiangph1001/flow-feature.git。提取效果如下。
可以看到,在观看视频的时间里,与服务器 ip 之间的数据流是最多的。
过滤 idea
- 可以分析视频流 tcp 报文的频谱,进行傅里叶变换或者小波变换,得到正常情况下的能量谱特征。
- 对于 DDos 等其他攻击情况下的频谱,也可以进行相关分析。
- 对于正常的 TCP 流,可以使用梳状滤波器进行滤波,让 RTT 对应频带的频率通过,保证大部分正常 TCP 流量通过,然后将其余的归为灰流量。
见参考文献:基于频谱分析的 LDos 攻击流量过滤方法
参考
在查解析 pcap 包的时候发现了这样几个仓库,感觉很棒。
Joy https://github.com/cisco/joy
相关使用可参考https://flashgene.com/archives/70939.html
https://www.freebuf.com/sectool/161431.html
官方文档https://github.com/cisco/joy/blob/master/doc/using-joy-05.pdf
更详细的使用可以见https://github.com/cisco/joy/wiki,里面包括了搭建,捕获,特征提取的全过程
https://asmcn.icopy.site/awesome/awesome-pcaptools/
这个是收录的所有和 pcap 相关的工具,包括抓取,解析,提取特征。而这个站点,真的是一个宝藏站点,里面啥都有…真的太强了。
https://asmcn.icopy.site/awesome/awesome-network-analysis/#software 比如这个就是网络分析相关的软件大全(图论相关)
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!