0x00 简介QQ浏览器是腾讯开发的一款网络浏览器,面向Android,Windows,Mac和iOS等平台。相较于内置浏览器,QQ浏览器提供了更丰富的功能,例如,增加了标签窗口,并且整合了聊天平台等。 报告中详细的分析了Windows和Android版本的QQ浏览器是如何传输用户数据。这两个版本的QQ浏览器在传输用户的身份数据时,要么直接不使用加密,要么使用的加密算法简直形同虚设。完整的讨论内容请参阅我们的报告 《Baidu’s and Don’ts: Privacy and Security Issues in Baidu Browser》 。 由于这种数据传输方式非常不安全,所以只要能介入数据传输路径(比如,用户的ISP,连接了咖啡店的WiFi网络,或入侵了相应网络的黑客),收集并解密数据流量,就能够截获到这些个人数据。 除了数据传输方式不够安全,这两版QQ浏览器的更新方式也有漏洞,会导致任意代码执行。也就是说,攻击者可以伪造一个软件更新,将恶意代码安装到用户的设备上。 这份报告属于 《Privacy and Security of Mobile Applications in Asia》 系列。此前,我们已经确认了移动版的UC浏览器和百度浏览器也存在类似的问题。斯诺登也曾经曝光说,五眼情报联盟(NSA,GCHQ,CSE,ASD,GCSB)利用了UC浏览器中的安全问题来识别和跟踪用户身份。在已经公布的 《The Many Identifiers in Our Pockets》 报告中,我们列出了哪些个人数据是经常被收集和传输的。 另外,我们研究了TOM-Skype和UC上的密码审核机制,对比分析了一些在亚洲风靡的移动聊天工具,包括微信,LINE和KakaoTalk。除此之外,我们还检查了微信上的密码审核机制。这次研究的主要目的是通过一种综合性的方法,包括逆向工程和其他技术分析方法,让用户意识到这些应用中的安全和隐私问题,同时,希望相关的软件公司,承担起应有的责任,保护用户的权益。 2016年3月17日,我们询问了腾讯为什么要收集用户数据,并且还要通过一种不安全的方式将这些数据传输到QQ服务器。 这里 是我们提出的具体问题。直至截稿,我们没有收到任何答复。在最后,我们讨论了一些可能的深层原因,为什么中国的这三款浏览器会出现类似的问题。 0x01 技术分析我们分析了两个版本的QQ浏览器,分别是安卓版6.3.01920和Windows版9.2.5478。在分析过程中,我们使用了大量的工具。比如,我们使用了tcpdump和Wireshark来捕捉和分析网络流量,也使用了机器代码和字节码反汇编工具,反编译器和调试工具来分析程序行为,包括,JD, JADX和IDA。 我们发现这两个浏览器都使用了一种通用机制与服务器通讯,而这种机制会导致个人信息的泄露,并且,这些浏览器的更新过程中也存在多个安全漏洞。 我们的技术分析分为三部分,第一部分介绍了一个基本结构,这两个版本的QQ浏览器都会通过这个结构向QQ服务器传输数据。第二部分分析了被采集的个人用户数据,以及安卓版的软件更新过程。第三部分分析了相应的Windows版功能。 0x02 第一部分:QQ浏览器的数据传输安卓和Windows版的QQ浏览器都使用了一种WUP请求与QQ服务器通讯。 WUP请求WUP请求是一种二进制格式,可以包含不同类型的值,例如,整数,浮点数,列表,字符串和递归结构。有时候,这些请求首先要经过加密,然后再嵌入到一个HTTP POST请求的主体中,最后,随着这个HTTP POST请求发送到目的URL。我们写了一个 Python脚本 来解密并解析这些请求,从而将其转换成人类可读格式。在这个脚本的代码中,还包含了在接下来解密数据时需要用到的其他脚本。 Q-GUID,Q-UA和Q-UA2字段Q-GUID,Q-UA和Q-UA2字段出现在WUP请求的HTTP标头中。在接下来介绍WUP请求时,如果某个字段的对应值出现在了WUP请求的有效载荷中,我们就用这个字段来代指一个相应的实例。在HTTP标头中,这些字段都不会经过加密,但是,当这些字段出现在WUP请求中时,其格式会发生变化。 Q-GUID字段中填充的值是在初始化时,通过一个WUP请求从QQ服务器上获取的,并且在接收到这个值后,浏览器就会保留这个值,并且将其添加到后续请求的HTTP标头中,没有加密。在很多WUP请求的有效载荷中,也包含有这个值。下面就是一个Q-GUID:caed22d728efa6127d53bc0412f888cb GUID可能表示的是“全局唯一标示符”,是一个128位数字,通常是随机生成的。 Q-UA和Q-UA2值中包含有与QQ浏览器版本和硬件平台相关的硬编码信息。虽然,UA很可能指的是“User Agent”,并且包含有与HTTP user agent字符串相似的信息,但是其格式却不同于QQ浏览器在HTTP标头中使用的user agent HTTP字段。 0x03 第二部分:分析安卓版QQ浏览器我们分析的安卓版QQ浏览器是6.3.01920版本,下载于 http://mb.qq.com/ 。在启动后,或执行了某些事件时,比如,浏览网页或检查更新,浏览器就会向 对于每个加密的WUP请求,会根据下面的Java代码来生成一个AES秘钥: 所以说,这个秘钥是一个128位秘钥,由16个ASCII数字组成。而且,第1个和第9个字节永远不可能是0,前8个和最后8个字节不可以全都是9,所以,秘钥空间并不是常规的 随后,这个秘钥会用于通过AES+ECB模式来加密WUP请求。AES秘钥会使用一个128位的RSA公钥加密,系数:245406417573740884710047745869965023463,指数:65537。加密后的AES秘钥会被纳入到HTTP请求的qbkey HTTP标头中。 RSA是一种非对称加密算法,也就是说,在解密时需要使用另一个不同的私钥,上面提到的RSA秘钥无法直接用于解密AES秘钥和WUP请求。但是,RSA的安全程度取决于加密秘钥的系数分解难度。一旦分解,解密秘钥就很容易获得了。上述的RSA公钥只有128位,分解起来并不难。(RSA秘钥一般建议至少2018位)。使用Wolfram Aplpha这个在线计算引擎,用不了1秒就可以分解秘钥的系数: http://www.wolframalpha.com/input/?i=factor+245406417573740884710047745869965023463 分解后,得到了下面两个质因数: 14119218591450688427 x 17381019776996486069 有了这些质因数,任何在监控流量的中间人都可以解密出每个WUP请求使用的AES秘钥,然后再使用AES秘钥解密WUP请求。 我们一直监控着浏览器发送的流量,并且使用这个秘钥解密了所有的WUP请求。多数WUP请求中传输的是一些很容易解密的个人信息。在图1中,是一个解密后的WUP请求,通过我们的脚本,可以将其解析成可读的形式。
下面是我们识别出的一些重要请求,以及每个请求传输的个人信息:
WiFi MAC地址通过DES+ECB模式加密,使用的秘钥是“ WUP请求的响应也很容易解密。WUP响应并没有使用前面提到的非对称加密算法,而是单纯使用了一种对称性算法,所以我们不需要分解任何秘钥的质因数。换句话说,其加密模式是MTEA+MCBC,使用的硬编码ASCII加密秘钥是:“ 很有趣的是,QQ浏览器的加密过程是非标准的MTEA+MCBC模式,和百度浏览器一样(见图4)。 因为这种算法是对称的,所以这些响应的加密和解密秘钥是同一个。任何中间人都可以利用这个秘钥,主动伪造一个来自QQ服务器的响应。我们通过攻击QQ浏览器的更新过程证实了这一点。 软件更新过程存在漏洞通过pkgcenternew.checkUpdate请求的存在来看,软件更新是可用的。在这个请求的响应中可能会包含有下载新APK文件的链接,APK的MD5哈希和更新日志。在安卓上,如果APK更新使用的签名与当前安装的版本不符,那么APK更新就会失败;虽然,这种攻击方式无法将QQ浏览器替换成任意的APK;但是,这种方法可以用来安装新App,通过使用QQ浏览器的名称和图标,诱骗用户安装恶意的APK。
目前,由于Google Play商店无法在中国使用,所以中国的安卓用户必须通过其他途径来更新应用。因为无法使用Google Play商店的更新过程,所以,开发者必须自己实现自动更新机制,而这样则会导致程序的更新过程出现漏洞。据称,中国版的Google Play商店会在2016年上线。 0x04 第三部分:分析Windows版QQ浏览器我们分析的Windows版QQ浏览器是9.2.5478版本,下载于 http://browser.qq.com/。虽然,Windows版的QQ浏览器也是通过WUP请求与服务器通讯,但是,采用了不同于安卓版本的加密方式和加密时间。而且,Windows版本使用了MTEA+MCBC算法来加密WUP请求,这是一种对称加密算法,而不是安卓版本上的非对称RSA算法(WUP响应都是采用了MTEA+MCBC算法进行加密,无论是安卓版本还是Windows版本)。 我们还发现,安卓版本的WUP请求都是发给了 通过WUP请求来看,Windows版QQ浏览器还会跟踪设备的硬件指纹。这里的硬件指纹指的是下列项目的MD5哈希:
比如: 因为MTEA+MCBC是完全对称的,所以,任何能观察到流量的中间人都可以利用硬编码的加密秘钥,轻易地解密所有的WUP请求。和前面一样,我们监控了浏览器发送的流量并解密了所有的WUP请求。其中有多个WUP请求会泄露可解密的个人信息。下面是我们识别出的一些重要请求,以及每个请求传输的个人信息:
WUP请求本身是没有加密的,但是其中的WUP有效载荷使用了DES+ECB算法进行加密(一种对称性的加密算法,解密起来很简单),使用的秘钥是“
最新评论
72小时资讯榜
2
英伟达联合微软发布128GB统一内存的NVIDIA
AI动态
288人已阅读
3
乐鑫重磅开源 ESP-Claw:把 Agent 塞进了 E
AI动态
297人已阅读
4
Desk Tidy Sticky: 开源免费、Windows 和 M
软件精选
287人已阅读
5
LibreTranslate - 纯本地翻译神器,支持49
软件学院
304人已阅读
6
Python逆天改命,开源Hermes首次击败OpenAI
AI动态
296人已阅读
社区热门
1
━※☆※━★===二〇二六年论坛每日签到帖=
2026-03-13
3
从上大学一直玩黑基 到现在已经37岁 感谢黑
2025-06-03
5
好久没来这里了,居然能正常登录,佩服站长
2025-05-19
6
好多年没来竟然还可以登录
2025-09-22
|