ARP全称为Address Resolution Protocol,即地址解析协议,它是一个根据IP地址获取物理地址的TCP/IP协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
ARP地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存,故而攻击者可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
主机A:
主机B:
ARP缓存是一个用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址->MAC地址的对应表,表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址,每一个以太网或令牌环网络适配器都有自己单独的表,当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询,为了使广播量最小,ARP维护IP地址到MAC地址映射的缓存以便将来使用
ARP缓存可以包含动态和静态项目,动态项目随时间推移自动添加和删除,每个动态ARP缓存项的潜在生命周期是10分钟,新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除,如果某个项目已在使用,则又收到2分钟的生命周期,如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期,静态项目一直保留在缓存中,直到重新启动计算机为止
ARP地址解析协议是建立在网络中各个主机互相信任的基础上的,它的诞生使得网络能够更加高效的运行,但其本身也存在缺陷,ARP地址转换表依赖于计算机中高速缓冲存储器动态更新的,而高速缓冲存储器的更新是受到更新周期的限制的,只保存最近使用的地址的映射关系表项,这使得攻击者有了可乘之机,可以在高速缓冲存储器更新表项之前修改地址转换表,实现攻击。
ARP请求为广播形式发送的,网络上的主机可以自主发送ARP应答消息,并且当其他主机收到应答报文时不会检测该报文的真实性就将其记录在本地的MAC地址转换表,这样攻击者就可以向目标主机发送伪ARP应答报文,从而篡改本地的MAC地址表,ARP欺骗可以导致目标计算机与网关通信失败,更会导致通信重定向,所有的数据都会通过攻击者的机器,攻击者再对目标和网关之间的数据进行转发,则可作为一个"中间人",实现监听目标却又不影响目标正常上网的目的。
Step 1:在攻击主机上关闭端口转发
#终止 echo 0 > /proc/sys/net/ipv4/ip_forward #允许 echo 1 > /proc/sys/net/ipv4/ip_forward
Step 2:在普通主机上查看当前ARP解析列表
Step 3:在普通主机上向百度进行ping试
可以正常访问百度:
Step 4:之后在攻击主机上通过aprspoof进行断网攻击
Usage: arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host # 参数解释: -i 指定使用的接口 -c 指定当还原arp配置时t使用的MAC地址,默认为使用原来的MAC(即当停止arpspoof命令后,默认取消毒化) -t 指定要毒化的主机,如果不指定的话默认为局域网下所有主机 -r 双向毒化(host和target),从而双向扑捉数据(仅当同时指定 -t的时候才有效) #执行示例: arpspoof -i eth0 -t 192.168.174.170 192.168.174.2
Step 5:之后可以看到ping请求超时,同时浏览器无法打开www.baidu.com,同时查看ARP解析表会发现网关的MAC地址被成功欺骗后设置成了攻击者的MAC地址
Step 6:之后中断攻击(由于我们之前没有指定-c参数所以会还原原先的MAC地址)
可以看到ping恢复正常,同时页面和ARP表也恢复正常
Step 1:开启端口转发,允许本机像路由器一样转发数据信息
echo 1 > /proc/sys/net/ipv4/ip_forward
Step 2:在普通主机上查看当前ARP解析列表
Step 3:在普通主机上访问Web页面
Step 4:之后在攻击主机上通过aprspoof进行ARP欺骗攻击
Usage: arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host # 参数解释: -i 指定使用的接口 -c 指定当还原arp配置时t使用的MAC地址,默认为使用原来的MAC(即当停止arpspoof命令后,默认取消毒化) -t 指定要毒化的主机,如果不指定的话默认为局域网下所有主机 -r 双向毒化(host和target),从而双向扑捉数据(仅当同时指定 -t的时候才有效) #执行示例: arpspoof -i eth0 -t 192.168.174.170 192.168.174.2
Step 5:之后driftnet 获取受害者用户访问网站时残留的图片数据信息
Step 1:这里我们接着上面图片数据的部分展开,我们在攻击主机上使用ettercap捕获通信数据
Step 2:模拟一个第三方FTP服务
Step 3:用户访问第三方FTP服务并进行认证
Step 4:攻击者成功捕获到用户的账户密码信息
这里我们补充几个在Windows下常用的ARP欺骗手法以及ARP欺骗工具的使用~
Step 1:在攻击主机上运行NetFuke软件并进行嗅探配置(此处的网卡必须要识别出来IP地址,否则无法进行ARP欺骗)
Step 2:配置ARP欺骗
Step 3:插件命令参数设置
Step 4:开启ARP欺骗
Step 5:当用户打开浏览器进行访问时直接进入我们订制的页面(可以附加载荷等)
XArp是国外的一款热门的ARP防火墙软件,能够帮助用户建立一个专门的检测系统,使用高级技术来检测应对网络上的各类ARP攻击,例如,使用ARP欺骗,攻击者可以窃听您的所有网络流量,包含电子邮件与密码,所有这一切都完全没有被发现,XArp执行主动与被动方法来检测此类攻击。
Step 1:开启NetFuke实施ARP欺骗攻击
Step 2:之后再XARP端可以看到报警信息以及相关记录信息
PS:个人感觉这个工具并不是那么好~
ARP欺骗的防御手法主要从以下两个方面出发:
a、阻断伪造数据包的传播:
该方法主要是从交换机或者路由器等网络设备的角度出发,以交换机为例,将交换机的端口、MAC地址、IP地址三者绑定,生成DAI(Dynamic ARP Inspection)检测表,如果某个端口的主机发送了与它在DAI表中的条目不相符的数据包,可以选择令其断网或者丢弃其发送的数据包
b、受害者不接受伪造数据包
该方法主要是从用户的角度出发,首先不要随便接入陌生的网络是一定的,其次,用户可以在设备上安装ARP防火墙,如果是技术人员,可以选择建立静态ARP条目(适用于不会经常变动且数量较少的网络环境),Windonwde用户使用命令"arp -s ip"地址mac地址来进行静态绑定
DNS(Domain Name System),即域名解析协议,域名系统以分布式数据库的形式将域名和IP地址相互映射,简单来说,DNS是用来解析域名的,有了DNS我们就不用再记住烦人的IP地址,用相对好记的域名就可以对服务器进行访问,即使服务器更换了IP地址,我们依旧可以通过域名访问该服务器,这样能够使我们更方便的访问互联网
当我们在浏览器中输入www.baidu.com后,将经历以下查询过程:
DNS在互联网中扮演着如此重要的角色,但是在设计DNS协议时,设计者没有考虑到一些安全问题,导致了DNS的安全隐患与缺陷,DNS欺骗就是利用了DNS协议设计时的一个非常严重的安全缺陷
首先,欺骗者向目标机器发送构造好的ARP应答数据包,ARP欺骗成功后,嗅探到对方发出的DNS请求数据包,分析数据包取得ID和端口号后,向目标发送自己构造好的一个DNS返回包,对方收到DNS应答包后,发现ID和端口号全部正确,即把返回数据包中的域名和对应的IP地址保存进DNS缓存表中,而后来的真实的DNS应答包返回时则会被丢弃
Step 1:测试攻击主机的网络连通性
Step 2:之后在攻击者主机端启动Apache服务并构造一个钓鱼页面,这里简化为一个普通的HTML页面,本地测试效果如下
Step 3:查找etter.dns文件,并修改该配置文件,将www.al1ex.com指向本机IP地址
locate etter.dns leafpad /etc/ettercap/etter.dns
Step 4:使用ettercap开始欺骗
之后开启DNS欺骗
Step 5:查看效果
www.baidu.com——正常访问
www.al1ex.com——钓鱼页面
DNS欺骗记录:
Step 1:开启端口转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
Step 2:查找etter.conf文件,并修改该配置文件
locate etter.conf leafpad /etc/ettercap/etter.conf
修改为0
Step 3:查找etter.dns文件,并修改该配置文件
locate etter.dns leafpad /etc/ettercap/etter.dns
增加一条DNS记录,这里的域名由我们制作的钓鱼网站域名而定:
Step 4:下面进行DNS欺骗攻击
ettercap -T -q -M arp:remote -P dns_spoof /192.168.174.170/192.168.174.2/ #说明: 受害者地址:192.168.174.170 网关的地址:192.168.174.2
Step 5:使用setoolkit克隆网站
http://jwbinfosys.zju.edu.cn/default2.aspx
Step 6:在本地访问克隆网站
Step 7:之后诱导用户访问网站
效果有点差强人意,不过当用户访问网站并登录时,会获取到用户的登录凭证信息(后期发现是IE的安全策略的原因)
DNS欺骗记录:
DNS欺骗是很难进行有效防御的,因为大多情况下都是被攻击之后才会发现,对于避免DNS欺骗所造成危害,这里给出以下建议:
1、因为DNS欺骗前提也需要ARP欺骗成功,所以首先做好对ARP欺骗攻击的防范
2、不要依赖于DNS,尽管这样会很不方便,可以使用hosts文件来实现相同的功能
3、使用安全检测软件定期检查系统是否遭受攻击
4.使用DNSSEC
自Windows Vista起,Windows操作系统开始支持一种新的名称解析协议—LLMNR,主要用于局域网中的名称解析,LLMNR能够很好的支持IPv4和IPv6,它也是一个仅次于DNS的名称解析方式,而且在Linux操作系统中也实现了LLMNR,LLMNR协议解析名称的特点为端到端,IPv4的广播地址为224.0.0.252,IPv6的广播地址为FF02:0:0:0:0:0:1:3或FF02::1:3
根据LLMNR协议的解析过程可知,当用户访问一个不存在的网络的域名时,例如:Al1ex.com,那么首先会去检查本地NetBIOS缓存,由于缓存记录中没有,进而转去向当前子网/域内进行广播查询,此时如果攻击者进行恶意应答,例如:欺骗用户Al1ex.com为攻击者的服务器端IP地址,那么用户便会先攻击者提供的恶意IP地址发起请求,同时使用用户的Net-NTLM进行身份验证,此时攻击者通过LLMNR投毒的方式即可成功捕获到用户的身份信息,示意图如下:
攻击者可以通过LLMNR协议进行投毒攻击,当用户访问某一个无法解析的域名(不存在/拼写错误)时可以使用LLMNR协议投毒的方式将攻击者主机的IP地址作为应答,之后窃取用户的Net-NTLM Hash
下面我们通过两种方式来演示如何进行LLMNR/NBNS欺骗攻击~
Step 1:在攻击主机上执行一下命令开启Responder
Step 2:之后模拟受害者访问不存在的\Al1ex.com(可以通过钓鱼的方式或者恶意PDF等众多的方式来实现)
Step 3:之后在Responder端可以成功捕获到用户的NTLM-Hash
Step 4:之后对用户的NTLM-Hash进行爆破(NTLM V1为5500,NTLM v2为5600)
hashcat -m 5600 HTTP-NTLMv2-192.168.174.111.txt passkey.txt
Inveigh下载地址:https://github.com/Kevin-Robertson/Inveigh
Step 1:之用管理员权限打开攻击机器的powershell依次输入以下命令
. .\Inveigh.ps1 Invoke-Inveigh -ConsoleOutput Y #PS:如果有执行策略限制再加一条Set-ExecutionPolicy Bypass -Scope Process
Step 2:模拟受害者用户访问不存在的UNC路径,且无需认证
Step 3:之后再攻击主机中可以看到已经成功抓取到Net-NTLM Hash
项目地址:https://github.com/Kevin-Robertson/InveighZero
Step 1:之用管理员权限打开攻击机器的cmd之后执行以下命令
Step 2:模拟用户在浏览器中输入错误的UNC查询路径,且无需填写表单信息
Step :3:之后可以捕获到用户的Net-NTLM Hash
关于LLMNR Poison攻击的实战思路有很多,包括劫持FTP,MySQL,MSSQL Server等,具体的实现可自由发挥,同时为了防止遭到LLMNR Poison攻击,可以导入下面的注册表键值关闭LLMNR,不过关闭了LLMNR以后, 可能用户的一些正常需求会受到影响~
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" /v EnableMulticast /t REG_DWORD /d 0 /f reg add "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows NT\DNSClient" /v EnableMulticast /t REG_DWORD /d 0 /f