链路伪造攻击教学文稿.docx

上传人:b****2 文档编号:1786816 上传时间:2022-10-24 格式:DOCX 页数:8 大小:175.20KB
下载 相关 举报
链路伪造攻击教学文稿.docx_第1页
第1页 / 共8页
链路伪造攻击教学文稿.docx_第2页
第2页 / 共8页
链路伪造攻击教学文稿.docx_第3页
第3页 / 共8页
链路伪造攻击教学文稿.docx_第4页
第4页 / 共8页
链路伪造攻击教学文稿.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

链路伪造攻击教学文稿.docx

《链路伪造攻击教学文稿.docx》由会员分享,可在线阅读,更多相关《链路伪造攻击教学文稿.docx(8页珍藏版)》请在冰豆网上搜索。

链路伪造攻击教学文稿.docx

链路伪造攻击教学文稿

将目前几种主流控制器与Mininet一起搭建测试组网,Mininet负责构造网络拓扑。

针对SDN中存在的链路伪造安全问题,如下图,通过侵入主机h1向交换机s1发送伪造的LLDP数据包,构造出h3到h1的单向伪造链路。

用wireshark抓取交换机各端口的LLDP包,可分析并伪造出想要的LLDP数据包以达到链路伪造的目的。

控制器

链路伪造攻击

伪造LLDP包注入

LLDP包重传

Opendaylight

可实现

注:

修改sourceMAC、ChassisID、PortID、SystemName、UnknownSubtypeContent(有两段要改,每个端口的是固定值)

可实现

Floodlight

可实现

注:

修改sourceMAC、ChassisID、PortID、

UnknownSubtypeContent

(有两段,只需改第一段,第二段同一个端口的每个LLDP包的值都不一样)

可实现

POX

可实现

注:

修改sourceMAC、ChassisID、PortID、SystemDescription

可实现

伪造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包传播给连接主机的端口。

 

DenialofServiceAttack

采用POX控制器,用Mininet创建3个交换机相连的线性拓扑,使能routing模块(l2learning.py),linkdiscovery模块(discovery.py)和spanningtree模块(spanningtree.py),得到如下结果:

通过h1向s1发送伪造数据包,构造s1和s3之间的伪造链路:

伪造链路攻击后发现spanningtree服务改变了交换机端口的状态:

拓扑更新时,生成树服务被触发来关闭冗余的交换机端口,攻击者可利用此来发动拒绝服务攻击。

被攻击交换机原本可用的端口被误关闭,流可能不再从原来的链路走,而是从虚假链路走,导致连接到该端口的用户无法再使用网络资源。

Man-In-The-MiddleAttack:

使用Floodlight控制器,用Mininet构建图1中的拓扑,其中h4为妥协的主机,它与两个目标交换机s1和s3相连。

图1实际拓扑

用h1主机ping主机h3,此时h4的端口并不能监听到h1和h3之间的通信,说明h1与h3通信的数据流经过的路径不包括h4。

接下来进行伪造链路攻击。

h4将s3转发的LLDP包重传给s1,控制器会误以为s1和s3之间存在一条链路直接相连(如图2),则s1与s3之间传输的消息都会被h4窃听到。

图2控制器视角下的拓扑

再用h1主机ping主机h3,发现控制器选择的通信路径包括伪造链路,显然ping不通,而h4此时能监听到h1和h3之间的通信。

 

验证LLDP数据包

采用HMAC,一种密钥散列消息认证码:

其中是密钥;是HMAC计算出的信息,包含相关的LLDPTLVs,如ClassicID和PortID;是加密哈希函数;‘|’表示级联;‘’表示异或运算;和是衰减值常量。

定义HMAC需要一个加密用散列函数(表示为h(),如MD5算法)和一个密钥K。

我们用B来表示数据块的字节数(例如MD5的散列函数的分割数据块字长B=64),用L来表示散列函数的输出数据字节数(MD5中L=16)。

鉴别密钥的长度可以是小于等于数据块字长的任何正整数值,若使用的密钥长度比B大,则首先用散列函数h()作用于它,然后用h()输出的L长度字符串作为在HMAC中实际使用的密钥。

一般情况下,推荐的最小密钥K长度是L个字节。

opad用0x5c重复B次,ipad用0x36重复B次。

HMAC运算步骤:

(1)在密钥K后面添加0来创建一个字长为B的字符串(例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节)。

(2)将上一步生成的B字长的字符串与ipad做异或运算。

(3)将数据流text填充至第二步的结果字符串中。

(4)用h()作用于第三步生成的数据流。

(5)将第一步生成的B字长字符串与opad做异或运算。

(6)再将第四步的结果填充进第五步的结果中。

(7)用h()作用于第六步生成的数据流,输出最终结果。

 

阻止重传攻击:

注意基础HMAC对重传攻击无效。

若攻击者掌握两个主机,主机1会把接收到的加密LLDP包以外带通道传给主机2,同样能构造这两个主机间的虚假链路。

为阻止重传攻击,传统方法是使用独特的信息标识符以确保每个HMAC值是惟一的。

本文选择了一种变换方法:

将静态密钥换成动态值,它是为链路发现回合中LLDP包选择的随机值,这样攻击者几乎无法猜出的值。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1