Чистка от вирусов Drupal 8

Аватар пользователя tlito tlito 10 сентября 2018 в 9:43

Доброго времени! Старый Drupal 8 работал, но появились чужие файлы в папке файлов, в папке sites.

Поиск по строке );}function и удаление

# cd sites
# grep -rl ');}function' .
./default/files/css/lyiawbgf.php
./qehcdaoa.php

# grep -rl ');}function' . > 1

 # cat 1
./default/files/css/lyiawbgf.php
./qehcdaoa.php

# rm `cat 1`
# rm 1

То же в папке файлов, если она в корне (не в sites/defaul/files)

Также нужно обновить ядро, и возможно, пароль админа.

ВложениеРазмер
Иконка пакета Архив с вирусными php4.89 КБ
0 Thanks

Комментарии

Аватар пользователя ivnish ivnish 10 сентября 2018 в 13:42

А в чем решение? Удалить найденные файлы? Это мало поможет, потому что помимо новых файлов, зараза поражает и файлы ядра и/или контрибных модулей. Нужно комплексное лечение

Аватар пользователя tlito tlito 10 сентября 2018 в 20:57

частично можно решить сканированием директорий сайта, содержимое которых может меняться только вручную при авторизации на сервере (не средствами php) и отправкой уведомлений администратору при обнаружении новых файлов.

Simple Virus Scanner

svs.sh - скрипт, проверяющий наличие новых файлов в папках сайта.

$ cat svs.sh
#!/bin/sh

# simple virus scanner svs.sh
# bash script checks new files modified
# a day after last login of server users

# server users
users='sftp ftp'
interval='1 day'
# paths
paths="/var/www/site.com/files \
       /var/www/site.com/sites \
       /var/www/site.com/themes"

#colors
RED='\033[0;31m'
NC='\033[0m' # No Color

date_start=$(last $users -n 1 -F | head -n1 | awk '{print $4,$5,$6,$7,$8}')
date_check=$(date --date="$date_start + $interval")
#if you want to check files modified from 7 days before till now:
#date_check=$(date --date="now -7days")
echo 'Check files modified after ' $date_check
touch --date "$date_check" ./foo_date

for i in $paths
do
  echo 'Check path ' $i
  find $i -newer ./foo_date 2>&1 | grep -v "Permission denied" > ./__tmp_my_find_log
  while read -r line
  do
    printf "Found: ${RED}${line}${NC}\n"
  done < ./__tmp_my_find_log
done

rm __tmp_my_find_log

echo 'done!'

paths - папки сайта, в которых необходимо производить поиск. если модули не устанавливаются, то можно добавить /var/www/site.com/modules.
date_start - время последней авторизации пользователя на сервере, вычисляется автоматически.
date_check - дата проверки. файлы, созданные после этой даты, считаются подозрительными, вычисляется из даты последней авторизации пользователей users.

Скрипт может сидеть в кроне, если дописать отправку уведомлений или отчётов.
При ручном запуске скрипта нужно задать вручную date_check - предположительную дату последней работы с сайтом. Например, `date --date="now -3 months"` - 3 месяца назад.

для проверки создаем файл с завтрашней датой и запускаем поиск новых файлов.

$ touch --date "now +2 day" /var/www/site.com/sites/virus.html

$ svs.sh
Check files modified after  Tue Sep 11 16:58:37 MSK 2018
Check path  /var/www/site.com/files
Check path  /var/www/site.com/sites
/var/www/site.com/sites/virus.html
Check path  /var/www/site.com/themes
done!

новый подозрительный файл найден.