Мне сильно кажется, что большинство людей на хабре публикуют заметки даже не удосужившись проверить тот продукт о котором они пишут на практике, дополнить исполнение команды и применение к реальности реальными примерами, а не простым копированием документации и немного переведенного текста на наш с вами русский язык. Мне заинтересовала заметка про сканер, целью которого является поиск любого нежелательного, зловредного на моем блоге. И теперь я хочу раскрыть данную тему полностью со всеми возникнувшими у меня нюансами, может даже еще чем-то. Все описанное будет проделано на примере моего блога — www.ekzorchik.ru

В роли главного героя выступит сканер уязвимостей Linux Malware Detect (в дальнейшем для краткости LMD) который я буду использовать на своей системе Ubuntu Trusty Server amd64

Устанавливаю необходимые пакеты перед скачиванием и инсталлированием приложения в систему:

ekzorchik@srv-trusty:~$ sudo rm -Rf /var/lib/apt/lists

ekzorchik@srv-trusty:~$ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik@srv-trusty:~$ uname -a

Linux srv-trusty 4.4.0-98-generic #121~14.04.1-Ubuntu SMP Wed Oct 11 11:54:55 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Советую привести систему к последнему релизу ядра по этой заметке.

ekzorchik@srv-trusty:~$ wget http://www.rfxn.com/downloads/maldetect-current.tar.gz

ekzorchik@srv-trusty:~$ tar zxf maldetect-current.tar.gz

ekzorchik@srv-trusty:~$ cd maldetect-1.6.2/

ekzorchik@srv-trusty:~/maldetect-1.6.2$ sudo ./install.sh

ekzorchik@srv-trusty:~/maldetect-1.6.2$ cd ~

ekzorchik@srv-trusty:~$ rm -Rf maldetect-1.6.2/ maldetect-current.tar.gz

ekzorchik@srv-trusty:~$ sudo apt-get install clamav clamav-daemon clamav-freshclam clamfs -y

ekzorchik@srv-trusty:~$ sudo nano /etc/clamav/freshclam.conf

DatabaseMirror db.local.clamav.net

DatabaseMirror database.clamav.net

DatabaseCustomURL http://www.rfxn.com/downloads/rfxn.ndb

DatabaseCustomURL http://www.rfxn.com/downloads/rfxn.hdb

ekzorchik@srv-trusty:~$ sudo freshclam

Обновляем сканер maldetect до самого последнего актуального состояния:

ekzorchik@srv-trusty:~$ sudo maldet -d -u

За работу утилиты отвечает конфигурационный файл:

ekzorchik@srv-trusty:~$ sudo nano /usr/local/maldetect/conf.maldet

email_alert="1"

#почтовый ящик куда отправлять отчеты

email_addr="ekzorchik@ekzorchik.ru"

scan_clamscan="1"

scan_cpunice="19"

#глубина на которую сканер осуществляет проверку целостности файлов

scan_max_depth="15"

#минимальный размер файлов в байтах

scan_min_filesize="24"

#максимальный размер файлов (b (байты),k(килобайты),M(мегабайты)

scan_max_filesize="1024k"

#каталоги временных файлов доступных на запись

scan_tmpdir_paths="/tmp /var/tmp /dev/shm"

#разрешить или запретить обычным пользователям использовать утилиту maldet (я запрещаю)

scan_user_access="0"

#перемещать инфицированные файлы в карантин

quarantine_hits="1"

остальные опции я оставил по умолчанию

Теперь проверю свой бекап на предмет наличия зараженности:

ekzorchik@srv-trusty:~$ sudo maldet -a /home/ekzorchik/file

maldet(29396): {scan} scan report saved, to view run: maldet --report
171223-0959.29396

Смотрим отчет:

ekzorchik@srv-trusty:~$ sudo maldet --report 171223-0959.29396

HOST: srv-trusty

SCAN ID: 171223-0959.29396

STARTED: Dec 23 2017 09:59:28 +0300

COMPLETED: Dec 23 2017 09:59:48 +0300

ELAPSED: 20s [find: 0s]

PATH: /home/ekzorchik/

TOTAL FILES: 3

TOTAL HITS: 0

TOTAL CLEANED: 0

===============================================

Linux Malware Detect v1.6.2 < proj@rfxn.com >

Запустить в ручном режиме утилиту maldet на предмет проверки каталога Webсервера содержащего пользовательские сайты:

ekzorchik@srv-trusty:~$ sudo maldet -b -r /var/www

Linux Malware Detect v1.6.2

(C) 2002-2015, R-fx Networks <proj@rfxn.com>

(C) 2015, Ryan MacDonald <ryan@rfxn.com>

This program may be freely redistributed under the terms of the GNU GPL v2

maldet(25083): {scan} launching scan of /var/www changes in last 7d to background, see /usr/local/maldetect/logs/event_log for progress

Проверяем в другом окне (или лучше задействовать tmux) консоли что утилита maldet запущена:

ekzorchik@srv-trusty:~$ sudo ps aux | grep maldet

ekzorchik@srv-trusty:~$ sudo ps aux | grep inotify

Работает утилита maldetect следующим образом, производит мониторинг нацеленных директорий и в случае нахождения инфицированных файлов уведомляет на почту. Также инфицированные файлы могут быть перемещены в карантин или же просто удалены.

Linux Malware Detect (LMD) — это сканер для Linux, предназначенный для поиска веб-шеллов, спам-ботов, троянов, злонамеренных скриптов и прочих типичных угроз характерных для веб-пространств и особенно актуален для виртуальных шаред-хостинг платформ. Главное отличие от прочих Linux-антивирусов — его веб направленность, сканирование файлов веб-сайтов, ведь обычные антивирусы ориентируются на более глобальные угрозы уровня системы.

В основе утилиты maldetect лежит скрипт который посредством базы grep производит сканирование на основе своей базы сигнатур, но в свою очередь — если установить антивирус clamav , то весь процесс будет идти через него. Это создает двойной выигрыш в применяемых средствах.

После того, как утилиту maldetect я установил в свою систему, заметил что создались ежедневные задания для обновления сигнатур и запуска сканирования.

ekzorchik@srv-trusty:~$ ls -l /etc/cron.daily/maldet

-rwxr-xr-x 1 root root 2672 Nov 18 06:59 /etc/cron.daily/maldet

а главном конфигурационном файле за это отвечает параметр:

autoupdate_signatures="1"

autoupdate_version="1"

autoupdate_version_hashed="1"

На заметку: по умолчанию утилита maldet проверяет каталоги якобы популярных движков, как directadmin,ispmgr,ensim,psa,Virtualmin, froxlor,cpanel, см файл и в него можно добавить свои пути.

ekzorchik@srv-trusty:~$ sudo nano /etc/cron.daily/maldet

После проверяю текущий статус службы maldet:

ekzorchik@srv-trusty:~$ sudo service maldet status

error no default monitor mode defined, set $MONITOR_MODE in /etc/sysconfig/maldet or $default_monitor_mode in /usr/local/maldetect/conf.maldet

ekzorchik@srv-trusty:~$ sudo nano /etc/default/maldet

MONITOR_MODE="users"

ekzorchik@srv-trusty:~$ sudo /etc/init.d/maldet status

Checking maldet monitoring status: Not running

ekzorchik@srv-trusty:~$ sudo /etc/init.d/maldet start

Starting maldet: Linux Malware Detect v1.6.2

(C) 2002-2017, R-fx Networks <proj@rfxn.com>

(C) 2017, Ryan MacDonald <ryan@rfxn.com>

This program may be freely redistributed under the terms of the GNU GPL v2

maldet(30485): {mon} could not find inotifywait command, install yum package inotify-tools or download from https://github.com/rvoicilas/inotify-tools/wiki/

ekzorchik@srv-trusty:~$ sudo apt-get install inotify-tools -y

ekzorchik@srv-trusty:~$ sudo /etc/init.d/maldet start

ekzorchik@srv-trusty:~$ sudo /etc/init.d/maldet status

Checking maldet monitoring status: Running

Работает!!! Либо же можно не настраивать автоматический запуск, а использовать ключи сканирования для обнаружения вредоносного.

Сканирование происходит с использованием собственного скрипта на базе grep, а если в системе установлен ClamAV — то при помощи clamscan. Аналогично с сигнатурами: программа имеет свою базу сигнатур, если же в системе установлен ClamAV, то использует дополнительно и его базу. Когда производим нацеливание на каталог с файлами, то отчет можно настроить что будет высылаться на электронную почту.

В каталоге куда установилась программа присутствует довольно понятный файл README целью которого дать наиполнейшее представление, как работать и что может данная утилита:

/usr/local/maldetect/conf.maldet — главный конфигурационный файл

По умолчанию в автоматическом режиме перенос файлов в карантин деактивирован, а потому при наличие каких либо совпадений с базой сигнатур придется разбираться, а на то идет жалоба и что нужно делать самим. Такой вариант может устроить только тех кто хочет понять каким образом произошло заражение, либо же задействовать параметр со значением quar_hits=1 чтобы все подозрительные файлы сразу же переносились в специально обозначенный каталог карантина.

  • /usr/local/maldetect/quarantine — каталог куда переносятся файлы в случае нахождения совпадений по базе данных сигнатур.
  • /usr/local/maldetect/ignore_paths — каталог/файлы которые не стоит проходить проверкой утилиты, к примеру сейчас в нем по умолчанию содержаться:

/usr/local/maldetect

/usr/local/sbin/maldet

/usr/local/maldetect/ignore_file_ext — игнорировать файлы по маске, к примеру вот так:

*.txt

*.js

*.html

  • /usr/local/maldetect/ignore_sigs — игнорировать наличие сигнатуры сканируемого
  • /usr/local/maldetect/ignore_inotify — исключения из мониторинга

Думаю описывать назначение каждого параметра это излишне, но все же остановлюсь на некоторых:

  • -b — запуск в фоне при длительном сканировании
  • -u — обновить сигнатуры обратившись с официальному сайту rfxn.com
  • -d — обновить инсталлируемую версия с официального сайта rfxn.com
  • -m (--monitor USERS|PATHS|FILE) — запуск утилиты maldet
  • -k — завершить запущенную утилиту.
  • -r — нацелить просканировать конкретный каталог и файлы созданные/изменяемые в течение указанных дней, по умолчанию (7 дней)

maldet -r /home/ekzorchik 5

  • -a — просканировать все файлы по заданному пути

maldet -a /home/ekzorchik

  • -с — после проверки файлы загрузить его сигнатуру на официальный сайт
  • -l — просмотреть лог файл событий
  • -e — отправить отчет на почтовый ящик:

maldet --report

maldet --report list

maldet --report идентификатор формируемый после окончания сканирования

maldet --report SCANID user@host.com — отчет на почту

  • -s — восстановить все файлы из карантина
  • -q — поместить все файлы из отчета в карантин
  • -n — очистить на основании SCANID все файлы
  • -U — назначение атрибутов на конкретного пользователя, используется при восстановлении файлов из карантина
  • -co — ручной запуск утилиты maldet где в строке перечислены атрибуты с которыми следует работать (атрибуты берем из главного конфигурационного файла), maldet --config-option email_addr=user@host.com,quar_hits=1 и т. д.
  • -p — Очистить логи,удалить все из каталога «Карантин»,сессии и временные файлы.

Чтобы данный сервер мог уведомлять о проблемах на почту в системе должен быть настроен агент MTAя использую утилиту ssmtp.

Просканировать весь домашний каталог (? – то же самое что и символ звездочка):

ekzorchik@srv-trusty:~$ sudo maldet -a /home/?

ekzorchik@ekzorchik:~$ sudo maldet -a /var/www/wordpress/?

ekzorchik@ekzorchik:~$ sudo maldet --report 171223-1027.904

HOST: ekzorchik.ru

SCAN ID: 171223-1027.904

STARTED: Dec 23 2017 10:27:51 +0300

COMPLETED: Dec 23 2017 10:30:58 +0300

ELAPSED: 187s [find: 2s]

PATH: /var/www/wordpress/?

TOTAL FILES: 16778

TOTAL HITS: 0

TOTAL CLEANED: 0

===============================================

Linux Malware Detect v1.6.2 < proj@rfxn.com >

Для восстановления файла перемещенного в карантин следует:

sudo maldet –restore /usr/local/maldetect/quarantine/FILENAME

Теперь мой ресурс посвященный реальным заметкам в той степени безопасности которую я могу ему обеспечить на основании своего опыта.

Пока на этом у меня всё, с уважением, автор блога Олло Александр aka ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru