[技术剖析]由“网路岗可截获QQ密码和聊天记录”谈起

2012-05-17 381519人围观 ,发现 2 个不明物体 WEB安全文章

看到大家对“网路岗可截获QQ密码和聊天记录”中QQ文本信息如何被截获有很多说法。我翻出来几年前写的“QQ2009正式版SP4文本信息和文件传输的安全性研究” 贴在这里(xeye的网站被墙,转这里一份)。我想说的是QQ在网络中传输的加密算法是没有问题的。此次网络岗事件,是由于网络岗使用了中间人攻击:这个 软件使QQ登陆时帐号异常,强迫用户去输入密码解锁,此时就完成了中间人攻击,QQ明文密码被截获到。然后软件使用QQ密码的2遍MD5做密钥,解开QQ 聊天文本信息。这种中间人攻击的隐蔽性比较强,因为QQ有时候会经常弹出框说异地登录要输入什么东东之类的,所以用户看到这样的情况也习以为常,不会想到 被攻击。就像小G说的“ 我现在开机就弹登陆异常,要输入验证码,哪天要是假窗口要密码,也许我也会填。。。最近一直在外地,习惯了填这个”。

如果要深入了解QQ的加密密钥如何产生,聊天信息在网络中传输是否安全,请阅读下文。

==================================================

QQ2009正式版SP4文本信息和文件传输的安全性研究

Author: xisigr[xeye]
EMail: xisigr@gmail.com
Site: http://xeyeteam.appspot.com
Date: 2009-10-27

[ 目录 ]

0×00 前言
0×01 TEA算法简介
0×02 QQ2009如何获取Session Key及其安全性
0×021 连接服务器操作0×91
0×022 客户端登陆请求0xba
0×023 发送密码验证0xdd
0×024 获取登陆信息0xe5
0×025 QQ命令0xa4操作
0×026 获取Session Key 0×30
0×027 总结
0×03 QQ2009文件传输机制及其安全性
0×031 发送端请求传送文件
0×032 持续发送连接信息
0×033 发送端发送文件名
0×034 发送端发送文件内容
0×035 总结
0×00 前言

本文通过对网络中传输的QQ数据流进行黑盒协议分析,得出QQ文本信息和文件传输的传输机制,从而讨论传输中的安全性。鉴于是黑盒分析,如有遗漏或不当之处,务请读者批评指正。文中提及的QQ,既是QQ2009正式版SP4版本。

测试环境:Windows 7|Wireshark|QQ2009正式版SP4|QQ默认登录方式|样本数据是未删减的真实数据。

0×01 TEA算法简介

QQ聊天文本信息在网络中采用TEA算法进行加密传输。TEA加密算法是一种分组密码算法,其明文密文块64比特(8字节),密钥长度128比特(16字节)。

默认是32轮迭代,QQ使用16轮迭代。

注:本文不涉及到对TEA算法安全性讨论。

 

0×02 QQ2009如何获取Session Key及其安全性

此 处所描述的Session Key,指的是在QQ登录成功后,将由服务端产生一个16字节密钥,此密钥将作为加密QQ信息的最终密钥。要还原聊天文本信息,必须使用Session Key来进行解密。相比以前版本(QQ2007,2008登陆协议集合是相同的,2009协议集合发生变化,难道QQ协议集合是两年一变?),在 QQ2009中,QQ的协议命令集发生了很大变化。其中剔除了0×22这个登录命令,加入了新的和登录信息相关的命令0xe5,0x4a,而且登录的机制 和产生密钥的顺序也有所改变。在QQ2009中,从用户开始登陆,到取得 Session Key,需要执行6个QQ命令,最终在服务器发送的0×30这个命令中得到。由上面的简单分析,已经了解QQ文本的加密方式,那么Session Key又是如何产生的,是否可以在数据流中截获到Session Key呢。在下文中,将按QQ命令发送的顺序(0×91,0xba,0xdd,0xe5,0xa4,0×30)来对这些疑问进行一一解答。

0×021 连接服务器操作0×91

(1)数据流方向:客户端—>服务端

+——QQ净核报文——+
包头:02
QQ版本:19 0f
QQ指令:00 91
序列号:7c 13
QQ号码:00 93 04 ad <9634989>
临时密钥A:c6 ec a5 ad ed 58 06 dd a4 9d 35 9a d5 14 f6 22
加 密数据:ae e9 2a ed c4 2b 5c 40 78 b9 e2 c8 2c 2f b0 74 67 bd 26 da 9c 36 9b ac e6 80 57 9a 44 3c 2c 11 b5 fd b8 ad 07 02 99 46 b7 3e c5 1e b9 b8 df 58
结束包:03
+——QQ净核报文——+

+—–临时密钥A解密数据——+
00 01
00 00
08 04
01 E0
00 00 02 20 00 00 00 01 00 00
09 D3
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+—–临时密钥A解密数据——+

(2)数据流方向:服务端—>客户端

+——QQ净核报文——+
包头:02
QQ版本:19 0f
QQ指令:00 91
序列号:7c 13
加 密数据:09 05 49 69 2b a0 1f b3 9b f6 66 95 7e c6 29 b3 d0 95 d8 bd c5 82 e3 9a e4 0f 8e 8d 23 e4 24 0e 33 69 6b 32 90 f1 32 a8 52 b3 c8 14 95 d9 97 2b bd 48 71 be 18 f0 e3 c8 73 f4 d0 34 08 1c bf 4b 2b bd 40 57 d1 54 99 88 4b 1a 54 e1 40 33 ce aa 50 e7 b2 c2 c8 5c 6e da
结束包:03
+——QQ净核报文——+

+—–临时密钥A解密数据——+
00
4A DB FF 34 <服务器时间: Monday, October, 19, 2009,13:55:00>
DD DD A7 90 <客户端IP:221.221.167.144>
00 00 00 00 00 00 00 00
00 38 <数据长度>
F4 E0 BA B0 F4 47 12 0B 71 7A DC EC 26 65 B7 E2 1B C8 19 22 FD A6 EF CB 7F D8 41 FD BE 11 B8 5F A8 7E 70 4C 11 BC BD A0 CA B6 E9 62 35 E6 84 E0 7C A6 73 FE C2 52 72 2E 00
+—–临时密钥A解密数据——+

0×022 客户端登陆请求0xba

(1)数据流方向:客户端—>服务端

+——QQ净核报文——+
包头:02
QQ版本:19 0f
QQ指令:00 ba
序列号:6f b6
QQ号码:00 93 04 ad <9634989>
临时密钥B:0e 28 6f c6 68 02 67 89 5f 9d 54 d0 a6 b2 93 ce
加 密数据:59 1f 2c 32 66 60 47 45 ee 4d e8 4e c0 58 03 7c 0b 33 6c 57 ec 9f a0 ae 5a da 2d ec d8 9a 15 a3 2a 27 97 b5 50 fa 12 89 53 bf cc c4 11 18 7e c4 bf 64 05 3a 72 2c 8e 9d d4 03 49 60 b8 1e 27 dc 12 a9 4b 4b 56 7d c5 78 ba 7e cb 48 a9 7f 85 b1 2e 6e 48 5a 8f 7d bc 6c 03 83 55 75 77 23 24 dc 99 69 36 d5 17 bf df 0f
结束包:03
+——QQ净核报文——+

+—–临时密钥B解密数据——+
00 01
00 00 08 04 01 E0
00 00 02 20 00 00 00 01 00 00
09 D3
00 38
F4 E0 BA B0 F4 47 12 0B 71 7A DC EC 26 65 B7 E2 1B C8 19 22 FD A6 EF CB 7F D8 41 FD BE 11 B8 5F A8 7E 70 4C 11 BC BD A0 CA B6 E9 62 35 E6 84 E0 7C A6 73 FE C2 52 72 2E
03 00 05 00 00 00 00 00 00 00
+—–临时密钥B解密数据——+

(2)数据流方向:服务端–>客户端

+——QQ净核报文——+
包头:02
QQ版本:19 0f
QQ指令:00 ba
序列号:6f b6
加 密数据:ba 0f 25 0b ba 90 39 20 5a d3 7f ff ea c1 4f 86 86 a5 c8 e3 e3 93 42 1d bb 2d 6c 23 2f ab fb 6e eb af 1b 0c c5 30 03 46 1a 20 8a 1e de e1 81 1f 61 15 a7 6a e7 e9 6e 30 ef ae 38 89 70 e0 70 4e 1e 2d 09 7d 36 08 ec f1 42 5c a0 f2 66 30 ef 64
结束包:03
+——QQ净核报文——+

+—–临时密钥B解密数据——+
03 00 05 00 00 00 00 00
00 38
7F F3 C6 DE 37 9E 03 AE 7A 08 47 B6 FD 33 49 42 2A A3 2F 25 FD 50 F7 B4 0D 29 71 55 CD 3B 21 45 F6 56 DA E4 5E AA 6B 9D 5D 0A 04 F1 33 0C 09 1D 5C FD D5 34 88 95 20 BD
+—–临时密钥B解密数据——+

0×023 发送密码验证0xdd

(1)数据流方向:客户端—>服务端

+——QQ净核报文——+
包头:02
QQ版本:19 0f
QQ指令:00 dd
序列号:15 9b
QQ号码:00 93 04 ad <9634989>
随即密钥C:fb 68 c2 05 b9 d2 d7 09 1f 8b 30 b0 57 9f fa 80
加 密数据:48 9e c4 bc ab 0d 6c 4f 97 9c 7f 75 80 6d 4d ac 92 09 9d 62 63 1e 8c 47 7e 09 f8 5a b4 93 3b 72 eb 4d e6 97 e0 20 55 da c2 7f 47 42 8c 4e 4a 73 18 3d df 38 95 2d dd 54 01 08 46 64 87 b7 6f cc 8c 5d e3 95 67 26 9a 2f b7 d7 9c af 5c d6 e6 9e be ac 54 a1 b2 7a 22 87 ae eb 2b ef 65 7a 9f 0b 69 e1 94 26 50 7f a8 0a 7d 7d d0 7e 03 0b 42 0e be 7d 5a 66 0c 12 c5 b4 a5 3a c6 aa b4 e1 98 eb 17 27 dc cd 45 b2 82 c8 dd 06 b2 9b 89 9d 59 7e 70 a4 10 b9 51 3e e6 0e 17 9e 39 4b 01 43 53 ff e5 ee 72 70 33 9f ed 28 bc cf 0d fe 83 d3 3c 2c 57 5d 10 69 94 5a 50 43 ad ce 2b 58 ce 9c 3e 8f 37 f8 43 1a dd 4c ae cd 16 f5 6e dc aa 78 a3 60 26 70 57 8a 50 60 59 02 44 dc 0d 9c b6 bb c4 12 c4 b5 b6 ae 34 b1 9e a1 da fa f2 bd b5 a7 b0 5a e1 78 b3 c3 0c c2 0a d3 c4 93 d6 17 a5 09 c7 14 a9 9b ba 2b fa 83 51 54 75 4f 02 83 d7 de 62 e4 40 3d 45 07 e9 5f 22 ff b3 d6 fe b0 98 79 77 39 b0 a1 d3 31 45 3d 1d 92 5b f9 58 31 eb 44 81 17 95 7d 07 0b ab 02 fb 19 12 f3 92 dd a0 2c 77 d5 c4 67 66 6f ae 4c 98 b5 9f 36 44 56 6a 03 85 53 30 c5 39 f688 ca 6e 95 0a 21 27 a7 3c 13 ae 86 bb 56 9a af f9 71 2f 61 36 d0 82 1e e0 3a a8 59 72 17 a2 c4 b1 32 45 5d 7d 68 fc fe 26 68 a3 55 a0 86 51 fc 99 5b 4c 23 26 21 e3 78 a4 01 4a 3c 68 94 dc ca 96 df 50 15 23 0f 82 23 d6 e2 c0 5d 7f 75 eb de 7e 1d dd e2 b9 52 47 4e d1 8f 55 30 e1 d7 44 89 8f 85 bc 99 59 fa d7 1b a9 d2 f5 14 f3 b8 be b9 d0 a1 09 19 60 9a 10 db 36 63 74 d3 c6 30 a8 b5 80 9c 36 61 69 6b 17 7c a0 e5 99 7a fd f3 34 94 25 26 a1 68 96 e3 ba d9 38 c8 79 68 fd 13 68 7a d0 af fd 21 e4 90 cb 2f eb 7d 7c ba 00 7a 44 b0 ac 6b e0 2e e1 d2 f0 df 86 2e 4f fe a8 10 ae cb a8 32 e3 6a b2 f0 23 53 02 de 6f 8c 81 cb a1 14 43 54 01 cd ef c8 14 d2 94 08 94 37 ad 4c 03 24 52 9f 87 00 5b 9b 93 8b e4 cc be ab 5b dd 14 ad 76 e6 a6 1f 37 be ff a3 b3 1a 29 33 fb 07 dc 6e 7d 5b 96 eb 36 e3 4f e6 36 06 c6 95 7c e6 bd 94 6b c6 45 20
结束包:03
+——QQ净核报文——+

+—–临时密钥C解密数据——+
00 DE
00 01 00 00 08 04 01 E0
00 00 02 20 00 00 00 01 00 00 09 D3
00 38
7F F3 C6 DE 37 9E 03 AE 7A 08 47 B6 FD 33 49 42 2A A3 2F 25 FD 50 F7 B4 0D 29 71 55 CD 3B 21 45 F6 56 DA E4 5E AA 6B 9D 5D 0A 04 F1 33 0C 09 1D 5C FD D5 34 88 95 20 BD
00 78 <120字节的加密数据>
3D 5A 46 62 19 5B 0E E5 43 D8 71 37 C7 5F D6 D8 01 9C 63 AF DF 4A 8A 77 A6 F3 69 4E 85 57 89 87 F7 BF F2 1C 61 BF 9A F6 AF 23 D5 2C 43 E1 B9 48 58 9A C4 D2 CA 84 45 D2 CF E1 2F EE 94 D6 3D 81 B8 5B A9 BE E3 BD 58 70 D8 96 45 61 E5 F4 4D E3 D9 5D 5A B0 BF CD 7F FD 8A 85 08 60 4F 65 66 7B C0 59 C6 C9 60 5D BE D6 84 F0 C4 96 52 F9 2B E9 F2 8A 09 78 86 06 49 1D
<<用QQ密码两次MD5值解密后数据 104个字节
A6 90 96 66
00 01
00 93 04 AD <QQ:9634989>
00 00 02 20 00 00 00 01 00 00 09 D3
00 00 00
03 C9 56 EF 0D 33 FD 2C 40 21 4C E5 10 3D 41 83 <QQ密码的一次MD5值>
4A DB FF 34 <服务器时间: Monday, October, 19, 2009,13:55:00>
00 00 00 00 00 00 00 00 00 00 00 00 00
DD DD A7 90 <客户端IP:221.221.167.144>
00 00 00 00
00 00 00 00
00 10
25 1B 67 DD B7 A6 6C 4C 98 A1 93 B9 FB 89 81 D0
C3 F2 80 BB C9 12 CE 01 A5 B2 8F 1A 80 EC C4 17 <临时密钥D>
>>
00 14 AB 94 9A 29 DA 39 DF D3 C4 1A A8 15 1A E3 75 D3 31 63 85 A1 01 77 2E 01 39 EF 1E 34 00 10 1D 51 7B 87 21 F4 21 41 E6 8E 2E 6A D9 F2 C0 12 02 CF E6 33 CA 00 10 52 0A 91 B9 E8 03 2C A9 B9 30 EA 04 60 AD DD 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<很多的0,冗余数据>
+—–临时密钥C解密数据——+

(2)数据流方向:服务端–>客户端

+——QQ净核报文——+
包头:02
QQ版本:19 0f
QQ指令:00 dd
序列号:15 9b
加密数据:
10 ac 92 12 e6 0a e1 6a 4c b9 fa b5 18 db 66 ac d6 ed 13 7b ca 48 26 e6 fe a5 28 c5 a8 fb 6d 08 d4 82 c7 c1 89 2f f1 0a 73 72 4c 71 d7 ad de 9d f0 c6 bb 77 dd d6 74 ed 79 eb 36 d0 0d e3 73 84 5f d9 33 f5 c6 77 e5 b7 d4 19 cf 07 60 67 ff 99 aa 60 7f 0c 73 f2 36 92 fe f3 70 a0 c0 99 85 ac ff dc 57 92 27 19 d0 a6 05 36 7f ae 63 f0 08 85 4f 05 89 96 42 38 6d 26 01 a6 5a a7 97 7c 22 29 bd 12 c1 be cd c5 74 68 d2 e0 13 0a 3d 46 aa 28 c3 80 80 20 69 26 21 6a ef 9d 17 19 63 ec a2 58 d0 32 26 fd 51 17 d8 dd 1b 13 69 af 2b 3f a0 9f 0b ed d0 0f 87 21 18 95 46 73 6a 88 c2 1e e4 f4 28 a0 50 a3 c6 58 b4 4a c9 d6 02 0e e7 cf 29 87 cb 02 f8 10 5b e8 ba e1 f7 ca ee 23 17 e3 1f 6f e4 2e a4 90 93 eb b1 8b 4d 67 97 39 75 fb 43 f3 c1 c2 a5 b2 f0 f2 fe eb 7d 77 39 92 91 e6 d2 a7 eb e