当前位置: 首页 > 科技观察

企业可以监控微信聊天记录吗?

时间:2023-03-22 15:53:39 科技观察

有朋友私信问我一个问题。我在公司用微信聊天,用的是公司网络。公司能看到聊天内容吗?坦白说,我之前没有分析过微信之类的聊天软件,大概率是使用了私有协议。私有协议在协议分析软件上的呈现一般是TCP封装的一长串字节流,而协议软件无法给出这些字节流是什么的答案!看看协议分析软件能不能看到微信网页版和手机APP版的聊天内容?一、网页版微信1、不知道协议解析结果。你看“你好美女[Rose]”哇哦,这是协议分析软件分析出来的聊天内容。2.真实聊天内容一模一样!3、实验结论协议分析软件可以解密聊天内容!4、实验分析网页版微信通常使用浏览器与微信服务器进行通信,浏览器种类繁多,如Chrome、Firefox、IE等,如果要与不同厂商的浏览器进行通信,必须使用标准协议。标准协议可以在协议分析软件上解绑。考虑到网页版微信可能会使用SSL/TLS对聊天内容进行加密,需要使用Fiddle作为中介,利用Fiddle伪造的证书来欺骗浏览器,让浏览器误认为Fiddle是微信服务器。然后Fiddle与微信服务器建立SSL/TLS加密通道传输聊天内容。浏览器与Fiddle建立SSL/TLS加密通道。Fiddle与微信服务器建立SSL/TLS加密通道。Fiddle作为setter在两个channel上传输消息,先解密,再加密。Fiddle需要伪造微信服务器证书。电脑需要安装并信任Fiddle的自签名根证书二、手机微信协议分析结果微信手机版没有使用TLS+HTTP=HTTPS的加密传输方式,而是使用HTTP传输方式,如上图所示。每条消息看起来大致是这样的:除了HTTP头(HTTPHeader)是纯文本,HTTP消息体(HTTPBody)看起来就像一堆杂乱无章的字节流。找不到聊天内容。最搞笑的是,发送聊天内容时,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公钥StaticECDHpublickeyECDSA公钥有什么用?ECDSA用于验证服务器的真实身份。任何来自服务器的MMTLS协商消息只要用ECDSA私钥签名就可以用ECDSA公钥解密。也就是说,如果签名部分可以用ECDSA公钥解密,就证明是真实的微信服务器发送的!在微信私有实现中,不需要CA,微信客户端使用预设的ECDSA公钥完成服务器认证!静态ECDH公钥有什么用?如果微信客户端想以最小延迟(0RTT)发送消息,可以直接生成自己的ECDH私钥、公钥、Nonce,再加上服务端预设的Nonce。您可以单方计算出Pre-MasterKey、MasterKey和SessionKey,然后加密发送消息。微信服务器收到消息的同时,也会收到客户端的ECDH公钥和客户端的Nonce。服务器使用自己的ECDH私钥和客户端保留的Nonce。这四个参数用于计算消息的解密值。密钥,并解密消息。MMTLS不会给消息增加额外的延迟,称这种通信为0RTT通信。由于微信客户端被强制使用服务端的ECDSA公钥来验证服务端的身份,Fiddle根本无法欺骗微信APP。如果强行更换Fiddle,微信客户端将放弃连接服务器,后果是微信永远无法登录服务器!微信APP之所以可以实现私有协议,是因为服务端和客户端都是微信的代码,再私有也没有理解障碍!3.结语微信网页版:使用公司网络,公司可以看到聊天内容,不管是公司电脑还是个人电脑。但是如果用4G网络,流量就不会到公司去了,公司自然就看不到聊天内容了。微信手机版:使用私有协议进行通信,手机APP嵌入了服务器的公钥,APP只识别这个公钥对应的私钥签名。使用其他私钥的签名不会被识别,所以无法欺骗微信APP。使用手机版微信聊天是安全的,无论是使用公司网络还是4G网络,公司都看不到聊天内容。