”Linuxissa ei tarvita virustorjuntaa” on laajalle levinnyt käsitys, ja alkuperäisessä muodossaan se on oikea: Linuxin järjestelmätiedostoja saastuttavia viruksia ei käytännössä ole. Palvelimella ClamAV:lla on toinen tehtävä, ja se kuuluu: löytää se, mikä on ladattu sivustosi kautta. Ennen kaikkea verkkokuoret.

Mitä oikeastaan etsitään

Verkkokuori on pieni PHP-tiedosto, jonka avulla komentoja voi ajaa selaimen kautta. Se päätyy palvelimelle latauslomakkeen, haavoittuvan laajennuksen tai arvatun ylläpitosalasanan kautta, asettuu latauskansioon kuvien joukkoon ja elää siellä kuukausia. Palomuuri eikä Fail2ban näe sitä: pyynnöt siihen näyttävät tavallisilta sivustopyynnöiltä.

Lisäksi ClamAV löytää:

  • käyttäjien lataamia haitallisia tiedostoja, joita jaetaan eteenpäin palvelimeltasi — juuri silloin tulee yleensä kirje palveluntarjoajalta;
  • sähköpostin liitteitä, jos palvelin käsittelee postia;
  • Windows-haittaohjelmia tiedostovarastoissa — palvelin itse ei kärsi, mutta tiedoston lataava työntekijä kärsii.

Ja heti rajoista: ClamAV ei estä murtoa eikä havaitse itse murtoa. Se havaitsee jäljet. Hienovaraisen takaoven, joka on lisätty olemassa olevaan teematiedostoon, allekirjoitusskanneri ohittaa — se on eheystarkistuksen tehtävä.

Asennus ja tärkein asetus

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

Toinen komento on tärkeämpi kuin ensimmäinen. freshclam on palvelu, joka päivittää allekirjoitukset, ja jos se ei toimi, ClamAV muuttuu hyödyttömäksi raportoiden edelleen onnistuneista skannauksista. Tietokantojen ikä tarkistetaan näin:

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

Viikkoa vanhemmat tietokannat tarkoittavat rikkinäistä mekanismia. Tavallinen syy on estetyt lähtevät yhteydet tai se, että freshclam on ajettu käsin rootina, minkä jälkeen palvelu ei enää voi kirjoittaa omaan tiedostoonsa oikeuksien takia.

Muisti: jatkuva palvelu vai kertaluontoinen ajo

Käyttötapoja on kaksi, ja valinta niiden välillä on tehtävä tietoisesti.

clamd on jatkuvasti käynnissä oleva palvelu, joka pitää tietokannat muistissa. Se vastaa nopeasti mutta vie noin gigatavun työmuistia. VPS:llä, jossa on yksi tai kaksi gigatavua, se on kestämätöntä: palvelu syrjäyttää tietokannan ja PHP-FPM:n, ja palvelin alkaa nykiä ilman näkyvää syytä. Sen tunnistaa komennosta free -m ja siitä, että sivutus on aktiivinen.

Vaihtoehto on clamscan aikataulun mukaan. Se on hitaampi (lataa tietokannat joka ajolla, noin minuutin) mutta työskentelee vain skannauksen ajan:

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

Valitsin -i tulostaa vain löydöt; muuten tuloste on satojatuhansia rivejä.

Skannaa hakemistoja, ei koko levyä

Koko levyn skannaus heikolla palvelimella kestää tunteja ja kuormittaa konetta, minkä takia se siirretään yöhön ja sitten kytketään kokonaan pois. Käytännöllistä on skannata se, mikä todella muuttuu ulkoa:

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

Kolme asiaa tuolla rivillä on tärkeitä. ionice ja nice poistavat vaikutuksen sivustoon. --move eikä --remove — tiedosto päätyy karanteeniin eikä sitä poisteta: vääriä hälytyksiä sattuu, eikä vahingossa poistettua asiakkaan tiedostoa saa mistään takaisin. Ja skannattava hakemisto on se, johon ladataan, ei juurihakemisto.

Allekirjoitukset verkkokuorille

ClamAV:n vakiotietokannat pärjäävät huonosti PHP-takaovien kanssa — ne on suunnattu pääosin sähköpostiliikenteeseen. Selvästi parempi on Linux Malware Detect (maldet): sillä on oma allekirjoituskokoelma, joka on rakennettu juuri verkkokuorten ympärille, ja se skannaa ClamAV:n moottorilla, jos se on asennettu. Tavallinen yhdistelmä on ClamAV moottorina ja päivitettynä tietokantana, maldet erikoistuneiden allekirjoitusten lähteenä.

Mitä tehdä löydölle

Löydetty verkkokuori ei ole tutkinnan loppu vaan sen alku. Tiedosto latauskansiossa tarkoittaa, että joku onnistui kirjoittamaan sinne, eikä tiedoston poistaminen vie tuota mahdollisuutta.

  1. Älä poista heti — ota kopio ja merkitse tiedoston muutosajankohta muistiin.
  2. Etsi verkkopalvelimen lokeista tuon ajankohdan pyyntö, joka toi sen sinne. Se on haavoittuvuus.
  3. Etsi naapureita: takaovia ei jätetä lähes koskaan yhtä ainoaa.
  4. Tarkista, mitä muuta levyllä on muuttunut samalla ajanjaksolla ja onko ilmaantunut uusia cron-tehtäviä ja SSH-avaimia.

Erikseen vääristä hälytyksistä. Mallikirjastot ja pienennetty JavaScript osuvat toisinaan allekirjoituksiin. Siksi karanteeni eikä poisto, ja siksi ei myöskään kannata kytkeä valikoimatta kaikkia löytämiään vieraita allekirjoituskokoelmia: luottamus raporttiin, jonka riveistä puolet on kohinaa, katoaa viikossa, eikä sitä sen jälkeen lueta lainkaan.

Skannerin käytännön arvo on siinä, että sen tulokset osuvat silmiin: milloin viimeinen skannaus oli, kuinka vanhoja tietokannat ovat, mitä löytyi. Se on yksi rivi, mutta ilman sitä asennetusta virustorjunnasta tulee rasti ruutuun. Miltä tuo rivi näyttää, näkyy alla olevalla esittelysivulla.