毕业论文-基于QQ聊天平台的安全通信_第1页
毕业论文-基于QQ聊天平台的安全通信_第2页
毕业论文-基于QQ聊天平台的安全通信_第3页
毕业论文-基于QQ聊天平台的安全通信_第4页
毕业论文-基于QQ聊天平台的安全通信_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE3基于QQ聊天平台的安全通信研究数学计算机科学学院摘要:QQ是中国使用最广泛的即时通信工具,其安全性对于用户安全和网络安全具有重要影响。QQ账号被盗后,其危害和影响是可怕的,用户丢失的大量好友资料和联系方式在短时间内是很难完全找回的。本文将通过对QQ登陆协议的分析性研究,分析其安全性,指出其中存在的安全漏洞,并说明QQ因此可能遭受的攻击,并对此提出改进意见,增强QQ通信的安全性!另外,本文也对QQ盗号也作了相应的研究,并提出了防范的方法。关键词:QQ;登录协议;安全漏洞;改进意见SecurecommunicationbasedonQQchatplatformSchoolofAbstract:QQisthemostwidelyusedinstantcommunicationtoolsinChina,Itssafetyhasimportantinfluencetousersecurityandnetworksecurity.QQaccountstolen,Theharmandinfluenceisterrible,Userdatalostalotoffriendsandcontactwayinashortperiodoftimeisdifficulttocompletelyrecovered.ThisarticlethroughtotheanalysisofthelandingofQQprotocol,Analysisofthesecurity,Pointedouttheexistenceofsecurityvulnerabilities,andIndicatingtheQQsovulnerabletoattack,Andproposedimprovements,StrengthentheQQcommunicationsecurity.Inaddition,Thisarticlehasalsomadethecorrespondingresearch,handingovertoQQ,Andputforwardthepreventionmethods.Keywords:QQ;Loginagreement;Securityvulnerabilities;Improvements第1章QQ登录协议QQ的登陆协议是腾讯自己开发的一套基于二进制数据的应用层网络协议,QQ登陆协议采用了固定的格式,客户端与服务器发送的报文格式上仅有一点点区别。协议用到的对称加密算法为反馈随机交织填充的TEA(TinyEncryptionAlgorithm,一种分组加密算法)变形加密算法,记作QQTEA;用到的哈希函数为MD5。QQ登录分为UDP和TCP登录,还支持代理登录。大部分情况下使用UDP登录。UDP登录端口服务器为8000,本地端口一般是从4000开始选择,如果该端口已经被占用,则加1再测试,一直测试到一个没有被占用的端口。TCP登录服务器一般是443端口,本地端口选择方式和UDP一样。登录方式可以在登录设置里自由设置,但是无论哪种方式登录,其登录流程和数据包格式都是一样。QQ登陆主要分成下面6个步骤:(1)Touch包这个数据包是QQ客户端登录时发送的第一个包,它的作用在于测试远程服务器是否能够正常响应(2)获取验证码由于部分QQ号码可能存在异地登录的情况,或因QQ号码被盗发送大量的垃圾信息,或使用了挂机软件或者挂机网站挂机,腾讯服务器检验到这些非正常的QQ使用情况时便会要求输入验证码(3)密码验证这个数据包的作用是将本地QQ的密码发送给服务器端进行验证。(4)验证令牌(Token)1这个数据包主要用于校验前几个数据包的Token数据,如果通过验证,服务器端会返回本次登录的时间和IP地址等相关信息。(5)验证令牌(Token)2(6)获取会话密钥这个数据包是QQ登录流程的最后一个数据包,主要用于向QQ客户端返回会话密钥(SessionKey),该会话密钥由服务器端生成。各步骤登录指令分别为:0x0825、0x0826、0x0826、0x0826、0x0826、0x0828。服务器端客户端服务器端客户端En(Key1,Data7)En(Key1,Data5)En(Key1,Data4)RKey,En(RKey,En(M2P,Key0))RKey,En(RKey,Data2)RKey,En(RKey,Data0)En(Key3,SessionKey)En(Key4,Data6En(Key1,Data7)En(Key1,Data5)En(Key1,Data4)RKey,En(RKey,En(M2P,Key0))RKey,En(RKey,Data2)RKey,En(RKey,Data0)En(Key3,SessionKey)En(Key4,Data6)En(Key2,{Key2,Key3})En(Key0,{Key1,Key2})En(RKey,Data3)En(RKey,Data1)图QQ登录协议相关符号说明:RKey:用来表示随机生成的16字节长度的密钥。En(Key,P):表示使用密钥Key对明文P加密,这里是指QQTEA加密。Datai:表示尚不清楚具体意义的数据。(i取正整数)Keyi:表示16字节长度的密钥。(i=0,1,2,3,4)MD5:它是一种哈希函数。M2P:Md5(Md5(QQPassword))。QQPassword:QQ密码SessionKey:会话密钥。第2章QQ登录协议的安全性2.1TEA简介TEA算法是由剑桥大学计算机实验室的DavidWheeler和RogerNeedham于1994年发明。TEA是TinyEncryptionAlgorithm的缩写。特点是加密速度极快,高速高效,但是抗差分攻击能力差。TEA加密算法是一种分组密码算法,其明文密文块64比特(8字节),密钥长度128比特(16字节)。TEA加密算法的迭代次数可以改变,建议的迭代次数为32轮,两个TEAFeistel周期算为一轮。TEA算法被广泛应用于QQ的数据加密中,QQ采用16轮的TEA算法加密,在这时采取16轮加密而不采取标准的32轮加密为了减少验证服务器的压力。QQ在数据加密前采用了密码学中的常用的填充及交织技术,减少加密数据的相关性,增加破译者的破解难度。TEA算法代码如下:voidqq_encipher(unsignedlong*constplain,constunsignedlong*constkey,unsignedlong*constcrypt)//参数为8字节的明文输入和16字节的密钥,输出8字节密文{unsignedlongleft=plain[0],right=plain[1],a=key[0],b=key[1],c=key[2],d=key[3],n=32,sum=0,delta=0x9E3779b9;//明文输入被分为左右两部分,密钥分为四部分存入寄存器,n表示加密轮数推荐32。delta是一个常数。while(n-->0){sum+=delta;left+=((right<<4)+a)^(right+sum)^((right>>5)+b);right+=((left<<4)+c)^(left+sum)^((left>>5)+d);}crypt[0]=left;crypt[1]=right;}voiddecrypt(unsignedlong*v,unsignedlong*k){//解密过程unsignedlongy=v[0],z=v[1],sum=0xC6EF3720,i;unsignedlongdelta=0x9e3779b9;//delta黄金分割率。它的作用是使得每轮的加密不同。初始化为0x9e3779b9unsignedlonga=k[0],b=k[1],c=k[2],d=k[3];for(i=0;i<32;i++){//循环入口z-=((y<<4)+c)^(y+sum)^((y>>5)+d);y-=((z<<4)+a)^(z+sum)^((z>>5)+b);sum-=delta;/*结束循环*/}v[0]=y;v[1]=z;}2.2QQTEA算法在本文第一章中提到,协议用到的对称加密算法为反馈随机交织填充的TEA(TinyEncryptionAlgorithm,一种分组加密算法)变形加密算法,记作QQTEA。那么这里将主要介绍填充、交织和反馈这三点,如果大家对TEA算法的加密过程感兴趣,可参考相关文献[1]。(1)填充算法为了适用TEA算法,需要使得明文的字节数是8的倍数。如果明文本身的长度不是8的倍数,那么还要进行填充以使其成为8的倍数。以字节为单位,令N=原始字符串+10+填充字节数n,则N应该是8的倍数。具体的填充方法:第一个字节为:(random()&0xf8)|n,随后填充(n+2)个字节random()&0xff,后面接原始数据,最后填充7个字节0x00。因为使用了不同的随机数,所以填充的结果使得即使对于相同的明文,密文的结果也会不同。如图: 1Byte 填充长度(n)+2 明文长度 7Byte随机数 填充长度 随机数 明文 0x00random()&0xf8n random()&0xf8 3Byte填充长度(n)=8-((明文长度+2)%8)(2)交织算法消息被分为多个加密单元,每一个加密单元都是8字节,使用TEA进行加密,加密结果与下一个加密单元做异或运算后再作为待加密的明文。(3)反馈加密因为TEA是分组加密算法,所以需要将明文分块。plain[i]表示明文的第i个分组,crypted[i]表示密文的第i个分组,所有分组加密使用的密钥是相同的,设为key。具体的反馈加密过程如下图所示: plain[i] crypted[i-1]keykey TEA plain[i-1] crypted[i]当i=1时,crypted[i]=E(key,plain[i]);当i>1时,crypted[i]=plain[i-1]xorE(key,plain[i]xorcrypted[i-1])。在参考文献[1]中提到要验证一个密钥是否是正确的,那么只需要取明文和密文的最后16Byte(也就是两个分组)就行了。可是根据上面给出的式子,我们就会发现,对于第一个分组,其实并没有进行反馈处理,因此,只需要对前8Byte(即一个分组)出来解密,通过比较也能判断出测试密钥的正确性。2.3伪随机数生成器在QQ2012客户端程序中使用了伪随机数生成器(PRNC),下面简单介绍伪随机数及其安全性。(1)伪随机数真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。(2)伪随机数生成器 伪随机数字生成器(PRNG)是一种生成伪随机数的方法。在很多的加密算法以及诸多安全协议中都涉及到了随机数的生成,由此可以看出,一个安全的伪随机数生成器对于密码学来说是至关重要的。因此研究伪随机数的安全性是尤为必要的,但是由于计算机的确定性,那么研究伪随机数的安全性往往是指在多项式时间内不可预测。需要指出的是,QQ2012客户端程序中使用的伪随机数生成器是一种线性同余发生器LCG(Linearcongruentialgenerator)。QQ2012客户端使用的LCG来自MicrosoftVisual/QuickC/C++的rand()函数。具体的计算方法如下:Xn=(Xn-1*A+B)modM其中Xn是序列的第n个数,Xn-1是序列的第n-1个数,A,B,M都是常数(一般会取质数)。当B=0时,叫做乘同余法。引出一个概念叫seed,它会被作为X0被代入上式中,然后每次调用rand()函数都会用上一次产生的随机值来生成新的随机值。可以看出实际上用rand()函数生成的是一个递推的序列,一切值都来源于最初的seed。所以当初始的seed取一样的时候,得到的序列都相同。rand()函数原型:int__cdeclrand(void){return(((holdrand=holdrand*214013L+2531011L)>>16)&0x7fff);}若是要使用该线性同余发生器LCG来产生随机密钥,那么有两种方法:第一种是每次产生两个字节,另一种是每次产生一个字节。作为一个通用的函数例程,其使用的应该是是第二种方法,具体函数例程如下:intfillrandom(char*buffer,constintsize){inti;for(i=0;i<size;i++){buffer[i]=rand()&0xff;}}通过上文可以了解到,当选取恰当的A和B时,产生的序列周期是可以达到M的。对于32位的程序来说,这样的周期还是安全的。但是,如果按照上述例程来产生密钥,由于只使用到了8-15的比特位(最低位是第0位),其周期是大大缩短了。这样产生的一个完整周期,它的长度为2^24。在允许的时间范围内检索完这个序列是绝对有可能的,这样一来便为离线字典攻击提供了机会。第3章QQ登录协议的漏洞及改进3.1漏洞1-伪随机数生成器攻击上文中已经对伪随机数及QQ2012客户端程序中使用的伪随机数生成器进行了简要介绍,并分析了安全性。由此可知,因为伪随机数生成器的安全漏洞,才让我们能够对其生成的随机密钥进行有效预测。从本文第1章对QQ登录协议的介绍可以了解到,一旦我们预测到了Key0,就可以获得{Key1,Key2};获得了Key2,进而就知道了{Key3,Key4};通过Key3就能最终获得SessionKey(会话密钥)。所以,我们可以这样理解:对Key0的攻击,实际上就是对于SessionKey。因此,直接研究对QQ登录协议中极为重要的SessionKey会话秘钥的攻击就可以了。下面重点讲解对SessionKey的攻击(相关数据可参照第1章QQ登录协议流程图):开始捕捉pcap_loop(UDP数据包)判断数据包是否捕捉成功,是则进行c,否则重新捕捉判断数据包是否满足条件:dport=8000并且包含RKey,E(RKey,En(RKey,En(M2P,Key0)));满足便在Rand.bin中寻找RKey对应的偏移量offset,并保存offset,再执行步骤b;不满足则进行d。判断数据包是否满足条件:sport=8000并且包含En(Key0,{Key1,Key2});满足便在Rand.bin中从offset开始测试每一个可能的密钥,得到Key0,使用Key0解密En(Key0,{Key1,Key2})获得并且保存Key2,再执行步骤b;不满足则进行e。判断数据包是否满足条件:sport=8000并且包含En(Key2,{Key3,Key4});满足使用Key2解密En(Key2,{Key3,Key4})获得并且保存Key3,再执行步骤b;不满足则进行f。判断数据包是否满足条件:sport=8000并且包含En(Key3,SessionKey);满足使用Key3解密En(Key3,SessionKey)获得并且保存Key3;不满足则进行b。相关说明:dport:表示UDP数据包的目的端口sport:表示UDP数据包的源端口Rand.bin:使用上一节提到的方法生成的随机数的完整一个周期的数据文件。寻找RKey对应的偏移量:可以使用暴力的方法Rand.bin大小只有16MByte。如果这个周期比较大,通过合理的组织数据结构和预先的计算,可以在更快的时间内找到其对应的偏移量。从offset开始测试每一个可能的密钥:通过多次的试验发现Key0处于offset-16的偏移量位置。复杂的客户端登录操作可能会改变这个偏移量,所以需要采用搜索的方式,而offset-16这个偏移量位置在大部分情况下是正确的。包含:只需根据UDP数据包的第4个和第5个字节来判断即可。另外需要注意的是,这种攻击方式并不是适用于所有的情况,至少在“登录保护”情况下就是是无效的。因为在“登录保护”下的Key0应该是至少与登录IP有关的一个MD5校验值。3.2漏洞2-离线字典攻击所谓字典攻击,指的是收集好密码可能包含的字符串,然后通过各种方式组合,逐一测试。其实就是猜密码,只不过用电脑来完成。在参考文献[1]中已经提出了一种针对QQ2008的离线字典攻击的方法,在参考文献[2]也简要提到了关于QQ2010的离线字典攻击,其实这些方法对于QQ2012来说同样适用,本文对这个攻击方法将不再赘述。参照本文第2章关于QQTEA算法的分析可以了解到,要想验证一个口令的正确性,除了选择最后的16Byte进行检验,我们也可以先对开头的8Byte采取解密检验。这样一来,第一个分组便没有反馈,而且第一个字节的最低的三位包含着已知信息(随机填充的字节数)。实际上,如果明文中的任何两个连续分组是已知的,那么它们都是可以用来做解密检验的。下面将讲解测试密钥验证程序(相关数据参照本文第2章QQTEA算法):输入测试密钥key,前8个字节的密文crypted使用测试密钥解密得到明文plain=D(key,crypted)判断是否满足条件:plain[0]&0x7等于1;若满足条件,则进行d;否则,返回信息“错误的密钥key”。该判断原因:对于正确的身份验证来说,服务器返回的数据包大小总是为285Byte明文,按照填充规则,填充的头一个字节的最低8位应该等于(8-(285+2)%8)=1判断是否满足条件:plain[4,5,6,7]等于0x01,0x19,0x00,0x00;若满足条件,则进行e;否则,返回信息“错误的密钥key”。该判断原因:对于正确的身份验证来说,服务器返回的前四个字节是固定的。判断是否满足条件:plain的最后7个字节都是0x00;若满足条件,则返回信息“找到正确的密钥key”;否则,返回信息“错误的密钥key”。该判断原因:实际上,步骤c和步骤d这两个判断足以判定测试密钥的正确性,但是出于严谨的角度增设此判断。D(key,crypted):表示使用密钥key对密文3.3QQ登陆协议的改进意见本章给出的改进方法,主要是针对上文中两种攻击提出的。1.防御伪随机数生成器攻击的方法通过上文介绍可知,如果想要防御伪随机数生成器攻击,只需修改随机数生成密钥的方式(这里涉及两点:序列周期和K0),那么具体的实现方法如下:(1)周期:使用周期更长的随机数生成器。(2)K0:关于K0,主要是增加其被预测到的难度。由第1章QQ登录协议流程图可知,K0的生成有随机数的参数。其实,除了有随机数的参数之外,还可与MD5({QQNumber,QQPassword,Time})进行一次异或操作,这样攻击者便无法通过简单的随机数预测来获得K0的信息。2.防御离线字典攻击的方法这里我们假设攻击者采用离线字典攻击,那么在攻击者和合法用户之间并没有更多信息上的差异。首先我们尝试采用安全的密钥交换协议来抵御离线字典攻击,但是目前使用的密钥交换协议至少是基于Diffie-Hellman密钥交换协议/算法(Diffie-HellmanKeyExchange/AgreementAlgorithm)。此协议的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥,然后可以用这个密钥进行加密和解密。但是这一类协议需要一定的存储量和计算量,并不太适合一些QQ终端。在第3章提到字典攻击就是收集好密码可能包含的字符串,然后通过各种方式组合,逐一测试,从而获得正确的密钥。那么我们可以通过增加字典攻击的复杂度来抵御攻击:(1)增加TEA变换的轮次(因为TEA加密算法的迭代次数可以改变,建议的迭代次数为32轮。而QQ采用16轮的TEA算法加密)(2)修改明文尾部附加的7个字节的填充内容为随机数第4章QQ盗号及防范4.1QQ盗号QQ作为国内使用最广的即时通讯工具,除了用户数量庞大外,针对它的恶意程序数量也非常可观。这些恶意程序大多目的都是盗取QQ登录账号和密码,将账号出售,或进一步实施网络犯罪或诈骗。目前常见并且有效的盗号方法就是利用“QQ盗号木马”。盗号木马是具有盗取QQ账号能力的木马病毒,在浏览带有盗号木马病毒的网站时或者打开带有木马病毒的文件时,它会入侵计算机,伺机盗取QQ密码。当木马被加载后,会定时检查QQ是否在运行。如果在运行,则显示一个假冒的登录窗口,提示用户输入账号和密码重新登录。如果用户不慎按照提示操作,木马会记录下用户的QQ账号和密码,并将其发送到黑客预先指定的地址。QQ盗号木马的一般运行模式为:监视用户登陆窗的操作→通过远程端口把操作记录传输给事先设定好的的地点→制作者收到后,把密码和账号窃取→修改密码,洗劫所有有价值的虚拟物品。还有一种做法,就是当用户打开登陆窗后,病毒以每秒几十万甚至几百万次的速度套取密码,直到成功之后,再把正确的账号密码发给制作者。最近新发现,某实验室最近截获到一种名为Trojan-PSW.Win32.QQPass.binz的QQ盗号木马,会盗取用户QQ信息并发送给远程黑客。同常见木马不同,该木马是一个DLL文件。而DLL文件需要exe文件加载才能够运行。该木马编写者并没有自己编写DLL加载程序,而是修改了某些系统文件如msdtc.exe来加载,这样有可能躲避某些安全软件主动防御方面的检查,从而盗号成功率便大大增加了。QQ账号被盗后,其危害和影响是可怕的,用户丢失的大量好友资料和联系方式在短时间内是很难完全找回的。用户的隐私泄露,同时也会造成经济损失,自己投入的大量精力完善的账号一下就没有了,其中的苦楚是不言而喻的。4.2常用盗号方式及软件:方式1:冒充QQ用户的亲人、朋友、同学等,向QQ用户发送信息。例如:XX同学,我在XX网站上看到了一个非常有意思的新闻,请你过去看看。然后留下一个网址,当你点击进入后,提示要输入QQ号码和登陆密码,很难会想到这是盗号的人留下的盗号窗口,盗号的人从后台可以看到登陆密码。还有就是说QQ登陆已掉线,随后弹出一个貌似QQ登陆的窗口,请重新登陆,理睬的QQ用户就是这样被盗号的。方式2:木马的种类繁多,它们就像是安装在用户电脑里面的窃听器,时刻监控着用户电脑的一举一动,神不知鬼不觉的就把黑客感兴趣的账号密码信息记录并发送给黑客。比如啊拉QQ大盗就会在用户电脑里面安装键盘窃听器截取用户输入的QQ账号密码信息发送到黑客制定的服务器。方式3::有一些木马,它们把自己伪装成电脑操作系统中很关键的一个模块。然后欺骗很多软件让很多正常的软件变成盗号木马的帮凶。黑客通常将盗号木马进行打扮成msimg32.dll(查看图片相关的重要文件)等软件必不可少的模块,然后释放并隐藏到QQ等软件安装目录,当这些程序使用的时候按照操作系统的规矩会先用安装目录下的模块,于是这些傀儡软件一转眼就变成了盗号木马(假的msimg32.dll)的帮凶。方式4:有一种很流行的QQ盗号方式是通过QQ聊天信息进行传播,当有一个用户帐号被盗后,他的所有好友,QQ群都会收到钓鱼消息,内容格式是“有XX事需要好友的帮助+钓鱼网址”,如有人点击钓鱼网址打开假冒QQ空间,背景通常是美女相册缩略图,醒目的地方则提示“您需要登录才可以访问QQ空间”,目的是骗取用户的QQ帐号和密码然后对好友进行诈骗。黑客常用盗号软件:1、QQ机器人QQ机器人是一款可以同时机密多个用户号码的QQ在线解密工具、如果用户的QQ密码不小心丢失了,也可以采用该软件找回自己的密码2、QQ简单盗QQ简单盗是一款经典的盗号软件,采用插入技术,本身不产生进程,因此难以被发现,它会自动生成一个木马,只要将生成的木马发送给目标用户,并诱骗器运行该木马文件,就达到了入侵的目的。3、迷你QQ密码截取器迷你QQ密码截取器是众多QQ密码截取软件中效率很高的软件,它会在用户打开QQ程序“注册向导”时开始执行到登陆成功这段时间内轻松偷取QQ号码和密码,程序会自动将号码和密码发送到指定的信箱中。4、好友号好好盗好友号好好盗是一款非常实用的远程盗号软件,可在对方好友在线时对其QQ号码进行盗取。该软件实用图片进行伪装,直接通过QQ传回密码,另外还具有加密传递信息功能。5、阿拉QQ大盗阿拉QQ大盗是一款窃取QQ密码的工具,具有很高的破坏性和隐蔽性,该工具通过转存密码信息和伪装图标等方式来窃取QQ密码。6、QQExplorerQQExplorer是一款比较常用的在线破解QQ密码的工具,功能强大,设置简便。7、盗Q黑侠盗Q黑侠是一款专门盗取QQ密码的工具,该程序运行后,自身分为3个文件来相互守护,终止便自动复活,从而增加了存货率。8、冰之缘冰之缘是一款伪装性极强的QQ盗号木马,在其中可以自定义设置QQ盗号时的出错信息,从而让盗号更加隐蔽。还可以设置在木马运行时,自动打开一个文件文本等,它是黑客常用的一款盗取QQ密码的工具。9、QQ破密使者QQ破密使者是一个本地破解QQ密码的黑客工具,用户可以选择字典暴力破解本地QQ密码4.3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论