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,当然该攻击也成功绕过反击机制。