学习资料
将目前几种主流控制器与Mininet一起搭建测试组网,Mininet负责构造网络拓扑。针对SDN中存在的链路伪造安全问题,如下图,通过侵入主机h1向交换机s1发送伪造的LLDP数据包,构造出h3到h1的单向伪造链路。用wireshark抓取交换机各端口的LLDP包,可分析并伪造出想要的LLDP数据包以达到链路伪造的目的。
链路伪造攻击 控制器 伪造LLDP包注入 可实现 注:修改source MAC、Chassis ID、Port ID、System Name、Unknown Subtype Content(有两段要改,每个端口的是固定值) 可实现 注:修改source MAC、 Chassis ID、Port ID、 Unknown Subtype Content (有两段,只需改第一段,第二段同一个端口的每个LLDP仅供学习与参考
LLDP包重传 Opendaylight 可实现 Floodlight 可实现 学习资料
包的值都不一样) 可实现 POX 注:修改source MAC、 Chassis ID、Port ID、System Description 可实现 伪造LLDP包注入:只需一个妥协的主机;LLDP包重传:需要伪造链路两端的交换机各连着一个妥协的主机。
单向伪造链路和双向伪造链路(POX只认定双向链路为有效的链路)
链路发现服务基于两个约束条件:
(1)链路发现过程中LLDP包的来源是诚信的; (2)LLDP包的传播路径只包含OpenFlow交换机。
不同OpenFlow控制器发送的LLDP数据包的语法不同,如:POX和Floodlight用一个整数变量来代表交换机的端口号,而Opendaylight采用的是特定ASCII码值;一些控制器增加了额外的TLVs,如Floodlight增加了一个起源认证作为LLDP包额外的TLV,然而该认证在设置后始终保持不变。当前的控制器没有机制来确保LLDP包的完整性。
仅供学习与参考
学习资料
一些OpenFlow控制器如Floodlight和Opendaylight提出了一个API——supressLinkDiscovery来阻止LLDP包传播给连接主机的端口。
Denial of Service Attack
采用POX控制器,用Mininet创建3个交换机相连的线性拓扑,使能routing模块(l2 learning.py), link discovery模块(discovery.py) 和spanning tree模块(spanning tree.py),得到如下结果:
仅供学习与参考
学习资料
通过h1向s1发送伪造数据包,构造s1和s3之间的伪造链路:
伪造链路攻击后发现spanning tree服务改变了交换机端口的状态:
拓扑更新时,生成树服务被触发来关闭冗余的交换机端口,攻击者可利用此来发动拒绝服务攻击。被攻击交换机原本可用的端口被误
仅供学习与参考
学习资料
关闭,流可能不再从原来的链路走,而是从虚假链路走,导致连接到该端口的用户无法再使用网络资源。
Man-In-The-Middle Attack:
使用Floodlight控制器,用Mininet构建图1中的拓扑,其中h4为妥协的主机,它与两个目标交换机s1和s3相连。
s2h2s1s3h4h1h3
图1 实际拓扑
仅供学习与参考