本篇笔记为Udemy课程Learn Ethical Hacking From Scratch课程笔记,所有方法及材料均源于该课程。特别声明:本文所述内容仅供学习交流使用,不承担任何法律责任。

准备工作

软件准备

本课程推荐使用VirtualBox虚拟机,操作系统为定制版Kali Linux系统,其中已经预安装部分课程需要用到的软件包。

硬件准备

本部分内容需要用到一个外接的无线网卡(Wireless Adapter)。虽然大部分笔记本电脑都具备无线网卡,但是虚拟机无法直接访问自带的无线网卡,并且自带的无线网卡可能缺少某些功能。

上图为作者推荐的Atheros AR9271无线网卡,支持Monitor modePacket injectionaircrack-ng suite等。但是该网卡仅支持2.4Ghz频段,对于使用5Ghz频段的设备就无能为力了。

Pre-Connection Attacks

修改MAC地址

MAC地址(Media Access Contro Address),是网络接口的永久性唯一物理地址,是由生产厂商出厂就确定的。网络上传输的所有数据都是以包(packet)的形式传播的,packet中包含Source MAC和Destination MAC。

使用ifconfig指令查看所有的网络设备信息,可以查看到每个网络设备的IP地址(红框),MAC地址(蓝框)等信息。其中wlan0为外接无线网卡对应的设备名称。

要想修改MAC地址,首先要关闭对应的网络设备,修改MAC地址后再开启对应设备。

1
2
3
4
5
6
# 关闭wlan0设备
ifconfig wlan0 down
# 修改MAC地址
ifconfig wlan0 hw ether 00:11:22:33:44:55
# 开启wlan0设备
ifconfig wlan0 up

再次使用ifconfig指令查看,发现MAC地址已经更改。

实际上,这里并没有改变该网卡硬件的物理MAC地址,会在每次重启电脑时重置。

Q1:修改MAC地址显示的原理是什么?别人是否能够发现你修改了自己的MAC地址?如果别人能够发现,那能够查到你真实的MAC地址么?

修改无线网卡模式

使用iwconfig命令查看无线网卡工作模式。

可以看到无线网卡的工作模式为Managed。理论上,如果你在某一WI-FI的覆盖范围内,你可以接受到该WI-FI下的所有设备发送和接受的信息。当无线网卡工作模式为Managed时,网卡只会接受Destination MAC地址是自己的packet信息。如果你想让无线网卡接受所有信息,需要把工作模式设置为Monitor。

修改步骤类似,需要先关闭网络设备,修改完成后再开启设备。

1
2
3
4
5
6
7
8
# 关闭wlan0设备
ifconfig wlan0 down
# 关闭所有网络连接
airmon-ng check kill
# 修改为monitor模式
iwconfig wlan0 mode monitor
# 开启wlan0设备
ifconfig wlan0 up

再次使用ifconfig指令查看,现在该网卡已经可以接受该WI-FI下的所有数据包了。

注意:并不是所有无线网卡都支持Monitor模式。

监控网络信息

当无线网卡修改为monitor模式后,使用airodump-ng指令可以查看附近的局域网信息。

1
2
# mon0为无线网卡名称,可能每次的名称不相同,只要选择monitor模式的网卡即可
airodump-ng mon0

终端会实时更新附近的无线网络状态,按下Crtl+C可退出当前程序。如上图,我们可以看到附近的网络MAC地址,网络名称等信息。更多参数请见这里。注意,由于该外接网卡只支持2.4Ghz频段,因此只能显示附近2.4Ghz的网络信息。

假如我们只想查看某一特定网络的信息,可以使用如下指令:

1
2
# 给定bssid,给定channel,并且把数据记录下来,命名为test,使用网卡mon0
airodump-np --bssid F8:23:B2:B9:50:A8 --channel 2 --write test mon0

终端同样会实时更新该无线网络的状态,此时我们甚至可以看到该网络下连接的所有设备信息(上图中红框部分)。

按下Crtl+C结束程序后,可以在当前工作的目录下看到名为test-01.cap的文件,该文件包含了该网络所发出的所有数据包。但此时我们并不能获得什么有用的信息,因为网络数据都是经过加密的。

Deauthentication Attack

即使现在我们无法解密所获取的数据包,但可以发动取消授权攻击(Deauthentication Attack)。该攻击能够让指定目标设备失去该网络的连接。

攻击的原理很简单:既然我们可以修改自己的MAC地址,我们可以假装目标设备(Client)告诉路由器(Access Point)我要断开连接了,然后再假装路由器告诉目标设备你要断开连接了,此时目标设备就会无法连入这个网络了。

当然这一切不需要一步一步手动完成,可以使用aireplay-ng指令完成。

1
2
# 攻击类型为deauth,1000000为攻击次数,只有当攻击结束或者手动结束攻击后,目标设备才能连接网络,-a后跟网络MAC地址,-c后跟目标用户MAC地址,使用网卡mon0
aireplay-ng --deauth 1000000 -a F8:23:B2:B9:50:A8 -c 80:E6:50:22:A2:E8 mon0

虽然这种攻击只能让目标用户连不上网,没有什么实质性损失,但这往往是其他攻击的开始。我们可以假装让目标用户连不上网,然后提醒目标用户安装更新,就可以把我们的后门或者病毒植入到目标设备上。

Q2:是否有办法防止deauth攻击?如果网络内有人使用deauth攻击怎么办?

Gaining Access

接下来就是想办法连接到目标网络上,只有拿到了目标网络的密码,我们才能更好的解析每个人的数据包,包括访问的URL,用户名密码等信息。WI-FI加密方式一般分为三种:WEP/WPA/WPA2。其中WEP是比较古老的加密方式,极其不安全,很容易被破解;而WPA/WPA2的加密方式类似,可以用不同的方式尝试去破解。

WEP Cracking

WEP,Wired Equivalent Privacy,有线等效加密,是一种比较古老的加密手段,使用一种叫做RC4的算法进行加密。这种加密方式很不安全,很容易被破解。目前仍有部分WI-FI使用WEP加密。

简单来说,在传送数据包时,Client对数据进行加密,路由器收到后进行解密。如果在传播过程中被监听,收到的是加密后的信息。

但是,WEP的弱点在于算法本身。我们细看加密过程:每个数据包都会使用随机初始向量(Random Initialization Vector,IV)产生唯一的key stream,但是IV的数据范围只有24位,并且在传播过程中,IV是以明文方式传播的。当我们抓取到数据包时,虽然不知道包中加密后的信息是什么,但是可以直接读取该数据包的IV值。当我们获取足够多的包含不同IV值的数据包时,我们可以反向计算出网络密码。

在实际操作中,主要有2步:

  • 获取足够多包含不同IV的数据包
  • 反向计算出网络密码

我们可以使用airodump-ng来获取数据包:

1
2
#使用airodump-ng指令,bssid后跟网络MAC地址,channel为1,把获取信息写入basic_wep文件,网卡名称为mon0
airodump-ng --bssid F8:23:B2:B9:50:A8 --channel 1 --write basic_wep mon0

可以看到,目标网络的Data值在快速上涨(图中红框),表明当前网络很繁忙,这意味着我们可以很快接受到包含不同IV的数据包。

有了数据之后,使用aircrack-ng破解网络密码:

1
2
#使用aircrack-ng指令,后面跟数据包所在的cap文件即可
aircrack-ng basic_wep-01.cap

可以看到,图中红框内就是破解后的密码,你可以直接输入ASCII后跟的字符连接网络,或者输入[]中的一串数字连接(记得去掉冒号)。(这一串数字其实是每个字符所对应的ASCII码值)

Fake Authentication Attack

刚才我们说到,如果网络比较繁忙,我们很容易收集到大量的包含不同IV的数据包。但是如果网络很空闲呢,那我们岂不是要等上很长时间才能收集到足够的IV。当然,我们可以人为增加网络发送的数据包。

本质上,路由器会拒绝所有不包含路由器密码的请求。也就是说,如果你不知道路由器密码,路由器根本不会搭理你。但是凡事都有例外,对于WEP加密的网络,我们可以使用假身份验证攻击(Fake Authentication Attack)去和路由器进行沟通,让路由器不要忽视我们的请求。注意:此时我们并没有连接到网络,只是和路由器进行本地通信。

1
2
# 使用aireplay-ng指令,攻击类型为fakeauth,0表示只攻击一次,-a后跟目标网络MAC地址,-h后跟自己网卡的MAC地址,网卡名称为mon0
aireplay-ng --fakeauth 0 -a 64:16:F0:EC:7B:F3 -h 48:5D:60:2A:45:25 mon0

使用fakeauth攻击后,可以看到当前网络的AUTH状态为OPEN,并且在连接设备中看到我们的网卡信息。接下来,我们就能够强行和路由器进行通信,让路由器产生大量包含不同IV的数据包。

Q3:路由器是否会发现我们使用fakeauth攻击?为什么不需要密码即可和路由器进行通信?

ARP Request Replay Attack

ARP请求重播攻击(ARP Request Replay Attack)原理很简单:我们等待一个ARP数据包,接受到以后再把这个数据包发送给路由器,强行让路由器重新再发送一个数据包。如此反复,即可以让路由器发出大量包含不同IV的数据包。

1
2
#使用aireplay-ng指令,攻击类型为arpreplay,-b后跟目标网络MAC地址,-h后跟网卡MAC地址,网卡名称为mon0
aireplay-ng --arpreplay -b 64:16:F0:EC:7B:F3 -h 48:5D:60:2A:45:25 mon0

现在,只需要稍微等一等,当网卡捕捉到一个ARP数据包时,就可以看到网络的DATA数据量开始快速上升。这时候我们就有足够多的数据进行破解WEP网络了。

Q4:ARP数据包是什么?ARP数据包传播机制是什么?

WPA/WPA2 Cracking

WPA/WPA2相比之下就安全很多,他们是为了改善WEP而出现的,因此数据包中并没有任何有用的信息。下面介绍两种可能的破解方式。

WPS Feature

WPS是WPA/WPA2网络的一种特性,它可以让设备不需要输入密码就可以加入网络。通常情况下,我们需要按下路由器上的WPS按钮才可以使用WPS连接网络(这种方式称为PBC,Push Button Authentication)。但是,有些网络可能会设置为不需要PBC也可以使用WPS连接网络。WPS验证仅使用8位纯数字PIN验证方式,我们可以在很短的时间内暴力穷举每一种情况,得到PIN后即可以反向计算出网络密码。

实际操作时,我们需要查看附近哪些网络开启了WPS功能:

1
wash --interface mon0

当然,开启WPS功能并不代表一定可以成功破解。(如果目标网络开启了PBC就无法使用PIN破解)

和破解WEP网络一样,我们也需要使用fake authentication attack假装和路由器进行通信:

1
aireplay-ng --fakeauth 30 -a 00:10:18:90:2D:EE -h 48:5D:60:2A:45:25 mon0

同时,使用reaver对目标网络尝试所有PIN进行暴力破解:

1
2
#使用reaver指令,给定目标网络bssid以及channel,-vvv表示让程序显示更多的信息(如果失败了我们能看到为什么失败),--no-associate告诉reaver不需要和目标网络进行假装通信(因为我们上一步手动在做了)
reaver --bssid 00:10:18:90:2D:EE --channel 1 --interface mon0 -vvv --no-associate

如果运气好的话,我们可以试出WPS的PIN以及反向计算出网络密码。

Wordlist Attack

如果运气不好的话,目标网络没有开启WPS功能,或者开启WPS的同时开启了PBC,那么上述方法就会失效,只能硬着头皮暴力尝试可能的密码组合了。

在WPA/WPA2网络和Client通信时,只有一种数据包对我们有用,那就是Handshake数据包,该数据包会在Client连接到网络时发送。为了能让一个设备连接到网络,我们不能真就傻傻等着一个知道密码的设备连入网络。之前讲过的Deauthentication Attack就派上用场了(机智啊!)。

先对连接到网络的某个设备发起Deauthentication Attack,攻击只需要进行非常短的时间,甚至让用户都感觉不到,目标设备就会自动重新连入到网络,Handshake数据包就到手了。

如果攻击成功,我们会在右上角看到网卡收到了一个Handshake数据包。Handshake数据包其实并不包含可以反向计算网络密码的信息,但是可以通过Handshake数据包验证某串字符是否是该网络的密码。这时,我们需要准备一个很长的Wordlist,也就是需要尝试的不同密码组合。可以使用crunch工具自己生成Wordlist,或者从网上寻找别人常用的Wordlist。

有了Wordlist和包含Handshake数据包,暴力破解就可以开始了:

1
2
# 使用aircrack-ng指令,给定包含Handshake数据包的cap文件,-w后跟Wordlist文件名
aircrack-ng wpa_hanshake-01.cap -w test.txt

破解的速度和准备的Wordlist大小以及计算机的性能有关,甚至还有专门的网站帮你计算,你只需要上传Handshake,他们会用他们巨大的Wordlist以及超强的计算机性能来暴力尝试(需不需要付费就不知道了)。

如果运气好的话,你会在Wordlist中找到一个匹配的密码。(这里作者手动把网络密码加到了Wordlist里,实际可能的密码组合太多太多了)

总结

通过以上实验,知道了常见的破解方式,我们便知道如何保证Wi-Fi密码的安全:

  • 不要使用WEP!不要使用WEP!不要使用WEP!
  • 不要开启WPS验证!或者开启WPS的同时开启PBC。
  • WI-FI密码设置要尽可能复杂,大小写数字符号都要带上。密码越复杂所需要的Wordlist也就越大,破解时间就越长。

Post-Connection Attacks

之后的实验需要额外准备一台Win10的虚拟机当被攻击对象(受害者),下载地址在这里

Information Gathering

当我们的设备成功连接到目标网络时,我们便可以做更多为所欲为的事情了。

使用netdiscover可以发现连接到同一网络下的所有设备信息。注意,这一步仍然需要外接无线网卡,同时,要断开虚拟机的有线网络连接。

1
2
# 使用netdiscover指令,-r后跟搜索的IP范围,首先要使用ifconfig查看自己网卡的ip,修改最后一位从1到254,或者直接用/24表示搜索.1到.254的所有设备
netdiscover -r 192.168.1.1/24

现在我们能看到该网络下的所有设备信息了:

或者使用nmap工具,nmap是一个非常强大的工具,这里只使用一下它的基本功能。nmap对应的包含用户界面的程序叫zenmap,使用zenmap会更加方便。和之前一样,输入需要搜索的IP范围,zenmap会自动转换成nmap代码运行并返回结果:

在Profile一栏可以选择扫描方式,不同的扫描方式扫描速度不同,并且返回的信息详细程度也不同。这里举几个例子:ping scan扫描速度很快,能返回每个IP下设备的大致信息,不仅能看到MAC地址,甚至还能看到生产厂家;quick scan会稍微慢一些,但是显示的信息更多,不仅能显示ping scan的结果,还能看到每个设备开放的端口信息;quick scan plus显示的信息就更多了,可以看到设备的类型,运行的操作系统,还能看到每个开放端口运行的程序版本信息。

作者这里甚至演示了仅仅通过一个苹果手机开放的ssh远程端口就直接获取手机root权限,太高级了。

Man In The Middle Attack

MITM Attack,中间人攻击,是一种常见攻击手段。正常来说,当Client需要访问网络时,Client会通过Acess Point访问网络资源。但是存在中间人时,我们告诉Client自己是路由器,并且告诉路由器自己是Client,这样Client和路由器之间的通信都会经过我们的设备,我们便可以分析Client发出的数据了。(数据中可能包括用户名和密码呦)

ARP Spoofing

ARP,Address Resolution Protocal,地址解析协议,用于将IP地址映射到MAC地址。之前我们说过,数据包中的Source和Destination使用的都是MAC地址,但有时我们只知道IP地址,并不知道其对应的MAC地址,这时就要用到ARP协议了。

可以使用指令arp -a查看本地保存的IP地址和MAC地址映射。

正常情况下,假如我们想要和IP为127.0.0.2的设备通信,但是我们并不知道它对应的MAC地址。这时我们会大喊一句“谁是127.0.0.2”,一般情况下,只有IP地址为127.0.0.2的设备会回应“我是127.0.0.2,我的MAC地址是…”,而其他设备会默认忽略这个问句。

中间人攻击之所以能够成功,主要是因为ARP协议有两个特点:

  • 即使没有发出请求,也可以接受回应。即使你没有问“谁是127.0.0.2”,我也可以主动告诉你“我是127.0.0.2,我的MAC地址是…”。
  • 接受回应不需要任何验证。如果你告诉我“我是127.0.0.2,我的MAC地址是…”,即便你的真实IP不是127.0.0.2,我也会在本地小本本上把127.0.0.2对应的MAC地址更新为你所说的内容。

实际操作时,可以使用arpspoof工具:

1
2
3
4
5
6
7
#假设路由器地址为10.0.2.1,受害者Client地址为10.0.2.7
#arpspoof -i [interface] -t [clientIP] [gatewayIP]
#告诉Client我是路由器
arpspoof -i etho -t 10.0.2.7 10.0.2.1
#arpspoof -i [interface] -t [gatewayIP] [clientIP]
#告诉路由器我是Client
arpspoof -i etho -t 10.0.2.1 10.0.2.7

可以看到,这台Win10的机器更改了10.0.2.1的MAC地址,之后这台机器如果需要借助路由器访问网络资源,都是把请求发送到我们的设备上。

除此之外,还需要让Linux的机器在接受到请求时能够将请求继续传递给路由器:

1
echo 1 > /proc/sys/net/ipv4/ip_forward

现在,Win10的机器仍然能够访问网络资源,但是所有的请求都会经过Linux的机器,我们就可以好好分析一下所获得的数据了。(下一节使用新的arp spoof工具)

Bettercap工具

Bettercap是一款强大的工具,除了可以ARP Spoofing以外,还可以Sniff Data,Bybass https等等。要使用Bettercap,首先要给定网络接口:

1
bettercap -iface eth0

接着终端会进入到一个新的程序,可以输入help查看命令列表,或者用help 模块名来查看具体某个模块功能。

1
2
#net.probe 可以发现同一网络下的其他设备
net.probe on

在打开net.probe的同时,net.recon会自动打开。(net.probe会向所有可能的IP地址发送请求,同时net.recon负责接受请求)打开net.probe后,可以使用net.show发现当前网络下设备:

也许你会注意到,有一个叫arp.spoof的模块,它可以帮助我们成为中间人。首先help arp.spoof查看一下帮助文档,注意到下方有一些可调的参数,并且带有参数介绍:

为了设置参数,使用set 参数名 参数值即可:

1
2
3
4
5
6
#如果该值为true,会同时攻击client以及gateway;如果为false,只攻击client
set arp.spoof.fullduplex true
#设定攻击目标
set arp.spoof.targets 10.0.2.7
#打开arp.spoof
arp.spoof on

现在,目标win10机器会把所有请求都发送到我们linux机器上了,我们要做的就是分析获得的数据。分析数据有多种方式,这里就使用Bettercap下的net.sniff模块。

1
net.sniff on

然后我们切换到目标win10机器,打开网页http://www.vulnweb.com/,然后随便点几个链接,再返回linux机器看看数据:

上图为部分数据截图,可以看到linux机器已经看到win10访问了http://www.vulnweb.com/这个网站(图中红框部分),还包括该网站加载的文件(比如logo.png,style.css等等)。

注意:这里需要让目标win10机器访问http开头的网站(https开头的不行)。

在win10中访问http://testhtml5.vulnweb.com/#/popular,右上角log in,随便输入用户名和密码后,点击登录,可以发现win10设备并没有出现任何异常。返回到linux机器:

可以看到,刚刚输入的用户名和密码已经以明文的方式完全呈现出来了。

你可能也发现了,每次我们要偷窥别人的数据时候,都要输入这么多指令太麻烦了。当然,你可以把所有的指令写在一个文本文件中,然后执行文件中的所有指令即可。

1
2
3
4
5
net.probe on
set arp.spoof.fullduplex true
set arp.spoof.targets 10.0.2.7
arp.spoof on
net.sniff on

保存上述指令到spoof.cap文件并放在根目录root下,然后就可以使用Bettercap直接打开这个文件了:

1
Bettercap -iface eth0 -caplet spoof.cap

现在,一切和之前分步做的结果一摸一样了。

Http和Https

之前我们说,这种数据偷窥只针对http有效,原因是http是用明文的方式保存数据的,所有人都可以看到。但是https进行了数据加密,使得我们偷窥到的数据是一串乱码。现在大部分网站都已经升级为https了。

那如果目标设备访问的网站是https开头的呢?是不是我们就没有办法偷窥了?

倒也不是。注意,目标设备的所有请求都会应该我们的电脑,如果他想访问https的网站,我们可以修改这个请求,给他返回一个http版本的网站不就行了。

作者这里提供了一个修改过的脚本,下载地址在这里。下载并解压后,把该文件夹移动至/usr/share/bettercap/caplets/替换原先的文件夹即可。

接着,写一个spoof.cap文件:

1
2
3
4
5
6
net.probe on
set arp.spoof.fullduplex true
set arp.spoof.targets 10.0.2.7
arp.spoof on
set net.sniff.local true
net.sniff on

运行该文件:

1
Bettercap -iface eth0 -caplet spoof.cap

Bettercap其实有很多现成的caplets供我们使用,使用caplets.show查看所有caplets名称及位置:

我们需要使用的是hstshijack,只需要输入名称即可执行:

1
hstshijack/hstshijack

执行完成后,再去win10机器上访问一些https开头的网站,你会发现浏览器返回的是http的版本。这时,所有的用户名和密码都将以明文方式呈现了。

作者这里尝试了https://www.linkedin.com/,https://stackoverflow.com/等大网站都成功了。(在win10机器上访问网站前,最好先清理一下浏览器缓存,因为有时浏览器会直接从缓存中加载网页,就没法让他们访问http版本的网站了)。

当然,有些网站使用HSTS加密方式,比如https://www.facebook.com/,即便我们尝试给用户返回http版本的网页,但是浏览器依旧会打开https版本。原因是浏览器内置了一份网站名单,这些网站只会以https的方式打开。即便收到了http版本的网站,也用https打开。这是浏览器本地做出的选择,我们便无能为力了。

但是,想让目标用户上当也还是有办法的,我们可以引导用户点击域名相似的网站,比如facebook.com和facebook.corn,不得不说,这俩域名看起来还是挺像的。

在作者给的脚本中已经包含了替换域名的代码,如果目标用户在谷歌上搜索facebook,会得到以下结果:

看起来没什么不一样是吧,这里显示的域名仍然是facebook.com,但是在网页的代码中,如果你点击这个链接,其实会跳转到facebook.corn:

这个页面看起来和facebook的页面简直一模一样,但是请注意该网站的域名(红框里),这个网站其实是facebook.corn,并且是以http方式呈现的。这意味着目标用户啊访问的其实是个钓鱼网站,当用户输入用户名和密码后,你就能直接获取这些信息了。

注意:这种跳转到钓鱼网站的方式只能以搜索的方式跳转,如果用户直接在地址栏中输入facebook.com,用户不会被带到这个钓鱼网站。

DNS Spoof

DNS,Domain Name System,域名系统。当我们想访问google.com时,我们会去询问DNS,google.com对应的IP是多少,然后DNS会返回IP,接着我们才能访问谷歌的网站。

当我们成为中间人之后,我们当然可以给目标用户一个假的IP地址,引导到我们的钓鱼网站,然后在钓鱼网站里放一些奇奇怪怪的东西就很容易了。

这里拿linux本地的网站举个例子:

1
service apache2 start

linux会以本地的IP对外开放一个网站,可以访问/var/www/html/查看网页的源代码,这里作者把index.html中的代码全部删除,替换成:)。随后,访问10.0.2.15就可以看到这个笑脸了。(每个人IP可能不一样,请用ifconfig查看本地IP)

接着和之前一样:

1
Bettercap -iface eth0 -caplet spoof.cap

在Bettercap中有个dns.spoof模块,这就是我们要用的:

1
2
3
4
5
#对所有DNS请求都回复
set dns.spoof.all true
#目标域名(zsecurity.org是作者的域名)
set dns.spoof.domain zsecurity.org, *.zsecurity.org
dns.spoof on

可以看到现在win10机器上访问这个网站已经变成一个笑脸了。(当然,这招对HSTS的网站依然无效)

Inject Javascript code

作为中间人出了可以监视用户的信息以外,甚至还可以在用户访问的网站中加入恶意代码。

首先写一段非常简单的JS代码:

1
alert('javascript test');

命名为alert.js并保存在根目录root下。

打开/usr/share/bettercap/caplets/hstshijack/hstshijack.cap文件(请使用作者提供的版本),并加入红框中的代码:

(*号表示对所有域名都插入这个文件)

准备好之后,下面的步骤和往常一样:

1
Bettercap -iface eth0 -caplet spoof.cap
1
hstshijack/hstshijack

使用win10机器访问网站试一试:

可以看到网页会自动执行刚才的JS代码。(同样,对于HSTS网页无效。)

Wireshark

Wireshark是一款网络分析工具,它用来帮助网络管理员查看当前网络上发生了什么。它可以记录经过某个网络接口的所有数据包并进行分析。一个比较好的一点,Wireshark是有用户界面的。

Wireshark本质上只能监视自己设备上的数据包,但是,当我们成为中间人之后,目标用户的数据包就会经过我们的设备,这时就可以使用Wireshark进行分析了。

Detect And Prevent

上述讲了各种常见的攻击手段,那么有什么办法进行检测和防护么?

Detect

首先,对于ARP Spoofing,一个直接的办法就是保持查看本地的APR Table,如果突然发现某个IP的MAC地址发生了改变,表明可能有人对我们使用了ARP Spoofing Attack。这种方法虽然直接,但是你不可能一直盯着APR Table看哪些地址发生了改变。XArp这款软件可以帮助我们在后台盯着APR Table,如果发生改变就会通知我们。

上图中可以看出,当收到ARP攻击时,软件会提醒我们受到影响的设备有哪些。

除此之外,使用Wireshark也可以提醒我们当前网络下是否有用户正在做一下奇奇怪怪的事情。在Wireshark左上角,选择Edit->Preferences->Protocols->APR/RAPR,勾选Detect APR request storms。开启这个功能能让我们发现网络中是否有人在大批量发送ARP请求。

接着我们在linux机器中使用netdiscover试一试:

1
netdiscover -r 192.168.1.1/24

在win10机器中,可以看到Wireshark收到了一堆ARP请求:

有人正在使用广播的方式在网络中询问每一个IP,并且把结果告诉10.20.14.67,也就是linux机器的地址。如果发现大批量的ARP广播,那么网络中可能有设备准备做一些奇奇怪怪得事情了。

如果观察ARP Table可以发现,有些IP地址的类型是静态static的,有些是动态dynamic。如果类型设置为静态,即便我们电脑受到了ARP攻击,也不会去更改对应的MAC地址。但弊端是网络中每加入一台新设备,我们需要手动为其设置MAC地址。

Prevent

前面的一些方式都只能检测到一些异样的行为,并且只对ARP攻击有效,如果是别的攻击方式可能就发现不了。即便这样,我们也需要一些防御手段去阻止类似的攻击。

一种防御办法是使用https everywhere插件,这个插件支持大部分浏览器,它会强制支持https的网页都以https的方式打开,可以防止中间人把我们的请求降为http。这样可以有效保证网页数据的安全。

虽然数据安全了,但是中间人仍然能够查看到我们访问了哪些网站。第二种方式就是使用VPN。VPN可以在我们的设备和VPN服务器中建立一条加密传输线路,其他人即便获取了数据,也无法进行分析。当然你要确保使用的VPN服务商足够安全,因为他们是可以看到你的数据的。

更为安全的方式就是两种防御手段一起用,即便VPN服务商能看到你的访问记录,他们也无法获取你的用户名密码等个人信息。

写在最后

本篇文章简要讲述了常见的网络攻击方式,从连接网络前的攻击,到尝试破解WIFI密码,到最后连入网络后的中间人攻击。文中提到的方法比较简单,每一种工具都有更加复杂的使用方式。知道了这些常见的攻击方式以后,我们还是要加强保护意识,尽量防止自己的个人数据被泄漏。