Če spletna stran nepričakovano preusmerja, pošilja neželeno pošto, se na njej pojavljajo neznane datoteke ali brskalnik opozarja, da je nevarna, so vanjo verjetno vdrli. Za iskanje okuženih datotek na strežniku priporočamo dve brezplačni orodji:
- ClamAV: splošen protivirusni program odprte kode, ki prepozna veliko vrst zlonamerne programske opreme;
- Linux Malware Detect (Maldet): specializiran posebej za zlonamerno programsko opremo PHP, značilno za strežnike gostovanja (spletne lupine, vrinjeno kodo), za pregled pa lahko uporabi tudi ClamAV.
Ta članek je namenjen tistim, ki upravljajo lasten VPS ali namenski strežnik. Na deljenem gostovanju takih programov ne moreš nameščati; če tam sumiš okužbo, piši naši podpori.
ClamAV
Namestitev
AlmaLinux, Rocky Linux (iz repozitorija EPEL):
sudo dnf install epel-release
sudo dnf install clamav clamav-update
V AlmaLinux 10 ime clamav-update namesti paket clamav-freshclam, ki ponuja ukaz freshclam; ukaz deluje enako. Korake smo preizkusili v sistemu AlmaLinux 10.2, z različicama ClamAV 1.4.6 in Maldet 1.6.6.
Ubuntu, Debian:
sudo apt install clamav clamav-freshclam
Posodobitev baze virusov
sudo freshclam
V Ubuntuju in Debianu storitev clamav-freshclam samodejno posodablja v ozadju; če ukaz freshclam javi, da je dnevniška datoteka zaklenjena, storitev ravno teče in ni ti treba storiti ničesar. V AlmaLinuxu samodejno posodabljanje vklopiš z ukazom sudo systemctl enable --now clamav-freshclam.
Pregled
sudo clamscan -r -i /var/www
-r: pregleda tudi podimenike,-i: izpiše le okužene datoteke.
Vrstica Infected files v povzetku na koncu kaže število zadetkov. V preizkusu je našel testno datoteko EICAR (neškodljiv standardni vzorec za preizkus protivirusnih programov), postavljeno pod /var/www: Infected files: 1. S stikalom --log=/root/clamscan.log lahko rezultat shraniš tudi v datoteko.
ClamAV na začetku pregleda v pomnilnik naloži celotno bazo virusov (v preizkusu 3,6 milijona podpisov): v preizkusu je bila največja poraba pomnilnika pribl. 965 MB, pregled ene same datoteke pa je trajal skoraj 3 minute, skoraj le zaradi nalaganja. Na 2-GB VPS brez swapa lahko to sproži tudi OOM killer (glej: Zmanjkalo je pomnilnika: OOM killer in datoteka swap), zato z enim pregledom preglej vse prizadete imenike, ne z veliko ločenimi klici clamscan.
Linux Malware Detect (Maldet)
Namestitev
Maldet ni na voljo v repozitorijih paketov, prenesti ga je treba s strani razvijalca (R-fx Networks):
cd /usr/local/src
sudo curl -LO https://www.rfxn.com/downloads/maldetect-current.tar.gz
sudo tar -xzf maldetect-current.tar.gz
cd maldetect-*/
sudo ./install.sh
(wget na cloud image AlmaLinux ni nameščen, zato primer uporablja curl.) Namestitveni program nastavi tudi dnevno preverjanje (/etc/cron.daily/maldet) in samodejno posodabljanje podpisov.
V AlmaLinux in Rocky Linux sudo maldet vrne napako „command not found”, ker se Maldet namesti v imenik /usr/local/sbin, ta pa ni na poti, ki jo uporablja sudo (secure_path). Navedi celotno pot (sudo /usr/local/sbin/maldet …) ali odpri lupino root (sudo -i). Spodnji primeri predpostavljajo slednje. Nastavitve so v datoteki /usr/local/maldetect/conf.maldet.
Če je nameščen tudi ClamAV, Maldet za pregled uporablja pogon clamscan (to označuje vrstica scan_clamscan="1" v datoteki conf.maldet, v preizkusu je bila to privzeta vrednost), vendar s svojimi podpisi, prilagojenimi zlonamerni programski opremi PHP, značilni za strežnike gostovanja. Zato orodji ne nadomeščata drug drugega: v preizkusu je testno datoteko EICAR javil ClamAV, Maldet pa ne (malware hits 0). Smiselno je pregledati z obema.
Pregled
# Posodobitev podpisov
maldet -u
# Pregled imenika
maldet -a /var/www
# Pregled le datotek, spremenjenih v zadnjih 7 dneh (hitreje)
maldet -r /var/www 7
Na koncu pregleda Maldet izpiše povzetek in identifikator poročila, v preizkusu na primer:
maldet(17656): {scan} scan completed on /var/www: files 110, malware hits 0, cleaned hits 0, time 174s
maldet(17656): {scan} scan report saved, to view run: maldet --report 261028-2314.17656
Rezultat:
# Seznam pregledov
maldet --report list
# Podrobno poročilo pregleda
maldet --report SCANID
Premik najdenih datotek v karanteno (datoteke takrat pridejo v imenik /usr/local/maldetect/quarantine in spletna stran do njih ne more dostopati):
maldet -q SCANID
Če je datoteka pomotoma prišla v karanteno, jo obnoviš z ukazom maldet -s /usr/local/maldetect/quarantine/<ime datoteke>. (Premika v karanteno in obnovitve zaradi pomanjkanja pravega vzorca zlonamerne programske opreme nismo preizkusili.)
Kaj storiti, če najdeš okužbo?
Samo brisanje okuženih datotek ne zadošča: če napaka, ki jo je napadalec izkoristil, ostane, bodo v spletno stran kmalu znova vdrli. Priporočeni koraki:
- Shrani trenutno stanje (skupaj z okuženimi datotekami) za preiskavo, na mesto zunaj imenika spletne strani.
- Poišči način vdora. V dnevniku dostopa spletnega strežnika (glej: Branje dnevniških datotek v Linuxu) poišči zahteve za najdene datoteke in čas njihove prve pojavitve. Pogost vzrok je zastarela različica vtičnika, predloge ali CMS ali uhajanje gesla.
- Spletno stran obnovi iz čiste varnostne kopije, če imaš varnostno kopijo izpred okužbe; to je zanesljiveje kot popravljanje okuženih datotek eno za drugo.
- Posodobi vse: CMS, vtičnike in predloge ter pakete strežnika (glej: Posodabljanje sistema z ukazoma dnf in apt). Odstrani neuporabljene vtičnike in vdrte (nulled) predloge (glej: Zakaj se ne splača uporabljati vdrtih (nulled) predlog in vtičnikov WordPress?).
- Zamenjaj vsa gesla: skrbnikov CMS, podatkovne baze, računov FTP/SFTP in SSH.
- Preveri tudi strežnik: neznane uporabnike (
/etc/passwd), ključe SSH (~/.ssh/authorized_keys), opravila cron (crontab -l,/etc/cron.d/) in tekoče procese (ps aux). Če je napadalec pridobil pravice root, je varna rešitev ponovna namestitev strežnika.
O zaščiti strani WordPress preberi v članku Osnovne varnostne nastavitve WordPress proti vdorom.