Merhabalar bu makalede forumda eksik olduğunu gördüğüm konulardan birine değineceğim. Elbette çoğunuz NMAPi duymuşsunuzdur, kullanmışsınızdır da lakin foruma aktarılanı bunun çok sığ bir kısmı. Ben bu sığ kısımlardan biraz açılmaya çalışacağım. Tabi işin esas kısmı mantığı. Pek çoğumuz bu toolu kullanıyor fakat arkasında yatan mantığı bilmiyor. Mantığını bilmediğiniz bir toolu kullanmanın size tam anlamıyla bir fayda sağlıyacağını da şahsen düşünmüyorum. Konunun ilk kısımları size sıkıcı gelebilir, anlarım çünkü millet olarak işlerin temel -mantık- kısmıyla pek ilgilenmez direkt sonuç odaklı ilerleriz lakin ilerde Siber Güvenlik sektöründe çalışmak istiyorsanız meslek hayatınızda izole edilmiş durumlarda kalabilirsiniz. Mishal NMAP kullanamıyorsunuzdur, olayın mantığını bildiğinizden kendiniz bir tane NMAP yazarsınız. Merak etmeyin böyle dedim diye bir örnek vermeden geçmiyeceğim. Bir arkadaşımla beraber yazdığımız NMAPin kabaca bir versiyonunu konunun ilerleyen kısımlarında paylaşacağım.
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?
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?
Bu içeriği görmek için giriş yapın.