GNS3之OSPF攻击复现

  历时3周的OSPF攻击演示终于弄完了,特在此记录一下。

  前情提要:

  本次项目涉及到的内容有:

  • GNS3:用来搭建拓扑环境,配置路由表以及链路信息等;
  • VMware(GNS3 VM与Kali):前者用来提供GNS3的虚拟环境,后者用来充当发送恶意LSA的攻击机(在Kali这一块涉及到网络配置(搞清楚桥接、Nat、仅主机模式的区别)以及相关虚拟网卡的配置,要把kali接入到在GNS3搭建的拓扑环境中去,在此特别感谢hxd ------ cattlell的帮助。);
  • Scapy:用来构造相关数据包并发送(在OSPF网络中,seq和age用来识别数据包的新旧状态,新的数据包会覆盖旧数据包的内容以及影响,值越大意味着数据包越新);
  • Wrieshark:用来抓取数据包然后进行分析。

(一)基于关键字段的Seq、Age的攻击(Seq++、MaxAge、MaxSeq)

  原理:通过构造关键字段值,频繁触发反击机制,设置小于dead的攻击时间间隔,不过由于反击机制可以抵消这类攻击,所以并不会造成很严重的问题,只会导致链路连通性频繁变更、链路不稳定等。

  拓扑图:

   构造scapy攻击数据包,发送后抓包分析:

  1、Seq++

  图1为自己构造的LSA,seq值设置为0x80000007(该值需要先查看路由器自身Database中的Seq值为多少,然后设置为最大的Seq,查看命令为show ip ospf database),还设置了链路开销(设置该值首先要查看路由器每个接口的cost值,查看命令为show ip ospf int),图2为OSPF网络触发反击机制后,以组播形式发出的数据包(可以通过dst为224.0.0.5得知),可以发现在反击包中,seq的值相较于我设置的seq加了1;此外,链路开销(OSPF_Link中的metric)也回退为默认开销,说明成功引发了反击机制。

  2、MaxAge

   可以发现,在构造的LSA中,age设置为3600(OSPF网络中数据包age字段的最大值为3600),反击机制规定,当遇到最大age的LSA时,为了防止恶意设置age值的LSA带来的影响,下一个自身LSA的age直接被设置为1,并且链路开销也改为默认,说明成功触发反击机制。

  3、MaxSeq

   可以发现,在构造的LSA中,Seq值被设置为最大(7fffffff),而age设置为1,反击机制规定,当遇到最大seq的LSA时,为了防止恶意设置seq值的LSA带来的影响,第一个反击LSA的seq先不变,维持最大值,但age直接被设置为最大3600,第二个反击包中保持age不变,seq变为初始值(初始值不一定为1,而是根据自己搭建的拓扑图中路由器设置的默认初值)。两个反击包才可以成功抵御MaxSeq攻击,再发出两个反击包后,OSPF网络便可以正常运作,并且链路开销也改为默认,说明成功触发反击机制。

  【ps:从抓取文件中可以注意到MaxSeq的影响力是最大的(因为它的黑色背景的数据包最大),它可以引发整个网络的刷新,victim的邻居路由也会因此刷新自己的路由表,相较于前两种更会导致链路不稳定,占用更多资源。】

 

(二)通过伪造虚假LSA并绕过OSPF网络反击机制

  原理:通过构造adrouter值绕过反击机制(注意OSPF_Router_LSA包中的adrouder和id值的区别),绕过反击机制后,就可以为所欲为了,比如更改数据包的传输路径(MIMT攻击)、流量监听等。

  拓扑图同上。

  攻击前的路由表信息:

  攻击后的路由表信息: 

   可以发现,攻击后,R1的路由表中默认路径的信息均被删除;R2的路由表中的路径被修改(前往192.168.60.0网段的路径原为192.168.20.1,在攻击后被修改为192.168.30.2,如果R4是被攻击者控制的傀儡,那就意味着传输的数据包有被监听或修改的风险)。此外,还可以通过抓包分析,可以发现这类攻击绕过了反击机制(判断依据就看组播形式发出的包中,seq的值有没有加1,构造的链路开销有没有变为默认值)。

 

(三)虚假路由远程假邻接攻击

  原理:通过构造虚假路由器,构造虚假的Hello、DBD,在victim与构造的虚假路由器之间建立邻接关系,之后继续构造虚假的LSU与LSACK,模拟完整的链路通信,最终将虚假路由ID加入到victim的路由表中,轻者可以修改数据传输路径,重者可以直接删除victim路由表的原配置信息。

  拓扑图如下:

  事前准备以及注意事项:设置目标路由器R2中担当DR接口的优先级为10,设置R2前往目标网络3.0网段的路径开销均为100,由于路由是虚假的,所以需要以小于dead time的时间间隔对R2发送Hello包以维持邻居关系。

  发送Hello包:

  发送DBD包(第一个包需要将dbdescr设置为MS+M+I,中间过程的包将dbdescr设置为MS+M,最后一个DBD包需要将dbdescr设置为MS):

  发送Router_LSA的LSU包:

 

   查看邻居(show ip ospf nei)以及路由表(show ip route):

  攻击前:

  攻击后:

 

   可以发现,虚假路由ID(201.201.201.1)成功被添加到R2的邻居表中,并且R2前往192.168.3.0的路径由原来的192.168.2.2被改为192.168.1.3,当然该攻击也成功绕过反击机制。

 

 

posted @ 2022-06-17 11:16  Sunshine_y  阅读(985)  评论(4编辑  收藏  举报