【论文精读】《Classifying User Activities in the Encrypted WeChat Traffic》

news2024/11/25 8:12:47

Classifying User Activities in the Encrypted WeChat Traffic

Authors:Chengshang Hou,Junzheng Shi,Cuicui Kang,Zigang Cao,Xiong Gang
Journal:2018 IEEE 37th International Performance Computing and Communications Conference (IPCCC) (2018)

摘要

加密移动应用程序的安全性和隐私性引起了研究人员的关注。 然而,现有的研究大多数集中在SSL/TLS流量的分析上,而很少有研究关注专有加密流量,这也是重要且具有挑战性的。

在本文中,我们对微信进行了深入研究,微信是世界上最受欢迎的社交应用程序之一,拥有超过 10 亿活跃用户。 该应用程序的大部分通信都使用称为 MMTLS 的专有加密协议。 它是基于传输层安全 (TLS) 1.3 设计的,兼顾性能和安全性。

我们探索了 MMTLS 加密通道内典型用户活动的细粒度分类,并将 MMTLS 与微信中联合使用的 HTTPS(例如流量持续时间和数据包大小)进行比较。 研究发现,MMTLS适用于低延迟、轻量级消息传递的场景。

根据不同用户从不同平台(Android、iOS)和设备(华为、三星、iPhone、iPad等)收集的进行了MMTLS协议加密的微信流量,我们对支付、广告点击、浏览等七种典型活动进行分类。 实验结果表明,平均准确率和召回率均达到92%以上。 我们的工作是第一个对这个专有加密协议进行分类并了解 MMTLS 和 TLS 之间的区别。 相信这项工作将有利于微信和其他专有加密应用程序的安全和隐私。

I.引言

  1. 微信采用MMTLS协议

    微信6.6.x以上版本在TLS 1.3 [6]的基础上采用了一种新的专有安全协议MMTLS[5]作为其主要加密协议。 MMTLS握手保留了TLS机制,包括0-RTT模式和1-RTT模式。然而,微信针对不同的服务场景采用了MMTLS和SSL/TLS。

  2. 首先,我们研究MMTLS协议和MMTLS加密的微信流量。然后,比较HTTPS和MMTLS的网络特性,并通过流量分析进行细粒度的用户活动分类。结果表明,利用流量的基本统计属性可以准确地识别用户活动

  3. 该论文的贡献有两个方面。

    • 一方面,我们深入分析了MMTLS的安全性和使用场景,并与HTTPS进行了比较。我们发现 MMTLS 协议主要用于非 Web 访问的用户活动加密
    • 另一方面,我们使用五种分类模型来进行细粒度的用户活动分类并比较它们的性能。分类器有决策树、随机森林、朴素贝叶斯、逻辑回归和SVM。结果表明,随机森林分类器的性能最好,准确率和召回率均达到92%以上。

II. MMTLS 分析

A. MMTLS

  • MMTLS协议基于 TLS 1.3 设计,没有任何明文的二进制协议。而 TLS 协议在握手阶段携带明文。为了提高安全性,MMTLS使用ECDH(椭圆曲线Diffie-Hellman)算法进行密钥交换。为了减少握手延迟,使用预共享密钥(PSK)来实现0-RTT握手。

  • 与 TLS 相比,MMTLS 使用微信分发的内置公钥建立加密连接,而不是为每个连接交换证书。由于应用程序内置有一个公钥,类似于HTTP公钥固定(HPKP),攻击者无法伪装真实的服务,因此无法通过中间人攻击来破坏加密通道,可用于拦截HTTPS通道[26]

B. WeChat服务

  1. 在这项工作中,我们将微信流量分为七种服务。详细分类信息如下。

    • 聊天:包括消息和语音聊天、语音留言、视频通话;
    • 文件传输:包括发送图片和其他文件;
    • 朋友圈:社交网络服务。 微信用户向好友分享文字、图片、超链接等内容;
    • 支付:用户通过扫描微信生成的二维码向其他用户付款,此外,微信还允许用户直接向朋友或微信群付款;
    • 订阅:支持用户阅读订阅作者发表的文章;
    • 小程序:支持用户在微信中使用小程序,采用H5和JavaScript技术实现;
    • 广告:当用户点击订阅文章底部出现的广告时,微信即可获得利润。
  2. 在研究中,我们观察到MMTLS协议运行在TCP和HTTP协议之上。 微信使用基于HTTP的MMTLS的通信流程如图1所示。基于TCP的MMTLS和基于HTTP的MMTLS在使用上的主要区别在于连接持续时间。 基于TCP的MMTLS通常用于维持连接。 应用不同类型的MMTLS来加密不同的服务。

在这里插入图片描述

  1. 表 I 显示了微信服务与其应用层协议(即基于 HTTP 的 MMTLS、基于 TCP 的 MMTLS、HTTPS)之间的关系。 从表中可以明显发现,有多个服务同时使用MMTLS和HTTPS。 大多数微信服务都使用基于 HTTP 的 MMTLS 进行加密,聊天和文件传输服务除外。 在下一节中,我们将重点关注基于 HTTP 的 MMTLS,因为它涵盖了大多数类型的服务。


4. 基于HTTP的MMTLS协议的HTTP标头如表II所示。 从表中可以清楚地看出,封装MMTLS协议的HTTP头与普通的HTTP头不同。 具体来说,HTTP 标头 Content-Type 始终设置为 application/octet-stream。 标头包含一个特殊的 HTTP 标头字段 Upgrade:mmtls。 标头的 User-Agent 始终设置为 MicroMessenger Client。 HTTP 负载是 MMTLS 协议。 需要说明的是,Post方法的URL字段中的xxxxxxxx代表的是随机的8位十六进制代码,在不同的请求中有所不同。

在这里插入图片描述

C. 用户活动

  1. 一项服务可能与多个用户的活动相关联。 例如,向朋友或团体付款。 用户模型被定义为使用服务以顺序方式产生活动的用户。 换句话说,两个服务不会同时使用,例如用户无法在向某人付款的同时浏览朋友圈。

    图1展示了微信调用用户活动的流程。 如图所示,用户操作可能会触发单个或多个 HTTP 会话。 在多个 HTTP 会话的情况下,会话发起可以是顺序的或并发的。

  2. 我们发现微信在用户活动中同时使用了MMTLS加密协议和TLS加密协议。 典型的用户活动触发服务请求如下。 首先,应用程序通过MMTLS从微信服务器获取元信息。 然后,根据 MMTLS 响应,应用程序访问 HTTP 站点或 HTTPS 站点。

  3. 细粒度分类中选择的用户活动基于两个标准。 一种是与隐私相关的活动,另一种是常用的活动。 不同用户活动的集合非常大。 因此,我们的目标活动是那些独特且关键的活动。 考虑到用户切换服务的时间,一旦检测到关键活动,就会确定用户当前使用的服务。 根据我们在第III-B小节中给出的类别,我们选择了七种典型活动,即浏览时刻、浏览订阅、打开小程序(显示为​​小程序)、广告点击、付费服务、群组或好友 。 服务与活动的对应关系如表1所示。

IV. MMTLS 数据集

A. Data collection

  • 我们使用便携式无线接入点创建了无线网络。 该网络的流量被Wireshark捕获。 为了避免受到干扰,采取了以下措施。 首先确保Wireshark的混杂模式关闭,避免捕获其他通道信号。 其次,每部智能手机都专门连接到无线网络。 第三,关闭后台运行的应用程序。

  • 为了获得标记的 MMTLS 协议流量,我们捕获了不同用户活动产生的微信流量痕迹。 根据III-C小节中选定的活动,我们分别收集每个活动产生的流量痕迹。 为了模拟一般用户活动场景,我们收集了 27 个用户的实验微信帐号的流量痕迹。 每项活动至少进行160次征集。 为了概括实验数据,我们收集了不同微信版本、平台和设备供应商的微信流量。

    微信版本从6.6.5到最新发布的6.6.6。 微信流量采集自Android(包括4.4、6、7、8版本)和iOS(包括8、10、11版本)。 设备包括苹果、华为、三星等。

    流量分析中的流量痕迹指的是网络通信过程中产生的数据记录和信息。它包括了网络通信的源地址和目的地址、通信的协议类型、通信的开始时间和结束时间、传输的数据量等。通过分析这些流量痕迹,可以了解网络通信的模式、流量峰值、通信的频率和持续时间等。

  • 端口 80 用于过滤 HTTP 流量,端口 443 用于过滤 SSL 流量。 为了识别微信的MMTLS流,我们检查特殊的HTTP头字段Upgrade: mmtls(更多信息参见表二)。 失败的 MMTLS 请求将被丢弃(即没有服务器响应)。

  • 流量痕迹可能包括后台流量,为了评估其影响,我们进行了一项实验,捕获没有任何活动的流量。 发现10分钟内只出现了两次短MMTLS,两次唤醒屏幕。 由此可见,我们采集的微信后台流量影响较小

B. MMTLS-8K Datasets

  • 通过27个微信账号和用户、不同的设备和平台,我们在7种不同的活动中获得了1.2G标记的微信流量轨迹。 最后,我们在 1575 个活动中获得了 7937 个 MMTLS 流。 表三报告了我们捕获的这些活动的摘要。 表中未显示失败的请求。

在这里插入图片描述

C. The comparison with HTTPS

  • 为了深入了解这种特殊的应用程序服务模型,我们分析了浏览订阅活动。 选择该活动是因为通过域名mp.weixin.qq.com很容易识别用户活动的HTTPS流,该域名主要用于浏览订阅活动。 从数据集中浏览订阅活动的流量跟踪中,我们提取了 630 个带有 SNI mp.weixin.qq.com 的 HTTPS 流和 1965 个 MMTLS 流。
    1. 持续时间比较:如图2a和2d所示,70%的MMTLS流持续时间小于0.25秒,几乎100%的MMTLS流持续时间小于2秒连接。 而HTTPS流的连接时长均匀分布在0到30秒之间。 这表明MMTLS协议用于低延迟场景
    2. 字节比较:图2b、2e、2c和2f显示了入站和出站字节数的累积分布。 图 2e 和 2f 的 x 轴以对数刻度表示。 对于大约 70% 的 MMTLS 流,其入站字节量小于 1KB。 对于HTTPS,60%的流长度超过10KB。 从图 2c 和 2f 中我们可以看到,对于 80% 的 MMTLS 流量,出站字节小于 1 KB。 相比之下,对于 HTTPS,超过 50% 的流量长度超过 10KB。 因此,MMTLS协议用于加密轻量级消息

在这里插入图片描述

V. CLASSIFICATION AND EVALUATION

A. Feature engineering

  • 一般来说,不同的活动有不同的数据包分布。 图 3 显示了每个活动的入站和出站数据包的长度分布。 开放式小程序(如图中的第 1 类所示)的入站和出站数据包长度之和具有长尾分布。 浏览时刻活动显示非常短且稳定的出站数据包分布和非常长的入站数据包。 相比之下,广告点击活跃度则呈现出完全相反的比例。 活动 5、6、7 是向服务、朋友或群组付款的类似活动,显示出类似的入站数据包长度分布,但它们具有不同的出站数据包长度分布。 图 3c 和 3d 显示大多数活动的数据包数量分布相似,但浏览时刻活动除外。

在这里插入图片描述

  • 基于这些统计分析,选择第一组特征作为双向数据包的数量双向数据包的累积大小。 后 7 个特征是数据包长度序列的最小值、最大值、平均值、标准差、百分位数。 特别地,我们选择了数据包长度序列的 0.25、0.5 和 0.75 个百分点。 第三组特征是数据包长度分布。 我们使用 bin 来表示数据包长度分布。 例如,当bin步长为100且MTU为1500(数据包长度的最大值)时,将[0,100)范围内的数据包长度分配给第一个bin,将[100,200)范围内的数据包长度分配给第一个bin 到第二个bin,依此类推。 通过这种方法,我们将数据包长度划分为 15 个 bin。 我们评估了三种不同的尺度来离散化数据包长度序列,即 bin 步长为 10,100 和 500。 根据10倍交叉验证结果,我们最终选择100作为bin步长
  • 为了避免对分类器产生影响,重传数据包和零长度负载的 TCP 数据包(例如 SYN、FIN 和 RST)将被过滤掉。 我们将每个特征的均值和标准差分别缩放为 0 和 1。

B. Experimental setting

  • 评估的分类器包括朴素贝叶斯、逻辑回归、SVM、决策树和随机森林算法。 我们使用 scikit-learn 机器学习库来实现这些分类器。 对于朴素贝叶斯分类器,我们采用高斯分类器。 对于Logistic回归分类器,使用 “liblinear”,惩罚设置为“L2”,正则化强度的倒数设置为100。我们使用RBF核作为SVM分类器,惩罚参数设置为217,核系数为 设置为28。决策树分类器由具有基尼杂质的CART算法实现。 我们使用 10 个估计(随机森林的树数),树的最大深度是总特征数的 2/3。 在寻找最佳分割时,特征数量设置为所有特征数量的平方根。 最后,在构建树时使用引导样本来提高性能。

  • 至于评估指标,使用为所有分类器导入的精度和召回率指标。 每个标签的精度计算为 TP/(TP + FP),每个类别的召回率计算为 TP/(TP+FN),其中 TP 表示真阳性,FP 表示假阳性,FN 表示假阴性。 平均精度和召回率按每个类别的样本数量进行加权。 F1 分数的计算公式为 F1 = 2 * Precision * Recall/(Precision + Recall)

C. Results

  • 精度和召回率如表四所示,F1得分如表五所示。需要注意的是,我们随机选择数据库中一半的样本作为训练集,剩下的样本作为测试集 。 训练集和测试集包含由不同用户生成并从不同便携式无线接入点捕获的流量轨迹。
  • 随机森林分类器实现了最佳性能。 随机森林十倍交叉验证的结果实现了 92.5% 的平均加权 F1 分数,标准差为 0.8%。 浏览订阅活动的 F1 分数最高,高达 96%。 决策树分类器的性能比随机森林分类器稍低。 决策树分类器的总体F1-score比随机森林分类器的分类结果低1%。 与随机森林分类器相比,决策树分类器的精度和召回率波动了2%。 SVM 分类器是第三好的分类器。 在对好友付款活动的分类上,SVM 分类器的 F1 分数比随机森林分类器和决策树分类器稍高。 它是对浏览时刻活动的回忆影响其性能。 近 50% 的浏览时刻活动被错误分类为浏览订阅类别。我们怀疑这是由浏览时刻和订阅时刻之间的训练样本大小比例引起的。 逻辑回归分类器和朴素贝叶斯分类器在加密的用户活动上表现不佳。 这两个分类器很少能正确预测向朋友付款的活动,召回率分别为 8% 和 4%。
    在这里插入图片描述
  • 评估训练规模对分类器的影响。 随机抽样数据集的10%~90%作为训练集,其余数据集作为测试集。 不同尺度下分类器的性能如图4所示。从图中我们可以清楚地看到随机森林分类器和决策树分类器取得了最好的性能。 然而,Logistic回归分类器和朴素贝叶斯分类器效果不佳,与表IV和V的结果类似。

在这里插入图片描述

  • 为了查看活动的详细混淆信息,我们在图 5 中绘制了不同活动的混淆矩阵。使用随机森林分类器的结果,因为它获得了最佳的整体性能。 从图中我们可以清楚地看到,95%以上的情况下,浏览订阅活动和广告点击活动都被正确分类。 这三种支付活动有点混淆。 然而,这些错误并不算太严重(付费服务和付费给朋友的错误率低于 7%)。 启动小程序活动是最难识别的活动,因为有 13% 的活动被错误地分类到其他 6 个活动中。 原因可能是小程序MMTLS流多种多样,因为数据集中小程序活动的流是从大约80个不同的小程序中收集的。

在这里插入图片描述

VI. CONCLUSION

  • 本文通过流量分析对微信用户活动进行细粒度分类,这是非常有代表性的加密移动应用。 据我们所知,这是第一个将流量分析应用于专有加密 MMTLS 协议的工作。 对该协议进行了深入分析,并在网络会话中的使用方面与 HTTPS 进行了比较。 我们从加密流量中提取有效特征。 通过利用五种著名的机器学习分类算法,我们实现了细粒度用户行为分类的准确率和召回率高达 92% 的高性能。 我们相信我们的工作对于移动应用服务中的协议安全设计和用户隐私增强都是有意义的。

创新点与不足

  • 创新点:本文首次将流量分析应用于专有加密 MMTLS 协议的工作,对该协议进行了深入分析,并在网络会话中的使用方面与 HTTPS 进行了比较。
  • 不足:本文没有提出特别创新性的识别算法或模型。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】从记忆化搜索到递推——动态规划入门

文章目录 笔者说:我们为什么要学记忆化搜索?预备知识例题:198. 打家劫舍记忆化搜索 相关题目练习70. 爬楼梯记忆化搜索dp 746. 使用最小花费爬楼梯记忆化搜索dp 2466. 统计构造好字符串的方案数记忆化搜索dp 213. 打家劫舍 II记忆化搜索dp 笔…

unity + python socket通信,自定义数据包

unity和python相互之间通过socket通信来发送自定义数据包是一个利用unity构建场景和通过python来做数据处理的方式,能够有效的利用两种不同语言的优势。 我已经将对应的操作封装为对应的一个模块,SocketTools.cs,我们先来看一下具体的代码用…

7.3.2 【Linux】磁盘分区: gdisk/fdisk

MBR 分区表使用 fdisk 分区, GPT 分区表使用 gdisk 分区。 gdisk 通过lsblk或blkid先找到磁盘,再用parted /dev/xxx print来找出内部的分区表类型,之后采用gdisk或fdisk来操作系统。上表中可以发现 gdisk 会扫描 MBR 与 GPT 分区表&#xff…

【Arduino】超声波实验

4个端: Vcc : 5V电源Trig : 控制端(触发)Echo : 接收端(回声)Gnd : 接地端 相关参数 : 工作电流 : 15mA工作电压 : 5V工作频率 &am…

Linux常用命令——expr命令

在线Linux命令查询工具 expr 一款表达式计算工具 补充说明 expr命令是一款表达式计算工具,使用它完成表达式的求值操作。 expr的常用运算符: 加法运算:减法运算:-乘法运算:\*除法运算:/求摸&#xff0…

【Android】解决 build项目报错manifest merge fail XXX

报错图片: 解决方式: 找到 AndroidManifest.xml文件,找到找到文件的上一级,加上android:exported“true” 作用:Android:exported true 在Activity中该属性用来标示:当前Activity是否可以被另一个Application的组件启…

牛客网基础语法111~120题

牛客网基础语法111~120题😘😘😘 💫前言:今天是咱们第十一期刷牛客网上的题目。 💫目标:能使用数组来解决问题。 💫鸡汤:一张纸对折就能站立。先干为敬,大家随…

自定义MVC框架实现增删改查

目录 一、环境搭建 二、导入配置文夹 1.中央控制器xml 2.增删改配置文件 3.导入工具类 三、编写后端代码 1. 通用增删改查 2. BookDao类 3. book实现增删改查类 4. 分页助手类 四、编写前端代码 1. 数据显示主界面 2. 默认运行显示所有数据servlet 3. 新增、修改共用…

解决uni-app微信小程序底部输入框,键盘弹起时页面整体上移问题

存在问题 做了一个记录页面(类似单方聊天页),输入框在底部;当弹出键盘时,页面整体上移,页面头信息会消失不见 需要实现效果: 比如一个记录页面,需要在键盘弹出时: 底…

解析ASEMI代理海矽美快恢复二极管SFP6012A的性能与应用

编辑-Z 在电子元件领域,快恢复二极管是一种重要的半导体器件,它在电路中起到关键的保护和控制作用。今天,我们将重点介绍一款优秀的快恢复二极管——SFP6012A,深入探讨其性能特点和应用领域。 一、SFP6012A快恢复二极管的性能特点…

chatglm docker镜像,一键部署chatglm本地知识库

好久没有写文章了,今天有空,记录一下chatglm本地知识库的docker镜像制作过程。 核心程序是基于“闻达”开源项目,稍作改动。 制作镜像: docker tag chatglm:v1 ch1949/chatglm:latest docker push ch1949/chatglm:latest 使用 …

性能测试小白‘壁咚’~~~

很多时候,我们都知道软件有黑白盒测试,但往往还遗漏掉了一个性能测试。 性能测试种类: 负载测试压力测试并发测试配置测试可靠性测试容量测试 1、负载测试 (1)定义 负载测试是指逐步增加系统负载,测试系统…

NSS [SWPUCTF 2021 新生赛]easy_md5

NSS [SWPUCTF 2021 新生赛]easy_md5 先看题目,md5弱比较,可以0e,数组,或者强碰撞。 payload: GET: ?name[]1 POST:password[]7

【面试系列】八股文之线程篇202306

union all和union的区别 union all:包含重复行 union:不包含重复行 线程池的shutdown()与shutdownNow()方法的区别 shutdown(),调用shutdown方法,线程池会拒绝接收新的任务,处理中的任务和阻塞队列中的任务会继续处…

redis基础及哨兵集群部署、故障切换

一、概述 Redis是一个开源的,使用C语言编写,支持网络,可基于内存工作亦可持久化(AOF、RDB)的日志型,key-values(键值对)数据库,一个速度极快的非关系型数据库&#x…

R语言APSIM模型及批量模拟

随着数字农业和智慧农业的发展,基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。 APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物…

Python 数据类型转换

文章目录 每日一句正能量前言隐式类型转换实例实例 显式类型转换实例实例实例实例 每日一句正能量 在人生的道路上,即使一切都失去了,只要一息尚存,你就没有丝毫理由绝望。因为失去的一切,又可能在新的层次上复得。 前言 有时候&…

HOT41-二叉树的层序遍历

leetcode原题链接:二叉树的层序遍历 题目描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出&…

redis如何实现持久化

RDB快照 RDB是一种快照存储持久化方式,具体就是将Redis某一时刻的内存数据保存到硬盘的文件当中,默认保存的文件名为dump.rdb,而在Redis服务器启动时,会重新加载dump.rdb文件的数据到内存当中恢复数据。 开启RDB持久化方式 开启…

Vue生态及实践 - Vue Router(2)

目录 导航守卫 解析流程 代码演示 router.js pages/Foo.vue router/router.js router/history/base.js router/util/async.js router/components/RouterView.vue 接上一篇文章~,代码部分会有部分重叠,想看完整版的代码,看这篇文章的…