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 ...
随机推荐
- ASP.NET MVC掉过的坑_MVC初识及MVC应用程序结构
APS.Net MVC 浅谈[转] 来自MSDN 点击访问 MVC 理论结构 模型-视图-控制器 (MVC) 体系结构模式将应用程序分成三个主要组件:模型.视图和控制器. ASP.NET MVC 框架 ...
- QT 环境下开发socketCan接口程序
使用头文件 #include <QMainWindow>#include "QTimer"#include "QTime"#include &quo ...
- P1912: [Apio2010]patrol 巡逻
这道题讨论了好久,一直想不明白,如果按传统的随便某一个点出发找最长链,再回头,K=2 的时候赋了-1就没法用这种方法找最长链了,于是乎,更强的找最长链的方法就来了..类似于DP的东西吧.先上代码: ; ...
- Indigo Studio
http://www.infragistics.com/products/indigo-studio?gclid=CIXrnav4lcQCFdclvQoduVEAnA
- UITableView设置cell为不可选?
本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术.本文将为读者讲解UITableView如何设置单 ...
- 四则运算之C++版
一.设计思想 之前的版本是用Java语言实现的,在这次的练习中,我用C++语言将其功能逐一实现,其实C++与Java有很多相似之处,只是一些书写格式不同,思路还是一样的. 二.源代码 #include ...
- Mac下安装及配置Eclipse
1.安装Eclipse前先确认你的Mac上是否已安装java运行环境.进入终端,输入”java -version”,如果返回了java版本号则说明已安装,否则,请先安装java运行环境: 2.访问ec ...
- 揭开NodeJS的神秘面纱!
一.NodeJS是什么? Node是一个服务器端JavaScript解释器.Node.js是一套用来编写高性能网络服务器的JavaScript包. 二.Node的目标是什么? Node 公开宣称的目标 ...
- JavaScript 变量、作用域和内存问题
JavaScript的基本类型值和引用类型值具有以下特点: 1.基本类型值在内存中占据固定的大小,因此被保存在栈内存中: 2.引用类型值是对象,保存在堆内存中: 3.从变量向另一个变量复制基本类型的值 ...
- 一个关于ExtJS4具体控件的详细教程
发现一遍介绍ExtJS控件介绍的比较好的系列文章,在此做总结 ExtJs4 笔记(1) ExtJs大比拼JQuery:Dom文档操作 ExtJs4 笔记(2) ExtJs对js基本语法扩展支持 Ext ...