Мне сильно кажется, что большинство людей на хабре публикуют заметки даже не удосужившись проверить тот продукт о котором они пишут на практике, дополнить исполнение команды и применение к реальности реальными примерами, а не простым копированием документации и немного переведенного текста на наш с вами русский язык. Мне заинтересовала заметка про сканер, целью которого является поиск любого нежелательного, зловредного на моем блоге. И теперь я хочу раскрыть данную тему полностью со всеми возникнувшими у меня нюансами, может даже еще чем-то. Все описанное будет проделано на примере моего блога — 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.