鬼要指那个动物:使用虚拟机搭建基于ROS的PPPOE服务器进行认证拦截

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 20:01:15

      这篇文章可以指导你使用虚拟机免费地搭建一个基于RouterOS的PPPOE服务器,并且指导使用工具截获在此PPPOE服务器上的认证数据包,其中包括用户名和密码等。

      PPPOE现在应用很广泛,很多小区,学校,社区都在使用,ADSL也使用PPPOE,它的技术原理就是把PPP帧作为净荷封装在普通以太网帧中,从而使PPP帧可以在以太网中传输,利用PPP的优点(验证,控制,计费等),解决现有以太网中存在的一些问题,如先天缺陷ARP协议,具体不再多说,要详细了解的可以看RFC2516(PPPOE),RFC2364(PPPOA),或者搜索引擎。

一、工具:

1.抓包工具,sniffer或者wireshark;抓取网络上的数据包并分析其内容,

2.PPPOE的服务器端,如果是LINUX,推荐使用RHEL5,镜像中包含PPPOE的服务端,

在WINDOWS下我还不知道具体的服务器端什么比较好用,试用过的RASPPPOR作为SERVER功能很简单,只能更改用户的link speed,上行或下行,并且不能更改验证模式,最大用户数10个,功能达不到要求。

此文章中的PPPOE server使用router OS内建的功能实现,我使用的ROS版本是2.9,具体的不清楚,因为就用过这一次。

3.虚拟机,我用的VMware Workstation6.5,这是用来安装ROS的硬件平台。

4.其他,通用的一些命令行工具就可以了。

二、安装和配置

(1)、安装

首先安装ROS:在VMWARE中创建一个新虚拟机,按照以下值配置:OS选择Other/Other,单处理器,64-256M内存,1G硬盘,网卡需要选择桥接(bridged)模式,其他的都Default就可以了,需要注意的是,并不是配置越高越好,推荐你就选择我给出的值,原因是ROS的某些版本不支持双核或多路CPU,内存的大小和硬盘的类型(Only-IDE)都有限制。(查看了ROS的official Site),如图:


创建好虚拟机之后就可以安装ROS了,很简单,如果你有ROS光盘,插入光驱,在虚拟机上选择物理驱动器,然后进入虚拟机的BIOS里设置光盘启动,重启就可以看见引导界面了。

如果没有光盘可以下载一个ISO镜像,然后CD/DVD驱动器设置为使用镜像文件,设置CMOS,重启即可引导。

在此我使用镜像文件来引导。

引导解压Linux内核后可以看见一个ROS组件选择的界面:welcome to mikrotik router software installation,使用方向键移动光标,空格选择,这里只作为PPPOE server用,所以选择system和ppp就可以了,选完按I安装,然后屏幕下面提示是否保存旧配置,按Y,然后提示磁盘上的所有内容将清除,继续按Y,安装了之后提示回车重启,按,然后在BIOS中把启动顺序设置好(硬盘第一),重启即可进入ROS控制台,默认用户名是admin密码空,登陆进去后开始设置ROS,由于在虚拟机中ROS操作很不方便,推荐使用TELNET登陆,不过首先要设置IP地址,进去可以看到由字符组成的MiKroTik几个字,然后应该还会问你是否查看软件授权许可(试用24小时),按N,然后就可以开始命令配置了,默认的prompt是[admin@MikroTik] >,看到这个说明你已经安装成功了。

 

(2)、配置

1.基础配置

这里先说说ROS的操作特点,基本的命令行操作,熟悉CMD里的netsh命令的人应该能很快的上手,在根提示符下可以输入关键字而进入特定的关键字上下文,也就是我下面提到的子命令,总而言之就是树状结构,和文件夹的结构很类似。

在任何地方都可以输入?来得到帮助,在任何地方都可以输入print来显示当前上下文中的对象配置,在任何地方都可以输入export来输出所有的命令配置清单。

不详述了,需要了解的请搜索引擎。

这里我们配置接口的IP地址。

[admin@MikroTik] >interface      接口子命令

[admin@MikroTik] interface>print          显示接口

在这里可以得到网卡的名字,显示在name字段的就是,默认是ether1,即以太网接口,设置IP地址的时候要用到,可以改个易记忆的名字,这里改为lan

[admin@MikroTik] interface>set 0 name=lan        更改网卡名字,0代表第一块网卡

[admin@MikroTik] interface>..       回到上级菜单,这里是两个点,下同

[admin@MikroTik] >ip               进入IP子命令

[admin@MikroTik] ip>address          进入地址子命令

[admin@MikroTik] ip address>add address=192.168.1.2/24 interface=lan

[admin@MikroTik] ip address>..

[admin@MikroTik] ip>..

[admin@MikroTik] >system              进入系统子命令

[admin@MikroTik] system>identity               进入标识符子命令

[admin@MikroTik] system identity >set name=”TKMARK”     更改标识为TKMARK

[admin@TKMARK] system identity >..

[admin@TKMARK] system>..

[admin@TKMARK] >

这条命令设置lan接口的ip地址为192.168.1.2,掩码为24位即255.255.255.0,这里要注意,此地址要和主机上的网卡的IP地址在同一网段才能通信,下面会说明。

然后试着ping一下主机的IP,看一下是否连通了,如果不通,首先检查主机上的防火墙(因为是以桥接方式连接,所以防火墙是会阻止虚拟机的流量的),看防火墙里是否设置了阻止ICMP消息,建议先关闭防火墙,否则比较麻烦。

注意:如果主机有一个以上的网卡(包括loopback和wireless等),那么必须在其他网卡的属性中取消勾选vmware bridge protocol(虚拟机的桥接协议),只在要和虚拟机通讯的那个网卡上勾选此协议,这样虚拟机就只和此网卡桥接了。

接下来设置此网卡的IP地址和ROS中设置的IP在同一网段,然后试着用telnet在主机上登陆ROS,成功后开始下一步设置。

 

2.地址池设置

地址池在PPPOE server中的作用就是给客户端分配IP地址,当然在实际应用中,我们通常是通过NAT来上网的,这就需要配置NAT,地址池里的地址也要和ROS另外一块网卡的地址在同一网段,这里不详述。

[admin@TKMARK] >ip

[admin@TKMARK] ip>pool         地址池配置

[admin@TKMARK] ip pool>add name=”tk-pool” ranges=10.1.1.1-10.255.255.254 next-pool=tk-pool

这条语句的作用就是添加一个IP地址池,名字叫tk-pool,范围从10.1.1.1-10.255.255.254,这里给的是一个A类地址,注意在PPPOE的客户端地址分配中,是没有子网掩码的,next-pool字段就是下个地址池。

[admin@TKMARK] ip pool >..

[admin@TKMARK] ip>..

[admin@TKMARK] >

地址池配置完毕。

 

3. 配置PPPOE server默认profile (客户端相关)

PPPOE server的配置是保存在本地数据库中的,我们需要对这些配置进行更改。

[admin@TKMARK] >ppp          进入ppp子命令

[admin@TKMARK] ppp>profile       进入配置文件子命令

这里系统是自动生成了两个默认配置的,分别是default和default-encryption,我们只需要对default更改即可

[admin@TKMARK] ppp profile>set default local-address=tk-pool remote-address=tk-pool use-compression=no dns-server=1.1.1.1

这里的local-address为本地服务器地址,因为并不实际应用,从tk-pool地址池读取,remote-address为远端地址,即给拨号的客户端分配的地址,也从tk-pool地址池读取,use-compression字段代表是否启用压缩,可以选yes,no或者default,默认为default,defautl就是no,dns-server就不用说了,如果有多个地址,用逗号隔开。这里我省略了几个字段,比如use-encryption,代表是否加密数据,rate-limit字段,这个比较重要,代表客户端的速率限制,单位为bps,格式为rate-limit=txbps/rxbps,txbps和rxbps在客户端方向分别代表下载和上传,服务器方向相反,t代表transmit,r代表receive,比如我在上面语句加入rate-limit=200000/100000就代表将客户端的速率限制为上传100k,下载200k,注意这里的b是bit,不是byte。

[admin@TKMARK] ppp profile>..

[admin@TKMARK] ppp>..

[admin@TKMARK] >

 

4.配置PPPOE server

这个配置和第三个配置不同的地方在于这个是在interface子命令中配置,直接开始

[admin@TKMARK] >interface     进入接口配置子命令

[admin@TKMARK] interface>pppoe-server     进入pppoe-server子命令

[admin@TKMARK] interface ppoe-server>server    进入server子命令,这比较讨厌

[admin@TKMARK] interface ppoe-server server>add service-name="tkmark" interface=lan authentication=pap default-profile=default disabled=no

这条我讲多点,service-name字段为服务名,这个是比较重要的可省略项(对客户端而言),客户端建立连接的时候,如果未指定服务名,一般情况下会选择响应速度最快的服务器,如果指定了,则指与指定服务名的服务器建立连接,当然在这里不能省略。interface字段是网卡名字,authentication字段是验证方式,默认为全部验证方式,即PAP(password authentication protocol,密码验证协议),CHAP(challenge-handshake authentication protocol,挑战握手验证协议),MS-CHAP(微软的挑战握手),这里不详述这几个验证协议,只简单说下,pap由客户端使用明文的方式发送用户名和密码给服务器验证,而chap则由一方发起一个挑战,而另一方回应由hash单向函数计算的数据(密码),发起方使用自己的密码经过hash单向函数来计算出一个值,将得到的值与对方发送的值比较,如果值一致,则验证通过,CHAP一般使用MD5算法作为hash函数的算法。MS-CHAP是微软的CHAP协议。PAP的兼容性是最好的,但是安全性最差。CHAP的安全性就高多了,密码本身不在网络上传输,但是现在提供MD5破解的网站也很多。

由于我们的目的的特殊性,我们当然只使用pap了,default-profile字段就是默认配置文件,跟上面的操作匹配,我们选择default,disable=no就不用说了。这条语句里我省略了几个字段,他们是max-mtu,max-mru,one-session-per-host,max –sessions等,这些字段跟一般设置为默认即可,mtu最大传输单元,mru最大接收单元,one-session-per-host代表是否允许多个用户使用一个账号同时在线,max-session代表最大会话数目。

到此PPPOE server的接口子命令下的配置就完成了。

使用双点返回到根提示符下[admin@TKMARK] >,准备下一步配置。

 

5.配置用户

在ROS中添加用户账户,以此来验证PPPOE客户端的连接。

[admin@TKMARK] >ppp               

[admin@TKMARK] ppp>secret               进入账户设置子命令

[admin@TKMARK] ppp secret>add name=”tkmark” password=”tkmark” service=tkmark

这条语句添加一个用户名和密码都为tkmark的账号,服务名和第四步配置的服务名相同即可,此模式下省略的字段有profile,disable,limit-bytes-in,limit-bytes-out和caller-id等,profile即为配置文件,在第三步中配置完成,默认为default,所以不用指定,limit-bytes-in为限制流量的总量,注意这里是流量的总量,不是速率,即按流量计费中使用,就跟移动的GPRS包月一个道理。这里是以服务器为角色,所以In代表上传,out代表下载,caller-id字段是个字符串,用双引号括起来,就是本地标识而已。

在本文中服务器是使用本地硬盘数据库中的数据来验证的,审核和记账的功能是没有的,在平常应用中更多的是配置服务器使用外部的AAA(Authentication,Authoraziton,Accounting,验证,授权,记账,by CISCO)服务器来验证用户数据,通常是Radius服务器,RHEL5提供这个服务器程序的安装包,需要详细了解的去看RFC2865、2866。

到这里,服务器上的配置就已经全部完成了,下面我们来测试。

 

三、PPPOE服务器测试

说明一下,最好找另外一台在同一广播域上的计算机来测试,因为有很小的几率你在本机上测试成功了,但是网络上的计算机却不能连接。这可能是由于物理层的问题导致的,也可能是其他的问题,这里不详述。

OK,开始测试

这里以XP作为客户端测试,回到桌面,网上邻居-属性-创建一个新的连接-下一步-连接到Internet-手动设置我的连接-要求用户名和密码的宽带连接来连接,点下一步到了输入ISP名称的页面,这里填写刚才配置的服务名tkmark,留空将连接到响应速度最快的服务器,继续下一步,填写用户名密码,这里填写刚才配置的账户,用户名:tkmark,密码:tkmark。

OK,完成,点连接,成功了,可以打开宽带连接的状态看看,服务器类型PPP,传输类型TCP/IP,身份验证PAP,服务器IP地址10.255.255.247,客户端IP地址10.255.255.246,和我们刚才配置的一样。如图:



如果失败,那么根据错误提示做以下操作:

用户名、密码错误:检查你在ROS上配置的用户名
和密码,或者大小写之类的疏忽,检查服务名。

远程计算机无响应:首先PING你的ROS看是否连通,然后看下你服务名是否正确,检查第二章节的所有配置无误。

调制解调器正在使用:检查你是否已经连接其他pppoe连接,比如ADSL,断开正在使用的连接,然后重连。

比较常见的就这几种,其他的就不多说了,本文的重点并不是PPPOE连接排障。

顺便提一下为什么服务名比较重要(在多服务器的环境下),是因为在PPPOE连接的开始阶段(无连接),客户端会以二层广播形式发送一个PPPOED帧,即PADI(PPPOE Active Discovery Initiation,活动发现初始化),里面包含有服务名字段,只有服务名相同的服务器才会响应,并发送一个包含PADO(Offer)的PPPOED帧给客户端,然后协商进行下一步工作,所以要找到正确的服务器,最好使用指定的服务名。

 

四、PASSWORD捕获

安装抓包工具,我使用的工具是WIRESHARK,一款很强大的协议分析器。

下载好WIRESHARK的安装包之后,一路NEXT,完成后打开软件,在CAPTURE下的Interface List中选择你的物理网卡,开始捕获数据帧。如图:




我选择的是Realtek 10/100/1000的网卡,也就是我的物理网卡(瑞昱千兆),选择后出现数据帧捕获界面,在这里你可以看到所有流经你的网卡的数据帧,如图

 


但是这里面的数据量太多了,我们要对这些流量进行过滤,筛选出我们需要的信息,在filter里输入你需要筛选的协议,就可以对特定的协议进行过滤,在此我们输入pap,就可以过滤出所有的使用pap协议的pppoe帧,如图:



Wireshark的filter有自己的语法,有一点点类似于正则表达式,非常强大,可以对协议中的某个字段进行筛选,也可以针对地址进行筛选,比如ip.addr==192.168.1.1这个语句就筛选出ip地址为192.168.1.1的数据帧,这里不再详述。

下面的操作就非常简单了,可以看到在协议类型为PPP PAP的帧中,INFO列的内容,
Authenticate-Request代表验证请求,是由客户端发给服务器的验证请求,先选择一个REQUEST类型的帧,展开内容,如图:



Authentication-Ack类型代表服务器验证成功,发送给客户端的回应,如图:


上图中显示的字符串为LOGIN OK。然后就进行下一步的PPP协商。如果验证失败,那么Authentication-Ack就会变成Authentication-Nak,服务器会发送包含Termination-Request请求的PPP的LCP(工作在PPP的LCP子层,Link Control Protocol)帧,然后进一步确认,在此不再细述PPP协议。

很多人可能已经看到PASSWORD了,在pap帧中,包含了完整的用户名和PASSWORD,而且数据帧中包含了所有能用到的信息,包括MAC地址,IP地址等等,在此有另外目的的同志就可以进行下一步的行动了。

     如果要防止别人对你进行PPP的拦截,那么只需要设置服务名为真正服务器的服务名就可以了。不过这种方式也不是很保险,目前还没不知道免疫此种认证拦截的方法,只有依靠网络管理手段去封杀,不过在傻瓜交换机上是实现不了的,也就是说,在小区中使用PPPOE拨号的人,基本上可以考此方法横行。

【完】   

很少在网上发文章,希望朋友们多支持,有不对的地方多指教。

附一张实际测试效果图: