QQ网站登录的RSA加密传输缺陷分析
感谢匿名人士的投递
QQ网站登录处没有使用https进行加密,而是采用了RSA非对称加密来保护传输过程中的密码以及敏感信息的安全性。 QQ是在javascript中实现整个过程的。这个想法非常新颖,但是也是存在严重缺陷的。如果被黑客利用,则可能被捕获明文密码。
分析报告如下:
Author: axis
Date: 2007-11-23
Team: http://www.ph4nt0m.org (http://pstgroup.blogspot.com)
Corp: Alibaba B2B Corp / Infomation Security
这个想法非常新颖,详细可以参考云舒写过的 《RSA非对称加密的一些非常规应用》,地址为http://www.icylife.net/yunshu/show.php?id=471
这个原理简单描述为下:
1. 在server端生成一对RSA密钥,包括public key 和 private key
2. public key传输给客户端浏览器, 客户端浏览器用public key加密敏感数据,比如密码;加密后的密文传回给server,然后server用 private key解密。
3. 注意private key只保存在server端,而public key则分发给所有人。 由于 private key只有server知道,所以密文即使被截获了,也无法解开。
这个解决方案其实还是非常好的,至少他防住了大部分的攻击,但是为什么说它是无法替代https,是有缺陷的呢?
因为这个方案无法防止中间人攻击 (man-in-the-middle)。
攻击过程如下:
1. 攻击者通过MIM(比如arp欺骗等)劫持server与客户端浏览器之间的http包
2. 攻击者生成一对伪造的RSA密钥: fake public key/fake private key
3. 攻击者将js文件中的public key替换为fake public key,并传输给客户端浏览器
4. 客户端浏览器用 fake public key加密敏感数据,比如密码,并将加密后的数据传输给攻击者
5. 攻击者用fake private key解密,获得明文密码等
6. 攻击者用server的public key加密明文数据,并传送给server
整个过程中不会出现任何提示,而用户的明文数据则被窃取了!
而luoluo则提出来一个更邪恶的想法(顺便在这里祝luoluo今天生日快乐!),他提出可以直接将加密的介质修改。
比如,如果是用js在做加密,则修改js,如果是用flash或java applert做加密,则替换flash或applet,直接去掉这种加密机制,捕获明文密码。
那么为什么说https是不可替代的呢? 因为当实施中间人攻击的时候,浏览器会提示证书已改变(具体参考云舒的关于https安全性的文章),这种机制是内建在浏览器里的,攻击者无力改变它。所以这种报警是非常有意义的。
而如果像QQ一样使用js进行RSA加密传输,实施中间人攻击的时候,是不会有任何提示的,一切都会在用户不知情的情况下发生。
这种情况和以前windows的RDP中间人攻击情况一样: 当使用3389端口的rdp协议登录时候,证书改变的时候没有任何提示。
而相对设计比较安全的ssh协议,ssl协议等,则都会针对证书改变做出提示,防止中间人攻击。
所 以,QQ的这个方案只能保护传输过程中一般的sniffer攻击,但是考虑到当今网络环境下,大部分的sniffer都是基于arp欺骗的,所以这种保护 机制其实是非常脆弱的。它只能对抗目前已知的arp sniffer软件,而对专门开发的替换关键字的软件,则无法有效防御。一旦这种专门针对QQ网站登录的sniffer软件被开发出来并且提供下载,灾难 就不远了。
不过这个方案还是有积极意义的,除去不能抵抗中间人攻击的缺陷外,其他方面都比较完美,特别是成本低廉。如果与https结合使用来防止中间人攻击的话,整个方案就更完美了。
之前曾与朋友戏言QQ是否会因为我这一篇文章而多花费几百万的经费去购买https证书和https硬件加速服务器,现在让我们拭目以待,看看QQ是否是真正的用户至上。
希望QQ能越做越好。
-
你前面自己都说了是在server端生成的一对密钥。后面你自己提的攻击方案却说是:2. 攻击者生成一对伪造的RSA密钥: fake public key/fake private key
攻击者生成的 server端根本就不认同。。你这描述也太简单了。 - 回复 支持(3) 反对(32) 举报
- 无语,腾迅做到这一步已经很不错了,你自己在局域网内被arp劫持是你自己的问题,就算用登陆全部换https,如果你真的被ARP劫持了,那人伪造一个http下的登陆框,绝大多数人看到qq.com,也不会有任何疑心的。归根结底,想要防止密码被盗,最终要使自己小心,让腾迅花再大的功夫都是杯水车薪。
- 回复 支持(7) 反对(27) 举报
-
(顺便在这里祝luoluo今天生日快乐!
)
我联想到了……“马尔蒂尼今天生日快乐! ! ! ”
嗯 原理我看懂了,有道理的,说白了就是可以直接伪装截获密码,但是还更高级一些,这个RSA加密传输……缺陷不小 - 回复 支持(10) 反对(3) 举报
-
我加密算法学了三遍了
问楼主一个弱智的问题:
用户的隐私数据通过RSA传到server端,可以通过私钥解密
那么反过来,server端传到客户端呢? 众所周知RSA好是好,但是非产慢,只适合一些小数据,例如对称密钥的分发 。难道是每个QQ里都有一个庞大的解密机构? - 回复 支持(1) 反对(8) 举报
- 5楼的朋友,他的意思是伪造了一个SERVER端,然后把截获的明文密码用真正SERVER端的PB加密再发给服务器,对服务器来说是代替了真正的客户端。典型的中间人攻击
- 回复 支持(17) 反对(1) 举报
- 如果某些浏览器修改版(比如MX)作者在其修改版中插入相关站点的过滤包,直接修改QQ站点的登陆功能,就有可能直接让你将密码明文发给修改版浏览器的作者了。由此看来还是不要用修改版浏览器比较好。
- 回复 支持(17) 反对(1) 举报
- 你没看明白;攻击者截获了public key替换为一个fake public key让用户加密,攻击者有对应的假fake private key当然能够解密截获的用户数据。然后用开始截获的public key加密解密后的数据返回给服务器。
- 回复 支持(4) 反对(1) 举报
- 15楼的朋友,你说的是一种思路,应该是类似MT的过滤包技术吧,这个可以自己判断是否采用过滤包(当然不排除写浏览器的人恶意设下陷阱,不过可能性不大),而现实威胁是建立在ARP欺骗基础上的攻击。
- 回复 支持(1) 反对(0) 举报
-
首先申请本人绝不是枪手,不关是说这个,其它的也一样。
分析是没有用的,给出代码。
或怕给代码会造成很大影响,那弄个实际的环境出来让我们测试一把。 有些东西说的容易,在真正实践时还是会碰到某些问题。 国外还有理论造出隐形衣了呢。 - 回复 支持(5) 反对(9) 举报
-
不光是QQ网站登录=
只要通过HTTP协议的登录密码的都能有漏洞=
记得01年的时候有个163邮箱密码探测器的东西=
就是利用ARP的 只不过当时很多人不知道= 再说这个东西早不是什么新鲜玩意了 - 回复 支持(6) 反对(0) 举报
- 怎么就这么多人还不明白,我打个比方,好比TX的服务器送把锁给QQ客户端,客户端用锁把数据锁上再传给TX服务器。但现在如果黑客把这个锁给拦下了,然后换上黑客的锁(在局域网里这是很容易做到的),那么QQ客户端就会用黑客的锁把数据锁上。黑客截获数据后,直接用他自己的钥匙把数据解锁,然后复印一份,再把数据用TX服务器的锁锁上并交回去。整个过程就是这样。
- 回复 支持(34) 反对(0) 举报
-
我觉得这篇文章完全没什么技术含量。
关键点在于截获数据包。
当大部分黑客做到这一点的时候,全世界的大部分网络应用都要担心。
绝大部分网站的加密方式要么就是(yahoo)MD5(单向)目前md5理论上是可以破解的,和QQ这种双向的(文章已经提出了破解方案)。至于SHA1等这些的在于算法的强度 只要你有办法截获数据包,你几乎或一定可以得到你想要的东西。 - 回复 支持(2) 反对(1) 举报
-
腾讯的方法感觉挺别扭。公钥应该是所有人都能看到的密码,包括攻击者。非对称加密本身就可以保证,即使公钥被篡改,通讯也是安全的。
一般情况下,应该是服务器用用户的公钥给需要加密的数据a加密,用户收到后用自己的私钥解密,得到数据。在这种情况下,即使有MIM,攻击者也不能篡改数据,因为所有数据都是经过了加密的,不像文中那样,服务器公钥明文传送。一旦篡改,用户就无法用自己的私钥解密数据a。
说实话,我觉得腾讯的做法更像是在用对称加密。而且是很拙劣的对称加密,密钥交换都用明文。这就像是在大街上大声告诉你街对面的同伴一件事,如果那个同伴耳朵不好,就问一下他旁边的人刚才说的是什么,旁边的人就说:“他告诉你,给你旁边那个人一张100元的钞票。”然后这个人就真的傻呼呼地给了。 - 回复 支持(1) 反对(1) 举报
-
"它只能对抗目前已知的arp sniffer软件,而对专门开发的替换关键字的软件,则无法有效防御。"
总要留给Wall
(专门开发的替换关键字{链接}的软件)解密吧,说不说也知道,TOM SKYPE的解密也是直接交给Wall
的,不说原理也知道这个问题。 - 回复 支持(0) 反对(0) 举报
-
不知道腾讯是怎么做的,不过有一点可以肯定:楼上绝大部分人把密钥交换过程与保密通信过程弄混淆了,有人提到MD5破解的问题,单向Hash实现明文被坎掉了,自己去复习Hash实现。另外,不要动不动就RSA,要说清楚是RSA协议,差别大的很,看的我都累。
无论是SSL/Kerberos/SET等安全协议都有密钥交换的过程,SSL握手、Kerberos在Windows域中的用户密码hash以及TGT等手段的运用,都试图保障密钥交换过程安全。这里高手多,肯定有人知道像Differ-Hellman基于素数模的密钥交换方式,以及古老有缺陷的像N-S系列协议、甚至一些具有重放攻击缺陷的RPC/大嘴青蛙等,这些都是密钥交换协议。用于密钥交换而非通信保密。
我只想说,如果要保证密钥交换绝对安全是非常困难的,然而即便是最简单的2方对称密钥传输协议RPC(修订版)要想做重放攻击也是有很多条件限制的。与其把时间和精力花在这上面,不如去多写几个盗号软件来的方便。 - 回复 支持(0) 反对(1) 举报
-
说几点琐事.
1.ph4nt0m这个组织,国内公认是民间网安组织中最好之一,就算说到国外,也是有所共识的.就算在国内比不上xfocus,whitecell,0x557这些老牌组织.也差不多了.因此文章的权威性应该不用怀疑.
2.axis是ph4的头,文章抬头说到的Alibaba B2B Corp,和阿里巴巴公司无关,只不过axis在此公司做安全方面工作而已.
3.luoluo(顺便再次祝他昨日生日快乐),云舒都是ph4的成员,也是yahoo的安全工作人员.此文章发布在ph4的网页上,也未想到被转载到cb上来,默认受众者都是对网安方面有所了解的.所以对其中的人物术语未加说明. 相信各位有点密码学和网络工程基础的就能看懂,不能看懂的,也无所谓.就当看个新闻而已.恐怕不需要对以上几点乱加指责吧? - 回复 支持(12) 反对(0) 举报
- 别忘了QQ有密码保护。即使丢了密码也可以要回来。
- 其实这个倒也是,完美是不可能的,但是有补救措施还是管用的,当然如果没有密码保护,必须申诉的时候,就不是技术问题了,而是人品问题。而且更多的盗号方法是监控键盘,https对这个情况就没办法了。。。
- 回复 支持(1) 反对(0) 举报
-
真傻,都arp劫持了,还搞那些东西干嘛,要什么有什么了都。楼主是来炫耀技术的?
另外,qq80%以上的登陆都有https的,他们内部不统一罢了,80%的登陆都是跳转到https://acccount.qq.com了,你居然会认为他们没钱。。。他们技术总监文明用语而已。 - 回复 支持(0) 反对(0) 举报
- 恐难以实现

订阅新闻