NMAP nedir? Nasıl kullanılır?
Son yıllarda yaşanan teknolojik gelişmelerin hızıyla birlikte güvenlik açığı değerlendirmeleri ve sızma testleri bir çok kuruluş için çok büyük bir önem kazanmıştır. Özellikle KVKK ve Regülasyon uyumluluk konularında bu test ve değerlendirmeler gereklilik haline gelmiştir. Hassas veriler depolayan bir ağa sahipseniz içerden ve dışarıdan bir çok tehdide maruz kalma ihtimaliniz çok yüksektir. Bu nedenle kuruluşların güvenlik durumlarını belirli periyotlarla değerlendirmesi önemlidir.
Güvenlik açığı değerlendirmesi ve sızma testi kavramları çoğu kişi tarafından karıştırılmakla birlikte aradaki farkı anlamak önemlidir. Güvenlik açığı değerlendirmeleri, sisteminiz üzerinde saldırganların kullanabileceği açık kapıların farkına varmanızı sağlar. Sızma testi ise açık kapıları kullanarak sisteme erişim sağlanmasıdır. Sızma testi yapabilmenin ön koşulu güvenlik açığı değerlendirmesi yapmaktır. Güvenlik açıklığı testi yapmazsanız hangi açıklıktan yararlanıp sızma testi yapılacağını bilemezsiniz.
Sızma testi yapabilmek için iyi bir planlama yapmak gerekir. Sızma testi yapılacak sistem hakkında bilgi toplamak, planlamanın en önemli adımıdır. Yapılacak saldırı tekniklerinin temeli bu aşamada belirlenir. Bu nedenle güvenlik açıklığı testleri yapılarak sisteminiz hakkında bilgi edinilmesini engellemek çok büyük önem arz etmektedir.
Saldırgan (hacker) sistem hakkında bilgi edindikten sonra saldıracakları açıklıklara ait uygulamaların sürümlerine bakarlar. Eski sürümlere ait belirlenmiş bir çok saldırı yöntemi varken yeni sürümler için saldırı yöntemleri sınırlıdır. Bu nedenle sistem ve üzerindeki uygulamaların güncel olması önemlidir.
Saldırgan sürüm üzerindeki açıklıkları değerlendirdikten sonra bu açıklıklardan yararlanıp sisteme erişim sağlamaya çalışır. İlk başta bir kullanıcı olarak sisteme sızdıktan sonra çeşitli tekniklerle yetkilerini artırıp tüm sistemin kontrolünü ele geçirir. Son aşamada saldırgan istediğini elde ettikten sonra sistem erişimine ait izleri siler.
Sistem yöneticilerinin görevi, saldırganların sistemlerine sızmasını engellemektir. Bu nedenle belirli aralıklarla sistemleri hakkında bilgiler toplamalı ve bu bilgileri değerlendirerek önlemler almalıdır. Temel olarak sunucu üzerindeki gereksiz hizmetler kapatılmalı, hizmet verilen portların erişimi kısıtlanmalı veya engellenmelidir. İşletim sistemi ve servisleri en güncel sürümüyle güncellenmelidir.
Bilgi toplama ile ilgili bir çok araç olsa da en bilineni, Gordon Lyon tarafından geliştirilen NMAP ve onun grafik arayüzüne sahip versiyonu ZENMAP’tir. NMAP, ağ keşfi ve güvenlik denetimi için ücretsiz ve açık kaynaklı bir yardımcı programdır. Network üzerindeki cihazları, çalışma sürelerini, çalıştırdıkları hizmetleri, işletim sistemleri, sürümleri gibi bilgiler sunar. Bu bilgiler ile farkına varmadığınız servislerin erişimlerini engelleyebilir, eski sürüm kullanan uygulamaları güncelleyebilirsiniz.
NMAP (Network Mapper)
NMAP’ı Windows bir makinaya kurmak isterseniz nmap.org adresinden indirerek Zenmap versiyonunu kullanabilirsiniz. Nmap, Linux sunucuların bazı dağıtımlarında varsayılan olarak yüklü gelmekle birlikte dağıtımınıza bağlı olarak apt install nmap, yum install nmap, apt-get install namp komutlarından biriyle Linux bir makineye saniyeler içerisinde kurabilirsiniz. NMAP, linux sunucularda komut satırı üzerinden yönetilen bir araçtır ve nmap komutunun alacağı argümanlarla birlikte kullanılır. Grafik arayüz için Zenmap paketi içerir.
NMAP ile bir port taraması yaptığınızda portların durumları open, closed, filtred, unfiltered, open/filtered, closed/filtered olarak tanımlanır.
Open : Hedef sistemdeki portun aktif olarak bağlantıları dinlediğini gösterir.
Closed : Port olduğunu ve dinleyen bir uygulamanın olmadığını gösterir.
Filtered : Bir firewall tarafından bağlantı noktasına erişimin engellendiğini gösterir.
Unfiltered : Port’un NMAP isteklerine cevap verdiğini ancak durumunun belirlenemediğini gösterir.
Open/Filtered : Port’un açık ama bir firewall tarafından engellendiğini gösterir.
Closed/Filtered : Port’un kapalı ama bir firewall tarafından engellendiğini gösterir.
Çalışmamızda Zenmap’ı kullanacağız ama aynı komutları kullanarak nmap üzerinden de çıktı alabilirsiniz. Ancak çıktıları nmap üzerinde takip etmek Linux komutlarına hakim olmayanlar için zor olabilir. Çıktılar içerisinde bilgiye ulaşmak için arama yapmak veya belirli kriterlere göre süzmek gerekecektir.
ZENMAP
Zenmap grafik arayüzü sayesinde nmap’den daha bütünlük içinde verileri sunar. Nmap üzerinde yapılabilecek taramalar ve daha fazlasını Zenmap ile yapabilirsiniz. Hazır profiller ile taramalar yaparak nmap komutları ile uğraşmadan hızlı bir şekilde sonuçlar elde edebilirsiniz. İsterseniz kendi komutlarınızı da Command bölümünde çalıştırabilirsiniz. Çalıştırdığınız komutları yeni profil olarak ekleyebilirsiniz. Arka arkaya yaptığınız taramaları sonradan bakmak için kayıt altına alabilir, iki tarama arasındaki sonuçları karşılaştırabilirsiniz. Tarama yaptığınız network üzerindeki cihazların ilişkisini bir topoloji üzerinde görebilirsiniz.
Profilleri ister bir IP üzerinde ister bir network üzerinde kullanabilirsiniz ancak network üzerinde yapacağınız bir taramanın süresi elbette uzun olacaktır.
Profiller ile Tarama
Instense scan : Yoğun tarama olarak adlandırabileceğimiz bu profil, hedef üzerinde en çok kullanılan 1000 portun durumları, portlarda çalışan servisler, bu servislerin versiyonları, SSL bilgileri, Key değerleri, işletim sistemi, hedefe olan networksel uzaklık (hop), uptime süresi gibi detaylı bilgilere ulaşmanızı sağlar.
Nmap çıktısının bir bölümünü inceleyecek olursak 80 numaralı portun açık olduğu IIS servisinin bu portu kullandığı ve devamında bu servis ile alakalı detaylara ulaşılır. Yine 7070 numaralı portun AnyDesk uygulaması tarafından kullanıldığı görülür.
nmap -T4 -A -v 192.168.1.0-255
Instense scan plus UDP: Instense scan taramasında TCP protokolü üzerinden portlar taranmaktadır. Bu profilde UDP protokolü de dahil edilerek tarama yapılır.
nmap -sS -sU -T4 -A -v 192.168.1.39
Instense scan, All TCP ports : Instense scan taramasına 65535 adet olan bütün TCP portlarını dahil ederek tarama yapar.
nmap -p 1-65535 -T4 -A -v 192.168.1.39
Instense scan, no ping : Hedef sisteme ICMP paketleri gönderilmeden en bilinen 1000 port üzerinde tarama yapılır.
nmap -T4 -A -v -Pn 192.168.1.39
Ping Scan : Hedef sistemlere ICMP paketleri göndererek ping isteği yapıp cevap veren sistemleri listeler.
nmap -T4 -A -v -Pn 192.168.1.39
Qucik Scan (TCP) : En çok kullanılan 100 port üzerinde tarama yaparak hedef sistemdeki portlar, durumları, MAC adresleri gibi genel bilgiler elde edilir.
nmap -T4 -F 192.168.1.39
Qucik Scan plus: Quick scan’a ek olarak hedef sistem üzerinde çalışan servislerin versiyonları da taramaya eklenir.
nmap -sV -T4 -O -F --version-light 192.168.1.39
Quick Traceroute : Hedef sisteme trace atılır. Bildiğimiz traceroute çıktsıdır. Elbette önce yapılan taramalar ile birleşince Topology sekmesinden bakıldığında çok daha fazla bilgi verir.
nmap -sn --traceroute 192.168.1.39
Regular Scan : Genel bir tarama yaparak hedef üzerindeki port, durumları ve servisleri hakkında bilgi verir.
nmap 192.168.1.39
Komut Kullanarak Tarama
Command bölümüne kendi komutlarımızı girip kullanabileceğimizden bahsetmiştik. Profiller çok faydalı bilgiler sunsa da çıktı içindeki kalabalık bazen nereye bakacağınızı şaşırmanıza neden olabiliyor. Bu nedenle kendi komutlarınızı kullanıp direk istediğiniz bilgiye ulaşmanız daha faydalı olabilir.
nmap –sV 192.168.1.39 komutuyla hedef sistem üzerinde açık olan portlar, çalışan servisler ve servis versiyonlarını görebilirsiniz.
nmap -sn 192.168.1.0-255 komutuyla 192.168.1.0 networkü üzerindeki 0’dan başlayıp 255’e kadar olan IP aralığını tarayarak erişim sağlayabileceğiniz cihazların listesini alabilirsiniz.
nmap –reason 192.168.1.39 komutuyla TCP paketleri içindeki SYN-ACK flag’leri kullanılarak en bilinen 1000 port üzerinde tarama yapılır. Açık olan port numaraları ve servis tipleri listelenir.
nmap -sO 192.168.1.39 komutuyla tarama yapılan cihazın desteklediği protokoller bulunur.
nmap -sA 192.168.1.39 komutuyla NMAP taramasının bir firewall tarafından engellenip engellenmediğini öğrenebilirsiniz.
nmap -sU -p 1-1000 192.168.1.39 komutuyla 1 ile 1000 arasındaki UDP protokolünü kullanan portların taramasını yapabiliriz. U yerine T koyarsak TCP protokolü için bir tarama gerçekleşir. Bu şekilde belirli bir port arasında arama yapabilirsiniz.
TCP ve UDP protokolleri için aynı anda arama yapmak isterseniz -sT -sU argümanlarını birlikte kullanabilirsiniz.
nmap -O 192.168.1.0/24 komutuyla hedef network veya IP’de çalışan işletim sistemi hakkında bilgi elde edebilirsiniz.
Nmap taramalarında IP yerine alan adı veya sunucu ismi de girelebilir. Nmap ilk önce bir nslookup sorgusu yaparak hedefin IP’sini öğrenir. Ardından reverse DNS sorgusu yaparak hedefin IP’si ile ismini eşler. Devamında açık portlarla ilgili bilgi verir.
Nmap Çıktılarını Dışarı Aktarmak
Zenmap aracıyla scan menüsünden Save As diyerek açılan pencerede kayıt etmek istediğiniz nmap taramasını seçiyoruz.
Save dedikten sonra açılan pencere kayıt yerini ve formatını seçip kayıt işlemini tamamlıyoruz. İsterseniz Scan menüsü altındaki Save All Scan ile tüm taramaları bir dizine de kaydedebilirsiniz.
Linux sistem üzerindeki Nmap taramaları redirection işaretleri ile kaydedilebilir.
nmap --script vulscan -sV 192.168.1.39 > 192.168.1.39_Scan.txt
NMAP Scriptleri
Şimdiye kadar basit nmap komutlarıyla genel bilgiler ettik ancak NMAP’in en güzel özelliği The Nmap Scripting Engine (NSE) ile scriptler çalıştırarak çok çeşitli görevleri yerinde getirebilmesidir. Scriptler Windows İşletim Sistemlerinde C:\Program Files (x86)\Nmap\scripts dosya yolunda Linux İşletim Sistemlerinde ise /usr/share/nmap/scripts dizini altında bulunmaktadır. Elbette kendi scriptlerinizi oluşturarakta dosyalar oluşturabilirsiniz. Script’lerinizi ekledikten sonra namp –script-updatedb komutu ile veritabanını güncellemeyi unutmayın.
Scriptler çalıştırıldıklarında sonuç elde edemez ise girdiğiniz komutun içindeki nmap argümanlarına göre hedef sistem üzerindeki açık port ve servisler listelenir.
Web, mail, veri tabanları, uzak erişim, dosya transferi protokolleri, DNS gibi sistemler üzerinde çalıştırılabilecek 600’e yakın script bulunmaktadır.
Scriptleri çalıştırmak için –script argümanından sonra script’in ismini girmeniz yeterlidir. Script isimleri arasına virgül koyarak kombine şekilde çalıştırabilirsiniz.
nmap –script ssh-auth-methods 192.168.1.40 komut çıktısına baktığımızda hedef sistemin SSH erişiminin açık olduğu, publickey ve password methotlarıyla erişim sağlanabileceği anlaşılıyor.
nmap –script rdp-ntlm-info 192.168.1.39 komut çıktısında ise rdp-ntlm-info scriptini kullanarak hedef sisteme RDP erişimi hakkında bilgi elde ettik.
NMAP Veritabanının Güncellenmesi
NMAP veritabanı dosyası nmap-service-probes isimli dosyadır. Bu dosya Window cihazlarda C:\Program Files (x86)\Nmap dosyası altında Linux sistemlerde ise /usr/share/nmap dizini altında tutulur.
Dosyayı bir metin editörü ile açalım veya Linux kullanıcıları cat /usr/share/nmap/ nmap-service-probes | less komutuyla görüntülesin. İkinci satırdaki $Id bölümünü satır boyunca kopyalıyoruz.
Satır içindeki 37673 ve 38073 numaraları versiyon numalarıdır. Dosyaların sonlarına bu versiyon numaraları gelecek şekilde isimlerini değiştiriyoruz.
https://svn.nmap.org/nmap/nmap-service-probes adresinden güncel veritabanını indiriyoruz. Linux kullanıcıları wget aracını kullanarak indirebilir. Güncel revizyon numarası 38198’dir. İki nmap uygulamamızında veritabanının eski durumda olduğu görülüyor.
Dosyayı açtığımızda $Id bölümü boş olarak gelecek. Bu bölüme yeni versiyon numarasını ve tarihi ekleyerek dosyayı kaydedin. Satır yorum satırı olduğu için yapılandırmada bir değişiklik olmayacak ama güncel versiyonu takip etmemiz için önemlidir.
Yeni indirdiğiniz dosyayı nmap dizini altına taşıyıp işlemleri tamamlıyoruz. Windows kullanıcıları da nmap dizinine dosyayı kopyalıyor.
Sonuçları Karşılaştırmak
Yaptığımız iki taramanın sonuçlarını karşılaştırmak için Tools menüsündeki Compare Results aracını kullanacağız. Ekran çıktısının sade olması için nmap komutunu herhangi bir argüman kullanmadan çalıştırıyoruz. İlk taramamızda 3389 RDP portu ve Any Desk için kullanılan 7070 portları açık durumdaymış. Açık portları kapattıktan sonra tekrar çalıştırıyoruz.
Compare result aracını açıp önceden yaptığımız taramaları seçerek karşılaştırma yaptırıyoruz. Kırmızı alanlar A tarafında olup B de olmayanları, Yeşil alanlar ise B tarafındaki farklılıklardır. Renksiz alanlar ise her iki taramadaki ortak bilgilerdir.
Güvenlik Açığı Tespiti Yapmak
Nessus veya OpenVAS gibi profesyonel uygulama kadar olmasa da NMAP yaptığı tarama sonuçlarıyla eşleşen Common Vulnerabilities Exposure (CVE) ‘leri size göstererek açıklık (zafiyet) hakkında detaylı bilgi edinmenizi sağlayabilir.
Github üzerinde ücretsiz olarak sunulan scriptlerle bu görevi yerine getirebilirsiniz. Google’da github nmap vulnerability şeklinde bir arama yaparak nmap için hazırlanmış ücretsiz scriptlere ulaşabilirsiniz. Ancak bu makalede en çok kullanılan iki tanesinin kurulumu ve kullanımından bahsedeceğiz.
Script kurulumlarını Linux ortamında yapacak olsak da Windows kullanıcıları da git aracını kurarak paketleri komut satırıyla indirebilirler veya dosyaları elle indirip dosya konumlarına yapıştırıp talimatlara göre scriptleri kullanabilirler.
Nmap-Vulners ‘i Yükleme
Scriptlerin bulunduğu /usr/share/nmap/scripts dizinine giderek Git üzerinde bulunan aracı sistemimize indiriyoruz.
git clone https://github.com/vulnersCom/nmap-vulners.git
Nmap-Vulners ile Tarama
Hedef IP üzerinde taramamızı yaparken nmap-vulners scriptini çalıştırıyoruz. Sonuçta hedef üzerinde açık olan porta hizmet veren servise ait zafiyetlerin CVE kodları listelenir. Kodlar karşısındaki linklere giderek zafiyet ve zafiyetin giderilmesi hakkında bilgi edinebilir, internet üzerinde konu hakkında araştırma yapabilirsiniz.
nmap --script nmap-vulners -sV -p80 192.168.1.40
Vulscan ‘ı Yükleme
Scriptlerin bulunduğu /usr/share/nmap/scripts dizinine giderek Git üzerinde bulunan aracı sistemimize indiriyoruz.
git clone https://github.com/scipag/vulscan.git
cd vulscan/utilities/updater/ komutuyla dizine inerek chmod +x updateFiles.sh komutuyla updateFiles.sh dosyasına uygulama yetkisi veriyoruz. ./updateFiles.sh komutuyla scripti çalıştırıyoruz.
Vulscan ile Tarama
Vulscan da script olarak çalıştırıyoruz. Ancak Vulscan daha detaylı bilgi veriyor ve tavsiyem Vulscan’ı kullanmanızdır. Dilerseniz nmap-vulners ile birlikte de çalıştırabilirsiniz. Çıktıda zafiyetin vulscan kodu ve kısa bir açıklaması bulunuyor.
https://vuldb.com/?search adresine giderek kodu aratıp zafiyet hakkında detaylı bilgi alabilirsiniz.
Vulscan’ı yüklerken cve, exploitdb, openvas gibi zafiyetlerin bulunduğu veritabanlarını indirdik. vulscandb argümanı ile belirli bir veritabanına göre tarama yapabilirsiniz. Tavsiyem de belirli bir veritabanına göre yapmanız yönündedir. Çünkü veritabanı belirtmediğinizde yüklü olan veritabanlarındaki sonuçların hepsini size gösterecektir. Hem çıktı boyutu çok büyük olur hem de aradığınızı bulmakta zorlanırsınız.
nmap --script vulscan --script-args vulscandb=database_name –sV 192.168.1.30
Sonuç
Bir sistemin güvenliğini sağlamak için bilgi toplamak, sistem loglarını izlemek, log kolerasyonu yapmak, alarmlar üretmek, sistemleriniz üzerinde çıkan yeni zafiyetleri öğrenmek ve bunları önleyici tedbirler almak gerekir. Sistem üzerinde açık olan portları, çalışan servislerin neler olduğunu ve neden çalıştıklarını bilmek önemlidir. Eğer çalıştırdığınız sistemi iyi bilirseniz bir problem veya saldırı olduğunda nereye müdahale edeceğinizi bilirsiniz. Bir nevi kedi fare oyunu gibi olan bu oyunda fare olan maalesef sistem yöneticileridir. Bu nedenle yuvayı güvenli yapmak ve atik olmak çok önemlidir.
Makalede, sadece NMAP aracının kullanımı, güncellenmesi, çıktıların dışarı aktarılması, script kullanımı ve portlar üzerinde hizmet veren servislerdeki zafiyetlerin bulunması konularına değindik. NMAP ile sistemleriniz üzerinde çalışan servislerin durumlarını çok kolay bir şekilde takip edip önlemler alabilirsiniz. Makalede, en çok ihtiyaç olacak bilgilerden bahsetmiş olsak da NMAP ile çok daha fazlası yapılabilmektedir.
NMAP kullanım farkındalığının artması için hazırladığım bir makalenin daha sonuna geldik. Faydalı olması dileğiyle,
Ellerine sağlık, güzel makale olmuş.
Teşekkürler.
Sağol, emeğine sağlık
Teşekkürler.
Eline sağlık.
Teşekkürler.