Linux之脚本应用实战:利用静态绑定方法防范ARP攻击
ARP攻击原理
- 背景:我们知道在Windows系统下的防火墙,可以抵御外部攻击,其中就包括了ARP攻击;同样的,我们要了解在Linux系统下如何防范ARP攻击,我们就必须了解清楚ARP攻击的原理及其种类,才能有的放矢,做好防范工作。
- ARP工作原理:ARP,即地址解析协议,实现通过IP地址得知其物理地址。以太网 环境为例,为了正确地向目的主机传送报文,必须把目的主机的32位IP地址转换成为48位以太网的地址。这就需要在互连层有一组服务将IP地址转换为相应 物理地址,这组协议就是ARP协议。
- 什么是arp攻击?通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。
- 如何判断arp攻击?有机器伪装成了网关的mac,所以浏览受害机器的arp缓存肯定可以发现一台或者多台机器与网关有相同的mac地址。arping ip 查看你网关真实mac地址(结果里面也有部分以假乱真,但我们前提知道哪部分是假的)
Linux系统性通过arposion模拟发起ARP攻击
Linux命令防范ARP攻击
#进攻者发起攻击前,先通过ping命令间接获取IP地址
[root@ ~/test 10:05:04]#ping 192.168.6.146
#经过几秒之后中断ping命令,通过下面命令查看ARP缓存
[root@ ~/test 10:05:29]#arp -a
gateway (192.168.6.2) at 00:50:56:fb:ea:34 [ether] on ens33 #网关真实MAC地址
? (192.168.6.1) at 00:50:56:c0:00:08 [ether] on ens33
? (192.168.6.146) at 00:0c:29:dd:00:64 [ether] on ens33 #目的ip对应真实MAC地址
#在被攻击者主机执行arp -n命令查看ARP缓存信息
#(因为攻击者ping了我们,所以我们可读到对方的ip和mac地址)
[root@lin ~]# arp -a
? (192.168.6.1) at 00:50:56:c0:00:08 [ether] on eth0
? (192.168.6.128) at 00:0c:29:52:a9:d1 [ether] on eth0 #喏,这就是潜在的凶手
? (192.168.6.2) at 00:50:56:fb:ea:34 [ether] on eth0
#攻击者开始发起攻击 (回车后持续发送,ctrl+c终止)
#-i 后接攻击者的网络设备号 若是无线网络 可能是wlan0
#-d 接目标ip地址
#-s 接网关ip
#-t 接目标MAC
#-r 接伪造MAC地址
#-n 接指定发送多少个数据包
arpoison -i ens33 -d 192.168.6.146 -s 192.168.6.2 -t 00:0c:29:dd:00:64 -r 44:44:44:44:44:44
#注意:arpoison需要手动去安装
静态绑定ARP脚本内容
-
被攻击者:需要知道网关正确MAC地址,可以在正常运行情况下通过Ping网关ip得到正确MAC地址。再进行相关绑定
-
命令方式:
# arp -s 后面跟网关IP地址以及真实MAC地址
arp -s 192.168.6.2 00:50:56:fb:ea:34
# arp -a 查看arp缓存出现PERM字段的条目: 说明此条目为静态arp条目
arp -a
#删除静态绑定的方式(一般也要先清空arp缓存再进行绑定)
arp -d 192.168.6.2 00:50:56:fb:ea:34
#觉得手动绑定麻烦,可以有如下两种方式
#其一:启动系统时候自动绑定网关MAC
vi /etc/ethers
输入 :192.168.6.2 00:50:56:fb:ea:34
#保存以后,在/etc/rc.local中增加 arp -f 命令
#也可以用:scan_ip_man.sh ens33 > /etc/ether
#扫描局域网内所有主机的mac地址,保存至这个文件,载运行arp -f绑定所有的ip MAC条目。
#其二:不想系统启动自动配置,但图个方便,使用如下脚本
- 脚本
#!/bin/bash
declare gw=`route -n | grep -e '^0.0.0.0'`
declare gwname=`echo $gw | grep -oe '\w*$'` #网卡名
declare gwip=`echo $gw | grep -oe '[0-9]\{2,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'` #网卡ip
declare gwmac=`arp -n | grep -e $gwip | grep -oe '[0-9A-F]\{
2\}:[0-9A-F]\{
2\}:[0-9A-F]\{
2\}:[0-9A-
F]\{
2\}:[0-9A-F]\{
2\}:[0-9A-F]\{
2\}'` #网卡MAC地址
echo "switch $gwname arp: $gwip - $gwmac to static"
arp -s $gwip $gwmac #绑定
echo "done, off arp reuqest .."
ifconfig $gwname -arp
echo "all done."