0

这个厉害!基于FPGA的PPPoE协议获取账号密码的攻击实现【FPGA verilog 源码】

如何采用FPGA实现PPPoE的第一种攻击,也就是获取对方账号密码的攻击。本文针对FPGA实现的第一种攻击进行详细的介绍。FPGA实现方式具有非常好的硬件加速性能,窃取账号密码的成功率也会更高。因为,较之前Python实现方式而言,在收到网络上某台计算机发送的PADI广播包后,FPGA实现的伪装的服务器具有相当大的概率会抢在真正的服务器之前向该计算机发送欺骗帧(让对方将自己的账号密码以明文的形式反馈回来)。本文的目的一方面提醒网络安全的重要性,另一方面让大家意识到硬件加速力的重要性。试想,如果采用FPGA发起上文中提到的第三种DDOS攻击,估计瞬间就会造成整个网络的瘫痪。提升网络安全意识,从一点一滴做起。

一开始,我们先回顾一下之前使用Python实现的软件攻击的过程。

Python实现的软件攻击回顾

微信图片_20190512101152.jpg

对于PPPOE认证上网的过程如下图所示,分为发现阶段和会话阶段,发现阶段分为PADI,PADO,PADR,PADS。

其中窃取账号密码的问题就出现在第一步PADI。PPPOE客户端进行连接时,在PADI阶段会发送一个广播包,寻找局域网中的PPPOE服务器,从而完成认证。
这时候我们需要做的是伪装成PPPOE服务器,回复请求信息,抢先和客户端通信,并强制客户端使用明文传输方式,从而获取账号和密码。下面我们通过wireshark抓一下数据包,更加直观的观察一下寻找PPPOE服务器的过程。点击宽带连接,使用Wireshark监听,会发现广播包,这时候pppoe服务器会进行回复。

微信截图_20190512101211.png

攻击场景:在本机电脑上开启PPPOE欺骗程序,开始进行监听,并在局域网中的其他电脑上进行宽带连接,观察欺骗效果。如下图所示,已经成功欺骗出了账号和密码。
微信截图_20190512101223.png

窃取账号的部分代码内容如下:
微信截图_20190512101236.png

FPGA实现攻击必须完成的任务

PPPOE的认证过程分两个阶段
发现阶段:客户机寻找并确定可用的服务器,得到会话ID
会话阶段:在发现阶段所确定的参数基础上,依次完成链路控制协商、认证和NCP协商

由于会话阶段的认证步骤中进行用户密码传输,故FPGA伪装至少完成:
1.发现阶段
2.会话阶段的链路控制协商
微信图片_20190512101243.jpg

发现阶段帧结构

发现阶段伪装要做到两点,一是识别并记录客户机的PADI、PADR帧信息;二是发送对应的PADO、PADS帧
微信图片_20190512101247.jpg

发现阶段:PADI帧的识别与PADO帧的发送

微信图片_20190512101254.jpg

PADI帧识别特征
•帧类型域:0x8863(发现阶段)
•PPPOE帧代码域:0x09(PADI帧)

PADO帧发送
•目的MAC地址:客户机地址(PADI帧中源MAC地址)
•帧类型域:0x8863(发现阶段)
•PPPOE帧代码域:0x07(PADO帧)
•静载荷域:在收到的PADI帧的净载荷后加上AC-NAME

发现阶段:PADR帧的识别与PADS帧的发送

微信图片_20190512105530.jpg

PADR帧识别特征
•帧类型域:0x8863(发现阶段)
•PPPOE帧代码域:0x19(PADR帧)

PADS帧发送
•目的MAC地址:客户机地址(PADR帧中源MAC地址)
•帧类型域:0x8863(发现阶段)
•PPPOE帧代码域:0x65(PADS帧)
•会话ID:可统一设为不为0的固定值
•净载荷域:与收到PADR帧的净载荷相同

会话阶段帧结构

微信图片_20190512101306.jpg

会话阶段要做到:
1.发送认证协议参数为0xc023(PAP协议)的Config-Request报文
2.识别客户机发送的Config-Request报文并回应Config-Ack报文

会话阶段:Request帧的发送

微信图片_20190512101309.jpg

LCP Configuration Request帧
•目的MAC地址:客户机地址(PADR帧中源MAC地址)
•帧类型域:0x8864(会话阶段)
•PPPOE帧代码域:0x00(会话数据)
•会话ID:可统一设为不为0的固定值
•点对点协议:0xc021(LCP协议)
•PPP LCP帧代码域:0x01(Request帧)
•认证协议:0xc023(PAP协议)

会话阶段:Ack帧的发送
微信图片_20190512101320.jpg

LCP Configuration Ack帧
•目的MAC地址:客户机地址(Request帧中源MAC地址)
•帧类型域:0x8864(会话阶段)
•PPPOE帧代码域:0x00(会话数据)
•会话ID:可统一设为不为0的固定值
•点对点协议:0xc021(LCP协议)
•PPP LCP帧代码域:0x02(Ack帧)
•其余数据均与接收的Request帧保持一致即可

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除
shawn 头像
想向站长提问,微信扫码立刻加入! shawn的FPGA圈.png
0
  答案登陆可见 做站不容易,小伙伴支持一下我们吧!
编辑 标为违禁 删除 链接 更多选项...
shawn 头像
登录/注册后进行回答