Python İle Nmap Scanner Geliştirme

Python İle Nmap Scanner Geliştirme

Herkese merhaba. Bu yazımda python dilini kullanarak bir Nmap Scanner aracı geliştirmeye çalışacağız. Siber güvenlikle ilgilenen herkesin mutlaka kullandığı Nmap’i, python ile Syn-Ack, UDP ve kapsamlı port taraması yapacak biçimde geliştireceğiz. Sıklıkla kullandığımız Nmap aracını kendimiz dilediğimiz gibi geliştirebilir bu sayede farklı birçok özellik katabiliriz. Öncelikle kısa bir şekilde Nmap’ten söz edelim.

Nmap Nedir?

İsmini Network Mapper’dan alan ağ tarama ve zafiyet için kullanılan araçtır. Hem red team hem de blue team için oldukça yararlı bir araçtır. Ağ yöneticileri sistemlerinde hangi cihazların çalıştığını belirlemek, mevcut ana makineleri ve sundukları hizmetleri keşfetmek, açık bağlantı noktaları bulmak ve güvenlik risklerini taramak için kullanırlar.

Nmap aracı, birçok sisteme yönelik taramaları gerçekleştirerek hızlı, esnek ve anlamlı sonuçlar üretir. Sistemlerin açık olup olmadığını, açık olan sistemlerin port durumlarını, kullanılan işletim sistemleri bilgilerine kadar tüm bilgilere ulaşabiliriz.

Bazı Nmap Parametreleri

Aracı kullanırken parametrelerden yararlanmamız gerekir. Nmap i hem blue team hem de red team in kullandığını söylemiştik. Pentestçi gözüyle nmap’e baktığımız zaman öncelikle ağ keşfi yapılması gerekmektedir. Buna da ağdaki açık makinelerin tespiti ile başlanmalıdır. Daha sonra çalışan makinelerin üzerlerinde koşturan servisler tespit edilmelidir. Bu servislerin versiyonları, sistemlerde firewall bulunup bulunmadığının kontrolü yapılır ve varsa bu firewall ya da koruma sistemleri atlatılmaya çalışılır. Daha sonra servislerin versiyon açıklıklarından faydalanarak sistemlere sızma işlemleri gerçekleştirilir. Tüm bunlar nmap in parametreleri kullanılarak gerçekleştirilir.

Nmap, sistemde yetkili olup olmamanıza göre farklı standart taramalar yapmaktadır. Bu tarama türünü isteğinize göre değiştirebilirsiniz. Bazı gelişmiş tarama türleri ve parametreleri şu şekildedir;

  • Tcp Syn-Scan: Uygulamada da kullanacağımız bu tarama türünü kullanarak hedef sisteme Syn paketleri gönderebiliriz. Fakat hedef sistemde bu tür taramalar loglanmaktadır. Yani bu tarz taramanın izi kalmaktadır. -sS parametresi ile kullanılır.
  • Tcp Connect-Scan: -sT parametresi ile kullanılır ve genelde hedef sisteme direkt olarak bağlandığı için loglanmaz. Syn Scan’e göre daha net sonuçlar verir.
  • UDP Scan: -sU parametresi ile kullanılır. UDP paketleri ile tarama yapar. UDP taramaları biraz uzun sürmektedir.
  • O parametresi kullanarak işletim sistemlerini tespit edebilirsiniz.
  • Taramada en önemli bölüm olan versiyon keşfini de –sV parametresini kullanarak öğrenebilirsiniz.

Python ile Nmap Geliştirelim

Genel olarak konu hakkındaki bilgilerimizi pekiştirdiğimizi düşünmekteyim. Yukarıda vermiş olduğum gelişmiş tarama örnekleri çoğaltılabilir. Uygulamamızda TCP Syn-Scan, UDP Scan ve Comprehensive(Kapsamlı) Scan taramalarını kullanacağım. Sizde kendinize göre bu aracı geliştirebilir ve düzenleyebilirsiniz.

Öncelikle python da nmap otomasyonunu geliştirmek için “python-nmap” modülünü kütüphaneye eklememiz gerekmektedir.

PyPı gibi python modüllerinin bulunduğu web sitelerinden dosyayı indirebileceğimiz gibi komut satırında “pip install python-nmap” komutunu kullanarak da python kütüphanesine modülü ekleyebiliriz.

Ben Windows cihazımda Python 3.8 IDLE ile programımı geliştirdim. Siz dilerseniz Linux sistemlerinizde de programı geliştirebilirsiniz.

Alınan Hata

Yukarıda görmüş olduğunuz görsel kütüphaneye eklediğimiz “python-nmap” modülünün nmap.py dosyasındaki PortScanner class’ıdır. Geliştireceğimiz program, sistem içindeki nmap’i bularak çalışmaktadır. Yani sisteminizde illaki bir nmap yüklü olması gerekmektedir. PortScanner class ına baktığımız zaman nmap.py çalıştıktan sonra sarı ile boyanmış olan pathler içerisinde nmap programını aramaktadır. Nmap yüklü fakat bulamıyorsa “environment variables” seçeneğiyle nmap’in kurulu olduğu pathi gösterebilirsiniz. Bu şekilde karşılaşacağınız problemler çözülecektir.

Uygulama

Debugger gibi kodları açıklayarak gidelim. Öncelikle “import” ifadesi ile nmap modülünü çağırmamız gerekmektedir. Bu modülün içerisindeki “PortScanner” sınıfını kullanarak taramayı gerçekleştireceğiz. Kullanıcıdan alacağımız değerleri kullanarak tarama çeşitlerini belirleyip sonuçları üreteceğiz. Burada program kullanıcıdan tarama yapacağımız hedef IP adresi istemektedir. Kullanıcıdan alınan IP adresini “ip_addr” değişkeninde tutuyoruz. Daha sonra kullanıcıya hangi tarama türünü seçmek istediğini listeleyip buna göre bir seçim yapması gerektiğini belirtiyoruz. Kullanıcıdan alınan opsiyon 1 ise burada “if” koşulu devreye girecektir. Eğer kullanıcı “SYN ACK Scan” opsiyonunu seçerse 1-1024 aralığındaki portlara syn paketi gönderilecektir. Girilen hedef IP ninde durumu sonuç çıktısında yazılacaktır. Programı bu şekilde çalıştırıp sonuçlarını inceleyelim.

Görüldüğü gibi öncelikle bir IP adresi girildi. Daha sonra SYN taraması yaptırmak için 1 opsiyonu seçildi ve bir süre sonra açık olan portlar ve hedef IP nin durumu ekrana basıldı. Program başarılı bir şekilde çalıştı. Şimdi aynı işlemleri UDP taraması için gerçekleştirelim.

Bu defa kullanıcı “2” seçeneğini seçtiğinde elif==2 koşulu çalışacaktır. Bu koşulda yine 1-1024 arası portlarda UDP taraması gerçekleştirilecektir. Bu şekilde programı yeniden çalıştıralım.

Uzun bir arama sonucunda sonuçlar ekrana basıldı. 67,123,137 portlarının açık olduğu görülmektedir. Üzerindeki servisleri de görüntüleyebilmek için ilgili parametreleri koda yerleştirebilirsiniz. Ağ keşfi ile ilgili rastgele bir IP deneyip o şekilde programımızı çalıştıralım.

192.168.3.102 IP adresi ile ilgili UDP taramasının sonuçlarına baktığımız zaman IP durumunda hedefin kapalı olduğunu sonucunu görüntülemekteyiz. Bu da programımızın doğru çalıştığını göstermektedir. İlgili sunucuyu pinglediğim zaman herhangi bir yanıt alamadım 🙂

Son seçeneğimizde kapsamlı bir tarama gerçekleştirebilmek için Syn, Versiyon bilgisi, -A ile agresif tarama ve -O ile işletim sistemi bilgilerini komuta ekledim. Bu şekilde hedef IP ile ilgili kapsamlı bir keşif gerçekleştirebiliriz.

Görüldüğü gibi basit ve anlaşılır python kodları ile nmap otomasyon aracı geliştirebildik. Bu otomasyon oldukça geliştirilebilir. Örneğin hedefteki versiyon bilgilerini listeletip bu versiyonlardaki açıkları da hızlıca ekrana basabiliriz.

Bu yazımda python dili ile nmap aracı geliştirmeye çalıştım. Umarım yararlı olur. Bir sonraki yazımda görüşmek üzere.

Kaynakça

https://www.varonis.com/blog/nmap-commands/#:~:text=Nmap%20is%20now%20one%20of,OS%20detection%2C%20and%20version%20detection.

https://www.youtube.com/watch?v=1lh_SkY8cHk

Related Posts

Leave a Reply