Peki biz bu konuda nelere değineceğiz? Şöyle kabaca bir haritasını önceden çıkaralım:
-NMAP çalışma mantığı
-El yapımı NMAP
-NMAPin çeşitli parametreleri ve özellikleri
-NMAP ile gizlenerek bilgi toplama
İsteyen arkadaşlar birazdan anlatacağım ilk iki kısmı(Mantık ve El yapımı NMAP) atlayabilir. Ya ben mantık kısmını atlıyayım el yapımına da bakayım derseniz olmaz çünkü mantığını bilmeden yazılan kodları zaten anlamazsınız. Programlama bilginiz varsa kodları okuyabilirsiniz lakin olayların neden böyle ilerlediğini, ne olursa ne olacağını anlayamazsınız. İsteyenler direkt parametreler kısmından başlayabilir. Şimdi daha fazla vakit kaybetmeden işin elden geldikçe mantık kavramına değinelim.
1)NMAPin Çalışma Mantığı:
NMAPin çalışma mantığı kabaca TCP, UDP, ARP, ICMPye dayanır. Genel olarak NMAPin kullanış şeklinde aslında TCP bazlıdır. Eğer aşağıda vereceğim parametrelerden faydalanıpta UDP taramasıda yaparsınız o zaman işin için UDP ve ICMP girer. Dilersiniz bu protokollere ve bunları NMAPin nasıl kullandığına değinelim.
TCP:
Transmission Control Protocol olarak geçer. İki veya daha fazla cihazın haberleşmesi için kullanılan en yaygın protokollerden biridir. Aslında TCP/IP olarak entegre şekilde kullanılırlar. İki bilgisayar arasındaki iletişimin başlaması için gerekli protokollerden biridir. İki bilgisayar iletişime başlamadan önce nasıl insanlar tanışıyor selamlaşıyorsa bilgisayarlarda tanışıp selamlaşırlar. Buna Three way handshake=Üçlü el sıkışma denir. Bunu kabaca şu şekilde düşünebilirsiniz:
-Merhaba ben Taipan
+Merhaba ben de hedef
-Tanıştığıma memnun oldum
Tabi bu tam olarak olayımızı karşılamıyor lakin ben hiç bilgisi olmayan arkadaşların anlaması için bu olayı en basit şekle indirgemeye çalıştım. Peki bunu bilgisayarlar nasıl yaparlar. İstemci hedef makineye içinde SYN bayrağı taşıyan bir paket yollar. Karşı tarafta port açıksa SYNACK bağrağı içeren bir paket yollar. İstemci de bunun kendisine ulaştığına dair ACK bayrağı içeren bir cevap paketi yollar ve böylelikle iletişim başlamış olur. Bu paketlerin tanınması, aynı anda birden fazla paket gelirse öncelik tanınması için içlerinde bulunan seq ve ack değerleri vardır. İstemcinin yolladığı SYN bayraklı pakette bir seq değeri bulunur ack bölümü ise boştur. Kaynak gelen paketteki sec değerini kendi ack değerine bir arttırarak ekler ve kendine özgü bir sec değeri ekleyerek SYNACK bayraklı paketi yollar. İstemci ise gelen bu paketin sec değerini kendi ack değerine +1 leyerek ekler ve yine kendine özgü bir sec değeri oluşturup (bu değer 0 dır)ACK bayraklı paketi yollar.
Anlatımın ikinci kısmı kafanızı karıştırmış olabilir. Bunu şu şekilde tablolaştırıp birde görselle özetliyeyim:
....................SEC....................ACK
SYN:..............x........................-(0)
.SYNACK:.......y.......................x+1
.ACK:..............z(0)..................y+1
Peki bu bizim ne gibi işimize yarıyacak? NMAPin TCP portları açık mı kapalı mı diye tarama mantığı işte buna dayanır. Peki bunu nasıl belirler? Hedefe paketler yollıyarak yapar. Bunu sizde Piton kütüphanesi olan scapy ile kolaylıkla yapabilirsiniz. Ben size olasılıkları yazayım:
-->Karşıya port açıkken sin dışı bir şey yollanırsa; rst döner.
-->Karşıya port açıkken fin yollanırsa; rst döner.
-->Karşıya port açıkken rst yollanırsa; bir şey göndermez
-->Karşıya port kapalıyken sin yollanırsa; karşı taraf reset döner.
-->Karşıya port kapalıyken ack yollanırsa; rst döner.
-->Karşıya port kapalıyken fin yollarsak, finack döner.
-->Kapalı porta rst yollarsak; cevap yollamaz
-->Rst haricinde bir flag yollarda drop alırsak Firewall varlığını anlarız. Port açıkken ve servis varken syn yollayıp cevap olarak ICMP alırsak firewall varlığı gözükür.
Arkadaşlar eğer karşıya yolladığınız bir pakete hedef olağan dışı bir cevap dönüyorsa yani normalde dönmemesi gereken(açıkta olsa kapalı da olsa) bir cevap dönüyorsa orada Firewall vardır. Firewall tespitini de yukarıda ki gibi yapabiliriz. Bunu da ayak üstü göstermiş olalım. NMAPte işte dönen bu cevaplara göre portun açık, kapalı veya filtreli olduğunu size söyler. Mantığı budur.
ARP:
ARP OSInın ikinci katmanında(kimileri 3 de diyor karışık burası biraz lakin bence de 2. katmanda) bulunan bir protokoldür. Adres çözümleme protokolü olarak geçer. TCPdeki selamlaşma faslında yeri büyüktür. ARP IP adresi bilinen bir cihazın MAC adresini öğrenmek için kullanılır. Günlük hayattan örnek verirsek: Size üniversitenin bir dersliğin de ismi Taipan olan birinin olduğunu söylüyorlar lakin sınıfta tam konum olarak nerede olduğunu belirtmiyorlar. Siz bu durumda ne yaparsınız? Tabiki sınıfa gidip Taipan diye bağırırsınız. Bu isme sahip olan kullanıcıda size Naptın emmi diye bağırır, yerini öğrenmiş olursunuz. Tabi burda sizinde görmüş olabileceğiniz üzere bir kontrol mekanizması yok. Tabi bu da çeşitli zaafiyetlere yol açıyor. Mesela başka birisi de gerçek Taipan yerine Naptın emmi diye bağırabilir ve siz Taipanı o sanabilirsiniz. Bu başlı başına başka bir konu o yüzden bunu da bu kadar örnekle kesiyoruz.
ICMP:
ICMP iletişim kontrol protokolüdür. Size oluşan yada oluşabilecek çeşitli hataları, iyileştirilebilecek durumları bildirir. Bu konuya farklı bir makalede daha ayrıntılı bir şekilde değinicem. O yüzden şimdilik atlıyorum.
UDP:
UDP, TCPye göre çok daha hızlı olan bir protokoldür. Yaklaşık olarak 3 kat kadar bir hız farkı var diye biliyorum. UDPde kontrol kısmı OSInın son katmanı olan uygulama katmanın da olur. 3lü el sıkışma yoktur. Saldım çayıra Mevlam kayıra şeklinde paketlerinizi yollarsınız. Genelde canlı yayın, görüntü iletimi gibi veri aktarımının hızlı ve paket kaybının önemli olmadığı(çok az miktarda) zamanlarda kullanılır. TCPye göre daha güvensizdir. Üzerinde de çeşitli servisler çalışır. DNS bunlardan en çok bilinenidir. Peki NMAP UDP taramasında neyi kullanır derseniz:
Port açıkken veri gönderirsek illa veri alacağız diye bir durum söz konusu değil. Eğer servisin cevap verme ihtiyacı varsa cevap verir eğer cevap verme ihtiyacı yoksa cevap vermez.
Port kapalıyken veri gönderirsek; ICMP ile port kapalı mesajı yollanır.(port unreachable)
UDP ye veri yolladığımızda cevap alamıyorsak ya firewall vardır yada servisinin işine yaramıyordur. ICMP cevabı alıyorsak Firewall yok port kapalı.
NMAPte bu durumlardan faydalanarak UDP taraması yapar. Genel olarak NMAPin çalışma mantığı bu anlattıklarımın üzerine kuruludur. Şimdi geçelim biz bunları bilerek kendi NMAPimizi nasıl yazarız?
2)El Yapımı NMAP:
Kendi NMAPimizi yapmamız için biraz piton bilgisi biraz araştırma ve yukarıda yazdıklarım yeterli. Programın genel mantığı pitonun bir kütüphanesi olan scapy ile hedefe paketler yollayıp gelen yanıtlara göre portun açık yada kapalı olduğunu belirlemek. Biz bu programı bir arkadaşımla beraber internetten de faydalanarak yazmıştık. Fl= olarak eklediğimiz kısımdaki RST kodunu netten bulduk yani sayı değerini. Yoksa tek tek deneme yanılma yapmamız lazımdı. Bu değer bir çeşit durum bilgisi içeriği, sabit bir değer. İnternette arayarak TCP taramak için hazır kodlar bulanilirsiniz biz kendimiz TCP ve ek olarak UDP içinde yazdık. Kodları inceleyebilir editleyebilir kendinize göre kullanabilirsiniz. Bizim yazdığımız statik bir yapıda siz bunu dinamikleştirebilirsiniz. Dinamikleştiren olursa bana da yollarsa sevinirim bizim zamanımız kısıtlıydı ondan en kısa yolu seçtik.
Biraz Scapyden bahsedeyim. Scapy veri paketleri oluşturup bunları yollamanızı sağlayan bir piton kütüphanesidir. Yollamak istediğiniz paket türünde nelerin gerektiğini ls() komutu ile görebilirsiniz. Örnek olsun diye bir tane ekran görüntüsüne koydum. Programda sürekli ıp değeri girmemek için başta bir değişken atadık destination IP diye onuda belirteyim. Paketinizi oluşturduktan sonra send(paket ismi) şeklinde paketinizi yollıyabilirsiniz. Eğer yollıyacağınız paket birden fazla katman içeriyorsa sendp() kullanmanız lazım. Scapye de başka bir konuda değinecem şimdi ona girdik mi konu iyice uzar ondan şimdilik atlıyorum. Gelelim kodlara:
Kod:
https://paste.ubuntu.com/25290363/
Scapy dışında geri kalanı en temel linux bilgileri aslında. Scapyde çok basit bir şey eğer konumu beklemezseniz kendinizde googlelayarak çok rahat bir şekilde öğrenebilirsiniz.
DİPÇE: Arkadaşlar paylaştığım kodu biz kalide yazmıştık kalide çalışıyor lakin diğer işletim sistemlerinde bir sıkıntı var scapynin yüklü olmamasından kaynaklı olduğunu düşünüyorum ama nedeni tam ne bilmiyorum şahsen bende. Birde kodu kalide çalıştıran arkadaşlar UDP taraması da yaptığından işlem çok uzun sürüyor haberiniz olsun isterseniz UDP kısmını editleyebilir sadce TCP için kullanabilirsiniz ki kodu paylaşma amacım kullanmanız değil nasıl yazılabileceğine dair fikir edinmeniz zaten.
Şimdi gelelim hazırcı arkadaşlarımızın beklediği parametreler bölümüne...
3)NMAPın Çeşitli Parametreleri ve Özellikleri:
Şimdi eğri oturup doğru konuşalım çoğu kişi internetten öğrendiği kadarıyla NMAPin kullanımını
Kod:
nmap -sS -sV HEDEF
şeklinde öğrendi ve böyle kullandı. Fakat bu NMAPin hakkını yemek, çok kısıtlı bir şekilde kullanmak demek oluyor. En azından şahsen ben öyle düşünüyorum. Bakın yukarıdaki görselde verdiğim NMAPin parametrelerinin sadece bir kısmı hatta yarısı bile değil. Ben size elden geldiğince bildiğim parametreleri açıklıyayım.
Öncelikle NMAPte tek bir hedef taramak zorunda değilsiniz mesela 192.168.15.30-65 şeklinde bir aralık belirtebilirsiniz yada 192.168.10.1/24 şeklinde de aralık belirtebilirsiniz. Mesela bir CTFtesinizdir belli bir IP aralığındaki makinelere saldırmanız söylenir. Makinelerin hangisi ayakta hangisi ölü anlamak için tek tek değil bu şekilde IP aralığı belirterek de tarama yapabilirsiniz. Bir diğer pek bilinmeyen konu ise size yukarıda verdiğim koddaki gibi tarama yaparsanız NMAP default olarak en çok kullanılan ilk 1024 portu tarar. Lakin 65535 tane port bulunmakta. Peki bu aralığı nasıl belirteceğiz yada sadece istediğimiz portları nasıl taratabiliriz? Hadi parametre parametre inceleyelim.
-p: Hangi portların taranacağı hk.daki bilgiyi tutar. -p 1-65535 yaparsanız 1 ile 65535 arasındaki portları tarar. Eğer -p 1,65535 yaparsanız sadece 1 ve 65535. portu tarar. Virgül ile hangi portların taranmasını istediğinizi tek tek belirtebilirsiniz.
-sT: Bu parametre hedef cihazda Syn Proxy varsa ona karşı önlem almamızı sağlar.
-T(0-5): NMAPte 6 çeşit tarama şekli vardır. NMAP default olarak T3 tarama şeklini kullanır -T(0-5) değer vererek tarama şeklinizi değiştirebilirsiniz.
-T0: Her bir paketi 5 dk'da gönderirir. Seri analiz yapar.(paranoyak)
-T1:Her bir paketi 15'sn de yollar. Seri tarama yapar.
-T2:Her bir paketi 0.4sn de yollar. Seri tarama yapar.
-T3:Default olan parametredir. Paralel tarama yapar.
-T4:1.25 snden fazla gecikme beklemez. Paralel tarama yapar. Hızlı sonuç almak için
idealdir
-T5:insect modda tarar. Hiçbir hostu 15dk'dan fazla taramaz.15 dk tamamlanınca kaldığı
yerde bitirir. 0.3 sn içinde paket cevabı bekler. Paralel tarama yapar.
-o: Ekrana basılan çıktının başka bir formatta bilgisayara kaydedilmesini sağlar.
-oS: script kiddie formatı. E yerine 3 a yerine @ falan.
-oX:xml formatında verir.
-oG:çıktısı grep'e uygundur. Grep komutunun özelliği verdiğiniz dosyanın içinde satır satır
arama yapar her satır içinde eşleştiği değere göre çıktı üretir. Bu da tüm sonuçları tek
satır halinde oluşturur. Grep komutuyla daha rahat çalışabilmek için.
-oN: Normal şekilde basım yapar.
-oA: Bunların hepsini verir.
-v: Verbose. Detaylı çıktı verir.
--reason: Bulduğu sonuçları neden o şekilde bulduğunu açıklar. Açıksa neden açık, kapalıysa neden kapalı şeklinde.
-sU: UDP taraması yapmak için kullanılır. NMAP default olarak UDP taraması yapmaz TCP taraması yapar.
-PN: Normalde NMAP eğer bir IP aralığı verdiyseniz yada tek bir makineyse ayakta olan makineleri tarar çıktıyı verir, ayakta olmayan makinelerin çıktısını basmaz. Eğer bu parametreyi verirseniz makineler ayakta mı değil mi diye bakmaz.
-sP: Bütün verilen hostlara ping atıp hostlar ayakta mı diye kontrol eder. Bunu zaten defaultta yapıyor.
--traceroute: Belirtilen hosta giderken geçtiği routerları ifşalar. Yollarını belirtir.
-sA: Ack scan yapar host ayakta mı değil mi diye birde acktan kontrol eder.
-sF: Fin scan yapar.
-sN: Bayrakların hiçbiri kullanılmaz. Firewall varsa eğer daha önceden yapamadığımız sorguların sonradan yapılabilmesini sağlar.
-sX: Fin, push ve urg bayrakları aktif olarak tarama yapar.
-sM: fin ile ack bayrağı set edilir rst dönerse port kapalı bir şey dönmezse port açık. BSD'lerde işe yarar.
--scanflags: Farklı bayraklarla tarama yapılmak isteniyorsa kullanılır --scanflags bayrak(tüm bayraklar için ALL kullanılır.) Örn: --scanflags FIN
--badsum: Checksum'ı yanlış doldurur. Biz yanlış doldurunca karşı sistem paketi drop eder herhangi bir cevap dönmez. Firewall(IPS/IDS) olsaydı reset dönerdi. Anlaşıldığı üzere firewall tespiti için kullanılır.
-sS: Sin taraması yapar.
-sV: Versiyon taraması yapar. Eğer versiyon taraması yapmadan direkt sin scan yaparsanız nmap size defaultta çalışan servisleri gösterir. Yani mesela SSH defaullta 22. portta çalışır lakin adam 2022. portuna taşımıştır. Versiyon taraması yapmazsanız size SSHın 22 de çalıştığını, yaparsanız 2022de çalıştığını gösterir.
-O1: Birinci jenerasyondan os taraması yapar.
-O2: İkinci jenerasyondan os taraması yapar.Önerim bu benimde şahsen. Önceden defaultu O1 di lakin eskidiği için değiştirildi. Tam sonuç alabilmeniz için NMAPin hedefte bir açık bir kapalı port bulabilmesi gereklidir. Her iki jenerasyon içinde. (Default olan)
-sC: Açık olan portta kullanılan servisin NMAP veritabanında kayıtlı olan bir açığı veya scripti varsa onu listeler. Kendi sömürüp alabildiği bilgileri size basar. NMAPin scriptleri /usr/share/nmap/scripts/ dosyasının içinde yer alır.
--max-rate: Saniyede max kaç paket yollanacağını belirler. NMAPin hızını bununla da ayarlayabilirsiniz. Örn: --max-rate 10 saniyede 10 paket yollanmasını sağlar.
Benim kendi bildiğim parametreler bunlar. Daha birçok parametresi var tabi nmapin eğer ingilizceniz varsa nmap help yaparak tüm parametreleri görüntüleyebilirsiniz.
4)NMAP ile Gizlenerek Bilgi Toplama:
Bu konuda tabiki yurt dışından sunucu kiralayıp yada başka bir kurban üstünden tarama yaparak bilgi toplayabilirsiniz lakin benim burda anlatacağım taktik direkt kendi makinemizden tarama yaparken nasıl gizlenebileceğimize dair bir olay. Peki ne bu olay ona bakalım.
"-D RND:10" : Bu şekilde bir parametre verirseniz(10 değerini kendiniz değiştirebilirsiniz) karşı tarafa farklı farklı random ıplerden NMAP sorgu gönderir, araya da birkaç tane sizin IP adresinizden serpiştirir. Eğer karşıdaki kişi firewall loglarını kontrol ederse tek tek kontrol etme zahmetine girmez. Öbür türlü paso sizden gelen paketler tabiki dikkat çeker. Şimdi gelelim ben genelde hangi tarama şeklini kullanırım.
Kod:
nmap -sS -sV hedef -sC -p 1-65535 -T4 -D RND:10