ARP的概念
OSI模型回顾
基础模型:
每一层的作用:
Mac地址
只要确定了
IP
地址后,就能够向这个
IP
地址所在的主机发送数据报,这是我们所熟知的事情。但是再往深了想,IP
地址只是标识网络层的地址,那么在网络层下方数据链路层是不是也有一个地址能够告诉对方主机自己的地址呢?是的,这个地址就是MAC
地址。
MAC
地址的全称是
Media Access Control Address
,译为媒体访问控制地址,它是网络上以太网或网络适配器的唯一标识符。MAC
地址能够区分不同的网络接口,并用于多种网络技术,尤其是大多数
IEEE802 网络。
MAC
地址也称为物理地址,硬件地址和老化地址。
MAC
地址主要用于识别数据链路中互联的节点,如下图所示:
MAC
地址长
48 bit
,在使用网卡
(NIC)
的情况下,
MAC
地址一般都会烧入
ROM
中。因此,任何一个网卡的 MAC
地址都是唯一的。
MAC
地址的结构如下 :
MAC
地址中的
3 - 24
位表示厂商识别码,每个
NIC
厂商都有特定唯一的识别数字。
25 - 48
位是厂商内部为识别每个网卡而用。因此,可以保证全世界不会有相同 MAC
地址的网卡。
在自己电脑上可以通过
ipconfig(windows)/ifconfig(linux)
等查看自己的
mac
地址。
ARP是什么?
ARP 协议的全称是
Address Resolution Protocol(
地址解析协议
)
,它是一个通过用于实现
从
IP
地址到
MAC
地址
的映射,即询问目标
IP
对应的
MAC
地址 的一种协议。
ARP
协议在
IPv4 中极其重要。
注意:
ARP
只用于
IPv4
协议中,
IPv6
协议使用的是
Neighbor Discovery Protocol
,译为邻居发现协议,它被纳入 ICMPv6
中。
简而言之,
ARP
就是一种解决地址问题的协议,它以
IP
地址为线索,定位下一个应该接收数据分包的主机 MAC
地址。如果目标主机不在同一个链路上,那么会查找下一跳路由器的
MAC
地址。
ARP工作原理
工作机制
假设
A
和
B
位于同一链路,不需要经过路由器的转换,主机
A
向主机
B
发送一个
IP
分组,主机
A
的地址是 192.168.1.2
,主机
B
的地址是
192.168.1.3
,它们都不知道对方的
MAC
地址是啥,主机
C
和 主机D 是同一链路的其他主机。
主机 A
想要获取主机
B
的
MAC
地址,通过主机
A
会通过
广播
的方式向以太网上的所有主机发送一个
ARP
请求包
,这个
ARP
请求包中包含了主机
A
想要知道的主机
B
的
IP 地址。
主机 A
发送的
ARP
请求包会被同一链路上的所有主机
/
路由器接收并进行解析。每个主机
/
路由器都会检查 ARP
请求包中的信息,如果
ARP
请求包中的
目标
IP
地址 和自己的相同
,就会将自己主机的
MAC
地址写入响应包返回主机 A 2。
由此,可以通过
ARP
从
IP
地址获取
MAC
地址,实现同一链路内的通信。
如果是不同链路怎么办呢?
这就要使用到 代理
ARP
了,通常
ARP
会被路由器隔离,但是采用代理
ARP (ARP Proxy)
的路由器可以将 ARP
请求转发给临近的网段。使多个网段中的节点像是在同一网段内通信。
广播和单播
广播(Broadcast)
我们一般小时候经常会跳广播体操,这就是广播的一个事例,主机和与他连接的所有端系统相连,主机将信号发送给所有的端系统。
单播(Unicast)
单播最大的特点就是
1
对
1
,早期的固定电话就是单播的一个例子,单播示意图如下。
ARP缓存
现在我们知道了发送一次 IP
分组前通过发送一次
ARP
请求
就能够确定
MAC
地址。
那么是不是每发送一
次都得经过广播
->
封装
ARP
响应
-> 返回给主机这一系列流程呢?
想想看,浏览器是如何做的呢?浏览器内置了缓存能够缓存你最近经常使用的地址,那么
ARP
也是一样的。ARP
高效运行的关键就是维护每个主机和路由器上的
ARP
缓存
(
或表
)
。这个缓存维护着每个
IP
到MAC 地址的映射关系。通过把第一次
ARP
获取到的
MAC
地址作为
IP
对
MAC
的映射关系到一个
ARP缓存表中,下一次再向这个地址发送数据报时就不再需要重新发送 ARP
请求了,而是直接使用这个缓存表中的 MAC
地址进行数据报的发送。每发送一次
ARP
请求,缓存表中对应的映射关系都会被更新。
通过
ARP
缓存,降低了网络流量的使用,在一定程度上防止了
ARP
的大量广播。
一般来说,发送过一次
ARP
请求后,再次向相同目标主机发送请求的几率比较大,因此使用
ARP
缓存能够减少 ARP
包的发送,除此之外,不仅仅
ARP
请求的发送方能够缓存
ARP
接收方的
MAC
地址,接收方也能够缓存 ARP
请求方的
IP
和
MAC
地址,如下所示;
不过,MAC 地址的缓存有一定期限,超过这个期限后,缓存的内容会被清除。
我们可以在
Linux
或者
Windows
中使用
arp
命令查看
ARP
缓存。选项
-a
用于显示两个系统缓存中所有的缓存项。
在
Linux
中使用
arp
查询缓存
:
主要包含五项:
- 主机名 --- 对应一个 IP 地址
- 硬件地址类型
- 硬件地址
- 标志
- 本地网络接口
标志主要分为
三类
: C
、
M
或
P
,
C
表示的是由
ARP
协议动态学习。
M
类可以通过
arp -s
增加一条。
P类表示的是 发布
,对于任何
P
类项目,主机对输入的
ARP
请求都返回一个
ARP
响应。这个选项用于配置代理 ARP
。
我们在
Windows
中进行
ARP
缓存查询
:
Windows
中的
ARP
程序显示了
IPv4
的地址,它的接口是十六进制数,
Windows
版本还指出地址是手动输入还是 ARP
动态学习的。在上面的例子中,既有静态的也有动态的。
48
位的
MAC
地址被显示为
6个十六进制数,在 Linux
中使用
:
号,在
Windows
中使用
-
进行分隔。
ARP结构
我们上面说到,
ARP
对想要知道
MAC
地址的目标主机会首先发送
ARP
请求,那么这个请求中都携带哪些信息呢?下面是在以太网中转换一个 IPv4
的地址常用的
ARP
请求或响应的报文格式。
前面
14
个字节构成标准以太网的首部,前两个字段
DST
和
SRC
分别表示
以太网的目的地址 和 以太网的源地址
以太网的目的地址如果是
ff:ff:ff:ff:ff:ff
全部为
f
表示广播地址,在同一广播域中的所有以太网接口可以接收这些帧。后面紧跟着的是 ARP
请求的长度
/
类型,
ARP
请求 和
ARP
应答这个值为
0x0806
。
- 硬件类型 表示硬件地址的类型,硬件地址常见的有 MAC 物理或者以太网地址,对于以太网来说,
- 此值为 1。
- 协议类型 指出映射的协议地址类型,对于 IPv4 地址,这个值是 0x0800。
- 硬件大小和 协议大小 分别指出硬件地址和协议地址的字节数。对于以太网中使用 IPv4 的 ARP 请求或应答,它们的值分别是 6 和 4。
- Op 字段指出如果是 ARP 请求,Op = 1,ARP 应答 ,Op = 2,RARP 请求 Op = 3,RARP 应答,Op = 4。
-
紧跟在 Op 之后的是 发送方硬件地址 (MAC 地址 ) , 发送方的协议地址 (IPv4 地址 ) , 目的硬件地址 和 目的协议地址 。
-
填充字段 由于以太网规定最小数据长度为 64 字节, ARP 帧长度只有 46 字节,因此有 18 字节填充位,填充位的内容没有定义,与具体实现相关。
-
FCS 是 4 个字节的帧校验序列( Frame Check Sequence , FCS ),采用 32 位 CRC 循环冗余校验对从" 目标 MAC 地址 " 字段到 " 数据 " 字段的数据进行校验。
ARP抓包理解原理
这个地方主要利用 WIRESHARK 进行抓包,下载地址为:https://www.wireshark.org/download.html基础设置
临时设置:也可以永久设置:去掉 16 进制窗口:最终效果:抓包ARP
arp -a查看arp信息:
arp -d 清除 arp 缓存 ( 需要管理员权限 ) :开始 ping ip太多数据了,过滤:这就是我们刚刚 ping 的 arp 请求和响应:icmp 协议:ARP攻击原理
网络中有 A 、 B 、 C 三台主机,主机 A 与主机 B 正常通信,主机 C 进入网络,开始实施 ARP 欺骗。首先,主机 C 给主机 A 发一个 ARP 应答报文,报文显示主机 B 的 IP 地址映射主机 C 的 MAC ,主机 A 收到这个报文,更新自己的ARP 缓存表,修改主机 B 的 IP 地址对应的 MAC 。这样,其后主机 A 发往主机 B 的数据包均会发给主机C 。如果主机 C 不转发该数据包到主机 B ,则主机 B 认为与主机 A 的通信发生故障,而主机 A 无法察觉。如果主机 C 转发数据包到主机 B ,则主机 B 与主机 A 之间的通信不受影响,仅仅是主机 C 监听到主机 A 到主机 B的数据包。同理,主机 C 发 ARP 应答报文欺骗主机 B ,则主机 B 发往主机 A 的数据包被主机 C 监听。ARP攻击的分类
ARP 是一种非常不安全的协议,目前已经有很多涉及 ARP 的攻击,最主要的就是使用代理 ARP 功能假扮主机,对 ARP 请求作出应答,通过伪造 ARP 数据包来窃取合法用户的通信数据,造成影响网络传输速率和盗取用户隐私信息等严重危害。ARP 主要攻击方式分为下面这几种:ARP 泛洪攻击:通过向网关发送大量 ARP 报文,导致网关无法正常响应。首先发送大量的 ARP 请求报文,然后又发送大量虚假的 ARP 响应报文,从而造成网关部分的 CPU 利用率上升难以响应正常服务请求,而且网关还会被错误的 ARP 缓存表充满导致无法更新维护正常 ARP 缓存表,消耗网络带宽资源。
ARP 欺骗主机攻击 : ARP 欺骗主机的攻击也是 ARP 众多攻击类型中很常见的一种。攻击者通过 ARP 欺骗使得局域网内被攻击主机发送给网关的流量信息实际上都发送给攻击者。主机刷新自己的ARP 使得在自己的 ARP 缓存表中对应的 MAC 为攻击者的 MAC ,这样一来其他用户要通过网关发送出去的数据流就会发往主机这里,这样就会造成用户的数据外泄。欺骗网关的攻击 : 欺骗网关就是把别的主机发送给网关的数据通过欺骗网关的形式使得这些数据通过网关发送给攻击者。这种攻击目标选择的不是个人主机而是局域网的网关,这样就会攻击者源源不断的获取局域网内其他用户韵数据.造成数据的泄露,同时用户电脑中病毒的概率也会提升。中间人攻击 : 中间人攻击是同时欺骗局域网内的主机和网关,局域网中用户的数据和网关的数据会发给同一个攻击者,这样,用户与网关的数据就会泄露。这里应该还要加一条网关到攻击的数据流。ARP攻击复现
攻击准备
攻击机: kali被攻击机: centos7 靶机被攻击机: winserver2008欺骗主机实现断网攻击
先在kali中获取需要攻击的目标ip地址以及网关的ip地址:
# 扫描对应网段所有存活的主机 fping -asg 192.168.3.0/24 # 或者使用也可以得到对应的效果 nmap -sP 192.168.3.0/24
我们确定需要攻击的目标 ip : 192.168.3.155网关的 ip : 192.168.3.1也是就我们的 winserver2008 靶机。注意:在执行攻击之前很多命令都需要管理员权限。这里要用到一个 arp 欺骗工具: arpspoof , 这个工具 kali 里面直接输入对应的命令回车,如果没有会让你安装。这个工具相当于可以不停的去发送欺骗数据包。arpspoof -i 网卡 -t 目标IP 网关 也可以使用反向欺骗: arpspoof -i 网卡 -t 网关 目标IP
攻击之前先确定目标主机是可以上网的:执行命令:# 这条命令的意思: # -i 指定网卡 eth0 kali自己的网卡 # -t 指定目标主机IP # 192.168.3.155 目标主机IP # 192.168.3.1 网关的IP # 意思就是不停的告诉 目标主机, 我是网关我是网关, 然后就断网了 arpspoof -i eth0 -t 192.168.3.155 192.168.3.1
执行之后,目标主机:要想结束断网,直接结束 arp 欺骗即可流量转发窃取用户隐私数据(中间人)
原理
在上面的例子中我们将 winserver2008 给断网了,是因为我们没有开启流量转发。我们要想获取用户的隐私数据,那么必须要让用户在 不知情 的情况下,进行上网,然后输入一些隐私数据,比如:用户名和密码之类的。这个时候我们就需要开启 kali 的流量转发,要让 winserver2008能够上网这个时候的流程就变成了:winserver2008 ====>kali====> 网关 =====>kali=====>winserver2008相当于就是 winserver2008 将数据发送到 kali 的网卡, kali 网卡再将数据转发给网关。那么我们要做的事情就是:kali 欺骗 winserver2008 自己是网关 = 》 正向欺骗kali 欺骗 网关 自己是 winserver2008 = 》 反向欺骗这样相当于是 kali 对流量进行了 中转开启流量转发
echo 1 > /proc/sys/net/ipv4/ip_forward 1
/proc/sys/net/ipv4/ip_forward 是配置文件,默认内容为 0 ,表示 IP 转发是关闭的,使用上述命令将该配置文件的内容改写为1 ,表示开启 IP 转发。开启 IP 转发后 流量会经过 kali 的主机而后再去到目标所以这时开启arpspoof 那么目标就不会断网,因为流量通过了 kali 主机那么我们就可以拦截相关数据。欺骗winserver2008
查看 winserver2008:欺骗网关新开一个窗口:开启wireshark进行抓包
在 winserver2008 中去 ping 一下 centos 靶机: 192.168.3.141然后看是否能抓到:确实抓到了包。wireshark 抓到的二层协议的包,我们要想得到用户的铭感数据,那么需要抓传输层协议的包,也就是抓http包。ettercap 进行铭感数据获在 kali 中新开一个窗口:# -T 文本模式显示 # -q 安静模式 # -i 指定网卡 ettercap -Tq -i eth0
然后在 winserver2008 中进行一个网址的登录:观察 ettercap :ettercap 这个工具很强大,可以干很多事情。但是不要去乱作。ARP防御
1. 主机级被动检测当系统接收到来自局域网上的 ARP 请求时,系统检查该请求发送端的 IP 地址是否与自己的 IP 地址相同。如果相同,则说明该网络上另有一台机器与自己具有相同的IP 地址。2. 主机级主动检测主机定期向所在局域网发送查询自己 IP 地址的 ARP 请求报文。如果能够收到另一 ARP 响应报文,则说明该网络上另有一台机器与自己具有相同的IP 地址。3. 服务器级检测当服务器收到 ARP 响应时,为了证实它的真实性,根据反向地址解析协议 (RARP) 就用从响应报文中给出的MAC 地址再生成一个 RARP 请求,它询问这样一个问题: “ 如果你是这个 MAC 地址的拥有者,请回答你的IP 地址 ” 。这样就会查询到这个 MAC 地址对应的 IP 地址,比较这两个 IP 地址,如果不同,则说明对方伪造了ARP 响应报文。4. 网络级检测配置主机定期向中心管理主机报告其 ARP 缓存的内容。这样中心管理主机上的程序就会查找出两台主机报告信息的不一致,以及同一台主机前后报告内容的变化。这些情况反映了潜在的安全问题。或者利用网络嗅探工具连续监测网络内主机硬件地址与IP 地址对应关系的变化。 -