Мониторинг, своевременное обновление сайта и его компонентов, а так же обнаружение вредоносного содержимого является важной частью процесса администрирования web-сервера. Локализация и оперативное устранение проблемы очень важно для функционирования доменного имени и сервиса в целом. Некоторое вредоносное содержимое, такое как фишинг, запрещено на законодательном уровне и может служить причиной для блокировки доменного имени администратором зоны. В случае рассылки спама, ваше доменное имя может попасть во внешние спам-базы, что негативно отразится на доставке почты получателям с вашего домена. В конечном итоге, вредоносное содержимое так или иначе может привести к неработоспособности сайта.
Linux Malware Detect (LMD, так же известен как Maldet) - это сканер вредоносных программ для Linux, выпущенный под лицензией GNU GPLv2 более десяти лет назад. Одной из главных особенностей LMD является обнаружение вредоносного содержимого в файлах web-сайтов, в отличии от множества других антивирусов, которые разработаны с учетом обнаружения угроз на уровне операционной системы.
Linux Malware Detect использует собственную базу сигнатур. Сигнатуры, которые использует LMD. LMD - это хеши файлов MD5 и совпадения с шаблоном HEX, они также легко экспортируются другие инструменты обнаружения, такие как ClamAV. Между ними предусмотрен взаимный обмен сигнатурами. О том как «подружить» LMD и ClamAV будет рассмотрено в разделе настройки конфигурационных файлов LMD и ClamAV. При этом, LMD для выявления вредоносного содержимого будет использовать не свой скрипт основанный на grep, a clamscan. Это удобно, так как имеем двойной выигрыш.
Статья подразумевает, что ClamAV на вашем сервере установлен, если нет, установите его. Обратите внимание, установка ClamAV опциональна. Вы можете использовать для проверки только Maldet, если по каким-то причинам ClamAV вам не подходит. В этом случае, в разделе «1.2 Настройка Linux Malware Detect», в блоке [SCAN OPTIONS], установите значение «0», в строке отвечающей за интеграцию сигнатур антивируса ClamAV в Maldet.
Внимание! Удалив критически важные скрипты для функционирования сайта, существует риск сделать сайт неработоспособным. Будьте внимательны с тем что удаляете. Перед глобальным «лечением» скриптов рекомендуется выполнить резервную копию сайта и базы данных, или проконсультироваться с разработчиком.
Установка ClamAV
root@host:~$ sudo apt update
root@host:~$ sudo apt install clamav clamav-daemon
Отредактируем конфигурационный файл /etc/clamav/freshclam.conf добавив в него ссылки на базы сигнатур Linux Malware Detect:
DatabaseCustomURL http://www.rfxn.com/downloads/rfxn.ndb
DatabaseCustomURL http://www.rfxn.com/downloads/rfxn.hdb
Обновим ClamAV:
root@host:~$ sudo freshclam
Если мы увидим ошибку, что freshclam.log занят другим процессом, принудительно завершим его и повторим попытку обновления сигнатур:
root@host:~$ sudo pkill -15 -x freshclam
root@host:~$ sudo freshclam
Установка и базовая настройка Linux Malware Detect
Установка Linux Malware Detect
Загружаем последнюю версию пакета, используя команду wget, разархивируем его в выбранный каталог и выполним установку:
root@host:~$ cd /usr/local/src/
root@host:~$ wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
root@host:~$ tar -xvzf maldetect-current.tar.gz
root@host:~$ cd maldetect-1.6.4/
root@host:~$ sh ./install.sh
В консоли мы увидим следующее:
./install.sh: 91: test: systemd: unexpected operator
./install.sh: 101: ./install.sh: chkconfig: not found
Linux Malware Detect v1.6.4
(C) 2002-2019, R-fx Networks <proj@r-fx.org>
(C) 2019, Ryan MacDonald <ryan@r-fx.org>
This program may be freely redistributed under the terms of the GNU GPL
installation completed to /usr/local/maldetect
config file: /usr/local/maldetect/conf.maldet
exec file: /usr/local/maldetect/maldet
exec link: /usr/local/sbin/maldet
exec link: /usr/local/sbin/lmd
cron.daily: /etc/cron.daily/maldet
maldet(25130): {sigup} performing signature update check...
maldet(25130): {sigup} local signature set is version 201907043616
maldet(25130): {sigup} new signature set 2019111027906 available
maldet(25130): {sigup} downloading https://cdn.rfxn.com/downloads/maldet-sigpack.tgz
maldet(25130): {sigup} downloading https://cdn.rfxn.com/downloads/maldet-cleanv2.tgz
maldet(25130): {sigup} verified md5sum of maldet-sigpack.tgz
maldet(25130): {sigup} unpacked and installed maldet-sigpack.tgz
maldet(25130): {sigup} verified md5sum of maldet-clean.tgz
maldet(25130): {sigup} unpacked and installed maldet-clean.tgz
maldet(25130): {sigup} signature set update completed
maldet(25130): {sigup} 15569 signatures (12749 MD5 | 2035 HEX | 785 YARA | 0 USER)
Отлично, мы имеем данные сигнатур по состоянию на 10 ноября 2019 года.
Настройка Linux Malware Detect
Начнем с настройки конфигурационного файла:
root@host:~$ mcedit /usr/local/maldetect/conf.maldet
Рассмотрим несколько настроек, которые вы должны применить для успешного обнаружения вредоносного содержимого:
root@host:~$ mcedit /usr/local/maldetect/conf.maldet
# [ GENERAL OPTIONS ]
(Если вы желаете получать уведомления по почте, установите значение "1")
# Enable or disable e-mail alerts
email_alert="1"
# The destination e-mail addresses for automated/manual scan reports
email_addr="admin@yourdomain.com"
# [ SCAN OPTIONS ]
# The maximum directory depth that the scanner will search:
(Минимальная глубина сканирования)
scan_max_depth="15"
# The minimum file size in bytes for a file to be included in LMD scans:
(Указываем минимальный размер сканируемого файла)
scan_min_filesize="24k"
# The maximum file size for a file to be included in LMD scans:
(Максимальный размер файла сканирования
scan_max_filesize="2048k"
# If installed, use ClamAV clamcan binary as default scan engine which provides improved scan performance on large file sets.
(Установив значение «1», сканер будет использовать установленный на сервере ClamAV, средством clamscan)
scan_clamscan="1"
# Include the scanning of known temporary world-writable paths:
Директории временных файлов для проверки)
scan_tmpdir_paths="/tmp /var/tmp /dev/shm /var/fcgi_ipc"
# Allows non-root users to perform scans:
(Разрешает сканирование пользователям не имеющим привелегий root доступа. Для разрешения, следует выставить «1»)
scan_user_access="0"
# This allows for specific user or groups to be ignored entirely from scan file lists:
(Здесь мы можем перечислить пользователей (или группы), которые будут игнорироваться при сканировании. Пользователей можно указывать как через пробел, так и через запятую):
scan_ignore_user=""
scan_ignore_group=""
# [ QUARANTINE OPTIONS ]
# The default quarantine action for malware hits:
(При значении «1» происходит мгновенная отправка в карантин зараженного файла)
quarantine_hits="0"
# Try to clean string based malware injections:
(Перед отправкой в карантин, LMD сделает попытку вылечить зараженный файл)
quarantine_clean="0"
Пример блока [ QUARANTINE OPTIONS ] настроен только на выявление вредоносного содержимого, без отправки в карантин. Вы можете изменить это изменив значения с «0» на «1».
Это необходимый минимум, который следует настроить. Конфигурационный файл довольно информативен в плане развернутых комментариев к той или иной опции, настроить его «под себя» труда не составит.
Принцип работы
При установке LMD, в кроне был автоматически создан файл /etc/cron.daily/maldet, в котором прописаны девять стандартных путей, по которым могут находится каталоги с сайтами. Учтены пути, которые используются в популярных панелях управления, таких как ISPmanager, VestaCP, за полным перечнем вы можете обратиться к официальной документации. Проект развивается и список поддерживаемых панелей может увеличиваться. Если у вас используется нестандартный путь, вы его можете указать его там же в /etc/cron.daily/maldet
Если ежедневная проверка не требуется, файл /etc/cron.daily/maldet достаточно переименовать, например в maldet.deffault. И вернуть при необходимости возобновления ежедневной проверки. При этом время от времени вы сможете запускать проверку вручную. Подробно мы рассмотрим это в следующем разделе.
Примеры работы с Linux Malware Detect
Допустим, нам необходимо проверить модуль плагина WordPress на наличие вредоносного содержимого. Указать путь к определенной директории можно с помощью ключа «-а»
root@host:~$ maldet -a /path-to-dir
root@host:~$ maldet /var/www/user/data/yourdomain.com/wp-content/plugins/your_plugin
Вывод будет следующий:
Linux Malware Detect v1.6.4
(C) 2002-2019, R-fx Networks <proj@rfxn.com>
(C) 2019, Ryan MacDonald <ryan@rfxn.com
This program may be freely redistributed under the terms of the GNU GPL v2
maldet(26378): {scan} signatures loaded: 15569 (12749 MD5 | 2035 HEX | 785 YARA | 0 USER)
maldet(26378): {scan} building file list for /var/log/, this might take awhile...
maldet(26378): {scan} setting nice scheduler priorities for all operations: cpunice 19 , ionice 6
maldet(26378): {scan} file list completed in 0s, found 7 files...
maldet(26378): {scan} scan of /var/log/ (7 files) in progress...
maldet(26378): {scan} 7/7 files scanned: 0 hits 0 cleaned
maldet(26378): {scan} scan completed on /var/log/: files 7, malware hits 0, cleaned hits 0, time 0s
maldet(26378): {scan} scan report saved, to view run: maldet --report 191112-1121.26378
В данном листинге нам требуется %report.ID% отчета: 191112-1121.26378
Первым делом посмотрим отчет о сканировании:
root@host:~$ maldet -e 191112-1121.26378
Вылечить содержимое каталога:
root@host:~$ maldet -n 191112-1121.26378
Отправить в карантин все файлы, которые будут фигурировать в отчете как зараженные:
root@host:~$ maldet -q 191112-1121.26378
Если что-то пошло не так и мы хотим восстановить с карантина все файлы, отправленные в рамках сканирования с нашим %report.ID%:
root@host:~$ maldet -s 191112-1121.26378
Допустим, часть файлов в карантине вылечены, а часть нет, потому восстанавливать все по %report.ID% будет в корне неверно. Восстановление определенного файла перемещенного в карантин :
root@host:~$ sudo maldet --restore /usr/local/maldetect/quarantine/FILENAME
Список всех доступных выполненных отчетов:
root@host:~$ maldet -e list
Проверить все файлы сайтов, которые подверглись изменению за последние 10 дней:
root@host:~$ maldet -r /path-to-dir 10
Для получения справки по всем доступным ключам:
root@host:~$ maldet -h
Однако, остановлюсь на некоторых часто используемых ключах:
-u # Обновить базу данных сигнатур;
-d # Обновить версию Linux Malware Detect;
-b # Запустить сканирование в фоновом режиме, если оно занимает продолжительное время;
-k # Остановить выполнение сканирования;
-a # Сканировать все файлы, указав путь к каталогу;
-q # Поместить все зараженные файлы в карантин по %report.ID%;
-s # Восстановить все зараженные файлы из карантина по %report.ID%;
Исключения сканирования можно настроить в следующих конфигурационных файлах:
/usr/local/maldetect/ignore_paths
#Указываем пути к файлам и каталогам. Каждый путь с новой строки;
/usr/local/maldetect/ignore_file_ext
#Указываем расширения файлов. Формат следующий: каждое расширение имеет вид: *.txt *.jpeg *.bmp, и начинается с новой строки без знака припинания в конце;
Управлять демоном мы можем как и через init.d, так и через systemd:
root@host:~$ systemctl stop maldet.service
root@host:~$ systemctl start maldet.service
root@host:~$ systemctl status maldet.service
Ссылка на официальную страничку проекта на GitHub: https://github.com/rfxn/linux-malware-detect/blob/master/README
Профилактика защиты от вирусов
- Ничего не предполагайте и не экспериментируйте. Не устанавливайте плагины и темы из непроверенных источников. Избегайте установки функционала, в котором нет крайней необходимости;
- Следите за тем, чтобы на каталоги отсутствовали права 777. Для каталога права должны быть 755, а для файлов 644;
- Используйте антивирус и программное для обнаружения вредоносного кода;
- Используйте брандмауэр. По принципу «закрыто должно быть все, кроме того, что должно быть открыто»;
- Используйте сложные пароли. Их длинна не должна быть меньше 8 символов. В пароле должны быть заглавные, маленькие буквы, а так же цифры и спецсимволы.
- Своевременно выполняйте обновление сервера, движка сайта, используемых плагинов и проводите аудит безопасности;
- Систематически делайте резервные копии важной информации, сайта и базы данных;
- Если сайт разрабатывали не вы, взаимодействие с его разработчиком является важным пунктом. В отдельных случаях только ему известны нюансы его разработки;
- 100%-ной защиты от заражения сайта вредоносным содержимым не существует. Но выполняя систематический мониторинг и аудит безопасности, этот риск можно свети с достаточному минимуму.
Заключение
Настроить мониторинг выявления вредоносного кода совсем не сложно. Уделив должное внимание аудиту безопасности, в будущем вы избежите множества проблем. Вы так же можете ознакомиться с некоторыми способами защиты и оптимизации работы вашего сайта, прочитав другие статьи нашего блога посвященные работе с CMS.
Если Вы планируете купить выделенный сервер или арендовать VPS в нашей компании, будьте уверены, наша техническая поддержка поможет обеспечить бесперебойную работу сервера. Каждому клиенту мы предоставляем место для хранения резервных копий, 1 час бесплатного администрирования в месяц и множество других дополнительных преимуществ.
Дата: 28.11.2019 Автор: Евгений
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus