Интернет уже не тот, что прежде — кругом враги. Тема обнаружения непосредственного заражения сайта и поиска вредоносных/зараженных скриптов на взломанном сайте рассмотрена слабо, попробуем это исправить.
Итак, представляем вашему вниманию Linux Malware Detect.
Linux Malware Detect (LMD) — это сканер для Linux, предназначенный для поиска веб-шеллов, спам-ботов, троянов, злонамеренных скриптов и прочих типичных угроз характерных для веб-пространств и особенно актуален для виртуальных шаред-хостинг платформ. Главное отличие от прочих Linux-антивирусов — его веб направленность, сканирование файлов веб-сайтов, ведь обычные антивирусы ориентируются на более глобальные угрозы уровня системы.
Что умеет
- Поиск угроз по базе MD5 и распознавание типа угрозы (например, php.cmdshell.nan.296.HEX) по HEX-базе.
- Статистический анализ файлов на наличие обфусцированных зловредов и инъекций.
- Обнаружение установленного в системе ClamAV для использования его в качестве сканера.
- Ручное и автоматическое (по крону) обновление сигнатур.
- Ручное и автоматическое обновление версии самого скрипта.
- Возможность сканирования недавно добавленных/измененных файлов (например за последние 2 дня).
- Опция загрузки обнаруженных потенциальных угроз на официальный сайт для анализа.
- Система отчетов.
- Очистка файлов от вредоносных инъекций.
- Крон-заготовки для запуска регулярного сканирования юзерспейсов или других директорий.
- Наборы исключений по расширениям, сигнатурам и путям.
- Возможность отправки результатов сканирования на e-mail.
- Мониторинг в реальном времени созданных/модифицированных/измененных файлов при помощи inotify_watch: мониторинг выбранных пользователей, каталогов или файлов.
- … и прочее.
Как это работает
Сканирование происходит с использованием собственного скрипта на базе grep, а если в системе установлен ClamAV — то при помощи clamscan. Аналогично с сигнатурами: программа имеет свою базу сигнатур, если же в системе установлен ClamAV, то использует дополнительно и его базу.
Источники сигнатур:
- Срез данных сети. Разработчик LMD является администратором хостинга на 35.000 сайтов, данные ежедневно анализируется и обрабатываются. Основной источник сигнатур.
- Данные сообщества собранные с антималвар-сайтов.
- ClamAV, взаимообмен сигнатурами.
- Данные, присылаемые пользователями.
Сигнатуры обновляются практически ежедневно, RSS-лента с обновлениями сигнатур присутствует на официальном сайте.
Результаты сканирования сохраняются в файл, а также могут высылаться на указанный в конфиге e-mail. Интеграции с популярными панелями управления, увы, нет, если же вы хостер — сообщения клиентам придется рассылать вручную.
Интеграция с популярными панелями ISPmanager и Cpanel была бы неплохим вкладом в сообщество (это в случае если кто желает).
Что это дает
- Позволяет следить за безопасностью ваших сайтов на VDS и DS.
- Хостерам — ежедневное сканирование и рассылка предупреждений клиентам позволит повысить лояльность клиентов, которые, зачастую, очень далеки от знания кодинга и основ безопасности.
- Если ваш сайт или сайт клиента будет взломан — вы узнаете об этом либо сразу (если включен мониторинг в реальном времени), либо в течении периода, выбранного для cron-сканирования. Ведь «предупрежден — значит вооружен»: зараженные сайты чаще всего становятся источниками рассылки спама со всеми вытекающими (например, блеклистинг IP в DNSBL).
Типичные примеры обнаружений
Отчет о сканировании выглядит следующим образом:
malware detect scan report for servername:
SCAN ID: 090913-1000.17637
TIME: Sep 9 16:04:40 +0300
PATH: /var/www
RANGE: 2 days
TOTAL FILES: 151224
TOTAL HITS: 5
TOTAL CLEANED: 0
{HEX}php.cmdshell.unclassed.344 : www/user1/data/www/example.com/wp-content/plugins/7ja1i/nxeogyqbd3h.php
{HEX}php.cmdshell.cih.215 : /var/www/user1/data/www/example.com/xyiznwsk/info.php
{CAV}PHP.Trojan.Spambot : www/user1/data/www/example.com/wwp-content/plugins/customize-admin/bannerTQIz.php
{HEX}php.nested.base64.513 : /var/www/user1/data/www/example.com/engine/modules/topnews.php
{HEX}base64.inject.unclassed.6 : /var/www/user1/data/www/example.com/wp-content/plugins/wpematico/app/settings_page.php
{HEX}gzbase64.inject.unclassed.14 : /var/www/user1/data/director/example.com/wp-content/themes/zenith/404.php
Установка
Качаем:
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
Распаковываем:
tar -zxvf maldetect-current.tar.gz
Запускаем установку:
sh ./install.sh
При запуске install.sh программа установки размещает файлы LMD в /usr/local/maldetect, заносит исполняемый скрипт в /usr/local/sbin и libinotifytools.so.0 в /usr/lib.
В процессе инсталляции автоматически создаются ежедневные крон-задания для обновления сигнатур и запуска сканирования. По умолчанию в конфигурации указаны типичные пути для сканирования вебспейсов популярных панелей управлений, таких как ensim, psa, DirectAdmin, cpanel, interworx и дефолтных apache-путей размещения сайтов (/var/www/html, /usr/local/apache/htdocs). Для ISPmanager путь /var/www/ придется добавлять вручную.
Настройка
Конфиг LMD находится в файле /usr/local/maldetect/conf.maldet.
Конфиг хорошо документирован и позволяет настроить все, что душе угодно.
На заметку:
ionice -c 3 добавленный к строкам запуска скриптов по поиску и сканированию файлов поможет предотвратить нагрузку на дисковую подсистему выставив наинизший приоритет i/o.
В файле /usr/local/maldetect/maldet
находим:
find="$find"
меняем на:
find="ionice -c 3 $find"
находим:
clamscan="$clamscan"
меняем на:
clamscan="ionice -c 3 $clamscan"
Стоит отметить, что данное решение — своего рода «костыль», данную опцию стоит добавить в апстрим.
Типичные команды
Запускаем сканирование указанного каталога:
# maldet -a /home/user1/exapmle.com
По окончанию получаем результат вида:
maldet(24128): {scan} scan completed on example.com: files 4, malware hits 0, cleaned hits 0
maldet(24128): {scan} scan report saved, to view run: maldet --report 091713-1715.24128
Смотрим отчет:
#maldet --report 091713-1715.24128
Принудительно обновляем базы с rfxn.com:
#maldet -u
Принудительно обновляем версию с rfxn.com:
#maldet -d
Сканируем все изменные за последние X дней файлы (в данном случае 2) в указанном каталоге
#maldet -r /home/user1/ 2
Отправляем неизвестную уязвимость на rfxn.com:
#maldet -c /home/user1/file.php
Помещаем в карантин результаты сканирования SCANID (id из результатов сканирования)
#maldet -q 091713-1715.24128
Пытамся очистить результаты сканирования
#maldet -n, --clean 091713-1715.24128
Программа распространяется по лицензии GNU GPLv2.
Официальная страничка проекта: http://www.rfxn.com/projects/linux-malware-detect Linux Malware Detect.
Имею опыт использования и настройки, на все вопросы с удовольствием отвечу в комментариях.