Bir site virüslere karşı nasıl kontrol edilir: profesyonel bir yöneticiden ipuçları
2012'den beri web sitelerini yönetiyorum. Güvenlik konusunda uzmanım: kötü amaçlı komut dosyalarını kaldırmak, güvenlik açıklarını ortadan kaldırmak. Hem küçük blogları hem de büyük çevrimiçi mağazaları tedavi ettim. Bugün sitemdeki virüsleri kontrol etmek ve kaldırmak için kullandığım araçları paylaşacağım.
Bu makale yeni başlayanlar için değildir: HTML, PHP ve JS'nin temellerini ve konsolda çalışma yeteneğini bilmeniz gerekecektir.
Virüsler nedir ve bir web sitesine nasıl girerler?
Virüs kötü amaçlı bir koddur. Sitenin görünümünü değiştirir, reklam yerleştirir, ziyaretçileri başka bir siteye gönderir, dolandırıcıların siteye erişmesine izin verir ve barındırma kaynaklarını madencilik veya diğer hesaplamalar için kullanır.
Sitede virüs varsa:
· Sayfalarda sahibinin eklemediği içerik göründü.
· Site yavaşlamıştır.
· Kullanıcılar siteye girdiklerinde başka bir kaynak görüyorlar.
· Aramadan gelen katılım düştü.
· Barındırmada yeni klasörler ortaya çıktı.
Virüsler, yanlış barındırma ayarları, parola tahmin saldırıları veya barındırma biriminin veya bilgisayarın bulaşması nedeniyle, savunmasız kod veya uzantılar yoluyla bir web sitesine girer.
Bir web sitesine virüs bulaştığında, sahibinin itibarı, arama trafiği ve web sitesi geliri riske girer. Bir web sitesini virüsten temizlemek için önce virüs bulaştığından emin olmanız, ardından kötü amaçlı kodu bulup kaldırmanız gerekir. Bundan sonra projeyi gelecekteki saldırılardan koruyun. Aşağıda size her aşamayı anlatacağım.
Bir virüsten şüpheleniyorsanız ancak emin değilseniz, virüs bulaştığından emin olmanız gerekir. Bunu yapmak için siteyi çevrimiçi tarayıcıların yanı sıra çeşitli tarayıcılar ve arama motorları aracılığıyla da kontrol ediyorum.
Çevrimiçi tarayıcıları kullanarak bir web sitesini virüslere karşı kontrol etme
Çevrimiçi tarayıcılar, kötü amaçlı kodları hızlı bir şekilde bulmanıza yardımcı olur, ancak hiçbir zaman yalnızca onlara güvenmem: tüm virüsler otomatik olarak bulunamaz. İşte birkaç hizmet:
Tarayıcılar ve cihazlar arasındaki davranış
Virus bulaşması belirtilerinden biri yönlendirmedir. Bu, kullanıcıların sitenize gittiklerinde başka bir kaynak görmeleridir. Virüs bulaşmış bir site bilgisayardan normal bir şekilde açılabilir, ancak telefondan gelen ziyaretçiler bir kimlik avı sayfasına veya mobil aboneliği olan bir sayfaya yönlendirilecektir. Veya tam tersi.
Bu nedenle sitenin farklı tarayıcılarda, işletim sistemlerinde ve mobil cihazlarda davranışını kontrol etmeniz gerekir.
Arama görünümü
Arama motorları web sitelerini otomatik olarak virüslere karşı kontrol eder. Etkilenen kaynakları gri renkle ve bir uyarı etiketiyle işaretlerler.
Sitenizi kontrol etmek için adresi Google arama çubuğuna girin. Bir uyarı görürseniz siteye virüs bulaşmış demektir. Olası virus bulaşması kararlarına ve zincirlerine bakın.
Yöntem evrensel değil! Arama motorları kötü amaçlı kodları hemen bulmaz. Ayrıca virüse, isteğin kaynağını kontrol etmesi ve arama motorlarından gizlenmesi öğretilebilir. Böyle bir virüs bir arama motorundan gelen bir istek görürse, komut dosyaları çalışmaz - arama motoru yakalamayı görmez.
Arama sonuçlarındaki sayfa sayısı
Diğer bir virüs türü ise kapı sayfalarıdır. İçeriklerini siteye yerleştiriyorlar. Sitede kapı aralıklarını kontrol etmek için aramayı tekrar kullanın. site:mysite.com
sorgusunu girin ve tüm arama sonuçlarını inceleyin. Sitenizin temasına uymayan sayfalar bulursanız bunlar kapı aralıklarıdır.
Kötü amaçlı yazılımları bulun ve kaldırın
Virus bulaşımı şüphesi olmadığında kötü amaçlı kodun bulunup kaldırılması gerekir. Asıl sorun onu bulmaktır. Site dosyalarını manuel olarak görüntülüyorum ve ayrıca konsolu kullanıyorum.
HTML ve JS komut dosyalarını analiz edin
Kötü amaçlı komut dosyaları genellikle bir web sitesinin kaynak koduna eklenir (tarayıcınızda Ctrl+U tuşlarına basın). Konu dışı JS komut dosyaları, iframe eklentileri ve spam bağlantıları olup olmadığını kontrol edin. Bulursanız silin.
Herhangi bir yabancı eklenti içerip içermediğini görmek için sayfa yükleme sırasında bağlanan tüm JS komut dosyalarını kontrol edin. Genellikle JS betiğinin başına ve sonuna yazılırlar. Tüm gereksiz eklentileri kaldırın.
Kodun anlaşılması zor veya karmaşık olabilir. Daha sonra sitedeki betiğin içeriğini yönetim sistemi, eklenti veya şablonun arşivindeki orijinal dosyayla karşılaştırın.
Dosya ve klasörlerin değiştirilme tarihini kontrol edin
Sitenin ne zaman saldırıya uğradığını biliyorsanız, o zamandan beri değiştirilen tüm dosyalarda kötü amaçlı kod bulunabilir.
Örneğin, birkaç gün önce bir hack meydana geldiyse, son 7 gün içinde değiştirilen tüm PHP betiklerini görüntülemek için şu komutu kullanmanız gerekir:
find . –name '*.ph*' –mtime -7
Komutu yürüttükten sonra, bulunan PHP komut dosyalarını olası kötü amaçlı eklemelere karşı analiz etmeniz gerekir.
Upload/backup/log/image/tmp dizinlerini analiz edin
Dizinler
upload/backup/log/image/tmp
genellikle yazılabilir olduklarından potansiyel olarak tehlikelidirler. Çoğu durumda, site dosyalarına ve veritabanına bulaşan kabuk komut dosyaları bunlara yüklenir. Bu tür dizinlerin olası kötü amaçlı PHP komut dosyalarına karşı kontrol edilmesi gerekir.
Örneğin, yükleme dizini şu komutla kontrol edilebilir:
find /upload/ -type f -name '*.ph*'
Yükleme dizinindeki tüm PHP dosyalarını gösterecektir.
Analizden sonra, virüslü dosyalar manuel olarak veya şu komutla silinebilir:
find /upload/ -name '*.php*' -exec rm '{}' \;
Standart olmayan adlara sahip dosya ve klasörleri bulun
Site dizinini açın. Standart olmayan adlara ve şüpheli içeriğe sahip dosya ve klasörleri bulun ve silin.
Tek bir dizinde çok sayıda PHP veya HTML dosyası bulun
Barındırmadaki tüm klasörlerin tek bir dizindeki birden fazla php ve html dosyası açısından kontrol edilmesi gerekir; bu, şu komutla yapılabilir:
find ./ -mindepth 2 -type f -name '*.php' | cut -d/ -f2 | sort | uniq -c | sort –nr
Komutu yürüttükten sonra, ekranda dizinlerin bir listesi ve her birindeki PHP dosyalarının sayısı görüntülenecektir. Belirli bir dizinde şüpheli derecede çok sayıda dosya varsa bunları kontrol edin.
İçeriğe göre virüs komut dosyalarını bulun
Aşağıdaki komutu kullanarak sitenizi virüs komut dosyalarına karşı hızlı bir şekilde kontrol edebilirsiniz:
find ./ -type f -name "*.php" -exec grep -i -H "wso shell\|Backdoor\|Shell\|base64_decode\|str_rot13\|gzuncompress\|gzinflate\|strrev\|killall\|navigator.userAgent.match\|mysql_safe\|UdpFlood\|40,101,115,110,98,114,105,110\|msg=@gzinflate\|sql2_safe\|NlOThmMjgyODM0NjkyODdiYT\|6POkiojiO7iY3ns1rn8\|var vst = String.fromCharCode\|c999sh\|request12.php\|auth_pass\|shell_exec\|FilesMan\|passthru\|system\|passwd\|mkdir\|chmod\|mkdir\|md5=\|e2aa4e\|file_get_contents\|eval\|stripslashes\|fsockopen\|pfsockopen\|base64_files" {} \;
Veya find kullanmadan grep'i kullanabilirsiniz.
grep -R -i -H -E "wso shell|Backdoor|Shell|base64_decode|str_rot13|gzuncompress|gzinflate|strrev|killall|navigator.userAgent.match|mysql_safe|UdpFlood|40,101,115,110,98,114,105,110|msg=@gzinflate|sql2_safe|NlOThmMjgyODM0NjkyODdiYT|6POkiojiO7iY3ns1rn8|var vst = String.fromCharCode|c999sh|request12.php|auth_pass|shell_exec|FilesMan|passthru|system|passwd|mkdir|chmod|md5=|e2aa4e|file_get_contents|eval|stripslashes|fsockopen|pfsockopen|base64_files" ./
Bu komutlar geçerli dizindeki dosyalarda kötü amaçlı kod arayacaktır. Dosyaları, başlatıldıkları dizinden yinelemeli olarak ararlar.
Çok sayıda eşleşme olacak, bulunan dosyaların çoğu kötü amaçlı yazılım olmayacak çünkü CMS modülleri de bu işlevleri kullanıyor.
Her durumda, bulunan PHP komut dosyalarını olası kötü amaçlı eklemelere karşı analiz edin. Bir dosyayı silmeden önce içeriğine baktığınızdan emin olun.
Veritabanını kontrol et
Çoğu zaman, bir site saldırıya uğradığında ve virüs bulaştığında, veritabanına kötü amaçlı kod eklenir. Veritabanında virüs olup olmadığını hızlı bir şekilde kontrol etmek için phpmyadmin'e gitmeniz ve arama yoluyla sorguları tek tek girmeniz gerekir.
<script , <? , <?php , <iframe
Kötü amaçlı bir parça bulursanız onu kaldırın.
Çevrimiçi hizmetleri kullanın
Site dosyalarını virüslere, kabuk komut dosyalarına, yönlendirmelere ve girişlere karşı otomatik olarak kontrol etmek için tarayıcıları kullanabilirsiniz:
Genellikle otomatik tarayıcılar, virüs bulaşmış bir sitedeki tüm kötü amaçlı komut dosyalarının %90'a kadarını algılar; geri kalanının yukarıdaki dahili tarama komutları kullanılarak manuel olarak aranması gerekir. Veya siteyi buluşsal analiz kullanan bir antivirüs aracılığıyla kontrol edin. Bu tür antivirüsler, henüz virüs veritabanına dahil edilmemiş bilinmeyen tehditleri bulur.
Sitenizi saldırılara karşı koruyun
Tüm kabuk komut dosyalarını ve kötü amaçlı eklentileri kaldırdıktan sonra sitenin bilgisayar korsanlığına karşı korunması gerekir. Daha sonra dışarıdan gelen saldırılara karşı savunmasız hale gelecektir.
Site admin panelini IP üzerinden koruma
Saldırganlar siteye admin panelini hackleyerek giriyorlar. Bunları önlemek için panele IP üzerinden girişe kısıtlama getirin. Başka bir deyişle, yönetici paneline yalnızca belirli bir cihazdan giriş yapılmasına izin verin.
Yönetim paneli dizinine (yönetici, bitrix/admin, wp-admin...) aşağıdaki içeriği içeren bir .htaccess dosyası ekleyin:
Sipariş Reddet, Tümünden Reddetmeye İzin Ver 1.1.1.1'den İzin Ver
Burada 1.1.1.1, yönetici paneline erişime izin verilen IP adresidir.
IP adresi statik değilse bölgeye göre IP ekleyebilirsiniz. Örneğin sağlayıcı 192.168.100.34 gibi bir IP adresi sağlıyor. Daha sonra .htaccess'e 192.168'den izin ver yazabilirsiniz.
HTTP yetkilendirmesini kullanarak yönetici panelini koruma
Site yönetici panelinde ek bir kullanıcı adı ve şifre belirleyin. Bunu yapmak için .htaccess ve .htpasswd dosyalarını yönetim paneli dizinine ekleyin (yönetici, bitrix/admin, wp-admin...).
.htaccess dosyasına aşağıdaki kodu yazmanız gerekir:
ErrorDocument 401 "Unauthorized Access"
ErrorDocument 403 "Forbidden"
AuthName "Authorized Only"
AuthType Basic
AuthUserFile /home/ site.com /admin/.htpasswd require valid-user
<Files ~ ".(css)$">
Allow from all
satisfy any
</Files>
<Files ~ ".(js)$">
Allow from all
satisfy any
</Files>
<Files ~ ".(png)$">
Allow from all
satisfy any
</Files>
<Files ~ ".(gif)$">
Allow from all
satisfy any
</Files>
<Files ~ ".(jpg)$">
Allow from all
satisfy any
</Files>
Nerede
home/site.com/admin/.htpasswd
- sunucunuzun .htpasswd dosyasının tam yoludur.
Dosyada
.htpasswd
panele giriş yaparken kullanılacak ek kullanıcı adını ve şifreyi kaydetmeniz gerekir.
Bunları Htpasswd Generator web sitesinde oluşturabilirsiniz. Kullanıcı adınızı ve şifrenizi girin ve tıklayın
Create .htpasswd file
. Sonucu .htpasswd dosyasına kopyalayın.
Web sitesi dizinlerini koruma
Varsayılan olarak sunucudaki tüm dizinler ve site dosyaları yazılabilirdir. Bu tehlikelidir çünkü bir güvenlik açığı bulan saldırgan, bir kabuk komut dosyası indirip çalıştırabilir veya sitedeki herhangi bir dizindeki bir dosyanın üzerine yazabilir.
Siteyi güvence altına almak için siteyi sertleştirmeniz, yani "betonlaştırmanız" gerekir. Bunu yapmak için, CMS'nin tüm sistem dosyaları, eklentiler ve şablonların düzgün çalışması için yazma izni gerektirmeyen hakları 444 olarak ayarlamanız gerekir; dizinler için hakları 555 olarak ayarlamanız gerekir.
Burada amaç sitedeki tüm dizinlere yazmayı devre dışı bırakmak ve site çalışırken değişiklik gerektirmeyen tüm CMS dosyalarında değişiklik yapılmasını yasaklamaktır. Dosyanın bu haklara sahip olarak okunması ve çalıştırılması mümkün olacaktır. Sitenin düzgün çalışması için aşağıdakileri yapmanız gerekir:
· Tüm dosyaların 444 izni vardır.
· Tüm klasörlerin 555 izni vardır.
· Yazılabilir olması gereken dosyalar 644'tür.
· Yazılabilir olması gereken dizin sayısı 755'tir.
Bu tür haklar, CMS'nin, eklentilerin ve şablonların yoğun şekilde değiştirildiği ve her şeyin en son sürümlere güncellenmesinin mümkün olmadığı siteler için olduğu kadar CMS, şablonlar ve eklentilerin nadiren güncellendiği basit siteler için de uygundur.
Her durumda, eklentileri ve şablonu güncellemeniz gerekirse, haklar yinelemeli olarak 644 ve 755 olarak değiştirilebilir, her şeyi güncelleyebilir ve hakları 444 ve 555 olarak yeniden ayarlayabilirsiniz.
Sıradan kullanıcıların rahatlığı için iki PHP betiği oluşturulmuştur:
mysite.com/protect.php — 444 ve 555 numaralı dosya ve klasörlerin tüm haklarını değiştirir,
mysite.com/protect.php — izinleri 644 ve 755 olarak ayarlar.
Dosya ve dizin izinlerinin program aracılığıyla değiştirilmesini önlemek için php.ini dosyasına bir yönerge eklemeniz gerekir.
disable_functions =chmod
555 izne ayarlanamayan ve komut dosyaları içermeyen dizinler (backup/log/image...) için aşağıdaki içeriğe sahip bir .htaccess dosyası eklemeniz gerekir:
RemoveHandler .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml AddType application/x-httpd-php-source .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
Bu kod, potansiyel olarak tehlikeli komut dosyalarının yürütülmesini engeller. Bu, PHP kodunun yürütülebilir dosyaların bulunmaması gereken bir dizinden yürütülmesini önleyecektir.