zhoutao0712 发表于 2009-2-6 01:45:09

快速查找PPPOE攻击源的方法(转)

:) 刚看到一篇关于PPPOE攻击方法的文章。转过来大家一起研究下,厉害的大侠最好写个工具出来。

除此之外,攻击小区宽带的还有下列方法:

1.找到PPPOE服务器的MAC地址,欺骗交换机的MAC地址表。解决方法是交换机做静态MAC或划分基于端口的VLAN。

2.自己做个PPPOE服务器,让别人拨进来。解决方法是交换机划分基于端口的VLAN。

3.以网卡最快的速率(理论是100Mbps啦)向广播地址FF:FF:FF:FF:FF:FF发送数据包(就是DOS攻击啦)。解决方法是在交换机上限制用户端口的上行速率或者限制端口的广播数据包数量(广播风暴抑制)。

4.这篇文章的方法(可惜我还不会,前3种我都会了)。

5.未知的大侠提出的牛X方法,哈哈。



随着宽带接入服务器和PPPOE协议在电信运营商宽带网中的大量应用,一种针对PPPOE协议的病毒攻击也随之产生。此类攻击主要利用PPPOE协议的特点,采用类似DOS攻击的方式,不断发送PPPOE连接请求包,导致宽带接入服务器处理能力饱和,无法及时响应正常的PPPOE呼叫请求,造成用户无法拨号上网,对宽带网络质量影响较大。 字串5

下面以REDBACK生产的SE800设备为例,介绍一下如何快速定位攻击源并制止攻击对网络通信的影响。在此之前,首先对PPPOE协议的原理和建立过程。 字串9

一、PPPOE协议简介 字串4

PPPoE协议全称Point to Point Protocol over Ethernet(以太网上的点对点协议),简单地说,就是将以太网和PPP协议结合后的协议,目前广泛应用在ADSL接入方式中。通过PPPoE技术和宽带调制解调器(比如ADSL Modem),可以实现高速宽带网的个人身份验证访问,为每个用户创建虚拟拨号连接,这样就可以高速连接到Internet。

字串6

二、PPPOE连接的建立

字串8

PPPOE协议会话的建立包括两个阶段:发现阶段(Discovery)和PPP 会话阶段。

字串1


1、   Discovery阶段 字串5

在Discovery过程中用户主机以广播方式寻找可以连接的所有接入设备,获得其以太网MAC地址。然后选择需要连接的用户主机并最后获得所要建立的PPP会话的SESSION_ID。在Discovery过程中节点间是客户端-服务器关系,一个用户主机(客户端)最终要发现一个接入设备(服务器)。在网络拓朴中,一般有不止一个的接入设备可以通信,Discovery阶段允许用户主机发现所有的接入设备,并从中选择一个。当Discovery阶段结束时,用户主机和接入设备之间都获得了可供以太网上建立PPP连接的全部信息。Discovery阶段保持无连接状态直到一个PPP会话的建立。一旦PPP连接建立,则用户主机和接入设备都必须为PPP虚拟端口分配资源。 字串8

典型的发现(Discovery)阶段共包括4个步骤:

字串2

(1)    用户主机发出PPPOE有效发现初始(PADI)包。以太网目的地址为广播地址0xffffffff, CODE 字段为0x09, SESSION_ID为0x0000。PADI包必须至少包含一个服务名称类型(Service-Name)的标签(标签类型字段为0x0101),向接入设备提出所要求提供的服务。一个完整的PADI(包括PPPOE头)不能超过1484字节,以留下充足的预留给agent设备增加Relay-Session-Id标识。

字串1

(2)    接入设备收到在服务范围内的PADI包后,发送PPPOE有效发现提供(PADO)包以响应请求。其CODE字段为0x07 ,SESSION_ID仍为0x0000。PADO包必须包含一个接入设备名称类型(AC-Name)的标签(标签类型字段为0x0102)以及一个或多个服务名称类型标签,表明可向用户主机提供的服务种类。 字串2

(3)    用户主机在可能收到的多个PADO包中选择一个合适的接入设备,选择的原则是根据PADO中接入设备名称类型标签和服务名称类型标签的内容。然后向所选择的接入设备发送PPPOE有效发现请求(PADR)包。其CODE 字段为0x19,SESSION_ID仍为0x0000。PADR包必须包一个服务名称类型标签,确定向接入设备请求的服务种类。当一个用户主机在确定时间没有收到PADO,他会重发一个PADI,同时等待两倍的时间。这种过程可以根据需要重复多次。 字串2

(4)    接入设备收到PADR包后准备开始PPP会话,它发送一个PPPOE 有效发现会话确认(PADS)包。其CODE 字段为0x65 , SESSION_ID为接入设备所产生的一个唯一的PPPOE会话标识号码。0xffff作为预留资源,目前不能被使用作SESSION_ID。PADS包也必须包含一个服务名称类型的标签确认向用户主机提供的服务。当用户主机收到PADS包确认后,双方就进入PPP会话阶段。如果接入设备不能识别PADR中的服务名称类型的标签,则会回一个包含服务名称错误( Service-Name-Error ) 标签的PADS ,其SESSION_ID仍然是0x0000。如果用户主机在确定时间没收到PADS包,与没收到PADO作同样处理。

字串3

2、   PPP 会话阶段 字串4

用户主机与在发现阶段确定的接入设备进行PPP协商。这个协商过程与标准的PPP协商并没有任何区别。在PPP会话阶段节点间是对等关系。 字串6

3、   PPPOE有效发现终止包 字串1

PPPOE有效发现终止包(PADT),可以在PPP会话建立后的任何时候发送,来终止PPPOE会话。在一个PPP会话建立后,PADT包随时可由用户主机或接入设备中任何一方发送,指示PPP会话已终止。PADT包不需要任何标签,其CODE字段为0xa7,SESSION_ID 为需要终止的PPP会话的会话标识号码。 字串3

在发送或接收PADT后,即使正常的PPP终止分组也不必发送。PPP对端应该使用PPP协议自身来终止PPPOE会话,但是当PPP不能使用时,可以使用PADT。

字串9



字串7

三、PPPOE攻击原理 字串5

PPPOE攻击是利用合理的PPPOE服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。 字串7

假设一台用户主机在发送PPPOE有效发现初始(PADI)包后突然死机或掉线,接入服务器在发出PPPOE有效发现提供(PADO) 包响应后无法收到客户端的PADR 包或PADT包,这种情况下服务器一般会重试并等待一段时间后丢弃这个未完成的连接,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源,即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的PPPOE连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,用户无法建立PPPOE连接,这种情况我们认为服务器端受到了PPPOE攻击。 字串2

四、SE800上如何定位攻击源 字串6

1、   如何判断是否受到攻击 字串4

通常情况下,SE800遭到PADI DOS攻击时,有如下特点: 字串8

大量用户报拨号错误678,此时察看show su su all发现处于认证状态的用户很少且用户上线总数明显低于正常时的水平。

字串2


同时查看pppoe计数器可以看到PADI/PADR的比例超过正常值很多。一般PADI/PADR的数值约为下联线路的条数。在遭到PADI攻击时PADI的数量大大增多。查看pppoe计数器的方法如下: 字串1

Ø      Clear pppoe counter    将计数器清零

字串6

Ø      Show pppoe counter detail   查看计数器数值 字串8

如下是遭到PADI攻击时的例子,此时PADI/PADR值接近20:

字串7

se01#show pppoe counters de

字串8


Current time: Fri Aug 10 10:31:02 2007--当前时间

字串8

Last cleared: Fri Aug 10 10:29:45 2007 --计数器清零的时间 字串8

PPPoE PAD counters: 字串3

---------------------------------------------------------------- 字串1

recv packets       : 6467          sent packets             : 6560 字串5

drop in packets    : 85            drop out packets         : 0   

字串9

PADI packets       : 6085          PADO packets             : 6085 字串7

PADR packets       : 275         PADS packets             : 270字串8

PADM packets       : 0             PADN packets             : 0    字串5

PADT packets recv: 107         PADT packets sent      : 205字串3

Drop packet in counters:

字串1


----------------------------------------------------------------

字串2


PADR, max sess reached   : 0         PADR, same mac starting: 3

字串4

invalid version/type   : 0         invalid length         : 0

字串5

unknown code             : 0         bad packet               : 0

字串9


invalid tag name         : 0         bad encaps               : 0

字串4

PADIs non-zero sess-id   : 0         PADRs non-zero sess-id   : 0

字串6


PADIs no svc name      : 0         PADRs no svc name      : 0

字串4

socket error             : 0         process restart          : 0

字串7


circuit not created      : 0         circuit not up         : 0

字串4


packet on virtual circuit: 0         non subscriber circuit   : 0 字串3

socket drops             : 0         unknown vcct             : 0 字串7

bad ac cookie            : 0         no ac cookie             : 0 字串8

zero mac address         : 0         session is down          : 0 字串8

invalid tag length       : 0         throttle               : 0

字串1

PADO delay max reached: 0   字串8

Drop packet out counters: 字串9

----------------------------------------

字串7


bad packet               : 0         bad encap                : 0 字串5

unknown vcct             : 0         send socket error      : 0

字串3

too long MOTMs         : 0         memory alloc failures    : 0 字串2

PPPoE virtual circuit counters:

字串4

---------------------------------------- 字串9

virtual circuits created : 272      virtual circuits deleted : 231

字串1


combined circuits used   : 0         combined circuits reset: 0

字串8


create failed            : 0         delete failed            : 0

字串3

create fail, rcct used   : 0         create fail, no cct      : 0 字串7

create fail, cct init      : 0         circuit lookup failures: 231

字串8


PPPoE PADM error counters:

字串1

---------------------------------------- 字串7

malformed URLs         : 0         too long expanded URLs   : 0 字串9

too long MOTMs         : 0         bad expansion char       : 0

字串4


字串6

2、   如何确定攻击源 字串2

对于PADI攻击,在SE800上可以通过debug的方式来查找确定攻击源的MAC地址。具体步骤如下:

字串9


Ø      打开Debug步骤如下:

字串2

terminal monitor

字串3

debug pppoe discovery 字串9

Ø      关闭debug的步骤: 字串5

no debug all

字串5

Ø      注意:打开debug会对设备造成一定影响,打开debug后应及时关闭。

字串4

如下蓝色部分为PADI的源MAC,大量发送PADI的MAC地址通常就是攻击源。 字串4

Sep 11 14:06:01: : %PPPOE-7-DISC: Received PADI: local mac: ff:ff:ff:ff:ff:ff remote mac: 00:17:9a:9f:fb:57 字串5

Sep 11 14:06:01: : %PPPOE-7-DISC: add any service, tlen=4

字串5

Sep 11 14:06:01: : %PPPOE-7-DISC: Sent PADO 字串1

Sep 11 14:06:01: : %PPPOE-7-DISC: Received PADI: local mac: ff:ff:ff:ff:ff:ff remote mac: 00:17:9a:9f:fb:57 字串7

Sep 11 14:06:01: : %PPPOE-7-DISC: add any service, tlen=4 字串7

Sep 11 14:06:01: : %PPPOE-7-DISC: Sent PADO 字串8

Sep 11 14:06:01: : %PPPOE-7-DISC: Received PADI: local mac: ff:ff:ff:ff:ff:ff remote mac: 00:d0:f8:3e:34:df

字串8

Sep 11 14:06:01: : %PPPOE-7-DISC: add any service, tlen=4 字串8

Sep 11 14:06:01: : %PPPOE-7-DISC: Sent PADO 字串3

Sep 11 14:06:01: : %PPPOE-7-DISC: Received PADI: local mac: ff:ff:ff:ff:ff:ff remote mac: 00:d0:f8:3e:34:df

字串8


Sep 11 14:06:01: : %PPPOE-7-DISC: Sent PADO 字串5

SE800-01#show pppoe mac 00:03:0d:03:e3:fc

字串2


Tue Sep 11 17:40:15 2007

字串8

Circuit                     MAC address       Subscriber 字串8

----------------------------------------------------------------

字串6


2/2 vlan-id 3156 pppoe 3583   00:03:0d:03:e3:fc   la9861817

字串2



字串3

3、   如何封堵攻击源 字串4

确定mac地址和vlan 号后,再逐级从各交换机上查找MAC地址所在端口,即可定位攻击源。 字串8

例:在思科的交换机上#show mac-address-table

字串9


Mac Address Table

字串7

---------------------------------------------

字串3

Vlan      Mac Address       Type      Ports

字串3

----    --------------    --------    ----- 字串5

4000    0014.69df.4080    DYNAMIC   Fa0/21

字串3


4000    0014.780a.944a    DYNAMIC   Fa0/14

字串6

3999    00e0.fc09.bcf9    DYNAMIC   Fa0/21

字串2


3156    0003.0d03.e3fc    DYNAMIC   Fa0/21

字串4

3999    00e0.fc68.9279    DYNAMIC   Fa0/21 字串4

3999    00e0.fc9b.a3b5    DYNAMIC   Fa0/21 字串5

对交换机以及VLAN进行层层追查,即可确定用户的端口,此时将用户端口关闭,或在用户端口所在交换机上将发出攻击包的用户主机MAC地址进行限制,均可防止用户主机发送PPPOE攻击。

parphy 发表于 2009-2-6 08:11:16

这种攻击属于损人不利己的恶意攻击,是要彻查清除的
页: [1]
查看完整版本: 快速查找PPPOE攻击源的方法(转)