„Na Linuxu ne treba antivirus" rasprostranjeno je mišljenje i u izvornom obliku je tačno: virusi koji zaražavaju Linux sistemske fajlove praktično ne postoje. ClamAV na serveru ima drugi posao, i on se formuliše ovako: pronaći ono što je otpremljeno preko vašeg sajta. Pre svega veb ljuske.
Šta tačno tražimo
Veb ljuska je mali PHP fajl koji omogućava izvršavanje komandi preko pregledača. Stiže kroz formu za otpremanje, kroz ranjiv dodatak ili pogođenu administratorsku lozinku, smesti se među slike u direktorijumu za otpremanje i tamo živi mesecima. Neće je videti ni zaštitni zid ni Fail2ban: zahtevi ka njoj izgledaju kao obični zahtevi ka sajtu.
Pored toga, ClamAV pronalazi:
- zlonamerne fajlove koje su otpremili korisnici i koji se dalje serviraju sa vašeg servera — o tome obično govori pismo od vašeg provajdera;
- priloge pošte, ako server obrađuje poštu;
- Windows zlonamerni softver u skladištu fajlova — sam server to ne zanima, ali će stradati zaposleni koji preuzme fajl.
O ograničenjima odmah: ClamAV ne sprečava provalu i ne otkriva je sam. Otkriva tragove. Suptilna zadnja vrata dodata na kraj postojećeg fajla teme promaknuće skeneru potpisa — za to postoji praćenje integriteta fajlova.
Instalacija i jedno podešavanje koje je bitno
sudo apt install clamav clamav-daemon
sudo systemctl status clamav-freshclam
Druga komanda je važnija od prve. freshclam je servis za ažuriranje potpisa, i ako ne radi, ClamAV postaje beskoristan dok nastavlja da prijavljuje uspešna skeniranja. Proverite starost baza ovako:
sudo ls -l /var/lib/clamav/*.c?d
sudo freshclam
Baze starije od nedelju dana znače da je mehanizam pokvaren. Čest uzrok su blokirane odlazne veze ili to što je freshclam pokrenut ručno kao root, posle čega servis ne može da piše u sopstveni fajl zbog dozvola.
Memorija: demon ili jednokratno pokretanje
Postoje dva načina korišćenja i izbor treba da bude svestan.
clamd je stalno pokrenut demon koji drži baze u memoriji. Odgovara brzo ali zauzima oko gigabajt RAM-a. Na VPS-u sa jednim ili dva gigabajta to je neprihvatljivo: demon će istisnuti bazu i PHP-FPM, a server će početi da puzi bez vidljivog razloga. Dijagnostikuje se sa free -m i po aktivnom swap-u.
Alternativa je clamscan po rasporedu. Sporiji je (učitava baze pri svakom pokretanju, oko minut) ali radi samo tokom skeniranja:
sudo clamscan -r -i --exclude-dir='^/(proc|sys|dev|run)' /var/www
Zastavica -i ispisuje samo ono što je pronađeno; inače izlaz dostiže stotine hiljada redova.
Skenirajte direktorijume, ne disk
Skeniranje celog diska na slabom serveru traje satima i stvara opterećenje, zbog čega se zakazuje za noć a onda potpuno isključi. Praktičnije je skenirati ono što se zaista menja spolja:
0 3 * * * ionice -c3 nice -n19 clamscan -r -i --move=/var/quarantine /var/www/uploads
Tri stvari u tom redu su bitne. ionice i nice uklanjaju uticaj na sajt. --move umesto --remove — fajl ide u karantin umesto da bude obrisan: lažni pozitivi se dešavaju, a greškom obrisan fajl kupca ne može se odnekud vratiti. I direktorijum za skeniranje je onaj u koji se fajlovi otpremaju, a ne koren.
Potpisi za veb ljuske
Podrazumevane ClamAV baze slabe su na PHP zadnjim vratima — usmerene su uglavnom na poštanski saobraćaj. Linux Malware Detect (maldet) tu se snalazi osetno bolje: ima sopstveni skup potpisa izgrađen upravo oko veb ljuski i skenira ClamAV mašinom ako je ona instalirana. Uobičajena kombinacija je ClamAV kao mašina i baza koja se ažurira, maldet kao izvor specijalizovanih potpisa.
Šta raditi sa nalazom
Pronađena veb ljuska nije kraj istrage nego njen početak. Fajl u direktorijumu za otpremanje znači da je neko mogao tamo da piše, a brisanje fajla tu mogućnost ne uklanja.
- Nemojte ga odmah obrisati — sačuvajte kopiju i zabeležite vreme izmene fajla.
- Koristeći to vreme, pronađite u dnevnicima veb servera koji ga je zahtev tamo doneo. To je ranjivost.
- Tražite susede: zadnja vrata gotovo se nikada ne ostavljaju u jednom primerku.
- Proverite šta se još na disku promenilo u istom periodu i da li su se pojavili novi cron poslovi i SSH ključevi.
Posebno o lažnim pozitivima. Biblioteke šablona i minifikovani JavaScript ponekad se poklope sa potpisima. Otuda karantin umesto brisanja, i otuda savet da ne priključujete svaki skup potpisa trećih strana koji nađete: poverenje u izveštaj u kojem je polovina redova šum gubi se za nedelju dana i ljudi ga prestanu čitati.
Praktična vrednost skenera je u tome da vam njegovi rezultati zapadnu za oko: kada je poslednje skeniranje radilo, koliko su baze stare, šta je pronađeno. To je jedan jedini red, ali njegovo odsustvo pretvara instaliran antivirus u kvačicu u kućici. Kako taj red izgleda pokazuje demo stranica ispod.