17 Kasım 2016

Kali Linux - Bölüm 9: Kablosuz Ağ Yönetimi

Kali linux’un geliştiricileri kablosuz ağ sürücülerini mümkün olduğunca çok kablosuz ağ adaptör cihazını desteklemeye çalışmakta, Kali linux’un kernel’ında da paket injection için gerekli yamaları uygulamaktadır. Dolayısıyla Kali kablosuz ağ testlerinde bizi yeterince destekliyor, ancak kullanacağımız kablosuz ağ adaptörünün desteklenen chipset’lerden birisini içermesi önemli. Özellikle replay saldırıları cihazların normal davranışına uygun değil, bu yüzden bu amaçla geliştirilmiş olan sürücülerin desteklediği bir chipset kullanmak zorundayız. Kali’nin hangi kablosuz ağ adaptörleri ile uyumlu olduğuna dair internette ürün listeleri bulabilirsiniz.

Muhtemelen bildiğiniz gibi sanal makineler üzerlerinde çalıştıkları host bilgisayarın kablosuz ağ adaptörünü doğrudan kullanamazlar. Host bilgisayar kablosuz bir ağa bağlı olsa da sanal makine internet bağlantısını kablolu bir adaptörden sağlıyormuş gibi davranır. Bu durum aslında anlaşılabilir, zira host sunucusunun hangi adaptörü kullandığı konusu sanallaştırma teknolojisinin kontrol ettiği veya etmek istediği sınırların dışında kalmaktadır. Sanallaştırma platformu için host bilgisayarın sadece paketlerin route etmesi yeterlidir. Bununla birlikte kablosuz ağ testleri için Kali’nin gerçek bir kablosuz ağ adaptörünü doğrudan kullanması ihtiyacı vardır. Kali ile kablosuz ağ testi yapmanız için şu 3 şarttan birisini sağlamanız gerekir:
  • Eğer Kali’yi bir sanal makine olarak kullanıyorsanız kablosuz ağ adaptörü olarak bir USB kablosuz ağ adaptörü kullanmanız gerekir. Sanallaştırma platformları USB cihazları sanal makineye bağlayabildikleri için sanal makine bu arayüzü doğrudan kullanabilir.
  • Bariz olan seçenek Kali’yi kalıcı olarak bir bilgisayarın sabit diskine kurmaktır. O zaman zaten bilgisayarın tüm donanımlarına doğrudan erişim mümkün olacaktır.
  • Son olarak Kali’yi canlı (live) olarak bir USB bellekten veya (halen elinizde varsa) bir DVD sürücüsünden başlatabilirsiniz. Bu durum sabit diskten işletim sistemini başlatmakla aynı şekilde bilgisayarın tüm donanımlarına doğrudan erişim imkanı verecektir. Hatta USB bellek kullanmanız durumunda bu belleği kalıcı (persistent) hale de getirebilir ve kaydettiğiniz dosyalarınıza bilgisayarınız kapandıktan sonra da ulaşabilirsiniz.
Kablosuz ağlar konusunda amacımız Linux hakkında bilgi vermek olduğu için hedefimiz bir kablosuz ağ testinin nasıl yapıldığını açıklamak değil. Ancak Kali’den bir kablosuz ağ arayüzüne doğrudan erişebilmek için biz de yukarıdaki 3 yoldan birisini kullanacağız. Elimin altında bir USB kablosuz ağ adaptörü bulunmadığı için ben son yolu, yani bilgisayarımız bir USB bellekten başlatarak Kali’yi canlı (live) olarak kullanma yolunu tercih edeceğim.

İşletim sistemi kurulumu konusu hakkında ana hatları ile daha önce bilgi vermiştik ve bu konuda detaylara girmek istemediğimizi de belirtmiştik. Ancak USB bellek ile Kali’yi başlatabilmek için önce Kali’yi bir USB belleğe kurmam lazım, bu yüzden burada biraz detaya gireceğim. Aslında benim fazla birşey yapmama gerek yok, çünkü Kali’nin web sitesinden indireceğiniz ISO imajı zaten bootable bir imaj. Ben sadece bu imajı USB belleğin “0” sektöründen itibaren bu belleğe yazacağım, hepsi bu. Daha sonra kullandığım bilgisayarın BIOS ayarlarından USB harici disk cihazını bootable disk arama sıralamasında ilk sıraya getireceğim.

Bootable imaj demek şu anlama geliyor; Linux startup sürecinde zaten bahsetmiştik, BIOS kontrollerini tamamladıktan hemen sonra boot edebileceği diskler üzerinde bir MBR (Master Boot Record) arıyor ve bulduğunda ise işletim sisteminin yüklenmesi sürecini MBR bölümünde bulunan Boot Loader’a devrediyor. MBR ise boot loader ve üzerinde bulunduğu diskin partition tablosunu içeren ve diskin “0” sektöründen başlayan bir veri alanı. Partition tablosundaki kayıtlardan bir tanesinin de sistem partition’ı (yani içinde bir kernel, bir diğer deyişle bir işletim sistemi barındıran bir partition) olduğunu göstermesi halinde işletim sistemi yükleniyor. Bu yüzden bizim ISO imajını doğrudan ve “0” sektöründen itibaren USB belleğe yazmamız, zaten başında bir MBR barındıran ISO imajı sayesinde USB belleğin bootable bir disk olması için yeterli. Bu söylediklerimizi tam olarak ispatlamak için ISO imajımızın ilk sektörüne R-Studio ile kısaca göz atalım.


R-Studio ile Kali imajını açtığımızda R-Studio bu imajın içinde hazır olan 2 partition’ı tanıdı.


R-Studio’da imaj dosyasının üzerinde sağ tıklayarak View / Edit seçeneği seçildiğinde ilk sektör MBR olarak yorumlanıyor (parse ediliyor) ve burada bootable partition’ın da ilk partition olduğunu görebiliyoruz.

Bu imajı USB belleğe Linux işletim sistemini kullanarak da Windows işletim sistemini kullanarak da, tabiri yerindeyse kazıyabiliriz, yani bir dosya sistemine kopyalamaktan ziyade cihazın ilk sektöründen itibaren kaba bir biçimde yazabiliriz. Burada her iki yöntemi de göstermek istiyorum. Aslında bunu Windows’dan yapmak hem daha kolay hem de daha risksiz, ancak bu vesileyle Linux’un sistem yöneticileri açısından çok önemli olan araçlarından “dd” komutuna da bir örnek vermek istiyorum. Bununla birlikte Linux’da “dd” komutu ile bir cihaza veri yazarken çok dikkatli olmalıyız, zira kullandığımız bir sabit diske yazarsak bu diski toplarlamamız imkansıza yakın bir durumla sonuçlanır, çünkü partition tablosu da elden gideceğinden disk üzerindeki partition’ların yerlerini bulmamız zorlaşır (forensic yöntemleri ile imkansız değil ama başımızı neden belaya sokalım). Tabi muhtemelen ilk partition’ın da önemli bilgiler içerme ihtimali yüksek olan ilk bölümünü de kaybederiz. Bu nedenle “dd” komutunu kullanırken mümkün olan tüm kontrolleri kullanmalı ve ne yaptığımızdan emin olmalıyız.

İlk olarak bu işlemi sanal makine olarak çalışan Kali Linux ile yapacağım. İlk adım (eğer elinizde yoksa) tabi ki Kali ISO imajını resmi web sitesinden indirmek olacak.


İmajımızı yazacağımız USB belleği sisteme bağlamadan önce hata yapmamak ve yanlışlıkla imajı bilgisayarımızın diskine yazmamak için bilgisayarımızın sabit disk dosya adını öğrenelim. Bunun için (USB bellek sisteme bağlanmamışken) “fdisk –l” komutunu çalıştıralım. (“fdisk” komutu partition yönetimi için kullanılan bir komuttur, “-l” opsiyonu ile sadece bilgisayara bağlı olan cihazları ve onların partition’larını listelemek için kullanıyoruz)


Yukarıda gördüğünüz device isimleri “/dev/sda” cihazının içinde bulunan partition’lara verilen dosya isimleri. Hatırlayın, Unix’de herşey bir dosyadır. Cihazlar da birer dosya adı ile temsil edilirler.

Şimdi aynı işlemi üzerine imajı yazacağımız USB belleği sisteme bağladıktan sonra yapalım.


Bu defa “/dev/sdb” isimli yeni bir cihaz adı daha görüyoruz. Ezeceğimiz cihazın doğru olduğundan emin olmak için kontrol edebileceğimiz bir diğer nokta da cihazın büyüklüğüdür. Benim örneğimde 3.8 GB olarak görünen USB bellek benim cihaza bağladığım bellek. Sabit disk ise 20 GB büyüklüğe sahipti. Bu cihazın üzerinde tanımlı 4 adet partition görülüyor, çünkü daha önceden yapılandırılmış ve kullanmakta olduğum bir bellek bu. Ancak imajı üzerine yazdığımda bu partition yapısını kaybetmiş olacağım.

Eskiden bu yana sistem yöneticilerinin yeni bir cihaz sisteme bağlandığında sistemin bu cihaza atadığı dosya adını öğrenmenin önde gelen metodu “dmesg” komutu idi. “dmesg” komutu “kernel”ın yazdığı mesajları görüntüleyen bir komuttur. Burada da bu yöntemi kullanabiliriz. Ancak çıktılar göreceğiniz gibi çok net olmayabiliyor, dolayısıyla “fdisk –l” komutu varken bu işleme çok da gerek yok.


Şimdi sıra “dd” komutunu dikkatli bir biçimde kullanmaya ve imajı USB belleğimize yazmaya geldi. “dd” komutu normal bir kullanıcının çok işine yaramayabilir, ancak sistem yöneticileri için sisteme bağlı disklerin erişilebili olup olmadığı veya file system sınırları dışındaki verileri okuma (MBR kaydı gibi) gibi işlemler için vazgeçilmez bir komuttur. Her gün kullanılmayabilir ama kullanıldığı zaman çok kıymetlidir.


“dd if=kali-linux-2016.1-amd64.iso of=/dev/sdb bs=512k” komutu ile dd’nin okuyacağı dosyanın, yani input file’ın “kali-linux-2016.1-amd64.iso” olduğunu, yazacağı dosyanın, yani output file’ın ise “/dev/sdb” dosyası olduğunu belirtiyoruz. “bs” opsiyonu yazma etkinliğini artırmak için blok boyutunun 512 kb olduğunu belirtmek için kullanılıyor. Bu komut çalıştırıldıktan sonra gördüğünüz okuma ve yazma istatistikleri normalde tüm kopyalama işlemi bitinceye kadar terminale yazılmaz. Ancak “dd” komutu USR1 (user defined signal 1) interrupt’larını trap ederek (yani ele alarak) bu sinyali aldığında okuma ve yazma istatistiklerini terminale yazıyor. Bu özelliği kullanmak için önce “dd” komutumuzun proses id’sini öğrenmeli, daha sonra da bu prosese her 10 sn.’de bir (veya hangi aralıkta istiyorsanız) bu sinyali göndermeliyiz. (dd komutunun ilerleyişini izlemek için “pv” pipe viewer uygulaması veya “dd” komutunun yeni versiyonlarında bulunan “status=progress” parametresi de kullanılabilir).


“dd” komutumuzun proses id’sinin 2380 olduğunu öğreniyoruz.


“watch” komutu ile her 10 saniyede bir “kill” komutunu “-USR1” opsiyonu ve “2380” parametresi ile çalıştırıyoruz.



Tüm kopyalama işlemi bittiğinde de kopyalama istatistiği ekrana yazılıyor.


USB disk’imizin partition tablosunu tekrar listelediğimizde 2 adet partition oluştuğunu görebiliyoruz.
Imajı USB belleğe kopyalamak Windows’da çok daha az riskli çünkü bu işlem için kullanacağımız “Win32 Disk Imager” uygulaması bilgisayarın sabit diskinin seçilmesine izin vermiyor. Aynı işlemleri bu uygulama ile aşağıdaki gibi yapabilirdik.



USB belleğimizi bootable bir Kali diskine dönüştürdükten sonra bilgisayarımızın BIOS setup menüsünden USB diskin boot sırasını en başa getirmemiz gerekiyor. Bu işlem de tamamlandıktan sonra bilgisayarımızı bu cihazdan başlatabiliriz.

USB disk ile başlattığım bilgisayarda ekran görüntülerini Kali’nin imkanları ile alacağım.


Network manager servisinden daha önce bahsetmiştik. Bu servis tarafından yönetilen arayüzler arasında kablosuz ağ arayüzü de var.


“nmcli d” komutu Network Manager tarafından yönetilen arayüzleri listeliyor. Ne yazık ki Network Manager servisi wlan0 arayüzünü yönetirken bu arayüze yönelik kablosuz ağ bağlantı komutlarını çalıştırdığımızda başarılı olamıyoruz, yani bu komutlarla Network Manager altyapısı uyumsuz. Bu nedenle mümkünse öncelikle Network Manager servisi ile gelen araçların kullanılması gerekiyor.


Network Manager ile gelen uygulamalar “nm” ile başladığından “nm” yazdıktan sonra iki defa “tab” tuşuna basarak Path’imde tanımlı ve “nm” ile başlayan komutları listeliyorum. Kali masaüstünde sağ üstten de tıklayarak ulaşabileceğim “nm-connection-editor” uygulamasını komut satırından başlatabilirim. Bu arayüzü kullanarak sorunsuz biçimde erişilebilir erişim noktalarını listeleyip bunlar ile bağlantı kurabilirim. Ancak yine de kablosuz ağ bağlantısını komut satırından kurmak zorunda kalırsak aşağıdaki yolu izleyebiliriz. Eğer sistemle bir masaüstü bağlantı kuramıyorsak bu yol işimize yarayabilir.
Öncelikle “network-manager” servisini sonlandırmamız gerekiyor.



“ifconfig” komutu ile kontrol ettiğimizde loopback arayüzü dışında herhangi bir ağ arayüzünün “up” olmadığını görüyoruz. “iwconfig” komutu ise “up” olmasa bile kablosuz ağ desteği olan arayüzleri listeliyor. Bu listede kablosuz ağ arayüzümüzün adının “wlan0” olduğunu görebiliyoruz.


Öncelikle “ifconfig wlan0 up” komutu ile “wlan0” arayüzümüzü aktif hale getiriyoruz.


Bir GUI ekranı kullanamadığımız için öncelikle “iwlist wlan0 scan“ komutu ile erişilebilir erişim noktalarını listeliyoruz.


Bu komutun çıktısı içinde “BTRISK” SSID’sine sahip olan erişim noktasının özelliklerini incelediğimizde bu AP’in WPA2 – PSK ile kullanıcılarını tanıladığını görebiliriz. Bu protokol için kullanmamız gereken araç “wpa_supplicant” uygulaması. Ancak bu uygulamanın kullanabilmesi için öncelikle SSID ve passphrase bilgilerini bir konfigürasyon dosyasına yazacağız.


Şimdi “wpa_supplicant” uygulaması ile bu ağa dahil olalım.


“wpa_supplicant” uygulamasını çalıştırırken kullandığımız “-B” opsiyonu uygulamanın background’da çalışmasını sağlıyor. Ağ bağlantımız sürdüğü müddetçe bu uygulamanın çalışması gerekiyor, bu nedenle uygulamanın ön planda (foreground) çalışması pek pratik değil. “-D wext” opsiyonu kullanılacak sürücüyü belirtiyor, “wext” sürücüsünün jenerik wireless extension olduğu man sayfasında belirtiliyor. “-i” ve “-c” opsiyonlarını açıklamaya gerek yok sanırım.
“wpa_supplicant” uygulaması çalıştıktan sonra bir süre bekleyerek “iw wlan0 link” komutu ile ağa dahil olup olamadığımızı kontrol edebiliriz. Kablosuz ağa dahil olduktan sonra arayüzümüzün IP adresi alabilmesi ve route tanımlarının gerçekleşebilmesi için “dhclient wlan0” komutunu çalıştırmamız gerek. Bu komutun çıktısı olarak konuyla çok da ilgili görünmeyen hata mesajları üretiliyor, ancak IP adresi alabiliyoruz.

<<Önceki Bölüm                                                                                               Sonraki Bölüm>>