Nikto ile Web Sunucu Güvenlik Taraması

Web sunucunuzu internete açmadan önce ya da mevcut bir sunucunun güvenlik durumunu değerlendirmek istediğinizde, elinizin altında olması gereken araçlardan biri kesinlikle Nikto’dur. Ücretsiz, açık kaynaklı ve son derece kapsamlı bu web sunucu tarayıcısı, yıllardır sysadminlerin ve güvenlik uzmanlarının vazgeçilmezi olmaya devam ediyor. Bu yazıda Nikto’yu sıfırdan kurarak gerçek dünya senaryolarında nasıl kullanacağınızı, çıktıları nasıl yorumlayacağınızı ve tarama sonuçlarına göre ne tür aksiyonlar alabileceğinizi ele alacağız.

Nikto Nedir ve Ne İşe Yarar?

Nikto, web sunucularını bilinen güvenlik açıkları, yanlış yapılandırmalar, eski yazılım sürümleri ve tehlikeli dosya/dizinler açısından tarayan bir komut satırı aracıdır. Perl ile yazılmıştır ve düzenli olarak güncellenen bir veritabanı üzerinden binlerce farklı kontrol gerçekleştirir.

Nikto’nun tespit edebildiği başlıca sorunlar şunlardır:

  • Eski yazılım sürümleri: Apache, Nginx, IIS gibi sunucuların güncel olmayan sürümleri
  • Varsayılan dosyalar ve dizinler: Kurulum sonrası silinmesi gereken test dosyaları, yönetim panelleri
  • Hatalı HTTP başlıkları: Eksik güvenlik başlıkları, bilgi sızdıran başlıklar
  • SSL/TLS sorunları: Zayıf şifreleme algoritmaları, sertifika hataları
  • CGI açıkları: Shellshock gibi klasik güvenlik açıkları
  • Dizin listeleme: Kapatılmamış directory listing özellikleri
  • Şüpheli dosyalar: Backup dosyaları, geçici dosyalar, kaynak kod sızıntıları

Önemli bir not: Nikto bir aktif tarama aracıdır. Hedef sunucuya gerçek HTTP istekleri gönderir ve log kayıtları oluşturur. Bu yüzden yalnızca izniniz olan sistemleri taramanız gerektiğini baştan belirtelim. Başkasına ait bir sistemi izinsiz taramak yasal sonuçlar doğurabilir.

Kurulum

Debian/Ubuntu Tabanlı Sistemlerde Kurulum

sudo apt update
sudo apt install nikto -y
nikto -Version

RHEL/CentOS/Rocky Linux Üzerinde Kurulum

EPEL deposu genellikle Nikto’yu içermez, bu yüzden kaynak koddan kurmak daha güvenilirdir:

sudo yum install perl perl-Net-SSLeay -y
git clone https://github.com/sullo/nikto.git
cd nikto/program
perl nikto.pl -Version

Kali Linux

Kali Linux üzerinde Nikto önceden yüklü gelir. Güncellemek için:

sudo apt update && sudo apt upgrade nikto -y

Kurulumu doğruladıktan sonra artık taramaya geçebiliriz.

Temel Kullanım ve Önemli Parametreler

Nikto’nun sözdizimi oldukça basittir. En temel tarama şu şekilde yapılır:

nikto -h http://hedef-sunucu.com

Ancak pratikte bu kadar basit bırakmayız. Sık kullandığım parametrelere bakalım:

-h: Hedef host veya IP adresi belirtir -p: Varsayılan dışında bir port numarası belirtir (örnek: -p 8080) -ssl: HTTPS taraması için SSL/TLS kullanımını zorlar -o: Çıktıyı dosyaya kaydeder -Format: Çıktı formatını belirler (txt, html, xml, csv) -Tuning: Hangi test kategorilerinin çalıştırılacağını seçer -timeout: Her istek için zaman aşımı süresini belirler -useragent: Özel bir User-Agent başlığı kullanmanızı sağlar -id: HTTP kimlik doğrulaması için kullanıcı adı ve şifre gönderir -C all: Tüm CGI dizinlerini tarar -no404: 404 hata sayfalarını özel tanımlayan sunucularda daha doğru sonuç alır -Plugins: Belirli Nikto pluginlerini aktif eder ya da devre dışı bırakır

Gerçek Dünya Senaryosu 1: Temel Web Sunucu Taraması

Diyelim ki şirketinizin test ortamındaki bir Apache sunucusunu taramak istiyorsunuz. IP adresi 192.168.1.100 ve sunucu 80. porttan hizmet veriyor:

nikto -h 192.168.1.100 -p 80 -o /tmp/nikto_rapor.html -Format html

Bu komut taramayı çalıştırır ve sonuçları HTML formatında kaydeder. HTML çıktı, özellikle yöneticilere sunum yapacaksanız oldukça kullanışlıdır. Tarama sırasında terminal üzerinde gerçek zamanlı olarak bulguları görürsünüz:

- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          192.168.1.100
+ Target Hostname:    192.168.1.100
+ Target Port:        80
+ Start Time:         2024-01-15 14:23:11 (GMT+3)
---------------------------------------------------------------------------
+ Server: Apache/2.4.29 (Ubuntu)
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined.
+ The X-Content-Type-Options header is not set.
+ Retrieved x-powered-by header: PHP/7.2.24
+ /admin/: Admin login page/section found.

Burada dikkat çeken noktalara bakalım. Sunucu başlığı hem Apache sürümünü hem de işletim sistemini açıkça belirtiyor. PHP sürümü de ifşa edilmiş durumda. Bu bilgilerin gizlenmesi gerekir. Ayrıca güvenlik başlıkları eksik.

Gerçek Dünya Senaryosu 2: HTTPS Sunucu Taraması

Günümüzde neredeyse tüm sunucular SSL/TLS kullanıyor. HTTPS üzerinden tarama yapmak için:

nikto -h https://test.sirket.com -ssl -p 443 -o /var/log/nikto/https_tarama_$(date +%Y%m%d).txt -Format txt

SSL taramasında Nikto ek olarak şunları kontrol eder:

  • Sertifika geçerlilik süresi
  • Zayıf SSL/TLS protokolleri (SSLv2, SSLv3, TLS 1.0)
  • Zayıf şifreleme paketleri (RC4, DES gibi)
  • HSTS başlığının varlığı

Eğer sunucunuz özel bir port üzerinde çalışıyorsa, örneğin 8443, komutu şöyle düzenleyin:

nikto -h test.sirket.com -ssl -p 8443

Gerçek Dünya Senaryosu 3: Kimlik Doğrulaması Gerektiren Sayfaları Tarama

Bazen yönetim paneli veya intranet uygulamaları HTTP Basic Authentication ile korunuyor olabilir. Nikto bu tür sayfalara da girebilir:

nikto -h http://192.168.1.100/admin -id admin:P@ssw0rd123 -o /tmp/admin_panel_tarama.txt

Bu özellik özellikle iç ağdaki uygulamaları denetlerken son derece değerli. Dışarıdan görünmeyen ama içeriden erişilebilen panellerde güvenlik açıkları çok daha sık karşılaşılan bir durum.

Tarama Kategorilerini Özelleştirme: Tuning Parametresi

Nikto’nun en güçlü özelliklerinden biri tarama kategorilerini seçebilmenizdir. -Tuning parametresi ile yalnızca ilgilendiğiniz test türlerini çalıştırabilirsiniz:

0: Dosya Yükleme testleri 1: İlginç Dosyalar 2: Yanlış Yapılandırma 3: Bilgi Açıklama 4: Enjeksiyon testleri (XSS, HTML) 5: Remote File Retrieval (sunucu içinden) 6: Redirection testleri 7: Remote File Retrieval (web root dışından) 8: Command Execution 9: SQL Injection a: Authentication Bypass b: Yazılım Tanımlama c: Remote Source Inclusion x: Tüm testler

Örneğin yalnızca yanlış yapılandırma ve bilgi açıklama testleri çalıştırmak isterseniz:

nikto -h http://192.168.1.100 -Tuning 23 -o /tmp/misconfig_tarama.txt

Sadece SQL Injection ve XSS testlerine odaklanmak isterseniz:

nikto -h http://hedef-site.com -Tuning 49

Bu yaklaşım özellikle büyük ve yavaş yanıt veren sunucularda tarama süresini önemli ölçüde kısaltır.

Çıktıları Yorumlamak

Nikto çıktısında her satırın başında bir artı (+) işareti bulunur ve bulgular şiddet derecelerine göre değerlendirilmelidir. Tipik bir tarama çıktısından alınmış gerçekçi örneklere bakalım:

+ Server: Apache/2.2.8 (Ubuntu) DAV/2
+ Apache/2.2.8 appears to be outdated (current is at least Apache/2.4.54)
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ /phpMyAdmin/: phpMyAdmin directory found
+ OSVDB-3092: /phpmyadmin/changelog.php: phpMyAdmin is for managing MySQL databases
+ Cookie PHPSESSID created without the httponly flag
+ /wp-login.php: Wordpress login found

Bu çıktıyı okurken dikkat etmeniz gerekenler:

Eski Apache sürümü: 2.2.8 sürümü birçok kritik açık barındırıyor, derhal güncellenmelidir.

HTTP TRACE metodu aktif: Bu Cross-Site Tracing (XST) saldırılarına zemin hazırlar. Apache konfigürasyonuna TraceEnable Off ekleyerek kapatılabilir.

Dizin listeleme açık: /icons/ dizininde directory listing açık. Apache konfigürasyonundan Options -Indexes ile kapatılmalı.

phpMyAdmin erişilebilir durumda: Üretim sunucusunda phpMyAdmin’e doğrudan erişim olması ciddi bir güvenlik riski. IP kısıtlaması getirilmeli veya tamamen kaldırılmalı.

HttpOnly flag eksik: Session cookie’si HttpOnly olmadan oluşturulmuş, bu XSS saldırılarında cookie çalınmasını kolaylaştırır.

Tarama Hızını ve Gizliliğini Ayarlamak

Varsayılan hızda Nikto oldukça agresif istekler gönderebilir ve bu durum IDS/IPS sistemleri tarafından hemen tespit edilir. Gerçek bir saldırganı simüle etmek veya sunucuya aşırı yük bindirmemek için istekler arasına gecikme ekleyebilirsiniz:

nikto -h http://hedef-site.com -timeout 10 -Pause 1

-Pause 1 her istek arasına 1 saniyelik bekleme ekler. Daha gizli bir tarama için User-Agent de değiştirilebilir:

nikto -h http://hedef-site.com -useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"

Ancak şunu belirtmek gerekir: Nikto gerçek anlamda gizli bir araç değildir. Görevini yaparken hedef sunucuda oldukça fazla iz bırakır. Eğer gizlilik birincil öncelikse, Nikto’yu bir proxy üzerinden çalıştırmak düşünülebilir.

Proxy Üzerinden Tarama

Taramayı Burp Suite veya başka bir proxy üzerinden yönlendirerek hem trafiği inceleyebilir hem de daha kontrollü bir ortamda çalışabilirsiniz:

nikto -h http://hedef-site.com -useproxy http://127.0.0.1:8080

Bu yaklaşım özellikle web uygulama güvenlik testlerinde Nikto çıktısını Burp Suite ile birleştirmek isteyenler için çok faydalıdır.

Toplu Tarama: Birden Fazla Sunucuyu Aynı Anda Taramak

Büyük bir altyapıyı yönetiyorsanız onlarca sunucuyu tek tek taramak yerine bir liste dosyası oluşturup hepsini toplu olarak tarayabilirsiniz:

cat > /tmp/sunucular.txt << EOF
http://web1.sirket.com
http://web2.sirket.com:8080
https://api.sirket.com:443
192.168.1.100
192.168.1.101
EOF

nikto -h /tmp/sunucular.txt -o /tmp/toplu_tarama.csv -Format csv

CSV formatındaki çıktıyı daha sonra Excel veya bir SIEM sistemine aktararak analiz edebilirsiniz. Bu yöntem özellikle periyodik güvenlik denetimleri için otomasyon scriptleri yazarken işe yarar.

Nikto Tarama Sonuçlarına Göre Alınabilecek Aksiyonlar

Tarama tamamlandıktan sonra elde edilen bulguları önceliklendirmeniz gerekir. Ben genellikle şu sırayı takip ederim:

Kritik Bulgular (Hemen Aksiyon)

  • Açıkta kalan veritabanı yönetim arayüzleri (phpMyAdmin, Adminer)
  • Bilinen CVE numaralı aktif açıklar
  • Default credentials ile erişilebilen paneller
  • Kaynak kod veya yedek dosyaların ifşası (.git dizinleri, .bak dosyaları)

Yüksek Öncelikli Bulgular

  • Güncel olmayan sunucu yazılımları
  • HTTP TRACE metodunun aktif olması
  • Dizin listelemenin açık olması
  • SSL/TLS zayıf yapılandırmaları

Orta Öncelikli Bulgular

  • Eksik güvenlik başlıkları (X-Frame-Options, CSP, HSTS)
  • Sunucu ve framework sürüm bilgilerinin ifşası
  • HttpOnly/Secure flag eksik cookie’ler

Düşük Öncelikli Bulgular

  • Varsayılan hata sayfaları
  • Gereksiz HTTP metodlarının aktif olması (PUT, DELETE)

Periyodik Tarama İçin Cron Job Kurulumu

Güvenlik taraması bir kerelik yapılacak bir iş değildir. Düzenli aralıklarla otomatik tarama yapılması çok daha değerlidir. Haftalık tarama için bir cron job örneği:

# /usr/local/bin/nikto_haftalik.sh
#!/bin/bash

TARIH=$(date +%Y%m%d_%H%M)
RAPOR_DIZIN="/var/reports/nikto"
LOG_DOSYA="$RAPOR_DIZIN/tarama_$TARIH.html"
HEDEF_LISTE="/etc/nikto/hedef_sunucular.txt"

mkdir -p $RAPOR_DIZIN

nikto -h $HEDEF_LISTE 
      -o $LOG_DOSYA 
      -Format html 
      -timeout 15 
      -Tuning 123b

# 30 günden eski raporları sil
find $RAPOR_DIZIN -name "*.html" -mtime +30 -delete

# Raporu e-posta ile gönder
mail -s "Haftalik Nikto Guvenlik Raporu - $TARIH" 
     -a "Content-Type: text/html" 
     [email protected] < $LOG_DOSYA

echo "Tarama tamamlandi: $LOG_DOSYA"

Scripti çalıştırılabilir yapıp cron’a ekleyin:

chmod +x /usr/local/bin/nikto_haftalik.sh
echo "0 2 * * 0 root /usr/local/bin/nikto_haftalik.sh" >> /etc/crontab

Bu şekilde her Pazar gece 02:00’de otomatik tarama yapılır ve sonuçlar e-posta ile iletilir.

Nikto’nun Sınırlılıkları

Nikto her derde deva bir araç değildir. Sınırlılıklarını bilmek, doğru beklentiyle kullanmanızı sağlar:

  • Yüksek false positive oranı: Nikto bazen var olmayan açıkları raporlayabilir. Her bulguyu manuel olarak doğrulamak gerekir.
  • Uygulama katmanı açıklarını tespit edemez: SQL Injection, IDOR gibi iş mantığı açıkları için özel araçlar ve manuel test gereklidir.
  • JavaScript heavy uygulamalarda yetersiz: Single Page Application mimarisindeki siteler için Nikto yeterli değildir, DAST araçları tercih edilmelidir.
  • Gizli değildir: IDS/IPS sistemleri Nikto taramalarını kolayca tanır ve engeller.

Bu nedenlerle Nikto’yu OWASP ZAP, Burp Suite veya Nessus gibi araçlarla birlikte kullanmak çok daha kapsamlı bir güvenlik değerlendirmesi sunar.

Sonuç

Nikto, web sunucu güvenliğinin temel kontrol listesini hızlıca geçmek için son derece değerli bir araçtır. Kurulumu basit, kullanımı esnek ve çıktıları anlamlıdır. Özellikle yeni bir sunucu devreye almadan önce veya mevcut sunucuların periyodik denetiminde Nikto’yu iş akışınıza dahil etmenizi şiddetle tavsiye ederim.

Ancak unutmayın, Nikto bir başlangıç noktasıdır. Bulguları ciddiye alıp üzerine aksiyon üretmezseniz tarama yapmak anlamsızlaşır. Tarama raporunu bir kenara bırakmak yerine her bulguyu bir görev olarak ele alın, düzeltin ve bir sonraki taramada o bulgunun ortadan kalktığını doğrulayın. Güvenlik bir süreçtir, tek seferlik bir kontrol değil.

Son olarak tekrar vurgulayalım: Nikto’yu yalnızca yetkili olduğunuz sistemlerde kullanın. İzinsiz tarama hem etik değildir hem de yasal sonuçları olan bir eylemdir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir