Nmap NSE Script Kullanımı ve Örnekleri
Ağ güvenliği dünyasında bir araç var ki, öğrendikçe “bunu daha önce neden kullanmıyordum” dedirtir. Nmap’i çoğu sysadmin temel port taraması için kullanır, açık portları listeler, işini bitirir. Ama Nmap’in gerçek gücü NSE (Nmap Scripting Engine) ile ortaya çıkar. NSE, Lua programlama diliyle yazılmış yüzlerce script’i Nmap’e entegre eder ve sıradan bir port tarayıcısını tam anlamıyla bir zafiyet analiz aracına dönüştürür. Bugün bu script’lerin nasıl kullanıldığını, hangi senaryolarda işe yaradığını ve gerçek dünyada nasıl uygulayabileceğinizi anlatacağım.
NSE Nedir ve Neden Önemlidir?
NSE, Nmap’e script tabanlı otomasyon kabiliyeti kazandıran bir motor. 2007 yılında Nmap 4.21 sürümüyle hayatımıza girdi ve o günden bu yana sürekli gelişti. Bugün itibarıyla Nmap kurulumunda 600’den fazla hazır script bulunur. Bu script’ler servis tespitinden zafiyet taramasına, brute force saldırılarından ağ keşfine kadar geniş bir yelpazede görev yapar.
NSE script’leri şu kategorilerde gruplandırılır:
- auth: Kimlik doğrulama mekanizmalarını test eder
- broadcast: Ağda broadcast paketleri göndererek bilgi toplar
- brute: Şifre kırma denemeleri yapar
- default: Temel ve güvenli script’leri içerir,
-sCparametresiyle çalışır - discovery: Ağ ve servis bilgisi keşfeder
- dos: Denial of service testleri yapar (dikkatli kullanın)
- exploit: Bilinen zafiyetleri istismar etmeye çalışır
- external: Dış servislere (Shodan, DNS vb.) sorgu gönderir
- fuzzer: Giriş verilerini fuzzlamak için kullanılır
- intrusive: Hedefe yönelik agresif taramalar yapar, iz bırakabilir
- malware: Zararlı yazılım belirtilerini arar
- safe: Hedefe zarar vermeden bilgi toplar
- version: Servis versiyon tespitini geliştirir
- vuln: Bilinen zafiyetleri tarar
Script’lerin Konumu ve Yönetimi
Linux sistemlerde NSE script’leri genellikle şu konumda bulunur:
ls /usr/share/nmap/scripts/
Belirli bir konuyu aramak için:
ls /usr/share/nmap/scripts/ | grep -i http
ls /usr/share/nmap/scripts/ | grep -i smb
ls /usr/share/nmap/scripts/ | grep -i ftp
Script veritabanını güncellemek için:
nmap --script-updatedb
Yeni Nmap sürümü kurduğunuzda ya da script dosyalarını elle ekledikten sonra bu komutu çalıştırmanız gerekir. Yoksa Nmap yeni script’leri tanımaz.
Bir script hakkında detaylı bilgi almak için:
nmap --script-help http-vuln-cve2017-5638
nmap --script-help "smb*"
Temel Kullanım Sözdizimi
NSE script’lerini çalıştırmak için birkaç farklı yöntem var:
# Tek script çalıştırma
nmap --script script-adi hedef
# Birden fazla script çalıştırma
nmap --script script1,script2,script3 hedef
# Kategori bazlı çalıştırma
nmap --script "default and safe" hedef
# Wildcard ile çalıştırma
nmap --script "http-*" hedef
# Varsayılan script'leri çalıştırma (-sC, --script=default ile aynı)
nmap -sC hedef
# Script + servis versiyon tespiti kombinasyonu
nmap -sV --script vuln hedef
Script’lere argüman geçmek için --script-args kullanılır:
nmap --script http-brute --script-args userdb=/root/users.txt,passdb=/root/pass.txt hedef
Gerçek Dünya Senaryo 1: Web Sunucusu Güvenlik Analizi
Bir müşterinin web sunucusunu denetliyorsunuz. Önce genel HTTP bilgisi toplayalım:
nmap -sV -p 80,443,8080,8443 --script "http-headers,http-methods,http-title,http-server-header" 192.168.1.100
Bu komut bize HTTP response header’larını, izin verilen HTTP metodlarını (PUT, DELETE gibi tehlikeli metodlar açık mı?), sayfa başlıklarını ve sunucu bilgisini verir.
Şimdi daha derine inelim. Apache Struts zafiyeti arayalım (CVE-2017-5638, dünyaca ünlü Equifax ihlalinin arkasındaki zafiyet):
nmap -p 80,443,8080 --script http-vuln-cve2017-5638 --script-args http-vuln-cve2017-5638.path=/struts2-showcase/ 192.168.1.100
Web uygulamasında SQL injection belirtileri tarayalım:
nmap -p 80,443 --script http-sql-injection 192.168.1.100
WordPress kullanan bir siteyi analiz edelim:
nmap -p 80,443 --script http-wordpress-enum,http-wordpress-users 192.168.1.100
Gerçek Dünya Senaryo 2: SMB Zafiyet Taraması
Windows ağlarında SMB protokolü her zaman kritik bir saldırı yüzeyi olmuştur. EternalBlue, WannaCry, NotPetya… Hepsinin ortak noktası SMB zafiyetleriydi. Kurumsal ağlarda bu taramayı düzenli yapmak şart:
# SMB zafiyetlerini kapsamlı tara
nmap -p 445 --script "smb-vuln-*" 192.168.1.0/24
Özellikle MS17-010 (EternalBlue) kontrolü:
nmap -p 445 --script smb-vuln-ms17-010 192.168.1.0/24
Çıktı şöyle görünür:
- Savunmasız sistemlerde
VULNERABLEyazar State: VULNERABLEile birlikte CVE numarası ve referanslar listelenir
SMB güvenlik ayarlarını kontrol edelim:
nmap -p 445 --script smb-security-mode,smb2-security-mode,smb-enum-shares,smb-enum-users 192.168.1.50
Bu komut bize SMB’nin güvenlik modunu, paylaşım listesini ve kullanıcı bilgilerini verir. Guest hesabı aktif mi? Anonim erişim var mı? Hepsini görürsünüz.
Gerçek Dünya Senaryo 3: SSH Analizi ve Brute Force
Üretim sunucularınızda SSH konfigürasyonunu doğrulamak için:
nmap -p 22 --script ssh-auth-methods,ssh2-enum-algos,ssh-hostkey 192.168.1.0/24
ssh-auth-methods ile hangi kimlik doğrulama yöntemlerinin aktif olduğunu görürsünüz. Eğer password görüyorsanız ve bu bir üretim sunucusuysa, alarm zilleri çalmalı.
ssh2-enum-algos ile desteklenen şifreleme algoritmalarını listelersiniz. Zayıf algoritmalar (arcfour, 3des-cbc vb.) hala aktifse güvenlik açığı var demektir.
Yetkili bir pentest ortamında SSH brute force testi:
nmap -p 22 --script ssh-brute --script-args userdb=/root/users.txt,passdb=/root/passwords.txt,ssh-brute.timeout=4s 10.10.10.5
Dikkat: Bu scripti sadece yazılı izniniz olan sistemlerde çalıştırın. Yetkisiz kullanım yasal suçtur.
Gerçek Dünya Senaryo 4: Veritabanı Güvenliği
Birçok kurum veritabanı sunucularını yanlışlıkla internete açık bırakır ya da iç ağda gereksiz yere erişilebilir hale getirir. Bunu kontrol edelim:
# MySQL analizi
nmap -p 3306 --script mysql-info,mysql-empty-password,mysql-databases,mysql-users 192.168.1.0/24
mysql-empty-password scripti boş şifreli root hesabını arar. Bu hala yaygın bir yapılandırma hatasıdır.
MSSQL için:
nmap -p 1433 --script ms-sql-info,ms-sql-empty-password,ms-sql-config,ms-sql-dump-hashes 192.168.1.50
MongoDB açık instance kontrolü:
nmap -p 27017 --script mongodb-info,mongodb-databases 192.168.1.0/24
Redis kontrolü:
nmap -p 6379 --script redis-info 192.168.1.0/24
Redis’in kimlik doğrulama gerektirmeden dışarıya açık olması, son yıllarda kripto madencisi zararlı yazılımlarının en sevdiği giriş noktası oldu.
Gerçek Dünya Senaryo 5: SSL/TLS Analizi
HTTPS kullanan her sunucu için SSL/TLS yapılandırması kritiktir. PCI DSS, HIPAA gibi uyumluluk standartları belirli SSL versiyonlarını yasaklar:
nmap -p 443,8443 --script ssl-enum-ciphers,ssl-cert,ssl-date,ssl-dh-params 192.168.1.100
Bu komutla şunları öğrenirsiniz:
- ssl-enum-ciphers: Desteklenen cipher suite’leri ve güvenlik notlarını (A, B, C, F gibi)
- ssl-cert: Sertifika bilgileri, geçerlilik tarihi, CN ve SAN değerleri
- ssl-date: Sunucu saat farkını tespit eder
- ssl-dh-params: Diffie-Hellman parametrelerinin gücünü kontrol eder (Logjam zafiyeti)
Heartbleed zafiyetini kontrol edelim (hala bazı eski sistemlerde mevcut):
nmap -p 443 --script ssl-heartbleed 192.168.1.100
POODLE zafiyeti için SSLv3 kontrolü:
nmap -p 443 --script ssl-poodle 192.168.1.100
Ağ Keşfi ve Envanteri için NSE
Büyük bir ağı yönetiyorsanız ve ne olduğunu anlamak istiyorsanız NSE discovery script’leri inanılmaz işe yarar:
# SNMP community string taraması
nmap -sU -p 161 --script snmp-brute,snmp-info,snmp-sysdescr 192.168.1.0/24
SNMP hala pek çok network cihazında aktif ve varsayılan public community string değiştirilmemiş halde. Bu tarama ile o cihazları anında bulursunuz.
DNS zone transfer denemeleri:
nmap -p 53 --script dns-zone-transfer --script-args dns-zone-transfer.domain=sirket.com 8.8.8.8
NetBIOS bilgisi toplama:
nmap -sU -p 137 --script nbstat 192.168.1.0/24
Ağdaki tüm HTTP servislerinin başlıklarını toplayalım:
nmap -p 80,443,8080,8443,8888 --script http-title,http-server-header 192.168.1.0/24 -oA web_inventory
Script Çıktılarını Yönetmek
NSE taramalarının çıktıları detaylıdır ve mutlaka kayıt altına alınmalıdır:
# Normal çıktı
nmap --script vuln 192.168.1.100 -oN vuln_tarama.txt
# XML çıktı (diğer araçlarla entegrasyon için)
nmap --script vuln 192.168.1.100 -oX vuln_tarama.xml
# Tüm formatlarda çıktı
nmap --script vuln 192.168.1.100 -oA vuln_tarama
# Greplenebilir çıktı
nmap --script vuln 192.168.1.100 -oG vuln_grep.txt
XML çıktıyı insan okunabilir HTML’e çevirmek için:
xsltproc /usr/share/nmap/nmap.xsl vuln_tarama.xml -o rapor.html
Özel NSE Script Yazmak
İhtiyacınız olan script yoksa kendi script’inizi yazabilirsiniz. Lua dilinin sözdizimi oldukça sade. İşte basit bir örnek yapısı:
-- Basit bir HTTP header kontrol scripti
description = [[
Hedef web sunucusunun X-Frame-Options header'ini kontrol eder.
]]
categories = {"safe", "discovery"}
local http = require "http"
local shortport = require "shortport"
portrule = shortport.http
action = function(host, port)
local response = http.get(host, port, "/")
if response and response.header then
if response.header["x-frame-options"] then
return "X-Frame-Options mevcut: " .. response.header["x-frame-options"]
else
return "UYARI: X-Frame-Options header eksik - Clickjacking riski var!"
end
end
end
Bu scripti /usr/share/nmap/scripts/ altına kaydedin, nmap --script-updatedb çalıştırın ve kullanmaya başlayın.
Performans Optimizasyonu
Büyük ağlarda NSE taramaları yavaş çalışabilir. Bazı ipuçları:
# Paralel script çalıştırma sayısını artır
nmap --script vuln --script-args mincategory=vuln -T4 --min-parallelism 100 192.168.1.0/24
# Sadece belirli portları tara, zaman kazandırır
nmap -p 80,443,22,21,25,110,3306,1433,3389 --script default 192.168.1.0/24
# Host discovery atla, bilinen aktif hostlarda direkt tara
nmap -Pn --script vuln 192.168.1.0/24
# Zamanlama şablonu (T0 en yavaş, T5 en hızlı, üretimde T4 önerilir)
nmap -T4 --script smb-vuln-ms17-010 192.168.1.0/24
Dikkat Edilmesi Gereken Noktalar
NSE kullanırken bazı kritik kuralları aklınızda tutun:
- İzin alın: Sadece yetki verilmiş sistemleri tarayın. Bu hem etik hem yasal bir zorunluluktur.
- Intrusive script’lere dikkat:
dos,exploit,brutekategorileri hedef sistemi etkileyebilir, servis kesintisi yaratabilir. - Üretim saatinde tarama yapmayın: Özellikle yoğun saatlerde agresif taramalar ağı etkileyebilir.
- Firewall ve IDS kurallarını göz önünde bulundurun: Taramalar tetikleyebilir ve alarm üretebilir. Bu bazen istenen sonuç, bazen değil.
- Sonuçları belgelendirin: Tarama sonuçlarını mutlaka kaydedin, zaman damgalı raporlar oluşturun.
- Script argümanlarını doğru kullanın: Yanlış argüman geçmek script’in sessizce çalışmamasına ya da yanlış sonuç vermesine yol açar.
Sonuç
NSE, Nmap’i gerçek bir güvenlik analiz platformuna dönüştürür. Sysadmin olarak düzenli yapmanız gereken kontrollerin büyük bölümünü NSE script’leriyle otomatize edebilirsiniz. Haftalık SMB zafiyet taraması, aylık SSL/TLS konfigürasyon denetimi, yeni sistem devreye alındığında servis güvenlik kontrolü… Bunların hepsini script haline getirip cron job olarak çalıştırabilirsiniz.
Başlangıç için öneri: Önce default ve safe kategorilerindeki script’leri keşfedin. Sonra belirli servisler için vuln kategorisine geçin. Ortamınızı tanıdıkça hangi script’lerin işe yaradığını anlarsınız. Kendi script’lerinizi yazma noktasına geldiğinizde ise Nmap’i gerçekten ustaca kullanıyor olursunuz.
Son bir hatırlatma: Bu araçları öğrenmenin en iyi yolu, kendi lab ortamınızda pratik yapmaktır. VirtualBox veya VMware üzerinde kurduğunuz Metasploitable, DVWA, VulnHub makineleri bu konuda mükemmel pratik ortamları sunar. Gerçek sistemlere geçmeden önce bu ortamlarda bolca pratik yapın.
