百度浏览器的隐私安全问题分析
当我们说加密术是“易破解”的时候,并不是说加密本身的算法是有缺陷或是不安全的(尽管有时候百度浏览器使用的算法的确是这样)。相反的,我们的意思是该算法使用不当。顾名思义,百度浏览器的分析师可以利用该算法编写一个解密工具。
加密数据有两种基本方法:对称加密或是非对称加密。对称加密(如图一所示)相比于非对称加密的优点是加密速度快。缺点就是只要你知道使用的算法和某个键,你就能破解任意的密码。利用简单的算法,做到这点易如反掌。当加密术只使用了对称算法的时候,只要对程序稍加分析就可以写出一个破解工具来。
像RSA这样的非对称算法(如图二所示)就是被开发来解决这一问题的。虽然这种算法明显慢于对称算法,但优势就是用于解密的密钥不同于加密密钥。这两个密钥必须是数学相关的,通过算法设计生成一个密钥对,但是从加密密钥到解密密钥的派生过程要通过复杂的计算。这就意味着一个程序可以使用一个硬编码的加密密钥,但是解密密钥只能保存在收件人那里。虽然数据接收方可以使用保密的解密密钥,但数据仍有可能被窃取,只要解密密钥存在于程序当中,第三方就有可能写出破解工具。 为了改善性能劣势的非对称加密,通常会使用结合了以下技术的对称加密。要想对数据进行加密,会随机生成一对对称密钥来加密数据。然后会使用非对称密钥来加密随机生成的加密密钥。之后被非对称加密的对称密钥和被对称加密的数据会一起发送给收件人。收件人可以使用私人的解密密钥来解密对称密钥,然后再用它来解密数据。因为只有加密密钥是被非对称加密的,其存储空间远小于整个数据,所以这项技术要远快于非对称加密所有数据,因此是结合了两种加密技术的优点。这是网络上使用的加密术的基本技术,比如SSL。 我们之所以说百度浏览器的加密是易破解的,是因为它使用的加密完全是硬编码编写的对称密钥。使用这种办法加密的通信很容易被破解。我们建议百度或是任何希望通过互联网安全发送敏感信息的人使用一个知名并且行之有效的协议来使用非对称加密技术(比如SSL),也不要试图自制加密协议。SSL是经得起考验的协议,解决了许多非专业译电员认为不可能解决的安全问题。 第一部分:个人信息的不安全传送 安卓版本 我们分析了6.2.18.0版本的浏览器,这是从 http://mb.baidu.com/ 下载的。关于不安全的个人信息传送,我们还是发现了一些隐私安全问题。表1总结了通过该应用收集加密或易加密传送的个人数据。
关于安卓版本的收集传输个人数据功能,我们发现了以下几个安全缺陷: A.启动时泄露敏感数据 在应用程序启动时,我们观察到百度浏览器向https://hmma.baidu.com/app.gif 发送的HTTP POST 请求。这个HTTP请求的正文是一个压缩的JSON文件。该文件包含了电话和用户的多种细节,有的是纯文本,有的是加密的。 JSON文件中未加密的字段有: o:用户操作系统(比如,安卓) n:百度浏览器版本 w, h:屏幕像素 Gl:GPS位置和最近更新时间 有的字段是用硬编码ASCII编码键的AES+ECB进行加密的 h9YLQoINGWyOBYYk 然后再用Base64编码。这些字段有: Dd:IMEI编号 Ii:包含手机IMEI编号倒序的字串符和安卓软件版本信息的MD5哈希值 Wl2:范围内所有无线网络列表以及它们的MAC地址和信号强度。 根据硬编码键知识,这些字段很容易被破解。用于解密这些字段的python脚本源代码在这。 B.键入地址栏时泄露敏感数据和地址栏内容 和其他浏览器一样,用户可以在百度浏览器地址栏中输入文本来访问一个给定的URL或是执行搜索。以这种方法在地址栏中输入文本时,该文本是不进行加密的,只是作为一个有多个GET参数的HTTP请求访问下面的URL:http://uil.cbs.baidu.com/sug/rich 比如说,在地址栏中键入这样的文本“some address bar contents”:http://uil.cbs.baidu.com/sug/rich?wd=some+address+bar+contents&ua=I4Ly8_OLL8_lPvC0tpwbqkrywN0sCFzKkhF6q9pvANIr5wj0_hHQNgCcvCgnhvId_OXNiyJuvNvrCUdsB&cuid=ga2Pfgal2u0ca28Yg8vkugu0-uYBiSiAlP2Nf_8ZS88Pa28g_a2q8_aq28_qa28qA&cfrom=1200a&from=1200a&crp=0&it=0&ctv=2&st=00000000&nw=3g&cen=ua_cuid 这些GET参数包括: Wd:地址栏内容 Ua:屏幕分辨率、手机型号、安卓版本和百度版本 Cuid:安卓版本信息的md5哈希值和手机IMEI号倒序的字符串 Wd参数值的发送没有加密;ua和cuid参数值的加密很不规范,使用的是很容易被破解的算法,如下所述。UTF8编码的每个32字节都被解释为一个小端字节序列整数,然后循环移位字节到右三位,以及使用硬编码0x2D382324的XOR。最后,生成的32位字段会和下面的自定义64个字符字母进行base64编码: qogjOuCRNkfil5p4SQ3LAmxGKZTdesvB6z_YPahMI9t80rJyHW1DEwFbc7nUVX2- 典型的base64字母表是这样的: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |