«Linux’ta antivirüse gerek yok» yaygın bir görüştür ve özgün biçimiyle doğrudur: Linux sistem dosyalarına bulaşan virüsler neredeyse yoktur. Bir sunucudaki ClamAV’ın işi başkadır ve şöyle ifade edilir: sitenizden yüklenmiş olanı bulmak. Her şeyden önce web kabuklarını.
Tam olarak neyi arıyoruz
Web kabuğu, tarayıcı üzerinden komut çalıştırmayı mümkün kılan küçük bir PHP dosyasıdır. Bir yükleme formundan, açığı olan bir eklentiden ya da tahmin edilmiş bir yönetici parolasından gelir, bir yükleme dizinindeki resimlerin arasına yerleşir ve orada aylarca yaşar. Ne güvenlik duvarı ne de Fail2ban onu görür: ona giden istekler siteye giden sıradan istekler gibi görünür.
Bunun dışında ClamAV şunları bulur:
- kullanıcıların yüklediği ve sunucunuzdan başkalarına sunulan zararlı dosyalar — sağlayıcınızdan gelen mektup genellikle bununla ilgilidir;
- sunucu posta işliyorsa posta ekleri;
- dosya deposundaki Windows zararlıları — sunucunun kendisini ilgilendirmez, ama dosyayı indiren çalışan zarar görür.
Sınırlar konusunda hemen söyleyelim: ClamAV bir sızmayı engellemez ve kendi başına tespit etmez. İzleri tespit eder. Var olan bir tema dosyasının sonuna eklenmiş ince bir arka kapıyı imza tabanlı bir tarayıcı kaçırır — dosya bütünlüğü izlemesi tam da bunun içindir.
Kurulum ve önemli olan tek ayar
sudo apt install clamav clamav-daemon
sudo systemctl status clamav-freshclam
İkinci komut birincisinden daha önemlidir. freshclam imza güncelleme servisidir ve çalışmıyorsa ClamAV, başarılı taramalar bildirmeye devam ederken işe yaramaz hale gelir. Veritabanlarının yaşını şöyle kontrol edin:
sudo ls -l /var/lib/clamav/*.c?d
sudo freshclam
Bir haftadan eski veritabanları mekanizmanın bozuk olduğu anlamına gelir. Sık görülen bir neden, giden bağlantıların engellenmiş olması ya da freshclam komutunun elle root olarak çalıştırılmış olmasıdır; bundan sonra servis izinler yüzünden kendi dosyasına yazamaz.
Bellek: daemon mu, tek seferlik çalıştırma mı
Kullanmanın iki yolu vardır ve seçim bilinçli olmalıdır.
clamd, veritabanlarını bellekte tutan, sürekli çalışan bir daemon’dur. Hızlı yanıt verir, ama yaklaşık bir gigabayt RAM kaplar. Bir iki gigabaytlık bir VPS’te bu kabul edilemez: daemon veritabanını ve PHP-FPM’i sıkıştırır ve sunucu görünür bir neden olmadan sürünmeye başlar. free -m ile ve etkin takas alanıyla teşhis edilir.
Alternatif, bir zamanlamaya göre çalışan clamscan’dir. Daha yavaştır (her çalıştırmada veritabanlarını yükler, yaklaşık bir dakika) ama yalnızca tarama sırasında çalışır:
sudo clamscan -r -i --exclude-dir='^/(proc|sys|dev|run)' /var/www
-i bayrağı yalnızca bulunanı yazdırır; aksi halde çıktı yüz binlerce satıra ulaşır.
Diski değil, dizinleri tarayın
Zayıf bir sunucuda diskin tamamını taramak saatler sürer ve yük yaratır; bu yüzden gece için zamanlanır ve sonra tümüyle kapatılır. Dışarıdan gerçekten değişeni taramak daha pratiktir:
0 3 * * * ionice -c3 nice -n19 clamscan -r -i --move=/var/quarantine /var/www/uploads
O satırda üç şey önemlidir. ionice ve nice siteye etkiyi ortadan kaldırır. --remove yerine --move — dosya silinmek yerine karantinaya gider: yanlış pozitifler olur ve yanlışlıkla silinmiş bir müşteri dosyası hiçbir yerden kurtarılamaz. Ve taranacak dizin, kök değil, dosyaların yüklendiği dizindir.
Web kabukları için imzalar
Standart ClamAV veritabanları PHP arka kapıları konusunda zayıftır — çoğunlukla posta trafiğine yöneliktirler. Linux Malware Detect (maldet) burada belirgin biçimde daha iyidir: tam olarak web kabukları etrafında kurulmuş kendi imza kümesi vardır ve kuruluysa ClamAV motoruyla tarama yapar. Alışıldık birleşim, motor ve güncellenebilir veritabanı olarak ClamAV, uzmanlaşmış imzaların kaynağı olarak maldet’tir.
Bir bulguyla ne yapmalı
Bulunan bir web kabuğu soruşturmanın sonu değil, başlangıcıdır. Bir yükleme dizinindeki bir dosya, birinin oraya yazabildiği anlamına gelir ve dosyayı silmek o yeteneği ortadan kaldırmaz.
- Hemen silmeyin — bir kopyasını saklayın ve dosyanın değişiklik zamanını not edin.
- O zamanı kullanarak web sunucusu günlüklerinde onu oraya hangi isteğin koyduğunu bulun. Açık odur.
- Komşularını arayın: bir arka kapı neredeyse hiçbir zaman tek bir kopya olarak bırakılmaz.
- Aynı dönemde diskte başka nelerin değiştiğini, yeni cron görevleri ve SSH anahtarları belirip belirmediğini kontrol edin.
Yanlış pozitifler hakkında ayrı bir not. Şablon kütüphaneleri ve küçültülmüş JavaScript bazen imzalarla eşleşir. Silme yerine karantinanın nedeni budur; bulabildiğiniz her üçüncü taraf imza kümesini eklememe tavsiyesinin nedeni de budur: satırlarının yarısı gürültü olan bir rapora duyulan güven bir hafta içinde yiter ve insanlar onu okumayı bırakır.
Bir tarayıcının pratik değeri, sonuçlarının gözünüze çarpmasındadır: son tarama ne zaman çalıştı, veritabanları ne kadar eski, ne bulundu. Bu tek bir satırdır, ama yokluğu kurulmuş bir antivirüsü bir kutucuğa atılmış işarete dönüştürür. O satırın nasıl göründüğü aşağıdaki demo sayfasında.