公司到底能不能监控到微信聊天?

开发 前端
以前从来没有分析过微信这类聊天软件,大概率使用私有协议。而私有协议在协议分析软件上的呈现,一般都是TCP封装一长串字节流,而这些字节流究竟是什么内容,协议软件无法给出答案。

 [[405647]]

有朋友私信问我一个问题,在公司用微信聊天,用公司网络,公司能看到聊天内容吗? 

坦率地说,以前从来没有分析过微信这类聊天软件,大概率使用私有协议。而私有协议在协议分析软件上的呈现,一般都是TCP封装一长串字节流,而这些字节流究竟是什么内容,协议软件无法给出答案!看看协议分析软件能否看到微信网页版、手机APP版的聊天内容?

  一、网页版微信 

1.协议分析结果

不知道大家看到“美女好[玫瑰]”哇,这个就是协议分析软件分析出来的聊天内容。 

 

2.真实聊天内容 

[[405648]]

一摸一样! 

3.实验结论

协议分析软件可以将聊天内容解密出来! 

4.实验分析

网页版微信通常是使用浏览器来与微信服务器通信的,而浏览器多种多样,有Chrome、Firefox、IE等等,要想与不同的厂商浏览器通信,必须使用标准协议,而标准协议在协议分析软件上是可以解开的。

考虑到网页版的微信,可能会使用SSL/TLS加密聊天内容,需要用Fiddle作为中间人,用Fiddle伪造的证书来欺骗浏览器,让浏览器误以为Fiddle就是微信服务器。Fiddle再与微信服务器建立SSL/TLS加密通道,传输聊天内容。

  •  浏览器与Fiddle建立SSL/TLS加密通道
  •  Fiddle与微信服务器建立SSL/TLS加密通道
  •  Fiddle做为二传手,将消息在两条通道上进行传递,先解密,再加密
  •  Fiddle需要伪造微信服务器证书
  •  电脑需要安装、信任Fiddle自签名的根证书

二、手机版微信 

协议分析结果 

 

微信手机版没有使用TLS + HTTP= HTTPS的加密传输方式,而是使用了HTTP的传输方式,如上图所示。 

每一个报文大概是这个样子的: 

除了HTTP 报文头(HTTP Header)是明文的,HTTP报文体(HTTP Body)看起来是一堆杂乱无章的字节流。 

没有找到聊天的任何内容。最最滑稽的是,当发送聊天内容时,Fiddle没有任何反应! 

意味着发送聊天内容的报文既不是HTTP,也不是HTTPS,那很可能是TCP、或UDP协议原始(Raw)封装。 

为了确认到底是TCP还是UDP传输报文,特意去了微信研发公众号去确认,得到的确认是采用TCP传输。分为两种连接方式:

  •  长连接:TCP + 私有协议 + MMTLS + 业务层
  •  短连接:TCP + HTTP + MMTLS + 业务层 

官方的口径是,短连接是为了兼容老版本的软件,而长连接完全是私有实现,所以造成Fiddle没有捕获到,毕竟Fiddle只能捕获到HTTP或HTTPS,至于其它的协议压根不在其感兴趣范围!

 于是,使用Wireshark捕获微信长连接的TCP报文,确实捕获到了,再怎么私有实现,总不能长翅膀飞!但是这些TCP报文没有展示的意义,TCP头之后字段全是杂乱无章的,这些都在预料之中!

 MMTLS是什么样的存在?

MMTLS是TLS1.3版本的改良版,或者说简化版。在微信决定使用MMTLS之前,TLS1.3版本长期逗留在草案状态,没有形成一个最终标准。于是微信决定采用TLS1.3草案中的标准,大刀阔斧砍掉客户端认证这个环节,只保留服务器认证。

 手机微信APP里预置了微信服务器的两件秘密武器:

  •  ECDSA公钥
  •  静态ECDH公钥 

ECDSA公钥是干嘛的?

ECDSA用于验证服务器的真实身份,任何来自于服务器的MMTLS协商报文,只要使用ECDSA私钥签名的,ECDSA公钥都可以解密。换句话说,如果签名部分可以使用ECDSA公钥解密,那就证明是真正微信服务器发送的! 

在微信的私有实现里,不需要CA,微信客户端凭借预置的ECDSA公钥完成服务器的认证!

 静态ECDH公钥又是干嘛的?

如果微信客户端想最小延迟(0 RTT)发消息,可以直接生成自己的ECDH私钥、公钥、Nonce,再加上服务器预置的Nonce。就可以单方面计算出Pre-Master Key ,Master Key , Session Key,进而将消息加密发出。 

微信服务器收到消息的同时,一同收到的还有客户端的ECDH公钥、客户端Nonce,服务器用自己的ECDH私钥、预留在客户端的Nonce,这四个参数,计算出可以解密消息的Key,并将消息解密出。 

MMTLS没有给消息增加额外的延迟,称这种通信为 0 RTT通信。

 由于微信客户端,强制使用服务器的ECDSA公钥来认证服务器的身份,所以Fiddle压根没法欺骗微信APP。如果Fiddle强制替换,微信客户端会放弃连接服务器,造成的后果就是微信永远登录不了服务器! 

微信APP之所以可以实现私有协议,是因为服务器、客户端都是微信的代码,再怎么私有,理解起来也没有任何障碍!

 三、最终结论

  1.  微信网页版:使用公司网络,公司可以看到聊天内容,无论使用的是公司电脑还是个人电脑。但是如果使用4G网络,流量没走公司,公司自然也无法看到聊天内容。
  2.  微信手机版:使用私有协议通信,手机APP嵌入了服务器的公钥,APP只认与这个公钥一一对应的私钥签名。使用其它私钥签名的一概不认,所以无法欺骗微信APP。使用微信手机版聊天是安全的,无论是使用公司网络还是4G网络,公司都无法看到聊天内容。 

 

责任编辑:庞桂玉 来源: 前端大全
相关推荐

2021-05-08 11:32:42

监控信聊天

2013-04-19 10:42:02

打车软件大数据

2021-07-15 17:20:36

微信QQ音乐移动应用

2022-11-07 08:36:11

2018-03-05 07:38:11

2012-03-05 10:36:30

云计算节能减排数据中心

2009-07-16 22:39:11

2018-12-10 09:14:56

AI教育教育资源留守儿童

2019-01-24 09:53:49

2019-11-21 09:25:23

AI 数据人工智能

2021-05-11 15:50:52

比特币加密货币货币

2016-05-19 17:10:27

银行

2021-02-26 21:25:08

比特币投资货币

2022-10-20 08:00:37

机器人ZadigChatOps

2020-10-16 18:33:18

Rust语言前端开发

2019-07-30 12:40:02

QQ账号互了umqq

2021-05-14 07:18:07

监控微信聊天

2022-04-24 11:52:04

元宇宙Web3去中心化

2023-04-06 06:55:24

ChatGPTGPT算力

2012-06-13 11:01:59

英特尔
点赞
收藏

51CTO技术栈公众号