Shell Nedir ve Neden Sitemde Olmaması Gerekir?
Shell, bir web sunucusuna uzaktan erişim ve kontrol sağlayan kötü amaçlı bir betiktir. Saldırganlar, bu betiği kullanarak sunucunuza dosya yükleyebilir, veritabanına erişebilir, sistem ayarlarını değiştirebilir ve hatta tüm sunucuyu ele geçirebilir. Shell'ler genellikle güvenlik açıkları olan uygulamalar veya zayıf şifreler aracılığıyla sunucuya yüklenir. Sitenizde bir shell bulunması, ciddi güvenlik ihlallerine ve veri kayıplarına yol açabilir. Bu nedenle, shell'leri tespit etmek ve kaldırmak son derece önemlidir.
Önemli Not: Shell'ler genellikle PHP, Python, Perl veya diğer sunucu taraflı dillerde yazılır. Ancak, herhangi bir betik dili kullanılarak oluşturulabilirler.
Sitemde Shell Olduğunu Nasıl Anlarım?
Sitenizde shell olup olmadığını anlamak için dikkat etmeniz gereken bazı belirtiler şunlardır:
- Beklenmedik dosya ve klasörler: Sunucunuzda daha önce görmediğiniz veya oluşturmadığınız dosya ve klasörler (özellikle web dizinlerinde).
- Değiştirilmiş dosyalar: Dosyalarınızın son değiştirilme tarihlerinin beklenmedik şekilde değişmesi.
- Yüksek sunucu yükü: Sunucunuzun normalden daha fazla kaynak tüketmesi (CPU, bellek vb.).
- Garip trafik: Sitenize gelen veya sitenizden giden şüpheli trafik.
- Hata mesajları: Sitenizde beklenmedik hata mesajları veya uyarılar.
- Güvenlik uyarıları: Güvenlik yazılımlarınızın veya hosting sağlayıcınızın güvenlik uyarıları göndermesi.
- Kullanıcı şikayetleri: Kullanıcılarınızın sitenizde garip davranışlar veya hatalar bildirmesi.
Bu belirtilerden herhangi birini fark ederseniz, sitenizde shell olma ihtimali yüksektir ve derhal harekete geçmeniz gerekir.
Shell'leri Bulmak İçin Hangi Yöntemleri Kullanabilirim?
Shell'leri bulmak için kullanabileceğiniz çeşitli yöntemler vardır:
- Manuel İnceleme: Sunucunuzdaki dosyaları manuel olarak inceleyerek şüpheli dosya ve klasörleri arayabilirsiniz. Bu yöntem zaman alıcı olabilir, ancak bazı durumlarda etkili olabilir. Özellikle son zamanlarda değişen dosyalara odaklanmak işe yarayabilir.
- Güvenlik Taraması: Web uygulama güvenlik tarayıcıları veya sunucu taraflı güvenlik tarayıcıları kullanarak sitenizi otomatik olarak tarayabilirsiniz. Bu tarayıcılar, bilinen shell imzalarını ve kötü amaçlı kodları tespit edebilir.
- Log Analizi: Sunucu günlüklerinizi (access logs, error logs vb.) analiz ederek şüpheli etkinlikleri tespit edebilirsiniz. Örneğin, bilinmeyen IP adreslerinden gelen istekler veya hatalı dosya erişimleri shell aktivitesinin belirtisi olabilir.
- Dosya Bütünlüğü İzleme: Dosya bütünlüğü izleme araçları (örneğin, AIDE veya Tripwire) kullanarak dosyalarınızdaki değişiklikleri takip edebilirsiniz. Bu araçlar, dosyalarınızda yetkisiz değişiklikler yapıldığında sizi uyarır.
- Kod Analizi: Kod analizi araçları kullanarak sitenizin kaynak kodunu analiz edebilirsiniz. Bu araçlar, potansiyel güvenlik açıklarını ve kötü amaçlı kodları tespit edebilir.
- Shell Algılama Araçları: Özellikle shell'leri tespit etmek için tasarlanmış araçlar bulunmaktadır. Bu araçlar, shell'lerin karakteristik özelliklerini (örneğin, base64 ile kodlanmış kodlar, eval fonksiyonları) kullanarak şüpheli dosyaları tespit edebilir.
Adım Adım Talimat (Manuel İnceleme):
- Sunucuya erişin: SSH veya FTP gibi bir yöntemle sunucunuza erişin.
- Web dizinine gidin: Sitenizin dosyalarının bulunduğu web dizinine gidin (genellikle public_html, www veya benzeri bir isimdedir).
- Dosyaları listeleyin:
ls -lart
komutunu kullanarak dosyaları son değiştirilme tarihine göre sıralayın. - Şüpheli dosyaları inceleyin: Son zamanlarda değiştirilmiş veya daha önce görmediğiniz dosyaları dikkatlice inceleyin.
- Dosya içeriğini kontrol edin: Şüpheli dosyaların içeriğini bir metin düzenleyici ile açın ve kötü amaçlı kod arayın. Özellikle
eval
,base64_decode
,exec
gibi fonksiyonlara dikkat edin.
Shell Algılama Araçları ve Komut Satırı Örnekleri
Shell algılama araçları, manuel incelemeye kıyasla daha hızlı ve kapsamlı bir tarama yapmanızı sağlar. İşte bazı popüler araçlar ve komut satırı örnekleri:
- ClamAV: Açık kaynaklı bir antivirüs yazılımıdır. Sitenizdeki dosyaları kötü amaçlı yazılımlara karşı tarayabilir.
clamscan -r /path/to/your/website
- rkhunter (Rootkit Hunter): Rootkit'leri ve potansiyel kötü amaçlı yazılımları tespit etmek için kullanılan bir araçtır.
rkhunter --check
- LMD (Linux Malware Detect): Linux sistemler için tasarlanmış bir kötü amaçlı yazılım algılama aracıdır.
lmd -c -m /path/to/your/website
- find komutu: Komut satırı üzerinden belirli kriterlere göre dosya aramak için kullanılabilir. Örneğin, son 24 saatte değiştirilmiş PHP dosyalarını bulmak için:
find /path/to/your/website -name "*.php" -mtime -1
- grep komutu: Dosyalar içinde belirli metinleri aramak için kullanılabilir. Örneğin, "eval(base64_decode" ifadesini içeren dosyaları bulmak için:
grep -r "eval(base64_decode" /path/to/your/website
Önemli Not: Bu araçları kullanmadan önce, sisteminizin güncel olduğundan ve araçların doğru şekilde yapılandırıldığından emin olun.
Log Analizi Nasıl Yapılır?
Sunucu günlükleri, sitenizde meydana gelen olayların kaydını tutar. Bu günlükleri analiz ederek şüpheli etkinlikleri tespit edebilirsiniz. İşte log analizine ilişkin bazı ipuçları:
- Hangi günlükleri incelemelisiniz? En önemli günlükler şunlardır:
- Access logs: Sitenize yapılan tüm isteklerin kaydını tutar. IP adresleri, istenen URL'ler, kullanıcı aracıları ve HTTP durum kodları gibi bilgileri içerir.
- Error logs: Sitenizde oluşan hataların kaydını tutar. PHP hataları, veritabanı hataları ve diğer sunucu hataları gibi bilgileri içerir.
- Nelere dikkat etmelisiniz?
- Bilinmeyen IP adresleri: Sitenize daha önce hiç erişmemiş olan veya şüpheli görünen IP adreslerinden gelen istekler.
- Hatalı dosya erişimleri: Mevcut olmayan veya yetkisiz erişim girişimleri.
- Anormal istekler: Uzun URL'ler, garip parametreler veya şüpheli kullanıcı aracıları içeren istekler.
- Yüksek sayıda istek: Belirli bir IP adresinden gelen aşırı sayıda istek (DDoS saldırısı belirtisi olabilir).
- Hata kodları: 404 (Bulunamadı), 500 (Sunucu Hatası) gibi hata kodlarının sıkça görülmesi.
- Log analizi araçları: Log analizini kolaylaştırmak için çeşitli araçlar kullanabilirsiniz. Örneğin:
- AWStats: Web sunucusu günlüklerini analiz eden ve istatistikler üreten bir araçtır.
- GoAccess: Gerçek zamanlı web günlüğü analizcisi.
- ELK Stack (Elasticsearch, Logstash, Kibana): Büyük miktarda log verisini analiz etmek ve görselleştirmek için kullanılan güçlü bir platformdur.
Gerçek Hayattan Örnek: Bir e-ticaret sitesi, sunucu günlüklerinde bilinmeyen IP adreslerinden gelen çok sayıda POST isteği fark etti. Bu istekler, siteye ürün ekleme ve sipariş verme girişimleriydi. Log analizi sonucunda, bu isteklerin otomatik bir bot tarafından yapıldığı ve sitenin sahte siparişlerle doldurulmaya çalışıldığı tespit edildi. Güvenlik önlemleri alınarak saldırı engellendi.
Shell Bulunduğunda Ne Yapmalıyım?
Sitenizde bir shell bulduğunuzda, aşağıdaki adımları izlemelisiniz:
- Shell'i Silin: Bulduğunuz shell dosyasını derhal sunucunuzdan silin.
- Güvenlik Açığını Kapatın: Shell'in sunucuya nasıl yüklendiğini araştırın ve bu güvenlik açığını kapatın. Bu, uygulamanızdaki bir güvenlik açığı, zayıf bir şifre veya güncel olmayan bir yazılım olabilir.
- Şifreleri Değiştirin: Tüm kullanıcı hesaplarının (özellikle yönetici hesaplarının), veritabanı hesaplarının ve FTP hesaplarının şifrelerini değiştirin.
- Sistemi Tarayın: Sunucunuzu ve sitenizi kapsamlı bir şekilde tarayarak başka shell veya kötü amaçlı yazılım olup olmadığını kontrol edin.
- Verileri Geri Yükleyin (Gerekirse): Eğer saldırganlar verilerinizi değiştirdiyse veya sildiyse, son yedeğinizden verileri geri yükleyin.
- Güvenlik Duvarını Yapılandırın: Web uygulama güvenlik duvarı (WAF) kullanarak sitenizi gelecekteki saldırılardan koruyun.
- Güvenlik Güncellemelerini Yapın: Tüm yazılımlarınızın (işletim sistemi, web sunucusu, uygulamalar vb.) en son sürümlerini yükleyin.
- Olayı Rapor Edin: Eğer kişisel verilerin ihlali söz konusuysa, ilgili makamlara (örneğin, Kişisel Verileri Koruma Kurumu) olayı rapor edin.
Vaka Çalışması: Bir haber sitesi, sunucularına yüklenen bir shell nedeniyle hacklendi. Saldırganlar, shell aracılığıyla siteye erişerek ana sayfayı değiştirdiler ve sahte haberler yayınladılar. Site yöneticileri, shell'i tespit ettikten sonra derhal sildiler, güvenlik açığını kapattılar ve siteyi son yedeğinden geri yüklediler. Ayrıca, tüm kullanıcı hesaplarının şifrelerini değiştirdiler ve siteye bir web uygulama güvenlik duvarı kurdular.
Shell Saldırılarından Korunmak İçin Alınabilecek Önlemler
Shell saldırılarından korunmak için alabileceğiniz çeşitli önlemler vardır:
- Güçlü Şifreler Kullanın: Tüm hesaplarınız için güçlü ve benzersiz şifreler kullanın.
- Yazılımlarınızı Güncel Tutun: İşletim sistemi, web sunucusu, uygulamalar ve eklentiler dahil olmak üzere tüm yazılımlarınızı düzenli olarak güncelleyin.
- Güvenlik Açıklarını Yama: Uygulamalarınızdaki güvenlik açıklarını düzenli olarak tarayın ve yamalayın.
- Gereksiz Yazılımları Kaldırın: Kullanmadığınız yazılımları sunucunuzdan kaldırın. Bu, saldırı yüzeyini azaltır.
- Dosya İzinlerini Doğru Ayarlayın: Dosya ve klasörlerinizin izinlerini doğru şekilde ayarlayın. Gereksiz yere yazma izni vermeyin.
- Girişleri Doğrulayın: Kullanıcı girişlerini (formlar, URL parametreleri vb.) her zaman doğrulayın ve temizleyin. SQL injection ve cross-site scripting (XSS) gibi saldırıları önlemek için bu önemlidir.
- Dosya Yüklemelerini Kısıtlayın: Dosya yüklemelerine izin veriyorsanız, dosya türlerini ve boyutlarını kısıtlayın. Yürütülebilir dosyaların (örneğin, .php, .exe) yüklenmesini engelleyin.
- Güvenlik Duvarı Kullanın: Web uygulama güvenlik duvarı (WAF) kullanarak sitenizi kötü amaçlı trafiğe karşı koruyun.
- Düzenli Yedekleme Yapın: Sitenizin ve veritabanınızın düzenli olarak yedeğini alın. Böylece, bir saldırı durumunda verilerinizi kolayca geri yükleyebilirsiniz.
- Güvenlik İzleme Yapın: Sunucunuzu ve sitenizi düzenli olarak güvenlik açısından izleyin. Şüpheli etkinlikleri tespit etmek için log analizini kullanın.
- İki Faktörlü Kimlik Doğrulama Kullanın: Mümkünse, tüm hesaplarınız için iki faktörlü kimlik doğrulama (2FA) kullanın.
Önemli Not: Güvenlik, tek seferlik bir iş değildir. Sürekli bir süreçtir. Düzenli olarak güvenlik önlemleri alarak ve sisteminizi izleyerek sitenizi shell saldırılarından koruyabilirsiniz.
Güvenlik Açıklarının Türleri ve Shell ile İlişkisi
Shell'lerin sunucuya yüklenmesine neden olan çeşitli güvenlik açıkları bulunmaktadır. İşte en yaygın güvenlik açığı türleri ve shell ile ilişkisi:
Güvenlik Açığı Türü | Açıklama | Shell ile İlişkisi |
---|---|---|
Dosya Yükleme Açıkları | Kullanıcının sunucuya dosya yüklemesine izin veren ancak dosya türünü ve içeriğini yeterince kontrol etmeyen uygulamalarda ortaya çıkar. | Saldırganlar, bu açığı kullanarak kötü amaçlı bir shell betiğini sunucuya yükleyebilir. |
SQL Injection | Kullanıcı girişlerinin veritabanı sorgularına doğrudan eklenmesi sonucu oluşan bir güvenlik açığıdır. | Saldırganlar, SQL injection kullanarak veritabanından bilgi çalabilir, verileri değiştirebilir veya hatta sunucuda komut çalıştırabilir (bu da shell yüklemeye yol açabilir). |
Cross-Site Scripting (XSS) | Kötü amaçlı JavaScript kodunun bir web sitesine enjekte edilmesi sonucu oluşan bir güvenlik açığıdır. | XSS, doğrudan shell yüklemeye yol açmasa da, saldırganlar XSS kullanarak kullanıcıların oturum çerezlerini çalabilir ve yönetici hesaplarına erişebilir. Bu da dolaylı olarak shell yüklemeye yol açabilir. |
Remote File Inclusion (RFI) | Uygulamanın uzak bir dosyayı çalıştırmasına izin veren bir güvenlik açığıdır. | Saldırganlar, bu açığı kullanarak kendi sunucularında barındırdıkları kötü amaçlı bir shell betiğini uygulamada çalıştırabilir. |
Local File Inclusion (LFI) | Uygulamanın yerel bir dosyayı çalıştırmasına izin veren bir güvenlik açığıdır. | Saldırganlar, bu açığı kullanarak sunucudaki hassas dosyaları okuyabilir veya log dosyalarına shell kodu enjekte edebilir. |
Zayıf Şifreler | Kullanıcıların kolayca tahmin edilebilir şifreler kullanması durumunda ortaya çıkar. | Saldırganlar, brute-force veya dictionary attack yöntemleri kullanarak zayıf şifreleri kırabilir ve sunucuya erişebilir. Bu da shell yüklemeye yol açabilir. |
Güncel Olmayan Yazılımlar | Yazılımların (işletim sistemi, web sunucusu, uygulamalar vb.) güncel olmaması durumunda, bilinen güvenlik açıkları saldırganlar tarafından kullanılabilir. | Saldırganlar, güncel olmayan yazılımlardaki güvenlik açıklarını kullanarak sunucuya erişebilir ve shell yükleyebilir. |
Shell Türleri ve Özellikleri
Farklı türde shell'ler bulunmaktadır ve her birinin kendine özgü özellikleri vardır. İşte bazı yaygın shell türleri:
Shell Türü | Açıklama | Özellikler | Tespit Yöntemleri |
---|---|---|---|
Web Shell | Web sunucusuna yüklenen ve bir web tarayıcısı aracılığıyla erişilen bir shell'dir. | Genellikle PHP, ASP, JSP veya diğer sunucu taraflı dillerde yazılır. Kullanıcı arayüzü veya komut satırı arayüzü sağlayabilir. | Dosya adları, dosya içerikleri, erişim günlükleri, web uygulama güvenlik duvarı (WAF) |
Reverse Shell | Saldırganın sunucusuna bağlantı kuran bir shell'dir. | Saldırganın güvenlik duvarını aşmasına ve iç ağlara erişmesine olanak tanır. | Ağ trafiği analizi, süreç izleme, sistem çağrıları |
Bind Shell | Sunucuda bir port açan ve gelen bağlantıları dinleyen bir shell'dir. | Saldırganın sunucuya doğrudan bağlanmasını sağlar. | Açık port taraması, güvenlik duvarı kuralları |
Meterpreter | Metasploit Framework tarafından kullanılan gelişmiş bir shell'dir. | Çok çeşitli özelliklere sahiptir (dosya yönetimi, süreç yönetimi, ağ trafiği dinleme, keylogging vb.). | Bellek analizi, ağ trafiği analizi, sistem çağrıları |
PHP Shell | PHP dili kullanılarak yazılmış bir shell'dir. | eval() , system() , exec() gibi fonksiyonları sıkça kullanır. |
Dosya içerikleri, PHP logları, güvenlik taramaları |
Önemli Not: Shell türleri ve özellikleri sürekli olarak gelişmektedir. Bu nedenle, güvenlik önlemlerinizi düzenli olarak güncellemeniz ve yeni tehditlere karşı hazırlıklı olmanız önemlidir.