浅谈二层交换安全攻击与防御

1) mac地址洪泛攻击:
因为mac地址表有限,所以当有人恶意将mac地址表充满后,就会达到
mac攻击目的;

**具体实施:**用kali Linux打开命令行,输入macof,为快速将mac地址表充满,可以一次性打开多个终端,然后打开macof,然后等待片刻,当对方mac被塞满之后,就会导致交换机的交换机处于非正常状态,导致交换机会把接收到的信息以广播的形式进行洪泛,则这个时刻就可以进行抓包,分析包就可以看到具体的信息;达到攻击的目的;
在这里插入图片描述
2) cam表的毒化攻击:
主机拿到别人的mac地址,但是事先已经收到过其他端口的mac地址,则现在修改为最新的mac地址(mac地址漂移);
图示:
在这里插入图片描述
**说明:**pc1已经通过A向pc2发送消息,则A端口已经
记录pc1的mac地址,则B会记录此mac地址,然而现
在PC3想要接收到pc2的数据包,则用工具将A端口记
录的mac地址改为自己的mac地址以及端口号C,然后
交换机记录最新的mac地址信息和端口信息,从而达到
攻击的目的;此现象被称为mac地址漂移;

引起mac地址漂移的情况:
1、 中间人攻击
效果:攻击人收到别人的包再洪泛回应别人:
(cam表未记录的帧叫未知单播帧,收到未知单播帧会洪泛)
2、 广播风暴(出现环路)
效果:导致mac地址漂移特别快

防御mac地址洪泛攻击:
1> 端口安全技术
防御措施:全局模式
mac-address-table static (需要绑定的主机mac地址) vlan1 interface f0/1

2> 静态安全mac地址
防御措施:先关闭要防护的端口
sw1(config)#int f0/1
sw1(config-if)#shutdown
sw1(config-if)#switchport mode access
sw1(config-if)#switchport access vlan 1
sw1(config-if)#switchport port-security
sw1(config-if)#switchport port-security maximum 1
sw1(config-if)#switchport port-security violation shutdown
sw1(config-if)#switchport port-security mac-address 00d0.bab2.2611
sw1(config-if)#no shutdown

惩罚机制:

  1. protect—当新的计算机接入时,如果该端口的mac条目超过最大数
    则这个新的计算机将无法接入,而原计算机不受影响,交换机不会
    发送警告信息;
  2. restrict—当有新的计算机接入时,如果端口mac条目超过最大数量,
    则新的计算机无法接入,并且交换机会发出警告信息;
  3. shutdown—当有新计算机接入时,如果该端口的mac条目数量超过
    最大值,则该端口将会被关闭,则这个新的计算机和原来的计算机
    都无法接入网络,这个时候需要接入原有的计算机,并且在该端口
    下使用shutdown和no shutdown命令重新打开端口;

3> 粘滞安全mac地址:
静态安全MAC地址可以使得交换机的接口(f0/1)只能接入某一固定的计算机,然而需要使用“switchport port-security mac-address 00d0.bab2.2611”命令,这样就需要一一查出计算机的MAC地址,这是一个工作量巨大的事情,粘滞安全MAC地址可以解决这个问题。
具体实施:
sw1(config)#default int f0/1
sw1(config)#int f0/1
sw1(config-if)#shutdown
sw1(config-if)#switchport mode access
sw1(config-if)#switchport access vlan 1
sw1(config-if)#switchport port-security
sw1(config-if)#switchport port-security maximum 1
sw1(config-if)#switchport port-security violation shutdown
sw1(config-if)#switchport port-security mac-address sticky //配置交换//机接口自动粘滞MAC地址
sw1(config-if)#no shutdown
//被惩罚的接口show int XX 状态呈现errdisable
sw1(config)#errdisable recovery cause psecure-violation
//允许交换机自动恢复因端口安全而关闭的端口
sw1(config)#errdisable recovery interval 60 // 配置交换机60s后自动恢复端口

2)DHCP Snooping
在局域网内,经常使用DHCP服务器为用户分配IP地址,由于DHCP服务器和客户端之间没有认证机制;网络攻击的另一种办法是伪装有效DHCP服务器发出的响应。在DHCP工作原理中,客户端以广播的方法来寻找服务器,并且只采用第一个到达的网络配置参数,所以如果在网络中存在多台DHCP服务器(有一台或更多台是非授权的),谁先应答,客户端就采用其提供给的网络配置参数。假如非授权的DHCP服务器先应答,这样客户端获得的网络参数即是非授权的,客户端可能获取不正确的IP地址、网关和DNS等信息。在实际攻击中,攻击者还很可能恶意从授权的DHCP服务器上反复申请IP地址,导致授权的DHCP服务器消耗了全部地址,出现DHCP饥饿。

通常DHCP服务器通过检查客户端发送的DHCP请求报文中的CHADDR(也就是Client MAC Address)字段来判断客户端的MAC地址。正常情况下该CHADDR字段和发送请求报文的客户端真实的源MAC地址是相同的。入侵者可以利用伪造源MAC的方式发送DHCP请求,但这种攻击可以使用交换机的端口安全特性来防止。但是如果入侵者不修改DHCP请求报文的源MAC地址,而是修改DHCP报文中的CHADDR字段来实施攻击,那端口安全就不起作用了。由于DHCP服务器认为不同的CHADDR值表示请求来自不同的客户端,所以入侵者可以通过大量发送伪造CHADDR值的DHCP请求,导致DHCP服务器上的地址池被耗尽,从而无法为其他正常用户提供网络地址,这是一种DHCP耗竭攻击。DHCP耗竭攻击可以是纯粹的DOS攻击,也可以与伪造的DHCP服务器配合使用。当与伪造的DHCP服务器配合使用时,入侵者就可以伪装成DHCP服务器响应客户端DHCP请求,DHCP欺骗设备将入侵者指定为默认网关或默认域名服务器(DNS)服务器。如果指定为网关,客户机将把数据包转发给攻击设备,而攻击设备则接着将数据包发送到所要的目的地,这称为中间人攻击,可能完全无法被察觉。即使DHCP请求报文的源MAC地址和CHADDR字段都是正确的,但由于DHCP请求报文是广播报文,如果大量发送的话也会耗尽网络带宽,形成另一种拒绝服务攻击。

可以在交换机上配置DHCP Snooping防止攻击,DHCP Snooping的基本原理是交换机监听DHCP数据帧,对于不信任的接口将拒绝接收DHCP Offer包(DHCP服务器的响应包,而DHCP客户只会发送特定类型的DHCP包。

DHCP Snooping的攻击方法:
使用kali Linux中的工具yersinia;

  1. 打开命令行,输入yersinia -G;
  2. 在yersinia的图形界面中点击Lauch attack;
  3. 选择DHCP选项,再选择发送DHCP discover包
    使用以上方法就会将DHCP服务器中地址池的地址耗尽;
    查看方法:show ip dhcp snooping binding

在这里插入图片描述

在这里插入图片描述

防御措施:
ip dhcp snooping
ip dhcp snooping vlan 100
show dhcp snooping
interface e0
ip dhcp snooping trusted
ip dhcp snooping limit rate 100 设定端口一秒钟只能发送100个包,减缓DHCP的starvation
interface e1
ip dhcp snooping untrusted
Option 82
它被称为DHCP Relay Agent Information Option(DHCP中继代理信息选项),选项号为82,故被称为Option 82,相关标准文档为RFC3046。当DHCP服务器和客户端不在同一个子网内时,客户端要想从DHCP服务器上分配到IP地址,就必须由DHCP中继代理(DHCP Relay Agent)来转发DHCP请求包。DHCP中继代理将客户端的DHCP报文转发到DHCP服务器之前,可以插入一些选项信息,以便DHCP服务器能更精确的得知客户端的信息,从而能更灵活地按相应的策略分配IP地址和其他参数。

DHCP中继代理(Option 82、DHCP Snooping)和DHCP Server之间的关系:
1.交换机开启了DHCP Snooping功能后,默认情况下,将对从非信任端口收到的DHCP请求报文插入选项82信息;
1>默认时SW2(上行交换机)从Untrusted端口到带有Option 82的DHCP请求报文时会将这个报文丢弃;
DHCP Snooping
可以在SW2上配置“ip dhcp snooping information allow-untrusted”全局命令,将不丢弃该报文;
可以在SW2的Untrusted接口配置“ip dhcp snooping trust”接口命令,这样SW2就能接收带有Option 82
的DHCP请求报文了,但是不建议这样做,因为这样将不建立该接口的DHCP监听绑定表,会降低安全性。
2>DHCP Srver和DHCP Client在同一个子网的情况下,交换机会把Option 82的值填为0(即0.0.0.0)。
2.以Windows Server 2003为DHCP的服务器不认为Option 82的值为0的DHCP请求报文是错误的;
DHCP Snooping
以Cisco IOS为DHCP的服务器默认时会认为Option 82的值为0的DHCP请求报文是错误的,它将丢弃这个报文。
DHCP Snooping
1>可在SW1上配置“no ip dhcp snooping information option”命令,不插入Option 82;
2>可在R1上选择配置以下命令,允许Option 82的值为0的DHCP请求报文通过:
接口命令:“ip dhcp relay information trust”,仅对路由器当前接口有效;
全局命令:“ip dhcp relay information trust-all”,对路由器所有接口有效。
ip dhcp snooping database flash:xx.txt 把缓存的snooping 表存放在一个能够存储的位置

4)arp攻击:
ARP协议是用来获取目的计算机或者网关的MAC地址的,通信发起方以广播方式发送ARP请求,拥有目的IP地址或者网关IP地址的工作站给予ARP应答,送回自己的IP和MAC地址。ARP协议支持一种无请求ARP功能,同一网段上的所有工作站收到主动ARP广播后会将发送者的MAC地址和其宣布的IP地址保存,覆盖以前Cache的同一IP地址和对应的MAC地址。由于ARP无任何身份真实校验机制,攻击者发送误导的主动式ARP使网络流量经过恶意攻击者的计算机,攻击者就成为了通信双方的中间人,达到窃取甚至篡改数据的目的。攻击者发送的主动模式ARP采用发送方私有MAC地址而非广播地址,通信接收方根本不会知道自己的IP地址被取代。

Arp攻击方法:使用kali Linux

  1. 开启网卡转接功能:
    如果未开启则使用以下命令开启:
    echo 1 > /proc/sys/net/ipv4/ip_forward
  2. 发起攻击:
    arpspoof -i eth0 -t 192.168.1.5 192.168.1.3
    //启用arp攻击 -i 网卡接口 -t 数据发起者ip地址到数据接受者ip地址

在这里插入图片描述
防御arp攻击:
启用DAI
DAI(Dynamic ARP Inspection 动态ARP检查)可以防止ARP欺骗,它可以帮助保证接入交换机只传递“合法的”ARP请求和应答信息。DAI基于DHCP Snooping来工作,DHCP Snooping的监听绑定表包括IP地址与MAC地址的绑定信息,并将其与特定的交换机端口相关联,DAI可以用来检查所有非信任端口的ARP请求和应答(主动式ARP和非主动式ARP),确保应答来自真正的MAC所有者。交换机通过检查端口记录的DHCP绑定信息和ARP应答的IP地址决定其是否是真正的MAC所有者,不合法的ARP包将被拒绝转发。
DAI针对VLAN配置,对于同一VLAN内的接口,可以开启DAI也可以关闭,如果ARP包是从一个可信任的接口接收到的,就不需要做任何检查;如果ARP包是从一个不可信任的接口上接收到的,该包就只能在绑定信息被证明合法的情况下才会被转发出去。这样,DHCP Snooping对于DAI来说也成为必不可少的。DAI是动态使用的,相连的客户端主机不需要进行任何设置上的改变。对于没有使用DHCP的服务器,个别机器可以采用静态添加DHCP绑定表或ARP access-list的方法实现。另外,通过DAI可以控制某个端口的ARP请求报文频率。一旦ARP请求频率超过预先设定的阀值,立即关闭该端口。该功能可以阻止网络扫描工具的使用,同时对有大量ARP报文特征的病毒或攻击也可以起到阻断作用

DAI根据DHCP监听绑定表来工作;DAI也分为信任端口和非信任端口,默认所有端口都为非信任端口;DAI检查所有非信任端口请求和响应的ARP数据包,对不符合DHCP监听绑定表要求的ARP数据包丢弃。所以交换机中必须要有所有非信任端口主机的监听绑定条目,否则该主机将不能通信。这将使所有主机都被迫采用DHCP获取IP地址(或管理员指定的IP地址),因为DHCP监听绑定表已经对其进行了绑定,可以有效地防止用户私自更改指定IP地址。

防御命令:
SW1(config)#ip arp inspection vlan 1 //在Vlan1启用DAI
SW1(config)#ip arp inspection validate src-mac dst-mac ip //检查ARP(请求和响应)报文中的源MAC地址、目的MAC地址、源IP地址和DHCP Snooping绑定中的信息是否一致
SW1(config)#int f0/1
SW1(config-if)#ip arp inspection trust //配置本接口为信任接口
SW1(config)#int range f0/11 - 12
SW1(config-if)#ip arp inspection limit none //取消ARP包的限制,默认15个包/秒
SW(config-if)#ip arp inspection limit 10

5) IP地址欺骗:
IP地址欺骗是指行动产生的IP数据包为伪造的源IP地址,以便假冒其他系统或主机身份;这也是黑客进行DoS(denial of service)攻击时经常同时使用的一种手段;

防御IP地址欺骗:
启用IPSG
IPSG(IP Source Guard IP源保护)是一种基于IP/MAC的端口流量过滤技术,它可以防止局域网内的IP地址欺骗攻击。IPSG能够确保二层网络中终端设备的IP地址不会被劫持,而且还能确保非授权设备不能通过自己指定IP地址的方式来访问网络或攻击网络导致网络崩溃及瘫痪。IPSG中有一个IP源绑定表(IP Source Binding Table),作为每个端口接收到的数据包的检测标准,只有在两种情况下,交换机会转发数据:所接收到的IP包满足IP源绑定表中Port/IP/MAC的对应关系;所接收到的是DHCP数据包,其余数据包将被交换机做丢弃处理。
IPSG也是基于DHCP Snooping进行工作的,交换机从DHCP监听绑定表自动学习获得接口上绑定的MAC地址和IP地址。连接在交换机上的所有PC都被设置为动态获取IP地址,PC作为DHCP客户端通过广播发送DHCP请求,DHCP服务器将含有IP地址信息的DHCP回复通过单播的方式发送给DHCP客户端,交换机从DHCP报文中提取关键信息(包括IP地址、MAC地址、VLAN号、端口号和租期等)并把这些信息保存到DHCP监听绑定表中。交换机根据DHCP监听绑定表的内容自动生成IP源绑定表,然后交换机根据IP源绑定表里的面内容自动在接口加载基于端口的ACL,由该ACL过滤所有IP流量。在客户端发送的IP数据包中,只有其源IP地址和MAC地址满足源IP绑定表才会被发送,对于具有源IP绑定表之外的其它源IP地址的流量,都将被过滤。

默认时,IPSG不检查所有接口的数据包,因此IPSG只需要在不信任接口上进行配置即可。

命令防御:
SW1(config)#int f0/2
SW1(config-if)#ip verify source port-security //在本接口启用IPSG功能
SW(config)#int range f0/3 - 4
SW(config-if)#ip verify source port-security
SW#ip source binding 0023.04e5.b221 vlan 1 172.16.1.3 int f0/3

以上技术虽然可以防御但是都没用从根本解决问题;
**彻底解决:**802.1x协议和AAA服务器来解决大规模ip地址欺骗问题,就是让每个主机上网的时候做认证;认证授权统计——AAA服务器作用及设备ISE
AAA图示:
在这里插入图片描述

在路由器配置AAA认证,并使用本地数据库认证:
aaa new-model
username cisco password cisco
定义域名:
ip domain-name cisco.com
在VTY线路下开启telnet或其他协议
line vty 0 15
login local
transport input telnet、ssh
在AAA服务器端配置认证;
验证 telnet 或者 ssh如需输入用户名密码则认证成功

6) 端口阻塞
当分组到达交换机时,交换机在mac表中执行目的地的mac地址查询,
确定用哪个端口发出和转发分组。如果mac地址表中没有发现条目,则交换机将向相同vlan(广播域)中的所有端口洪泛未知单播帧流量;给受保护的端口转发未知单播帧或组播流量,这可能出现安全问题;使用端口阻塞特征可以阻塞正在转发未知单播帧流量和多播流量。

防御命令:
SW1(config)#int f0/0
SW1(config-if)#switchport block multicast
SW1(config-if)#switchport block unicast
SW1#show int f0/0 switchport查看实施效果

猜你喜欢

转载自blog.csdn.net/tomatolee221/article/details/84327642