一、ARP攻击概述

在上篇文章里,我给大家普及了ARP协议的基本原理,包括ARP请求应答、数据包结构以及协议分层标准,今天我们继续讨论大家最感兴趣的话题:ARP攻击原理是什么?通过ARP攻击可以做什么,账号是否可以被窃取?有哪些常见的ARP渗透(攻击)工具可以用来练手?ARP扫描和攻击有什么区别,底层数据包特征是怎样的?

接下来,我们通过图解的方式来深入了解ARP攻击是如何实现的。

二、ARP攻击原理

但凡局域网存在ARP攻击,都说明网络存在"中间人",我们可以用下图来解释。

在这个局域网里面,PC1、PC2、PC3三台主机共同连接到交换机SW1上面,对应3个接口port1/2/3。假设PC3这台主机安装了ARP攻击软件或遭受ARP病毒,成为这个网络的攻击者(hacker),接下来,PC3是如何攻击的?先不急,先来回顾下PC1和PC2是如何通信的。

①PC1需要跟PC2通信,通过ARP请求包询问PC2的MAC地址,由于采用广播形式,所以交换机将ARP请求包从接口P1广播到P2和PC3。(注:交换机收到广播/组播/未知帧都会其他接口泛洪)

②PC2根据询问信息,返回ARP单播回应包;此时PC3作为攻击者,没有返回ARP包,但是处于"监听"状态,为后续攻击做准备。

③PC1和PC2根据ARP问答,将各自的ARP映射信息(IP-MAC)存储在本地ARP缓存表。

④交换机根据其学习机制,记录MAC地址对应的接口信息,存储在CAM缓存表(也称为MAC地址表)。交换机收到数据包时,会解封装数据包,根据目标MAC字段进行转发。

关于上面的图解,我们要记住这些关键知识(敲黑板!):

①主机通信需要查找ARP表,而交换机通信需要查找CAM表(路由器则查找Route表)。

注:ARP表:ip<->mac    CAM表:mac<->port  (Route表:route<->port)

②交换机基于源MAC地址学习,基于目的MAC地址转发。

③同一局域网内,攻击者可以根据主机的ARP广播请求监听其IP和MAC信息。

注:这里是"被动监听",跟后面要谈到的"主动扫描",原理上有区分,这里先埋个坑)

接下来是重点,我们来看看PC3(Hacker)是如何发起ARP攻击的=>

正常情况下,若收到的ARP请求不是给自己的,则直接丢弃;而这里PC3(Hacker)在监听之后,发起了ARP回应包:我就是PC2(IP2-MAC3)。

从拓扑可以出现,PC3明明是IP3对应MAC3,很显然这就是一个ARP欺骗行为。于此同时,PC2正常的ARP回应包也交到了PC1手中,我们来看PC1接下来如何处理的:

PC1收到两个ARP回应包,内容分别如下:

③我是PC2,我的IP地址是IP2,我的MAC地址是MAC2;

③我是PC2,我的IP地址是IP2,我的MAC地址是MAC3;

PC1一脸懵:咋回事?还有这操作?不管了,我选最新的!(后到优先)

这里给大家顺便普及下网络协议里各种表在处理缓存信息的方式:

要么"先到先得",要么"后到优先"。上面提到的ARP和CAM表,就是遵循"后到优先"原则,而后面章节我们会讲到的DHCP表,则遵循"先到先得"原则。

那么问题来了,上面两个ARP回应包到底哪个先到哪个后到呢?

作为初学者,可能还在纠结前后这种naive的问题;而作为hacker,只要持续不停发出ARP欺骗包,就一定能够覆盖掉正常的ARP回应包。稳健的ARP嗅探/渗透工具,能在短时间内高并发做网络扫描(例如1秒钟成千上百的数据包),能够持续对外发送欺骗包。

无论如何,当PC1和PC2这种"小白"用户遇到PC3(hacker)时,最终的结果一定是这样的:

小白 vs 黑客,很明显的较量,PC1最终记录的是虚假的ARP映射:IP2<->MAC3,得到错误信息的PC1,接下来会发生什么情况呢?(我们以PC1 ping PC2为例)

根据数据封装规则,当PC1要跟PC2进行通信时,无论是发生PING包还是发送其他数据,首先要查找ARP表,然后在网络层打上源目IP,在链路层打上源目MAC,然后将数据包发送给交换机。交换机收到之后对数据进行解封装,并且查看CAM表(基于目的MAC转发),由于目标MAC3对应Port3,所以交换机自然而然将其转发给PC3。

就这样,PC1本来要发给PC2的数据包,落到了PC3(Hacker)手里,这就完成了一次完整的ARP攻击。反过来,如果PC2要将数据包发送给PC1,PC3仍然可以以同样的ARP欺骗实现攻击,这就有了下面这张图(PC3既欺骗了PC1,也欺骗了PC2)。

此时,PC1和PC2的通信数据流被PC3拦截,形成了典型的"中间人攻击"。那么,一旦被攻击并拦截,攻击者能做什么,普通用户又会遭受什么损失?这里给大家举几个常见的例子=>

①攻击者既然操控了数据流,那么直接断开通信是轻而易举的,即"断网攻击",例如,PC1发给PC2的数据在PC3这里可以直接丢弃,而如果这里的PC2是一台出口路由器(无线路由器),那就意味着PC1直接无法连上互联网。

②"断网攻击"显然容易被发现,而且比较"残忍",所以就有了更加常见的应用-"限速"。例如,在宿舍上网突然很慢,在网吧上网突然打不开网页,如果这个网络没有安全防御,那么很有可能有"内鬼"。

③其实无论是"断网攻击"还是"限速",整体还是比较"善良",因为这里流量里面的核心数据还没有被"提取"出来。如果攻击者是一名真正的黑客,他的目的一定不会这么无聊,因为内网流量对于黑客是没有太大价值的,而只有"用户隐私",例如常见网站的登录账号密码,这些才是最有价值的。

问:遭受ARP攻击之后,哪些账号可能被窃取?

答:任何基于明文传输的应用,都可以被窃取。例如,如果一个网站不是HTTPS协议,而是基于HTTP明文传输,那么当你登录这个网站时,你的密码就会被窃取。除了http(web应用),常见的还有telnet、ftp、pop3/smtp/imap(邮箱)等应用,都很容易泄露密码。

三、常见ARP渗透工具与底层原理分析

基于ARP欺骗原理设计出来的渗透/攻击工具非常多,而最终能实现什么功能则各有差异,简单举几个例子:

①无毒无害型的仅具备ARP扫描功能,用来发现内网主机;例如Metasploit里面的arping/arpscan相关模块;

②ARP扫描+流量控制(限速或限制能上哪些网站和应用);例如Windows下的P2P终结者;

③ARP扫描+账号窃取(网站、邮箱、各种);最强的莫过于Windows下的Cain,当然还有跨平台的Ettercap(需配合其他工具);

当然,如果攻击者足够强悍,也可以基于协议底层原理,编写自己的ARP工具。这里我通过wirehshark给大家还原真实网络中常见的ARP扫描和欺骗攻击(具体的软件使用这里暂时不出现,大家重点关注底层实现)。

在这张图里面,Hacker(就是我...)接入了一个WiFi网络,这个10.1.20.0/24便是所在的网段。刚进来一个陌生网络,Hacker只知道自己的IP信息,例如IP地址是10.1.20.253,网关地址是10.1.20.254,而这个局域网的其他设备是什么?有多少台?地址分布是多少?Hacker都不知道,接下来怎么办呢?是不是要直接发动ARP攻击了?

不用这么着急,咋们至少要先了解下这个网络,进行基本的扫描和踩点。这个时候通过ARP工具对这个WiFi网络进行扫描,具体的数据包截图如下:

上面的ARP扫描过程,大概的情况是这样的=>

其实,这就是典型的"盲扫"或者"暴力扫描":反正我不知道网络到底有多少主机,那我就尝试一下把整个网段全部问一遍得了。好比老师上课点名,把每个学生的桌位号念一遍,谁举手就到勤,没举手就算逃课。

那么,这个实际网络里面,到底谁"举手"了呢?我们来看Wireshark抓包情况。

在ARP应答信息里面,除了IP地址和MAC信息,我们还能看到相关的设备厂商信息,例如cisco、meizu、apple、xiaomi等,这其实就是依靠MAC地址前面24位的OUI(机构唯一标识符)来识别的。

Wireshark或扫描器能够帮我们将OUI转为对应的厂商(还有一些扫描器基于Netbios协议,还能找到电脑的主机名),所以,扫描之后可以得到下面这张图片=>

通过扫描,我们已经知道了整个网络的主机信息,例如20.254对应cisco,应该是路由器,20.248对应apple,是苹果手机,20.249对应xiaomi,是小米手机,以此类推.....

接下来,如何进行ARP欺骗攻击呢?这里将最重点的数据包截取出来=>

根据之前的信息,我们知道00:08:ca:86:f8:0f其实就是hacker的mac地址,并且对应的真正的IP地址应该是10.1.20.253。而这里很明显是hacker在欺骗局域网其他主机,它对外声称:自己就是"所有人"。尤其是上面标红的主机,我们已经知道是小米、思科、苹果等设备,但是hacker都声明是自己!这样做的意义在于覆盖掉其他主机的ARP缓存表信息,并生成错误的ARP映射,最终将通信流量交给hacker。

当然,还有另外一种ARP欺骗的做法:hacker告诉所有人,自己就是网关。因为其他主机访问互联网必经之路便是网关(出口路由器/无线路由器),通过这种方式,同样可以截取到用户数据流,这里给出另外一个网络的实现过程=>

Hacker欺骗主机Honhai,告诉它:我就是网关(10.1.1.254)

Hacker欺骗主机Apple,告诉它:我就是网关(10.1.1.254)

依此类推,Hacker会告诉局域网所有主机:自己就是网关,并且后续可以把数据都丢给我,我来转发到互联网。

四、ARP攻击总结

①ARP缓存表基于"后到优先"原则,IP与MAC的映射信息能被覆盖;

②ARP攻击基于伪造的ARP回应包,黑客通过构造"错位"的IP和MAC映射,覆盖主机的ARP表(也被称为"ARP毒化"),最终截取用户的数据流;

③一旦遭受ARP攻击,账号密码都可能被窃取(如果通信协议不是加密的);

④通过Wireshark数据包分析,我们掌握了真实网络中ARP底层攻击原理及数据包组成。

预告:ARP防御篇

如何防御ARP攻击?

有哪些ARP防御软件?

如果被ARP攻击了,如何揪出"内鬼",应该如何"还手"?

企业网/家庭网的防御方法有什么区别?

图解ARP协议(二)ARP攻击原理与实践的更多相关文章

  1. 浅析ARP协议及ARP攻击

    一. ARP数据包结构 (1)硬件类型:指明发送方想知道的硬件接口类型,以太网的值为1:(2)协议类型:指明发送方提供的高层协议类型:它的值为 0x0800 即表示 IP地址.(3)硬件地址长度和协议 ...

  2. ARP协议与ARP攻击入门

    一 ARP协议 ARP协议是一个年代相当"久远"的网络协议.ARP协议制定于1982年11月,英文全称:Address Resolution Protocol,即"地址解 ...

  3. ARP协议(4)ARP编程

    之前的几篇文章,分别介绍了 ARP 协议格式,在vs2012里配置winpcap环境,我们该做的准备都已经做完了.如今我们真正来实现了. 一.定义数据结构 依据ARP的协议格式,设计一个ARP协议格式 ...

  4. ARP协议(3)ARP编程--winpcap&amp;vs2012配置

    好.之前说了那么多.最终到了,我们能够操刀的时候了. 在对ARP协议编程前.我们必需要能控制网络适配器(网卡).这个部分就是驱动! "我们要编写网卡驱动?",对,可是,至少我们现阶 ...

  5. 哈工大 信息安全实验 XSS跨站脚本攻击原理与实践

    XX大学XX学院 <网络攻击与防御> 实验报告 实验报告撰写要求 实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性. ...

  6. HTTPS学习(二):原理与实践

    div.example { background-color: rgba(229, 236, 243, 1); color: rgba(0, 0, 0, 1); padding: 0.5em; mar ...

  7. 描述ARP协议的工作原理,怎么实施ARP攻击和防御ARP攻击

    什么是ARP协议?ARP,即地址解析协议,实现通过IP地址得知其物理地址.在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址.为了让报文在 ...

  8. 网络层协议、ARP攻击

    一.IP数据包格式 二.ICMP协议介绍 PING命令 三.ARP协议介绍 四.ARP攻击原理 一.IP数据包格式 网络层的功能 定义了基于IP协议的逻辑地址 连接不同的媒介类型 选择数据通过网络的最 ...

  9. ARP攻击原理简析及防御措施

    0x1  简介 网络欺骗攻击作为一种非常专业化的攻击手段,给网络安全管理者,带来严峻的考验.网络安全的战场已经从互联网蔓延到用户内部的网络, 特别是局域网.目前利用ARP欺骗的木马病毒在局域网中广泛传 ...

随机推荐

  1. go 可变参数

    go 在参数列表中使用 ... 表示可变参数,例如: import "fmt" func Minimum(first int, others ...int) int { min : ...

  2. 加固后,上传play store, 在 google play store 下载应用安装后,打开签名校验失败

    在Google Play Console. (Google Play App Signing )签署您的应用 在创建应用时: 会有个“ Google Play App Signing” 的东西,提示使 ...

  3. xampp访问phpmyadmin访问不了

    我的xampp版本是xampp-linux-x64-5.6.15-2-installer.run, 浏览器输入“我的ip/phpmyadmin”出现如下问题: Access forbidden! Ne ...

  4. Tips_发送请求时添加一个随机数参数,让浏览器每次都重新发请求到服务器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 初入linux系统

    作为微软的老铁粉了,看到微软进军linux这么久了,是时候该跟上脚本了,不然该落后了,脚步是如此之快,着实让我吃了一惊,说干就干, 绝不是开玩笑的,谁也阻止不了.net开源,跨平台的脚步了.以前别人说 ...

  6. Android中RadioGroup的初始化和简单的使用

    一简介: RadioGroup作为一个单选按钮组,可以设置为性别选择男或则女,地址选择等等,作为一个android入门级选手,就简单的说一下RadioGroup组中RadioButton的布局和初始化 ...

  7. linux 使用sh@d0ws0cks client

    Linux Centos7下安装使用Shadowsocks客户端,实现*** 准备 SS: 搭建一个可以连接外网的服务器 教程可见 自己动手搭梯子 服务器:本人用的腾讯云服务器,系统为Centos7 ...

  8. 简单工厂模式demo

    1. 简单工厂模式 domain的接口 public interface Color{ public void display(); } red public Class Red implements ...

  9. nova file injection的原理和调试过程

    file injection代码 file injection原理来讲是比较简单的,在nova boot命令中,有参数--file,是将文件inject到image中 nova boot --flav ...

  10. MSSQL事务隔离级别详解(SET TRANSACTION ISOLATION LEVEL)

    控制到 Transact-SQL 的连接发出的 SQL Server 语句的锁定行为和行版本控制行为. TRANSACT-SQL 语法约定 语法   -- Syntax for SQL Server ...