„На Linux антивирус не е нужен“ е разпространено мнение и в първоначалния си вид е вярно: вируси, заразяващи системните файлове на Linux, практически няма. На сървър ClamAV има друга задача и тя е: да намери това, което е качено през вашия сайт. Преди всичко уеб обвивки.

Какво точно се търси

Уеб обвивката е малък PHP файл, който позволява изпълнение на команди през браузъра. Попада на сървъра през форма за качване, уязвимо разширение или отгатната администраторска парола, ляга в директорията за качени файлове сред снимките и живее там с месеци. Нито защитната стена, нито Fail2ban ще я видят: заявките към нея изглеждат като обикновени заявки към сайта.

Освен това ClamAV намира:

  • зловредни файлове, качени от потребители и раздавани по-нататък от вашия сървър — обикновено за това идва писмо от хостинг доставчика;
  • пощенски прикачени файлове, ако сървърът обслужва поща;
  • зловреден софтуер за Windows във файлови хранилища — на самия сървър не вреди, но служителят, който изтегли файла, ще пострада.

И веднага за границите: ClamAV не пречи на пробива и сам не го открива. Открива следите. Незабележима задна врата, дописана в съществуващ файл на темата, ще убегне на сигнатурния скенер — за това служи контролът на целостта.

Инсталиране и най-важната настройка

sudo apt install clamav clamav-daemon
sudo systemctl status clamav-freshclam

Втората команда е по-важна от първата. freshclam е услугата за обновяване на сигнатурите и ако не работи, ClamAV става безполезен, продължавайки да отчита успешни сканирания. Възрастта на базите се проверява така:

sudo ls -l /var/lib/clamav/*.c?d
sudo freshclam

Бази, по-стари от седмица, означават счупен механизъм. Честа причина са блокираните изходящи връзки или ръчно стартиране на freshclam като root, след което услугата вече не може да пише в собствения си файл заради правата.

Памет: постоянна услуга или еднократно стартиране

Начините за използване са два и изборът между тях трябва да е съзнателен.

clamd е постоянно работеща услуга, която държи базите в паметта. Отговаря бързо, но заема около гигабайт оперативна памет. На VPS с един-два гигабайта това е неприемливо: услугата ще изтласка базата данни и PHP-FPM и сървърът ще започне да буксува без видима причина. Разпознава се по free -m и по активния swap.

Алтернативата е clamscan по график. По-бавен е (зарежда базите при всяко стартиране, около минута), но работи само по време на сканирането:

sudo clamscan -r -i --exclude-dir='^/(proc|sys|dev|run)' /var/www

Ключът -i извежда само находките; иначе изходът е стотици хиляди редове.

Да се сканират директории, а не дискът

Пълното сканиране на диска на слаб сървър трае часове и натоварва машината, заради което се слага за през нощта, а после се изключва напълно. По-практично е да се сканира това, което наистина се променя отвън:

0 3 * * * ionice -c3 nice -n19 clamscan -r -i --move=/var/quarantine /var/www/uploads

Три неща в този ред са съществени. ionice и nice премахват влиянието върху сайта. --move вместо --remove — файлът отива в карантина, а не се изтрива: фалшиви сигнали се случват, а погрешно изтрит файл на клиента няма откъде да се вземе. А сканираната директория е тази, в която се качва, а не коренът на сайта.

Сигнатури за уеб обвивки

Стандартните бази на ClamAV се справят слабо със задните врати в PHP — насочени са главно към пощенския трафик. Значително по-добре се справя Linux Malware Detect (maldet): има собствен набор сигнатури, изграден точно около уеб обвивките, и сканира с двигателя на ClamAV, ако той е инсталиран. Обичайната комбинация е ClamAV като двигател и обновена база, maldet като източник на специализирани сигнатури.

Какво да се направи с находката

Намерената уеб обвивка не е краят на разследването, а неговото начало. Файл в директорията за качвания означава, че някой е успял да запише там, а изтриването на файла не отнема тази възможност.

  1. Не изтривайте веднага — запазете копие и си отбележете времето на промяна на файла.
  2. По това време намерете в журналите на уеб сървъра заявката, която го е поставила там. Това е уязвимостта.
  3. Потърсете съседи: задни врати почти никога не се оставят в един-единствен екземпляр.
  4. Проверете какво още се е променило на диска през същия период и не са ли се появили нови cron задачи и SSH ключове.

Отделно за фалшивите сигнали. Библиотеки с шаблони и минифициран JavaScript понякога попадат под сигнатурите. Затова карантина, а не изтриване, и затова също няма смисъл безразборно да се включват всички намерени чужди набори сигнатури: доверието към отчет, в който половината редове са шум, се губи за седмица и после изобщо не се чете.

Практическата стойност на скенера е резултатите му да се набиват на очи: кога е било последното сканиране, колко са стари базите, какво е намерено. Това е един ред, но без него инсталираният антивирус се превръща в отметната точка. Как изглежда този ред, показва демонстрационната страница по-долу.