PPPoE,在安全的边缘徘徊


  
PPPoE ,在安全的边缘徘徊
 
 
声明:撰写本文的目的在于让大家明白某些地区PPPoE(PPP Over Ethernet,基于以太网的 PPP协议)应用所存在的安全问题,并尽快找到弥补的方法。如果有谁利用本文提到的理论方法进行实际攻击,所造成的一切后果自负。
 
前言
宽带网的老用户肯定都知道,在几年前,我们去ISP(Internet Service Provider,因特网服务提供商)的营业厅开通网络的时候,他们会给我们一个IP地址,一个网关地址,回家来设好地址,插好网线,开机就可以上网了。而现在我们得到的是一个用户名和一个密码,开机后,先拨号,再上网,这就是PPPoE拨号。
PPPoE给网络提供商和用户都带来了很多好处,它的验证功能很好的解决了以前应用中非法用户私接线路上网的问题,也很好的完成了用户管理,流量统计等任务。随着管理水平的提高,用户的计费方式也更加灵活,包月、包时、包流量等计费方式满足了不同用户的需求。
然而,在PPPoE实施以来,安全问题一直没有得到重视。在某些地区,用户计算机仍旧处于一个快速以太网的环境当中,很容易受到攻击,但ISP在保证了经济效益的情况下并没有提供任何措施来保障用户在目前网络环境中的安全。在很多用户看来,账号和密码就代表着安全,其实不然,它们并不会给用户带来额外的保护,它们保证的是ISP的效益。
在快速以太网环境(以下简称网络)中,用户计算机会不可避免的泄露某些信息,比如机器的MAC地址,IP地址,广播报文所携带的其它信息等。这些信息有可能被攻击者利用,并对用户的网络安全造成威胁,损害用户的利益。
为了方便大家理解,用图1来简单的表示用户所处的网络环境。在实际应用中,网络拓扑会更加的复杂,然而它们的原理都是相同的。
  1
 
. PPPoE 验证过程简述
此部分不是本文的重点,大家知道以下几点就可以:
1. PPPoE的验证过程是由用户计算机的PADI(PPPoE Active Discovery Initiation)数据包开始的,PADI广播发送,它的作用是询问网络上有没有提供服务的PPPoE验证服务器,服务器会以一个单播发送的PADO(PPPoE Active Discovery Offer)做为回应,之后两者之间的所有数据包都是单播发送的。
2.如果网络上存在多台验证服务器,用户计算机会与最先收到的PADO所对应的服务器进行后续的验证过程,而不再向其它服务器发送任何数据。
3.验证过程中,计算机会在一个数据包中以明文发送用户名和密码,因为是单播发送,所以只有验证服务器会收到。
4.验证成功后,用户就可以正常上网了。验证服务器会定时向用户发送Echo-Request数据包,用户则会回应一个Echo-Reply数据包,它们的作用是测试连接是否正常,如果服务器多次没有收到用户的Echo-Request,就认为用户已经失去响应,并断开连接。
 
实验,用监听软件 Ethereal 捕捉 PPPoE 的验证过程。
大家将会在这个实验中看到自己的账号。Ethereal可以在天空软件站下载到( http://www.skycn.com/soft/7343.html),其使用方法不属于本文内容,请参看相关资料。
这里新建一个PPPoE账号,用户名cd_cly,密码123。首先,打开PPPoE,并开始对相应网卡进行监听,如图2。
  2
然后,用新建的账号的进行拨号。当出现如图3所示的错误提示时停止Ethereal的监听。最后察看捕获到的数据,如图4。
  3
  4
请大家根据MAC地址来区分哪些是从我们的机器上发出的数据包,哪些是验证服务器发给我们的数据包。注意那个标记为Authenticate-Request的数据包,这个包的最后就明文表示着我们的用户名cd_cly和密码123。这是个拨号失败的验证过程,有兴趣的读者可以用自己的真实账号再实验一次,看看拨号成功的过程是什么样子。细心的读者会发现,服务器仅仅给我们发送了5个数据包,我们就将账号发送过去了。
从这个实验中,我们不仅搞清楚了PPPoE的验证过程,而且得到了一个重要数据,那就是ISP验证服务器的MAC地址。
 
. 攻击手段及原理详解
从上面的实验中我们可以看到,PPPoE最大的弱点在于它的第一个PADI数据包,因为它是广播包,不光验证服务器可以收到它,存在于网络上的其他主机也可以收到,这就为假冒服务器攻击提供了条件。假冒服务器是冒充ISP的验证服务器,来骗取合法用户账号的攻击。它是极具威胁的,因为无论用户使用的是多么优秀的防火墙和杀毒软件,都无察觉假冒服务攻击的存在。
这种攻击之所以没有得到重视,一是因为它难以察觉。二是因为它的平台依赖性,只有服务器系统像Windows2000、Windows2003、Linux才容易配置。然而问题在于,并不是没有消除平台依赖性的方法,这种方法就是编程实现假冒服务器攻击,我把它称作cd_cly Attack(以下简称CCA)。CCA程序的功能有:假冒服务,账号纪录,攻击强化,监视用户计算机状态,自动拨号和断开,用户验证,数据中转,数据流监视和分析。由于是编程实现,它还可以控制用户拨号失败时得到的错误提示,隐蔽性很高。
CCA最基本的功能有两个,就是数据包的监听和发送,也就是说CCA要建立在监听软件的基础之上。这样,我们就能判断连接请求,并对请求做出响应,以实现假冒服务。
下面大家将看到攻击者是如何利用CCA在不引起任何人注意的情况下完成所有攻击的。
 
1.       账号的窃取
  5
假冒服务器,也是就运行了CCA的计算机,透明存在于这个网络当中,以一种守株待兔的方式默默的进行着账号的窃取。如图5,用户A进行PPPoE拨号时,计算机A向网络发送了一个PADI广播数据包,来向验证服务器发出连接请求,ISP验证服务器和假冒服务器都收到了这个广播包,并单播发送了PADO数据包给计算机A,由于假冒服务器的负载和距离都小于ISP验证服务器,假冒服务器的PADO数据包将率先到达计算机A,计算机A便与假冒服务器开始了PPPoE的验证过程,而不再向ISP的服务器发送任何数据。验证过程必将失败,用户A得到一个“远程计算机不能及时反映,连接被中止”的提示。这时,攻击者的CCA程序已经纪录了用户A的用户名、密码和计算机的MAC地址,并停止假冒服务。用户A看清楚错误提示之后,进行重拨,假冒服务已经停止,拨号成功,网络正常。CCA在一定时间间隔之后,重新开始假冒服务,等待下一个用户拨号。
要注意,此时,用户B将有可能受到攻击,因为两边距离相等,而用户C和D很难受到攻击,因为他们会率先收到ISP验证服务器的PADO数据包,并与其进行正常验证。用户A只是不经意间经历了一次拨号错误,他会把原因归结为自己的系统问题或服务商的系统错误,绝对不会想到自己刚受到过一次被动攻击。在ISP的日志上,会显示一个用户在发送完PADI数据包后就没了音信,ISP会把原因归结为用户系统突然中断,也不会意识到假冒服务器的存在。
这样,一次盗取账号的过程就悄悄的结束了。攻击者还会利用这种方法得到更多的账号。账号失窃对用户来说非常危险,因为PPPoE账号在某些地区可以实现在线支付功能。
 
2 .对用户的监视
得到账号对攻击者来说仅仅是一个开始,因为一个账号只能建立一个连接,也就是说如果攻击者随机选择账号进行连接并成功,随后这个账号的用户在连接时将多次得到用户名和密码被拒绝的提示,用户就可以察觉到账号有问题,并询问ISP,后者就可以将攻击者查找出来。对于这个问题,有人提出过利用分析用户上网日志的方法来避免冲突,然而这样做并不能将冲突概率减小到零。下面我将提出利用CCA完全避免冲突的方法。
CCA的用户监视功能将帮攻击者完成可用账号的选择(此时,假冒服务并未开启)。大家不要忘记当攻击者接收到用户名和密码时,也同时得到了用户的MAC地址,有了MAC地址就可以监视用户的计算机的状态,开机则账号不可用,关机则账号可用。监视是时刻进行的,如果对应账号的计算机由关机变为开机,CCA便立刻自动断开网络连接。用户开机后进行拨号连接一切正常,根本不会察觉到有人用过他的账号;CCA则会帮助攻击者选择另一个未开机的账号进行连接。
那么,攻击者是如何利用MAC地址进行监控的呢?原理很简单,就是看是否能收到来自那个MAC的数据。其实,只有MAC地址是不能进行主动监控的,攻击者只有在收到来自那个地址的广播包才会得知用户的计算机是开启的状态,如果这个包恰恰是PADI,攻击者即使用CCA程序自动与网络断开连接也来不及,就有可能被发现。然而这个网络环境决定了如果知道了一个用户的MAC地址,就可以知道他的IP地址。这个IP地址不是用户建立PPPoE后得到的IP地址,而是设在网卡上的固定IP地址,这个地址可能为任何一个内网地址或者受限地址,如图6,但无论是什么地址,一般都不会变动,并且对拨号没有任何影响。在拨号之后我们会得到另一个公网IP地址,上网用的就是这个公网IP,如图7。在这里,公网IP对攻击者没有任何用处,他的目标是固定IP。
  6
  7
由MAC地址对应IP地址的方法很简单,普通的监听软件就可以完成,存在于网络上的计算机势必会发送NBNS(NetBIOS Name Server)报文、BROWSER报文和ARP(Address Resolution Protocol,地址解析协议)报文,暴露自己的IP地址。有了IP地址,攻击者对用户的监视就简单多了。ping命令可以完成任务,但不是最优的选择,原因有两点,一是网络中计算机的IP地址是随机的,ping无法在没有路由的情况下跨网段发送;二是有的防火墙会完全阻止ping。攻击者会选用ARP包,假装询问指定IP对应的MAC是多少,诱骗目的主机向其返回数据,其实是完成监视。ARP广播发送,所有主机都会收到,并且偶尔一次的ARP包也不会被防火墙阻止。
CCA完成对用户的监视是非常隐蔽的,我们用图8来说明。假设攻击者已经拥有A、B、C和D的账号,计算机B和D处于关闭状态。
  8
CCA先分别向计算机A、B、C和D发送一个ARP包,开启状态的计算机将会做出回应,图中,计算机A和C向CCA做了回应,CCA据此判断计算机B和D关机,账号可用。之后它用账号B进行网络连接,并且隔几秒种就向B对应的IP发送ARP包,而不再向A、C、D发送任何数据;计算机A、C上的防火墙不会把仅仅一次的ARP定为攻击而报警,也不会对发给计算机B的ARP感兴趣。CCA收到来自计算机B的ARP回应的时候,说明B正处在开机过程中。CCA断开网络连接,保证攻击者不被发现。重复以上过程,攻击者基本可以做到在任何时间都能用不同账号进行拨号连接。
经过以上的步骤,攻击者已经可以透明存在于网络中并利用他人的账号上网了。但攻击者远没有达到最终的目的,危险的攻击仍在继续。
      
3 .窃取更多的账号
前文提到过,假冒服务器攻击只有在离用户主机比较近的情况下才能成功,远离的用户不会受到CCA的影响。但是,攻击者仍旧有机会得到网络中存在的所有账号,方法有两种。
第一种属于被动方法,隐蔽性极高,攻击者静等ISP验证服务器的故障时间,故障可能为停电,系统故障等,这时攻击者开始CCA假冒服务,因为网络上只存在一个假冒的服务器,不管多远的用户都会与它进行验证,在ISP故障恢复之前所有进行连接的账号都将被CCA纪录。而当用户询问ISP时会得到确切的系统故障的回应,没有人会意识到攻击者已经在这期间将几乎所有的账号都纪录了下来。ISP故障恢复的时候,CCA也随即停止,一切恢复正常。
第二种方法是主动攻击,攻击者要冒一定的风险,利用CCA的攻击强化功能加强攻击。CCA的强化攻击可能包括对ISP验证服务器的DoS(Denial of Service,拒绝服务)攻击和MAC攻击。现在的ISP服务器对DoS攻击基本可以成功防范,不会有什么效果。但MAC攻击将是致命的,MAC攻击的目的在于中断ISP服务器和用户的连接,并拖慢整个网络,如图9。
  9
还记着前面实验一中我们得到的ISP服务器的MAC地址吗,这里就用上了。攻击者利用随意一种广播包,把源MAC地址设置为ISP服务器的MAC值,然后不停的向网络上发送这个数据包。每秒钟上万的广播包会改变交换机上的MAC-端口对应表并在短时间内淹没ISP服务器,将网络上所有发往ISP服务器的数据流全部引向攻击者的端口。图中,正在上网的用户A、C、D会出现网页打不开,QQ消息发送失败,网络游戏卡死等情况。
同样,ISP服务器和用户之间测试连通性的Echo-Request 和Echo-Reply报文也无法正常发送,虽然ISP服务器可以成功给用户发送Echo-Request,并将MAC-端口改回原状,但瞬间就会被MAC攻击改变,用户的Echo-Reply就不会被ISP服务器接收到,最终导致ISP服务器判断用户已经失去响应而断开,断开后用户计算机因为没有再收到Echo-Request而判断服务器失去响应,连接断开。这时,用户A、C、D会得到与服务器断开连接的提示,他们会选择重新拨号,建立网络连接,然而MAC攻击没有停止,用户的重拨无法与ISP服务器正常连接,并且由于网络缓慢,CCA将有更大的机会与远端用户,例如C D,进行连接。攻击者在收到几乎所有账号的时候停止攻击,网络随即恢复正常。用户拨号成功的同时,交换机上的MAC-端口表也恢复为原来的状态。
事后,ISP可能会从用户的反映中得知曾经有一次集中的网络中断,但原因却很难查清,最后可能会归结为某用户中毒导致网络瘫痪。MAC攻击使攻击者不必等待ISP的故障时间,在用户集中上网的时间主动攻击,危害性更大。
 
4. 监视用户网络数据
攻击者在收集到了足够的账号之后,便开始实施最后也是最危险的攻击:监控所有用户的数据流,得到对他来说有价值的内容。在之前的攻击过程当中CCA程序已经将所有账号都纪录下来,现在可以用这些信息来使合法用户像与ISP服务器一样正常通过CCA的验证,而攻击者利用一个账号拨号连接到ISP,并中转用户的数据流。一旦用户计算机与CCA建立了连接,用户的所有网络数据都将发往攻击者的计算机,CCA在监视数据的同时,替换数据包头,并转发给ISP服务器。攻击者的计算机就像一个透明路由器一样存在于用户和ISP之间,监视着所有流经的数据流。明文获取和业务流分析都不在话下,任何基于此的高层攻击也都可以进行。
用户感觉自己是在与ISP的服务器通信,网络一切正常就是最好的证明,ISP也不会察觉到异常,在它看来,攻击者冒充的合法用户正在正常的使用网络,而连接到了攻击者机器上的用户就从来没有与ISP的服务器建立连接。攻击者希望监视远离自己的计算机数据流时将再次利用MAC攻击将连接引导过来。就这样,悄无声息的,攻击者利用PPPoE完成了MITM(Man In the Middle,中间人)攻击。
 
自始至终,用户都不知道自己已经遭到了极其危险的攻击,他存在于网络上的所有机密信息都会被攻击者轻而易举的得到,如果其中包含银行账号呢?如果一个企业的分支机构通过这种网络环境上的PPPoE与总部联系,它会不会被对手盯上,从而泄露商业机密呢?这时的损失可就不像丢失一个PPPoE账号那么容易计算了。
 
四.防御方法
攻击者可以如此隐蔽的完成所有攻击依赖于两点:一是以太网的广播网络环境,二是用户与ISP之间交换的账号是明文表示的。其实这些问题早在PPPoE实施之前就研究过,并提出了切实可行的解决方案,最佳的方案是Vlan(Virtual Lan,虚拟局域网)+PPPoE,每个用户一个Vlan,这样网络中的广播就被完全的阻止了,用户就可以得到绝对的通信安全。可惜的是,因为设备上Vlan数目有限,这种绝佳的解决方案到现在也没有被应用。不仅如此,其他保证安全的方案似乎也没有实施过。我查看过众多的方案,让我纳闷的是有一种方案从来没有被提及过,那就是启用CHAP(Challenge-Handshake Authentication Protocol,挑战-握手协议)验证模式,用户端也需要做相应设置。这样虽然在一个以太网的环境中,用户的账号和密码却可以以密文形式发送,并且通过MD5(Message-Digest Algorithm 5,信息-摘要算法)摘要算法,即使网络上仍旧存在假冒的验证服务器,得到了这段密文的攻击者也无法还原用户的账号。
 
文章到这里就结束了,如果我们再仔细回顾一下便会发现,CCA并未用到什么高深的理论,假冒服务、ARP、MAC和MITM攻击是局域网中最常用的攻击手段。pppoe的安全仍需加强.
请勿转载
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告