ARP欺骗与中间人攻击
前言:
上一篇WPA/WAP2wifi 密码破解笔记说到如何探测附近开放的AP并且破解进入,那么进入别人据局域网我们能干些什么呢?换句话说如果别人进入了我们内部网络,会有什么影响?本文简要介绍了ARP和MITM原理,并在实际环境中对目标主机的流量进行劫持。曝露了公共网络中普遍存在的问题,藉此来看看局域网中的客户端究竟面临着怎样的隐私泄漏和安全风险。
ARP与MITM原理
什么是ARP
ARP全称为Address Resolution Protocol,即地址解析协议。是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本 机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主 发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
例如,在Linux命令行下
$sudo arp -a
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether 0A-11-22-33-44-01 C wlan0
192.168.1.2 ether 0A-11-22-33-44-02 C wlan0
可以看到局域网中其他客户端的内网地址和MAC地址。
工作过程
第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广 播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址 匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。
工作要素:ARP缓存
ARP缓存是个用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址->MAC地址的对应表,表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址。每一个以太网或令牌环网络适配器都有自己单独的表。当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。为使广播量最小,ARP维护IP地址到MAC地址映射的缓存以便将来使用。ARP缓存可以包含动态和静态项目。动态项目随时间推移自动添加和删除。每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。静态项目一直保留在缓存中,直到重新启动计算机为止。
ARP欺骗与MITM
MITM,全称为Man In The Middle,即中间人。地址解析协议是建立在网络中各个主机互相信任的基础上的,它的诞生使得网络能够更加高效的运行,但其本身也存在缺陷。ARP地址转换表是依赖于计算机中高速缓冲存储器动态更新的,而高速缓冲存储器的更新是受到更新周期的限制的,只保存最近使用的地址的映射关 系表项,这使得攻击者有了可乘之机,可以在高速缓冲存储器更新表项之前修改地址转换表,实现攻击。ARP请求为广播形式发送的,网络上的主机可以自主发送 ARP应答消息,并且当其他主机收到应答报文时不会检测该报文的真实性就将其记录在本地的MAC地址转换表,这样攻击者就可以向目标主机发送伪ARP应答报文,从而篡改本地的MAC地址表。ARP欺骗可以导致目标计算机与网关通信失败,更会导致通信重定向,所有的数据都会通过攻击者的机器。攻击者再对目标和网关之间的数据进行转发,则可作为一个“中间人”,实现监听目标却又不影响目标正常上网的目的。
具体攻击实现
具体的中间人攻击,大体上可以分为以下几个步骤:
1. 对目标主机进行ARP欺骗,声称自己是网关。
2. 转发目标的NAT数据到网关,维持目标的外出数据。
3. 对网关进行ARP欺骗,声称自己是目标主机。
4. 转发网关的NAT数据到目标主机,维持目标的接收数据。
5. 监听劫持或者修改目标的进入和外出数据,从而实现攻击。
其中1,3都是ARP欺骗;2,4都是转发,下面会分别说到。
ARP欺骗
ARP欺骗又叫ARP投毒(ARP poisoning),实现方式有很多,但其原理都是通过不断向攻击目标发送ARP replies,从而实现重定向从一个主机(或所有主机)到另一个主机的数据包的目的。
这里以dsniff工具集的arpspoof命令为例:
# arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host
其中,
-i 指定使用的接口。
-c 指定当还原arp配置时t使用的MAC地址,默认为使用原来的MAC。(即当停止arpspoof命令后,默认取消毒化)
-t 指定要毒化的主机,如果不指定的话默认为局域网下所有主机。
-r 双向毒化(host和target),从而双向扑捉数据。(仅当同时指定 -t的时候才有效)
host 为你想要伪装成的主机,通常是本地网关。所有从target到host的数据包都被重定向到本机。
数据流转发
毒化了目标主机的ARP缓存表之后,其经过网关外出的数据流将会发送到攻击者的主机。但此时由于目的地址出错,目标主机对外的请求将无法到达,亦即无法访问互联网了。为了维持目标正常上网,需要我们在收到目标来的数据时将其进行转发到真正的网关。
首先开启端口转发,允许本机像路由器一样转发数据:
# echo 1 > /proc/sys/net/ipv4/ip_forward
有时不能这样直接修改,还有另外一种方法
修改/etc/sysctl.conf文件,使得net.ipv4.ip_forward = 1;等于0为不转发。然后更新:
# sysctl -p
此时本机收到的数据包含源地址和目的地址(外网地址),我们需要将其转发到网关。这里进行了(NAT)网络地址转换的功能,关于NAT可参考我上一章P2P通信原理与实现(C++):
# iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -j SNAT --to-source 192.168.1.110
这条命令的作用是修改本机的转发规则,将所有从本机出去的源地址为192.168.1.XXX的数据包都修改为本机地址192.168.1.110
其中,
-t 指定要操作的表,这里是nat
-A 即--append,表示增加一条规则。nat有三个内建规则,分别是
PREROUTING,在数据包进入时改变其地址
POSTROUTING,在数据包将要出去时改变其地址
OUTPUT,在路由前改变本地产生的数据包地址
-p 表示数据包要检查的协议
-s 指定源地址。地址格式可以是网络名字,主机名字,IP地址或者是address/mask格式的网络地址。可以指定多个,-s前加!表示取补集
-j 指定规则的目标,即如果数据包符合规则该如何做;SNAT表示修改数据包的源地址,且此次链接的余下数据包都不再检查
--to-source 在SNAT选项下指定所转发数据包的新的源地址,这里设为192.168.1.110,即攻击者的地址
关于iptables的详细用途可以man iptables查看。上述命令描述了外出数据的转发规则,那么从外部来的数据要转发到被攻击主机上也是同理:
# iptables -t nat -A PREROUTING -p tcp -d 192.168.1.110 -j DNAT --to 192.168.1.114
在本机转发之前将数据包目的地址为192.168.1.110的修改为192.168.1.114(被攻击主机),然后转发出去。
其他工具
上面为了说明原理,吧arp毒化和数据转发分开做,其实利用现有的工具,可以很简单地执行上面的工作,例如用ettercap:
# ettercap -i wlan0 -Tq -M arp:remote /target/ /host/
一条命令即可完成arp毒化和转发的功能。其中-M表示指定MITM攻击。
后记
一旦中间人建立攻击成功,劫持了目标的上网流量,那么接下来也就为所欲为了。轻则监控目标的上网行为,就如同二十四小时站在你身后看你上网;或者劫持目标的cookie从而用目标的帐号登录诸如微博,百度,豆瓣等网站,浏览其隐私数据,进行发贴删贴等操作;重责进行钓鱼攻击,使目标下载恶意程序或者执行恶意脚本,从而威胁其计算机安全。当然,应对这种攻击的防范方法也有很多,最简单的一种就是绑定MAC地址,并且在网关MAC地址改变的时候发出提醒,从而防止ARP毒化攻击。还有就是最好不要在公共WiFi下浏览有重要隐私的网站,万一碰上不怀好意的人就在局域网中,那可就是真的“在阳光下行走”了。
ARP欺骗与中间人攻击的更多相关文章
- 同一局域网环境下的arp欺骗和中间人攻击(mac)
最近读了一篇有关arp欺骗和中间人攻击的文章,于是乎就想着自己实现一下,顺便验证下微信在回话劫持后的安全性. 1.本机环境 Macbook Air:OS X 10.11 El Captain 2.推荐 ...
- 【网络编程4】网络编程基础-ARP响应(ARP欺骗之中间人攻击)
arp欺骗->arp响应 ARP 缓存中毒(ARP欺骗) arp传送原理在于主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址:收到返回消 ...
- 记录利用ettercap进行简单的arp欺骗和mitm攻击过程
方法均来自网络,本人只是记录一下自己操作的过程,大神请无视之- 攻击主机平台:kali-linux 被攻击主机:安卓手机192.168.1.107 (在同一局域网内) 1.利用et ...
- 通俗版解释网关,IP地址,ARP欺骗,DDOS攻击
计算机主机网关的作用是什么? 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关.当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声 ...
- 渗透实战(周三):Ettercap·ARP毒化&MITM中间人攻击
今天,我们来讲解如何对小型Wi-Fi局域网发动网络攻击
- 中间人攻击之ettercap嗅探
中间人攻击: 中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的 ...
- 【Android编程】android平台的MITM瑞士军刀_cSploit源码解析及中间人攻击复现
/文章作者:Kali_MG1937 作者博客ID:ALDYS4 QQ:3496925334 未经允许,禁止转载/ 何为MITM欺骗,顾名思义,中间人攻击的含义即为在局域网中充当数据包交换中间人的角色 ...
- ARP欺骗病毒,网页“篡改”,注入iframe代码!
---------------权威资料看这里--------------- 清华大学信息网络工程研究中心-中国教育和科研计算机网应急响应组<ARP 欺骗网页劫持攻击分析>PDF文件,直接I ...
- 关于ARP欺骗与MITM(中间人攻击)的一些笔记( 二 )
一直没有折腾啥东西,直到最近kali Linux发布,才回想起应该更新博客了….. 再次说明,这些技术并不是本人原创的,而是以前记录在Evernote的旧内容(排版不是很好,请谅解),本文是继关于AR ...
随机推荐
- MongoDB学习笔记-游标
理解MongoDB的游标有两种维度:客户端和服务器端.下面将从这两方面来说明. 客户端 find方法返回值是一个游标.可以通过游标来对最终结果进行控制.比如限制结果数量,略过某一部分,根据任意键按任意 ...
- CentOS7下通过rpm方式安装MySQL及插入中文问题解决 [原创]
一 CentOS下通过rpm方式安装MySQL CentOS版本:CentOS-7 MySQL版本:MySQL-5.6.22 在网上搜了一下,Linux下安装MYSQL有三种方式: 1) 通过yum命 ...
- 软件工程随堂小作业——随机四则运算Ⅱ之算法思路(C++)
1.题目避免重复: (1)利用系统时间来产生随机数,重复率会降低. (2)建立链表,逐个判断.可读取写入文件. 2.可定制(数量/打印方式): (1)格式有默认值; (2)可以选择重新设置分几列和每行 ...
- Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)
1.非集成Spring hibernate的检索方式,主要有以下五种. 1.导航对象图检索方式.(根据已经加载的对象,导航到其他对象.) 2.OID检索方式.(按照对象的OID来检索对象.) 3.HQ ...
- php编写验证码
今天学习到了php登录时的验证码,验证码在我们平时的网站建设中是非常重要的,对于放置一些灌水机.脚本攻击是一个很好地策略. 下面是我写的代码: <?php session_start(); // ...
- SQL Server性能优化(4)命名和书写规范
命名规范是一个老生常谈的问题,好的命名规范对于团队程序开发,对bug定位.处理,项目延续有很重要的作用. 一. 列举现在的问题: 1.名称首字母不大写 2. 用中文名字 ...
- 【BZOJ】【1150】【CTSC2007】数据备份Backup
堆/贪心 一共N-1个元素……用堆维护最大值,取了第x个元素以后,插入v[x-1]+v[x+1]-v[x]这个元素,如果再取这个新元素就表示不取x,而取x-1和x+1……大概就是这种“带反悔”的思路吧 ...
- 如何撰写SCI论文的讨论部分?——经典结构 – 俗称“倒漏斗型。
- .net程序集强名称签名实践
引用: http://www.cnblogs.com/cpcpc/archive/2011/01/17/2123086.html 强名称是由程序集的标识加上公钥和数字签名组成的.其中,程序集的标识包 ...
- 【前端】js转码
js转码 function urlencode (str) { str = (str + '').toString(); return encodeURIComponent(str).replace( ...