Sunucu Üzerinde WebShell Tespit Etme Yöntemleri

Herkesin başına gelebilecek bir durum olan ve halk arasında “shell yedim, hacklendim, virüs bulaştı” şeklinde ifade edilen PHP web sitelerinin kabusu olan WebShell’lerinin nasıl tespit edilebileceğinden kısaca bahsedeceğim.

Genellikle hosting kullanan arkadaşlarımızın sık sık başına gelen bu olaylar kimi zaman can sıkıcı olabiliyor. Özellikle günümüzde Shell’ler aracılığı ile Link ekleme, Başka web sitelerine reklam amacıyla yönlendirme, Uzaktan içerik çağırma vb saldırılar gerçekleştirilmektedir.

Ancak aynı zamanda kullanılan yazılımlarda bulunan güvenlik açıklıklarıyla ve(veya) yanlış dosya ve(veya) klasör izinleri ile gene bu gizi kötücül yazılımlar sistemlere bulaşabiliyor. 

Dosyaların Taranması İşlemi

Manuel olarak aksiyon alamayacak durumda olanlar için bir takım araçlar kullanarak shell taraması yapabilirsiniz. Bütün dosyalarınızda tarama yapmanızı şiddetle öneririm. Shellboy projesi yardımıyla taramayı gerçekleştireceğiz.

wget https://github.com/c1982/shellboy/releases/download/v0.0.1-beta/shellboy_linux_amd64
./shellboy_linux_amd64 --directory=/home/public

Her hangi bir bulgu olması durumunda uygulama sizi uyaracaktır.

Dosya değişikliklerinin tespit edilmesi

Sistem üzerinde tespit ettiğiniz anormallikleri çözmek için anında işleme geçip sunucu üzerinde son değiştirilen dosyaları kontrol etmeniz gerekir. Bu bize direk Shell’in yolunu verebilir.

Son 7 güne ait php dosyalarında değişiklik yapılan dosya tespiti

find . -type f -name '*.php' -mtime -7

Dosya içerisinde uzak kaynak kontrolü

Kimi zaman sitenizde bir takım alanlar değiştirilmiş olabilir. Bunlar genellikle yönlendirme kodları veya dışarıdan getirilmiş içerikler olabilir. Bunun tespiti için

find . -type f -name '*.php' | xargs egrep -i "preg_replace *\((['|\"])(.).*[a-z]*e[^]* *," --color 

Orijinal Dosyalar ile Mevcut Dosyaların Kontrolü

Wordpress, Drupal, Magento vb hazır sistemler kullanıyorsanız. diff komutu aracılığı ile sisteminizde dosyalarını kontrol edebilirsiniz. 

diff -r wordpress/ /var/www/sites/ -x wp-content
  • -x den hemen sonra gelen klasör diff ile kontrol edilmeyecektir. Biz bu örneğimizde wp-content adlı klasöre bakılmaması gerektiğini söyledik.
  • -r ile klasör içinde ne kadar dosya ve klasör içeriyorsa değişiklik kontrolü için dahil edilmesini istedik

Yazma İzinli Klasörlerin Tespit Edilmesi

Kimi zaman sistemde dosyalarınızın izinleri karışmış olabilir, genelde en çok karşılaşılan bu durumu çözmek her ne kadar kolay olsa da tehlikelidir.

find . -type d -perm 0777

Görsel İçerik Görünümlü Web Shell’lerin Tespiti

Kimi zaman uploads klasörüne eklenmiş bir görsel içerik(jpeg, png, gif vb) bile sizin web sitenize etki eden bir shell olabilir. Bu yüzden mevcut görsellerimiz içerisinde bile tarama işlemi gerçekleştirmemiz gerekir.

find uploads -type f -iname '*.jpg' | xargs grep -i php

.htaccess Kontrolü

Kimi zaman saldırganlar web sitenizde bulunan dosyalara ekleme yaparak kancalama atakları yapabilir. Bu gibi durumlarda mevcut dosyalarınızın başına yada sonuna kötü amaçlı yazılım kodları eklenebilir.

find . -type f -name '\.htaccess' | xargs grep -i auto_prepend_file  
find . -type f -name '\.htaccess' | xargs grep -i auto_append_file

Şüpheli Kod Tespiti

Dosyaların içerisinde php’de kullanımı şüpheli olan kodlar olabilir. Bunları tespit etmemiz ve gerekeni yapmamız gerekebilir, wordpress veya drupal gibi hazır sistemler kullanıyorsanız sizi yanıltacak sonuçlar çıkartabilir.

find . -type f -name '*.php' | xargs egrep -i "(fsockopen|pfsockopen|stream\_socket\_client|exec|system|passthru|eval|base64_decode) *\("
  • fsockopen: DDos için kullanılabilir, uzak soket açmaya yarar
  • pfsockopen: uzak soket açar fsockopen ile aynıdır.
  • exec, system ve passthru: sunucuda komut çalıştırmaya yarar
  • stream_socket_client: Uzak bağlantı oluşturur.
  • Her ne kadar komutlar arasına eklememiş olsam da mail fonksiyonu da kullanılabilir. Özellikle spam e-posta gönderimi için oldukça popüler bir kullanımı vardır.

Aramaları tek tek yapmak isterseniz aşağıdaki komutlardan faydalanabilirsiniz.

find . -type f -name '*.php' | xargs grep -l "eval *(" --color  
find . -type f -name '*.php' | xargs grep -l "base64_decode *(" --color  
find . -type f -name '*.php' | xargs grep -l "gzinflate *(" --color  
find . -type f -name '*.php' | xargs grep -l "eval *(str_rot13 *(base64_decode *(" --color
find . -type f -name '*.php' | xargs grep -l "stream_socket_client *(" --color  
find . -type f -name '*.php' | xargs grep -l "pfsockopen *(" --color  
find . -type f -name '*.php' | xargs grep -l "mail *(" --color  

Açık bağlantıların kontrolü

Sunucunuz da şüphelenmemiz gereken durumlardan bir tanesi de açık portlar ve servisler, sizin network kaynaklarınızı olumsuz yönde kullanıyor olabilir

netstat -na | grep -i LISTEN

Aynı zamanda sistem kaynaklarınızı kripto para kazımak için kullanabileceklerini unutmayın. Yukarıdaki bağlantı kontrolüne ek sunucunuzun CPU durumuna da bakmayı unutmayınız.

Sistem Uzmanı, Linux Hacısı, El-Kernel

“Sunucu Üzerinde WebShell Tespit Etme Yöntemleri” üzerine 2 yorum

  1. Hocam hostingte bu işlemleri nasıl yapacağız.Genelde sadece cpanel veya plesk erişimimiz oluyor.Yönetim tamamen hosting firmasında.Hosting aldığımız firma bu işlemleri yapmalı öyle değil mi?

    Yanıtla
    • Merhaba

      Hosting kullananlar için bahsi geçen bu çalışmalar yapılamayacağı için dediğiniz gibi hosting aldığınız firmanın tespit işlemini yapması gerekiyor. Sunucu kullansaydınız bu dediklerimi yapmanız sorununuzu çözecekti 🙂

Yorum yapın