xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
添加文章 Xcon English Version

PPPoE验证与利用


创建时间:2006-06-27
文章属性:整理
文章提交:Xunen (leixunen_at_163.com)

本文根据黑防2005年第8期《PPPoE验证的隐患与利用》(原作者:飞刀)改写而成,或曰转载,列位看官莫见笑。
一、    前言
近年来,网络数据业务发展迅速,宽带用户呈爆炸式的增长,运营商在采用xDSL,LAN,HFC,无线等多种接入方式的同时,为了构建一个可运营、可管理、可盈利的宽带网络,十分关心如何有效地完成用户的管理,PPPoE(PPP over Ethernet)就是随之出现的多种认证技术中的一种。
1、PPP over Ethernet
  1998年后期问世的以太网上点对点协议(PPP over Ethernet)技术是由Redback 网络公司、客户端软件开发商RouterWare公司以及Worldcom子公司UUNET Technologies公司在IETF RFC制的基础上联合开发的。通过把最经济的局域网技术——以太网和点对点协议的可扩展性及管理控制功能结合在一起,网络服务提供商和电信运营商便可利用可靠和熟悉的技术来加速部署高速互联网业务。它使服务提供商在通过数字用户线、电缆调制解调器或无线连接等方式,提供支持多用户的宽带接入服务时更加简便易行。同时该技术亦简化了最终用户在动态地选择这些服务时的操作。
PPPoE 基于以太网的点对点协议,当前的 PPPOE 主要被 ISP用于 xDSL 和 cable modems 与用户端的连接,他们几乎与以太网一样。 PPPoE 是一种标准的点对点协议 (PPP), 他们之间只是传输上的差异: PPPoE 使用 modem 连接来代替普通的以太网。一般来说 , PPPoE 是基于与用户认证和通过分发 IP 地址给客户端。一个 PPPoE 连接由客户端和一个访问集线服务器组成,客户端可以是一个安装了 PPPoE 协议的 windows 电脑。 PPPoE 客户端和服务器能工作在任何以太网等级的路由器接口
2、网通的宽带接入方式
网通的宽带接入方式通常都是LAN的方式,即所有的用户都位于一个大的局域网中,客户端要上网,需要先使用相应的账号进行PPPoE拨号,通过验证之后获得公网IP,然后才能上网。
二、PPPoE验证过程
1、PPPoE验证过程
首先了解一下PPPoE验证过程:
假如客户端要通过一个局域网与远程的PPPoE服务器进行身份验证,这时,它们会有两个不同的会话阶段,Discovery阶段和PPP会话阶段。当一个客户端想开始一个PPPoE会话时,它必须首先进行发现阶段以识别对端的以太网MAC地址,并建立一个PPPoESESSON_ID。在发现阶段,基于网络的拓扑结构,客户端可以发现多个PPPoE服务器,然后从中选择一个,不过通常都是选择反应最快的一个。Discovery阶段是一个无状态的阶段,该阶段主要是选择接入服务器,确定所要建立的PPP会话标识符Session ID,同时获得对方点到点的连接信息;PPP会话阶段执行标准的PPP过程。当此阶段完成,通信的两端都知到PPPoESESSON_ID和对端的以太网地址,它们一起定义了一个唯一的PPPoE会话。这些步骤包括客户端广播一个发起分组(PASI),一个或多个PPPoE服务器发送响应分组(PADO),客户端向选中的服务器发送请求分组(PADR),选中的PPPoE服务器发送一个确认分组(PADS)给客户端。当客户端接收到确认分组,它可以开始进行PPP会话阶段。当PPPoE服务器发送出确认分组,它可以开始PPP会话。当客户端在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。如果客户端正等待接收PADS,应该使用具有客户端重新发送PADR的相似超时机制。在重试指定的次数后,主机应该重新发送PADI分组。PPPOE还有一个PADT分组,它可以在会话建立后的任何时候发送,来终止PPPOE会话。它可以由客户端或者PPPOE服务器发送。当接收到一个PADT,不再允许使用这个会话来发送PPP业务在发送或接收PADT后,即正常的PPP不能使用时,可以使用PADT,一旦PPPOE会话开始,PPP数据就可以以任何其它的PPP封装形式发送。所有的以太网帧都是单播的,身份验证是发生在会话阶段的,PPPoE会话的SESSION_ID一定不能改变,并且必须是发现阶段分配的值。
2。 PPP over Ethernet基本帧格式
  建立一个以太网上点对点协议会话包括两个阶段:1。 发现(Discovery)阶段。在Discovery过程中用户主机以广播方式寻找可以连接的所有的接入集线器,并获得其以太网MAC地址。然后选择需要连接的主机并确定所要建立的PPP会话识别标号。2。 PPP会话阶段。用户主机与接入集线器根据在发现阶段所协商的PPP会话连接参数进行PPP会话。因此对应于这两种过程,以太网上点对点协议帧格式(如图2)也包括两种类型:发现阶段的以太网帧中的类型字段为0x8863;PPP会话阶段的以太网帧中的类型字段为0x8864,它们均已得到IEEE的认可。PPPoE包中的版本(VER) 字段和类型(TYPE)字段长度均为4比特,在当前版本PPPoE建议中这两个字段值都固定为0x1。代码(CODE)字段长度为8比特,根据两阶段中各种数据包的不同功能而值不同。在PPP会话阶段CODE字段为0x00,发现阶段中的各种数据包格式将在下面详细介绍发现阶段时给出。版本标识号码(SESSION_ID)字段长度为16比特,在一个给定的PPP会话过程中它是固定不变的。值0xffffff为保留值。长度(LENGTH)字段为16比特长,指示PPPoE净荷长度。发现阶段PPPoE载荷可以为空或由多个标记(TAG)组成,每个标记都是TLV(类型-长度-值)的结构;PPP会话阶段PPPoE载荷为标准的点对点协议包。
3。 发现(Discovery)阶段的详细介绍
一个典型的发现(Discovery)阶段共包括4个步骤:
  1、主机发出PPPoE有效发现启动(PADI)包。以太网目的地址为广播地址0xffffffffffff,       CODE字段为0x09,SESSION_ID为0x0000。PADI包必须至少包含一个服务名称类型的标签(标签类型字段为0x0101),向接入集线器提出所要求提供的服务。
  2、接入集线器收到在服务范围内的PADI包后,发送PPPoE有效发现提供(PADO)包以响应请求。其CODE字段为0x07 ,SESSION_ID仍为0x0000。PADO包必须包含一个接入集线器名称类型的标签(标签类型字段为0x0102)以及一个或多个服务名称类型标签,表明可向主机提供的服务种类。
  3、主机在可能收到的多个PADO包中选择一个合适的,然后向所选择的接入集线器发送PPPoE有效发现请求(PADR)包。其CODE字段为0x19 ,SESSION_ID仍为0x0000。PADR包必须包一个服务名称类型标签,确定向接入集线器请求的服务种类。
  4、接入集线器收到PADR包后准备开始PPP会话,它发送一个PPPoE有效发现会话确认(PADS)包。其CODE字段为0x65 ,SESSION_ID为接入集线器所产生的一个唯一的PPPoE会话标识号码。PADS包也必须包含一个接入集线器名称类型的标签确认向主机提供的服务。当主机收到PADS包确认后,双方就进入PPP会话阶段。  
三、PPPoE验证的利用
从上面的过程我们需要注意两点:发现阶段是广播方式进行的。会话阶段是单播;客户端通常选择反应最的PPPOE服务器进行身份验证和接入,什么是反应快?我们可以理解成客户端将与最近的PPPOE服务器进行身份验证。
利用思路:这就是今天要说的关键,如果我们架设一个PPPOE服务器,那么与我们同一交换机或集线器(通常是一个楼层)的用户都将会选择这个服务器进行接入和身份验证,而不会去寻找远方的PPPOE服务器。
下面说一下利用过程:
1、架设PPPOE服务器。架设PPPOE服务器,原作者是利用Windows Server2003的“路由与远程访问”服务来架设的,然后安装PPPoE驱动,这样使得路由与远程访问服务增加了PPPOE服务。当然也可使用Linux系统,网上有一篇关于Linux+PPPoE服务器的文章。
2、    将PPPOE身份验证设为未加密方式(具体情况还得取决与PPPOE服务器),不用多说,这主要是为了方便明文嗅探。
3、    使用Sniffer进行嗅探。
四、解决方案与结束语
有关解决方案还在琢磨之中。偶所处地问题相当严重。
参考:
1、《PPPoE验证的隐患与利用》(黑防2005年第八期)
2、《PPPoE 协议在宽带接入网中的应用》 网络(http://www。vlan9。com)
3、《Sniffer Pro网络优化与故障检修手册》(电子工业出版社2004.8,TP393.08)