日志分类:案例分析

【转帖】QQ协议分析之TCPF包结构

2009年05月16号 21:35  |  分类:案例分析

 

Toad转帖一篇TCPF包结构的文章,大家先看看,Toad也需要研究一下!

包结构类型:

TCPF包我们把它分为5类:

登录请求包(LIP,LogIn Packet),它是由客户端向服务器发出登录请求的数据包。

登录应答包(LRP,Login Reply Packet),它是由服务器响应客户端登录请求的数据包。

注销请求包(LOP,LogOut Packet),它是由客户端向服务器发出注销登录请求的数据包,

服务器对这个包不作应答。

客户端其它包(CSP,Client Sent Packet),它是由客户端向服务器发送的其它包。

服务器其它包(SSP,Server Sent Packet),它是由服务器向客户端发送的其它包。

包头:

所有TCPF包的前7个字节是包头,包头可以识别TCPF包的内容。包头的格式为:

第0字节:TCPF包标识:0×02。

第1-2字节:发送者标识。如果是0×01 0×00,表明是由服务器发送。客户端的标识与所使用的使用的QQ版本有关,目前最新版本QQ2003(0808)的标识为0×0A 0×1D。具体的协议的格式与这个字段所标识的客户端版本有关。目前我们以这个最新的0A1D版本来讨论。

第3-4字节:命令编号。具体的命令编号含义在《QQ协议概述》(Protocol Overview.rtf)中有描述。如果这个字段是0×00 0×01,那么这是一个注销请求包。如果这个字段是0×00 0×22,而发送者标识是0×01 0×00,那么这是一个登录应答包。如果这个字段是0×00 0×22,而发送者标识是其它(例如0×0A 0×1D),那么这是一个登录请求包。其它的命令代码表明是其它包,我们通过发送者标识来区分它是CSP还是SSP。

第5-6字节:命令序列号。客户端和服务器都有各自的当前发送序列号。每初始发出一个指令的时候,使用当前的序列号,然后把当前序列号加一,如果超过0xFFFF,就绕回。如果是响应对方发出的命令,则使用这个命令的序列号。例如,客户端当前的序列号为0×1110,它向服务发送一个0×0016命令,它使用0×1110这个序列号,服务器收到以后,返回一个序列号为0×1110的0×0016命令响应。下一次,客户端又发送一个0×0026命令,这一次它使用加一了的序列号0×1111,服务器也响应0×1111序列号的一个0×0026命令响应。如果这是服务器要向客户端发送0×0017命令,它使用它自己的当前序列号,比如说0×2220,客户端收到以后,也响应一个序列号为0×2220的0×0017命令应答。我们可以通过序列号来判断发出的指令是否已经得到了应答,如果没有,可以重发。服务器对收到的命令的序列号顺序没有要求。服务器也不会一定按照发出的顺序给予应答。

 

包尾:

所有的TCPF包都以0×03作为包尾。在包头和包尾中间的包数据则不同类型的包有所不同。

LIP包:

登录请求包的包数据格式为:

第7-10字节(4 bytes):发出登录请求的QQ号码。这是一个Big Endian(高位在前)的unsigned long型数值。例如:0×01 0×82 0×5D 0×90就是0×01825D90,转换为十进制是25320848,表明发出请求的QQ号是25320848。

第11-26字节(16 bytes):随机密钥。这个密钥由于加密后面的数据。QQ使用TEA算法来加密数据。它使用的是128bit(16 bytes)的密钥。在0A1D版本中,这个密钥已经固定为16个01。

第27-106字节(80 bytes):加密后的登录包数据。

LRP包:

从第7字节开始到包尾前:加密的登录应答包数据。解密的密钥随客户端版本的不同,有不同的可能。在旧有版本中,使用登录包的随机密钥,在后期的版本,使用用户QQ密码的MD5 Digest。在0A1D中,使用QQ密码的MD5 Digest的MD5 Digest(这体现了腾讯有多么的愚昧和无耻,为了改变而改变)。LRP包内数据很重要的是16个字节的Session Key,它用来作为以后通讯的加密密钥。

LOP包:

它的序列号总是0xFFFF。不过,在新的版本中,好象已经没有了这个要求。

第7-10字节(4 bytes):发送注销登录请求的QQ号码。

第11字节到包尾前:加密的注销登录包数据。使用Session Key作为密钥。

CSP包:

第7-10字节(4 bytes):发送请求的QQ号码。

第11字节到包尾前:加密的包数据。使用Session Key作为密钥。

SSP包:

从第7字节开始到包尾前:加密的服务器发送包数据,使用Session Key作为密钥。

QQ通信原理逐步解析日记

2009年05月13号 22:19  |  分类:案例分析

 

为什么标题中要加入“逐步”二词呢?因为Toad从来没对QQ的通信原理做过详细的Sniifer研究。

这是一份QQ通信原理的研究日记,Toad不敢保证这份日记的正确性,一旦发现错误,Toad会及时更正,同时,也希望读者朋友及时指出来!

通过SE,Toad知道了QQ使用的应用层协议是TCPF(文字聊天协议族)全称为:“Text Chatting Protocol Family”,呵呵,第一次听说这个协议,不知道是国际标准,还是腾讯自己设计的。不知道其协议的格式是怎样的,一会儿Sniffer看一下。研究所使用的软件环境如下:

WIN 2003+QQ 2009+科来网络分析系统

很意外,科来已经为我们准备好了QQ的过滤规则,不用自己去写了,Very Good!

OK,让我们开始吧,下图是登录QQ,10秒内的数据抓取结果:

 

QQ通信原理Sniifer图

                                                                      图1

 

一共有236个数据包 。刚一登录,QQ客户端就向服务端发送了8个数据包。大家注意看,这8个数据包的目的IP都不一样,但目的端口是一样的:8000,源端口则为4000-4008。我们再来看看这8个数据包协议首部情况!QQ使用的UDP协议这个外星人都知道,直接看应用层首部:

QQ之TCPF协议首部Sniffer图

                                                                   图2

这8个数据包中,TCPF协议首部中都有“数据包头”,“数据包尾”两个协议域,且,值都是固定的,前者为:2,后者为:3。这应该是TCPF协议类似“边界符”的设计。版本标识,不知道是指TCPF协议版本,还是指QQ版本!命令:145,不知道意义是什么,根据Toad的经验,不同命令会触发服务器不同的处理行为,下来再仔细研究下。顺序号,通过分析,感觉跟TCP中SYN、ACK标志的意义相同,应该是防止数据错位的一种设计!QQ号码,这个就不用多想了,23111055正是Toad的QQ号码。加密数据协议域,这8个数据包都一样:64字节。

文章来源于>>TCP/IP协议分析博客     转载请注明:Toad的博客

案例分析-ARP欺骗攻击(3)

2009年05月4号 20:07  |  分类:案例分析

 

前面两篇文章叙述了ARP欺骗攻击的原理和最有效的防御措施!这篇文章,我们从Sniffer的角度,进行客观的分析!还是老规矩,实例在文章的结尾处下载(用“科来”打开,实例来自csna)!请看下面两张图:

 

ARP欺骗攻击实例图(1)

                                                                    图1

 

ARP欺骗攻击实例图(2)

                                                                    图2 

 

Toad先不告诉大家,这两张图中,什么地方的数据是很敏感的!请,读者朋友仔细观察,以找到答案!

waiting。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

哈哈,找到了吗?

如果,未找到,请接着往下看。编号为1 的包,是一个ARP请求。在这个ARP请求中,源IP和目标IP都是:192.168.1.254。为什么会这样呢?请大家回忆“什么是ARP攻击”这篇文章中所讲的内容,对,这个包就是Toad说过的“1)、第一个ARP请求包用于查询同网段内是否有跟自己IP相同的主机”,以后讲“ARP免费”机制时再详加讨论。这个包对于我们抓到凶手,有一定的参考价值,因为这个包是由ARP协议自动产生,并非用户行为。那么 ,这里的源MAC和源IP就绝对是真实的,下文,就不用Toad多说了吧!但是,“ARP免费”机制是否只在系统引导时触发,Toad不敢肯定,没做过这种实验,没有实践经验的问题,Toad向来不喜欢下定论!如果,“ARP免费”机制只在主机引导时产生,那么这个包,就很难抓到了!攻击者,不会攻击一会儿,就重启吧!哈哈,万一真被抓到了,那就要恭喜你了,可以省不少力气!

我们再看编号为2的包,这里的源MAC已经发生变化了,但,源IP依然是:192.168.1.254。说明,ARP欺骗已经开始!(看到这里,也说明,这个实例,只是这个实例作者自己搞的一个测试而已,并非真正的ARP欺骗行为!)“目的MAC”已经变为单播,目的IP已经是被害者的IP。

ARP欺骗攻击实例:点击下载

文章来源于>>TCP/IP协议分析博客           转载请注明:Toad的博客

案例分析-ARP欺骗攻击(2)

2009年05月2号 22:27  |  分类:案例分析

 

我们接着讨论。回到上一讲提出的问题:“这种欺骗会导致什么样的后果呢?”

由于,受害主机的MAC缓冲池被恶意修改,网关的MAC被修改为了攻击者的MAC。当受害主机向Internet发送数据时,这些数据会被导向攻击主机,而不是网关(具体原理,在分析ARP协议时,会详加解释,这里大家只要记住会造成这种后果就行了)!这种后果是非常是严重,轻则上不了Internet,重则用户数据被盗(例如:游戏、WEB、e_mail帐号等等)。例如:HTTP数据,一般情况下HTTP数据是未加密的,HTTPS用的比例相对较少。攻击主机收到这些HTTP包后,会反解到应用层读出封装在HTTP协议中的用户数据,到了这一步,会发生什么,就不用Toad多说了!有段时间,大量用户的传奇帐号被盗,就是这种方式!

预防ARP欺骗攻击的最好形式,还是“IP—MAC”的静态绑定!再次重申:主机、交换机、网关都要做相应的静态绑定处理!因为这三者都有自己的MAC缓冲池,攻击者改其中一个的MAC缓冲池,都会导致一系列故障!

文章来源于>>TCP/IP协议分析博客                  转载请注明:Toad的博客

案例分析-ARP欺骗攻击

2009年05月1号 22:29  |  分类:案例分析

 

ARP欺骗攻击,是非常常见的一种ARP攻击。如果把ARP广播攻击归类于莽夫型攻击,那么,ARP欺骗攻击,就是智者型攻击!

攻击者,一般会伪造ARP回应包(注意,这里是ARP回应包,不再是ARP请求包)。伪造一些什么样的信息呢?首先,大家要弄明白,攻击要对受害者进行什么样的欺骗。一般情况下,攻击主机想修改被害主机MAC缓冲池中的网关IP所对应的MAC!这种欺骗会导致什么样的结果呢?请看下图:

中心型网络拓扑结构图

 

这是,我们目前最常用的一种网络拓扑图。有些企业或者机构,他们使用的不是交换机,而是路由交换机,网关就做在路由交换机上!IDC机房的网络拓扑就更专业了,由多个这种网络单元组成!但,这不影响我们接下来要讨论的东东!不管什么拓扑结构,什么交换设备,都是用的TCP/IP协议(这种说法,只针对于我们讨论的组网技术,当然,还有其他网络协议)。

攻击主机、3台被害主机、交换机和网关它们都有自己的MAC缓冲池!在正常情况下,攻击主机、3台被害主机和交换机的MAC缓冲池中都有一条“网关IP—–网关MAC”的记录!攻击主机的目的就是把3台被害主机和交换机MAC缓冲中这条记录改为“网关IP——攻击主机MAC”!

文章来源于>>TCP/IP协议分析博客                      转载请注明:Toad的博客

什么是ARP攻击(2)?

2009年04月29号 23:24  |  分类:案例分析

OK,我们继续!面对ARP攻击,其实,我们很无赖!这是协议BUG,没办法防御,网上很多防御措施,但,在ARP洪水攻击下,网络质量都会大大下降!防御ARP攻击最有效的方式还是IP—MAC的三向绑定!

1、主机端静态绑定

2、网关端静态绑定

3、交换机静态绑定

ARP攻击者一样可以改写网关的MAC缓冲池,导致网关转发数据包时,出现错误!交换机中也有MAC缓冲池,所以一样要静态绑定!平时的那些ARP防火墙,在实际应用中,偶尔会导致正常应用出现问题!有条件的朋友,一定要要求IDC托管商进行交换机绑定。Toad在CSNA找了两个ARP攻击的sniffer结果,对了,还得说一下,对于初学者做sniffer实验时,最好选用HUB不要用SWITCH,原因,我们以后解释。请看下图:

ARP广播风暴攻击Sniffer结果截图 

这个例子,不是真正意义上的ARP攻击!只是作者自己用软件模拟的“ARP广播风暴”式攻击!为什么叫“广播式”呢?大家看,这些ARP攻击包的目标MAC全为:FFFF-FFFF-FFFF(二层广播地址),交换机接到这种ARP包,会转发给交换机上所有电口所接的主机!主机接到这种ARP广播包,链路层是不会直接删除的!

我们来说说,正常的ARP请求包该是个什么样子。正常ARP请求包目的MAC也为:FFFF-FFFF-FFFF,但目的IP是为空的,为什么呢?原因很简单,如果已然知晓对方IP,就没有理由再发出ARP请求包了!大家看看这些ARP攻击包是什么样子:

ARP广播风暴包中的ARP首部图

目标IP不为空,而且,每个ARP包中的目标IP都不一样,这一点,只有大家自己用“科来”打开Sniffer包看一下了!后面,Toad会上传的!

如果你的网段中,出现以下现象:

1、ARP请求包的包量大

2、ARP请求包的目的MAC全为FFFF-FFFF-FFFF

3、ARP请求包中的目的IP不为空,而且,动态变化

不用怀疑,ARP攻击来了!

ARP广播风暴抓包实例:点击下载

文章来源于>>TCP/IP协议分析博客                         转载请注明:Toad的博客

什么是ARP攻击?

2009年04月28号 22:43  |  分类:案例分析

在讲ARP攻击之前,要先对国产的“科来网络分析系统”提出赞扬!很不错的国产软件,严重支持!当Toad正在为大量的实例而苦恼时,豁然发现网络分析论坛(CSNA)有大量的实例!这些实例都是遇到网络故障的朋友Sniffer的内容。这种实例最大的优点,就是千变万化!很多故障Toad短时内也无法得出答案,这才有意思,老是讲些皮毛和概念没意思,SE一搜,一大堆!以后,Toad会逐渐从CSNA随机选取实例来做讲解!分析的工具有两个:

1、科来网络分析系统

2、Sniffer Pro 4.75

废话不多说了,开始这一讲的正题!什么是ARP攻击,这个问题大家去问SE吧,网上这种文章多如牛毛(哈哈,抱歉,文章取了这么一个题目)!ARP攻击原理,待,我们以后分析完ARP协议后,自然知晓!这里,我们要做到如何判断一个网络中,是否发生了ARP攻击。要做到这一点,只需要Sniffer一下就很直观了,一般情况下,一个网段内,ARP包是非常少的,为什么少呢?如果一个正常的网段内实时的ARP包都很多,那么MAC缓冲池设计就失去意义了!网关上有MAC缓冲池,主机上也有MAC缓冲池。一台主机进入网络,一般情况下只产生两个ARP包:

1)、第一个ARP请求包用于查询同网段内是否有跟自己IP相同的主机

2)、第二个ARP请求用于获得网关的MAC,网关返回一个ARP回应,正是网关的这个ARP回应,促使主机在自己的MAC缓冲池中建立了一条“网关IP——网关MAC”的记录。

经过以上两步后,主机短时内是不会再产生ARP请求的,除非有其他进程促使ARP请求包的生成,或者网关MAC变化,网络不通等等!正是因为MAC缓冲池机制,导致了ARP攻击的可能!通过上面的叙述,我们很容易发现ARP协议的一个重大弊端——那就是ARP协议无验证机制!人人都可以改写其他主机MAC缓冲池中的“IP—–MAC”记录。只要会网络编程,做到这一点很简单!今天就到这里了。。。。下一讲继续!

文章来源于>>TCP/IP协议分析博客                     转载请注明:Toad的博客

DDOS案列分析

2009年04月17号 23:22  |  分类:案例分析

讲了这么久的基础,今天来点“猛”的!DDOS上场。。。。大家鼓掌!

先看图:

Sniffer抓取的基于TCP三次握手的DDOS(1)

                                                                    图1 

Sniffer抓取的基于TCP三次握手的DDOS(2)

                                                                    图2

 

由于安全原因,小弟把图片中的目的IP抹去了,这不影响我们要讨论的东东!

这是基于TCP三次握手类型的DDOS,建立一个TCP连接,必须经过3个步骤

1、请求端发送一个SYN包给服务端

2、服务端返回一个SYN/ACK包给请求端

3、请求端再返回一个ACK包给服务端

这样,一个TCP连接就建立了。这个过程的详细讲解,不是我们这一讲要讨论,不明白的朋友,请看以后的TCP协议分析的文章!

这里,要明白一个东东,当服务器端没有收到第三步中的ACK包时,它会干什么?服务器端的这条TCP连接所占的系统资源,将会处于一个等待的状态,等待ACK包的到来!这个等待时间有多长,不同的操作系统不一样。况且,正确建立的TCP连接,在释放后,还会处于一个2MSL(俗称:等待状态,以后详解。。。哈哈)!基于以上两点再加上巨量的SYN包,此时,大家应该能够明白,会发生什么!

我们如何判断是否遭受了DDOS?请看第一张图,sunmmary栏目中,出现大量的SYN包,无SYN/ACK包,也没有其他协议或者进程的包。SYN包的源IP无规则跳变,跨度大!

第二张图是TCP首部,我们可以看到只有SYN域被指为1,而且所有的包都是这样!这绝对是发生了DDOS!

下一讲,我们将讲述一些针对这种类型DDOS的防御措施!其实,这些防御措施都是消极的,当DDOS流量无限增大时,没有任何设备能够完全防御!目前,市面上能够发动几个G流量的DDOS个人和组织很多!通过朋友的渠道得知,各大运营商,在部署分层次的DDOS防御体系,从骨干网到终端网逐级过滤,这让我们看见了曙光!