Sunucuda Web Shell Taraması ve Zararlı Yazılım Temizleme Rehberi

Sunucuda Web Shell Taraması ve Zararlı Yazılım Temizleme Rehberi

Sunucuda Web Shell Taraması ve Zararlı Yazılım Temizleme Rehberi

Web sunucularına yönelik en tehlikeli ve yaygın siber saldırı yöntemlerinden biri, sunucuya izinsiz erişim sağlayan zararlı betiklerin yani web shell'lerin yerleştirilmesidir. Web shell, saldırganın sunucunuz üzerinde komut çalıştırmasına, veritabanına erişmesine, hassas verileri çalmasına ve hatta sunucuyu zombi bir düğüme dönüştürerek diğer sistemlere saldırmasına olanak tanıyan arka kapıdır (backdoor). Sunucuda web shell taraması ve zararlı yazılım temizleme süreci, yalnızca otomatik bir antivirüs taraması başlatmaktan ibaret değildir. Bu süreç, derinlemesine dosya analizi, sistem günlüklerinin (logs) incelenmesi, süreç takibi ve gelecekteki olası sızmaları engelleyecek sertleştirme (hardening) adımlarını içeren bütünsel bir güvenlik operasyonudur.

Günümüzde karmaşıklaşan zararlı yazılımlar, kendilerini meşru CMS dosyalarının (WordPress, Joomla, Laravel vb.) arasına gizlemekte, çift uzantılı dosyalar kullanmakta ve kod şifreleme (obfuscation) teknikleriyle geleneksel imza bazlı tarayıcıları atlatmaktadır. Bu rehberde, Linux tabanlı bir sunucuda web shell taramasını manuel ve otomatik araçlarla nasıl gerçekleştireceğinizi, tespit edilen zararlıları sistemin bütünlüğünü bozmadan nasıl temizleyeceğinizi adım adım inceleyeceğiz.

Web Shell Türleri ve Bulaşma Belirtileri

Zararlı betikleri doğru şekilde tespit edebilmek için öncelikle saldırganların hangi teknikleri kullandığını bilmeniz gerekir. Web shell'ler işlevlerine ve karmaşıklıklarına göre değişkenlik gösterir:

  • Tek Satırlık Shell'ler (One-Liners): Genellikle tespit edilmesi en zor olanlardır. Tek bir PHP fonksiyonu (eval($_POST['cmd']);) kullanarak sunucuda tam yetkili komut çalıştırabilirler.
  • Tam Teşekküllü Yönetim Shell'leri: WSO, C99, B374K gibi popüler grafik arayüzlü web shell'ler; dosya yöneticisi, veritabanı istemcisi, brute-force araçları ve reverse shell bağlantı mekanizmaları içerir.
  • Gelişmiş Gerekçesiz (Obfuscated) Shell'ler: Kodları base64_decode, gzinflate, str_rot13 veya karmaşık değişken tanımlarıyla gizlenerek imza tarayıcılarından kaçırılan betiklerdir.
  • Sunucunuzda bir web shell bulunduğuna dair başlıca belirtiler şunlardır:

  • Sunucu CPU ve bellek kullanımında açıklanamayan ani artışlar (özellikle arka planda çalışan kripto madencilik veya spam e-posta süreçleri).
  • Web dizinlerinde (public_html, /tmp/, /var/tmp/) sonradan oluşturulmuş, rastgele isimlere sahip (a8f9d.php, shell.php.jpg) dosyalar.
  • Arama motorlarında sitenizin tahrif edilmiş (defaced) görünmesi veya farklı spam sitelere yönlendirilmesi.
  • Müşterilerinizden veya güvenlik sağlayıcılarından gelen taranmış zararlı içerik bildirimleri.
  • Saldırganlar çoğunlukla güncellenmemiş eklentilerdeki güvenlik açıklarını, zayıf FTP/SSH parolalarını veya güvensiz kodlanmış dosya yükleme (upload) formlarını kullanırlar. Yazılım geliştirme sürecinde Temiz Kod Prensipleri: Sürdürülebilir Yazılım Geliştirme Rehberi ilkelerine uymak, bu tür kod seviyesindeki zafiyetlerin önüne geçmek açısından kritik önem taşır.

    Adım Adım Sunucuda Web Shell Taraması Nasıl Yapılır?

    Etkili bir sunucuda web shell taraması gerçekleştirmek için katmanlı bir yaklaşım benimsenmelidir. Tek bir araca bağımlı kalmak, iyi gizlenmiş zararlıları gözden kaçırmanıza neden olabilir.

    1. Temel Linux Komutları ile Manuel Tarama

    SSH üzerinden sunucunuza erişerek doğrudan potansiyel tehlikeli PHP fonksiyonlarını arayabilirsiniz. Saldırganların en çok kullandığı tehlikeli fonksiyonlar eval, exec, passthru, shell_exec, system, assert ve base64_decode ifadeleridir.

    Aşağıdaki komut, /var/www/html/ dizinindeki tüm PHP dosyalarını tarayarak bu tehlikeli fonksiyonları içeren satırları ve dosya yollarını listeler:

    find /var/www/html/ -type f -name "*.php" -exec grep -iH -E "(passthru|shell_exec|system|base64_decode|eval\s*\(|assert\s*\(|gzinflate)" {} +
    

    Eğer son 24 saat veya son 7 gün içinde değiştirilen şüpheli dosyaları bulmak istiyorsanız find komutuna -mtime parametresini ekleyebilirsiniz:

    # Son 3 gün içinde değiştirilmiş tüm PHP dosyalarını bulur
    find /var/www/html/ -type f -name "*.php" -mtime -3
    

    Yükleme (upload) dizinlerinde çalıştırılabilir PHP dosyalarının bulunmaması gerekir. Örneğin WordPress kullanıyorsanız wp-content/uploads/ klasöründe hiçbir .php dosyası olmamalıdır. Bunu denetlemek için:

    find /var/www/html/wp-content/uploads/ -type f -name "*.php"
    

    Bu komut bir sonuç döndürüyorsa, ilgili dosyalar %99 ihtimalle zararlıdır.

    2. Linux Malware Detect (LMD / Maldet) Kurulumu ve Kullanımı

    Linux Malware Detect (LMD), paylaşımlı ve müstakil sunucu ortamları için özel olarak geliştirilmiş açık kaynaklı bir zararlı yazılım tarayıcısıdır.

    LMD'yi kurmak ve çalıştırmak için şu adımları izleyin:

    cd /tmp
    wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
    tar -zxvf maldetect-current.tar.gz
    cd maldetect-*
    sh install.sh
    

    Kurulum tamamlandıktan sonra imza veritabanını güncelleyin ve web dizininizi taratın:

    # İmza veritabanını güncelle
    maldet -u
    
    # Arka planda web dizinini tara
    maldet -a /var/www/html/
    

    Tarama tamamlandığında rapor ID'sini alarak sonuçları detaylıca inceleyebilirsiniz:

    maldet --report <RAPOR_ID>
    

    3. YARA Kuralları ile Derinlemesine Imza Taraması

    YARA, zararlı yazılım araştırmacılarının zararlı ailelerini metin veya ikili (binary) desenlere göre tanımlamasını sağlayan güçlü bir araçtır. Sunucunuza YARA kurarak özel web shell imzalarını taratabilirsiniz.

    Ubuntu/Debian sistemlerde YARA kurulumu:

    sudo apt update
    sudo apt install yara -y
    

    Örnek bir web shell tespit YARA kuralı dosyası (webshell_rules.yar) oluşturun:

    rule Generic_PHP_Webshell {
        meta:
            description = "Gelişmiş PHP Web Shell Tespiti"
            author = "WebTeknoloji Güvenlik"
        strings:
            $eval = "eval("
            $b64 = "base64_decode("
            $gz = "gzinflate("
            $system = "system("
            $passthru = "passthru("
            $shell = "shell_exec("
        condition:
            filesize < 200KB and
            (($eval and $b64) or ($b64 and $gz) or ($system and $eval) or ($shell and $passthru))
    }
    

    Bu kuralı web dizininizde çalıştırmak için:

    yara -r webshell_rules.yar /var/www/html/
    

    Zararlı Yazılım Temizleme ve Karantina Süreci

    Tespit edilen dosyaları doğrudan silmek, web sitenizin çökmesine veya veri kaybına yol açabilir. Bu nedenle adım adım ve kontrollü bir temizleme stratejisi izlemelisiniz.

    Adım 1: Sunucuyu Yalıtın ve Yedek Alın

    Temizleme işlemine başlamadan önce daha fazla veri sızıntısını veya zararlının ağ içinde yayılmasını önlemek için ilgili siteyi bakım moduna alın. Ardından mevcut durumun tam bir yedeğini (dosya sistemi ve veritabanı) arşivleyin. Bu yedek, yanlışlıkla silinen meşru dosyaları geri getirmek için adli analiz yedeği olarak saklanmalıdır.

    Adım 2: Dosyaları Karantinaya Alın

    Zararlı dosyayı silmek yerine, execution (çalıştırma) izinlerini kapatarak karantinaya almak daha güvenlidir:

    # Dosyanın okunmasını ve çalıştırılmasını engelle
    chmod 000 /var/www/html/wp-content/uploads/suspect_shell.php
    

    LMD (Maldet) kullanıyorsanız tarama sonucundaki tüm zararlıları otomatik karantinaya almak için:

    maldet -q <RAPOR_ID>
    

    Adım 3: Çekirdek (Core) Dosyalarını Orijinalleri İle Değiştirin

    WordPress veya Joomla gibi popüler bir CMS kullanıyorsanız, sunucudaki CMS çekirdek dosyalarını (index.php, wp-settings.php, wp-includes/ vb.) tamamen silip resmi kaynaklardan indirdiğiniz temiz sürümle değiştirin. wp-config.php dosyasını manuel olarak inceleyin ve ekstra eklenmiş şüpheli kodları temizleyin.

    Veritabanında saklanan zararlı script'leri (XSS veya yönlendirme kodları) bulmak için SQL dökümünüzde eval veya <script> etiketlerini aratın.

    İstemci tarafında gerçekleşen şüpheli yönlendirmeleri veya arka planda çalışan XHR isteklerini analiz etmek için Chrome DevTools Kullanım Rehberi: Web Geliştiriciler İçin Hata Ayıklama kılavuzumuzdan faydalanabilir, tarayıcı ağ haraketlerini detaylıca inceleyebilirsiniz.

    Sık Yapılan Hatalar ve Yanlış Pozitifler (False Positives)

    Zararlı yazılım temizliği sırasında yapılan en yaygın hatalardan biri "Yanlış Pozitif" (False Positive) sonuçları ayırt edemeyip sistem dosyalarını silmektir.

  • Çerçeve (Framework) Kodlarını Silmek: Laravel, Symfony veya Composer paketleri dinamik sınıf yükleme için eval veya call_user_func_array kullanabilir. Bu dosyaları incelemeden silmek uygulamanızı bozabilir.
  • Canlı Sunucuda Yüksek CPU Kullanımı: find veya maldet komutlarını yoğun ziyaretçi alan bir sunucuda en üst öncelikle çalıştırmak I/O kilitlenmelerine neden olabilir. Taramaları nice ve ionice komutları ile sınırlayarak çalıştırın:
nice -n 19 ionice -c 3 maldet -a /var/www/html/

Önemli İpucu: Sadece zararlı dosyayı silmek sorunu çözmez. Bulaşma kaynağı olan zafiyet (örneğin güncellenmemiş bir eklenti veya sızdırılmış veritabanı parolası) kapatılmazsa, saldırgan saatler içinde tekrar web shell yükleyecektir.

Gelecek Bulaşmaları Önleme ve Sertleştirme (Hardening)

Temizlik tamamlandıktan sonra sunucunuzu gelecekteki olası saldırılara karşı koruma altına almalısınız:

1. PHP PHP.INI Fonksiyonlarını Kısıtlayın

Web sunucunuzda çalışan sitelerin doğrudan sistem komutu çalıştırmasına gerek yoktur. php.ini dosyanızdaki disable_functions satırını güncelleyin:

disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source, eval

2. Dosya İzinlerini ve Sahipliğini İdeal Seviyeye Getirin

Web sunucusu kullanıcısının (www-data, nginx veya apache) dosyaların sahibi olmasını engelleyin. Klasör izinlerini 755, dosya izinlerini 644 olarak ayarlayın:

find /var/www/html/ -type d -exec chmod 755 {} +
find /var/www/html/ -type f -exec chmod 644 {} +

3. Yükleme Dizinlerinde PHP Çalıştırmasını Engelleyin

Nginx kullanıyorsanız uploads klasöründe PHP çalışmasını engellemek için konfigürasyonunuza şu bloğu ekleyin:

location ~* ^/uploads/.*\.(php|php5|php7|phps|phtml)$ {
    deny all;
    return 403;
}

Sisteminizde telafisi imkansız bir zarar oluştuysa veya altyapınızı tamamen sıfırdan güvenli bir ortama taşımak isterseniz, Sıfır Kesinti ile Web Sitesi Taşıma Rehberi içeriğimizdeki adımları izleyerek sitenizi temiz bir sunucuya güvenle aktarabilirsiniz.

Sonuç

Sunucuda web shell taraması ve temizliği, reaktif değil proaktif yürütülmesi gereken sürekli bir güvenlik sürecidir. Saldırganların yöntemlerini sürekli güncellediği 2026 yılı güvenlik standartlarında, sadece otomatik tarayıcılara güvenmek yeterli değildir. Düzenli dosya bütünlük kontrolleri (FIM), güncel yazılım kullanımı ve doğru sunucu yetkilendirmeleri ile sisteminizi koruma altında tutabilirsiniz.

Sonraki Adımınız: Zaman kaybetmeden SSH üzerinden sunucunuza bağlanın, rehberde paylaştığımız find komutu ile yükleme dizinlerinizde yetkisiz .php dosyası olup olmadığını denetleyin ve php.ini üzerindeki disable_functions listenizi güncelleyin.

Sıkça Sorulan Sorular

Web shell nedir ve sunucuya nasıl bulaşır?
Web shell, saldırganların sunucuda uzaktan komut çalıştırmasına izin veren zararlı bir betiktir (genellikle PHP, ASP, Python). Güncellenmemiş CMS eklentileri, güvensiz dosya yükleme formları veya sızdırılan FTP/SSH şifreleri aracılığıyla bulaşır.
Sunucuda web shell taraması için hangi ücretsiz araçlar kullanılabilir?
Linux sistemlerde manuel grep/find komutlarının yanı sıra Linux Malware Detect (LMD/Maldet), ClamAV ve özel YARA kuralları web shell taraması için en etkili açık kaynak araçlardır.
Zararlı dosyayı sildim ancak web shell tekrar oluşuyor, ne yapmalıyım?
Sadece dosyayı silmek bulaşma kaynağını kapatmaz. Saldırganın arka kapı açtığı zafiyeti (açıklı eklenti, veritabanına eklenmiş admin kullanıcısı veya cron job) bulup temizlemeli ve tüm FTP/SSH/CMS parolalarını sıfırlamalısınız.
php.ini dosyasındaki disable_functions ne işe yarar?
disable_functions ayarı, PHP betiklerinin sunucuda doğrudan işletim sistemi komutları çalıştırmasını sağlayan exec, system, shell_exec gibi tehlikeli fonksiyonları devre dışı bırakarak web shell'lerin etkisini sınırlandırır.
WxDigitals
WxDigitals

WebTeknoloji.net editör ekibi; web geliştirme, SEO, hosting ve yapay zeka alanlarında üretilen içeriklerin araştırma, test ve yayın süreçlerini yürütür. Tüm incelemeler gerçek kullanım deneyimine, karşılaştırmalar ise resmi dokümantasyon ve güncel fiyatlandırma sayfalarına dayanır.

Bu içeriği faydalı bulduysanız…

Haftalık teknoloji & SEO rehberlerimize katılın, 38 maddelik Teknik SEO Kontrol Listesi PDF'ini hediye olarak hemen indirin.

Yorumlar (0)

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Yorum Yazın