Программирование

Взлом Аспро? Устранено! Наиболее полное руководство по защите и ликвидации последствий

Взломы сайтов - проблема, которая, увы, встречается довольно часто. Здесь мы рассмотрели массовый взлом сайтов на АСПРО и методы его решения.

В конце января - начале февраля 2025 рунет сотрясли массовые взломы сайтов на АСПРО. Под атаку попали в основном интернет-магазины на необновленных шаблонах. АСПРО в этом случае рекомендует обновиться до последней версии, где эта дыра в безопасности закрыта. Но будем честны, частно шаблоны интернет-магазинов переделываются так, что ни о каком обновлении речь идти не может. Что же делать в этом случае?

Мы провели проверку логов взломанных сайтов, пообщались с коллегами и определили первые точки атаки. Ими оказались файлы из папки ajax: reload_basket_fly.php, show_basket_fly.php, show_basket_popup.php, а также файл comp_catalog_ajax.phpиз папки includes/mainpage.

Злоумышленники пробивали функцию unserialize через внедрение в тело запроса вредоносного класса. В документации php на эту функцию есть параметр ['allowed_classes' => false], который запрещает внедрение классов в сериализованные массивы. Вот этого параметра в Аспро и не было.

  • unserialize($data); // Так остается дыра в безопасности
  • unserialize($data, ['allowed_classes' => false]); // Так дыра прикрывается

Сперва нужно пробежать по указанным выше файлам и прикрыть дыру в безопасности. После этого выполняем следующие действия:

1. Сканируем весь сервер и ищем недавно обновленные файлы php

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

2. Ищем все файлы, связанные с Аспро, где встречается unserialize. Мы проделали эту работу за вас. Вот список этих файлов:

bitrix/components/aspro

  • /basket.file.max/class.php
  • /basket.file.max/templates/xls/dompdf/vendor/dompdf/dompdf/lib/Cpdf.php
  • /basket.file.max/templates/xls/dompdf/vendor/dompdf/php-svg-lib/src/Svg/Surface/CPdf.php
  • /basket.share.detail.max/class.php
  • /catalog.delivery.max/ajax.php
  • /smartseo.tags.max/class.php
  • /oneclickbuy.max/script.php

bitrix/modules/aspro.max

  • /admin/crm_amo.php
  • /admin/pwa.php
  • /admin/options.php
  • /admin/smartseo/views/filter_condition/_form_condition.php
  • /admin/smartseo/views/seo_text/detail_element/partial/condition_control.php
  • /admin/smartseo/views/seo_text/detail_element/_form.php
  • /admin/options_ym.php
  • /admin/crm_flowlu.php
  • /install/wizards/aspro/max/site/services/main/settings.php
  • /install/wizards/aspro/max/site/templates/aspro_max/components/bitrix/map.google.view/map/template.php
  • /install/wizards/aspro/max/site/templates/aspro_max/components/bitrix/catalog.store.detail/main/result_modifier.php
  • /install/wizards/aspro/max/site/templates/aspro_max/components/bitrix/catalog.store.list/front_map/result_modifier.php
  • /install/wizards/aspro/max/site/templates/aspro_max/components/bitrix/catalog.store.list/front_map3/result_modifier.php
  • /install/wizards/aspro/max/site/templates/aspro_max/components/bitrix/catalog.store.list/front_map2/result_modifier.php
  • /install/wizards/aspro/max/site/templates/aspro_max/components/bitrix/catalog.store.list/main/result_modifier.php
  • /install/wizards/aspro/max/site/templates/aspro_max/components/bitrix/catalog.store.amount/popup/result_modifier.php
  • /install/wizards/aspro/max/site/templates/aspro_max/components/bitrix/catalog.store.amount/main/result_modifier.php
  • /install/wizards/aspro/max/site/templates/aspro_max/components/bitrix/sale.order.ajax/v2/ajax.php
  • /install/wizards/aspro/max/site/templates/aspro_max/components/bitrix/catalog.comments/catalog/bitrix/blog.post.comment/adapt/ajaxLike.php
  • /install/wizards/aspro/max/site/templates/aspro_max/components/bitrix/catalog.comments/catalog/bitrix/blog.post.comment/adapt/like.php
  • /install/components/aspro/basket.file.max/class.php
  • /install/components/aspro/basket.share.detail.max/class.php
  • /install/components/aspro/basket.share.detail.max/ajax.php
  • /install/components/aspro/catalog.delivery.max/ajax.php
  • /install/components/aspro/smartseo.tags.max/class.php
  • /install/components/aspro/oneclickbuy.max/script.php
  • /vendors/phpmorphy/phpmorphy-0.3.7/src/graminfo/graminfo.php
  • /vendors/phpmorphy/phpmorphy-0.3.7/src/shm_utils.php
  • /vendors/phpmorphy/phpmorphy-0.3.7/src/gramtab.php
  • /vendors/phpmorphy/phpmorphy-0.3.7/src/morphiers.php
  • /vendors/dompdf/lib/html5lib/Data.php
  • /vendors/dompdf/lib/Cpdf.php
  • /vendors/dompdf/lib/php-svg-lib/src/Svg/Surface/CPdf.php
  • /classes/general/CMaxEvents.php
  • /classes/general/CMax.php
  • /classes/general/CMaxTools.php
  • /classes/general/CAsproMarketing.php
  • /classes/general/mailing_functions.php
  • /classes/general/CAsproMarketingMax.php
  • /classes/smartseo/admin/controllers/FilterUrlController.php
  • /classes/smartseo/admin/controllers/NoindexRulesController.php
  • /classes/smartseo/admin/controllers/FilterTagController.php
  • /classes/smartseo/admin/grids/NoindexRuleConditionGrid.php
  • /classes/smartseo/admin/grids/FilterRuleConditionGrid.php
  • /classes/smartseo/admin/grids/FilterRuleUrlGrid.php
  • /classes/smartseo/engines/SearchEngine.php
  • /lib/searchquery.php
  • /lib/pwa.php
  • /lib/functions/CAsproMax.php
  • /lib/gs.php
  • /lib/smartseo/template/entity/FilterRuleConditionProperty.php
  • /lib/smartseo/template/entity/SeoTextElementProperties.php
  • /lib/smartseo/template/entity/FilterRuleUrl.php
  • /lib/smartseo/generator/handlers/PropertyUrlHandler.php
  • /lib/smartseo/models/smartseonoindexconditiontable.php
  • /lib/smartseo/models/smartseofiltertag.php
  • /lib/smartseo/condition/controls/IblockPropertyBuildControls.php
  • /lib/smartseo/condition/ConditionResult.php
  • /lib/smartseo/condition/bxcond/catalog_cond.php
  • /lib/smartseo/condition/ConditionResultHandler.php
  • /tools/smartseo/get_property_values.php

bitrix/templates/aspro

  • /components/bitrix/map.google.view/map/template.php
  • /components/bitrix/catalog.store.detail/main/result_modifier.php
  • /components/bitrix/catalog.store.list/front_map/result_modifier.php
  • /components/bitrix/catalog.store.list/front_map3/result_modifier.php
  • /components/bitrix/catalog.store.list/front_map2/result_modifier.php
  • /components/bitrix/catalog.store.list/main/result_modifier.php
  • /components/bitrix/catalog.store.amount/popup/result_modifier.php
  • /components/bitrix/catalog.store.amount/main/result_modifier.php
  • /components/bitrix/catalog.comments/catalog/bitrix/blog.post.comment/adapt/ajaxLike.php
  • /components/bitrix/catalog.comments/catalog/bitrix/blog.post.comment/adapt/like.php

В каждый файл нужно зайти и внести правку - запретить десериализацию классов

2. Обновить ядро Битрикс и все используемые модули до актуальной версии

Ядро обновить обязательно! Модули - по возможности. После обновления модулей проверить все их файлы на наличие функции serialize()

3. Проверить папку upload на наличие php файлов

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

3. Запустить в Битриксе поиск троянов

В новых версиях Битрикса появился хороший инструмент по поиску троянов. Его и используем

4. Изменить пароли доступа к серверу и БД

На всякий случай. Лишним точно не будет

Итого

Защищаться можно и нужно. В данном случае лучше закрыть максимум возможных дыр, а не лечить возникающие симптомы.

Если необходимо проделать подобную работу на вашем сайте - обращайтесь. Поможем!

Некоторые нетипичные ситуации при взломе аспро:

1. У меня взломали сайт на аспро, а бэкапа нет.

В этом случае идем по стандартному сценарию: вычищаем все вирусные файлы, закрываем дыры по инструкции выше и обновляем битрикс. После этого делаем бэкап. Ну или можете обратиться к нам в техподдержку, будем следить за бэкапами и еще много за чем :)

2. Взломали сайт на аспро и не могу войти в админку

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

3. После взлома часть страниц перестала работать, сайт стал работать медленно

Необходимо перезагрузить сервер, чтобы убить все процессы. Потом можно остановить apache (httpd) и провести чистку от вредоносных файлов через SSH консоль. После этого можно включить апач снова.

список будет пополняться

Козлов Эдуард

Козлов Эдуард

Соучредитель BrainForce, руководитель компании

Занимаюсь развитием своей компании, проектов клиентов, в свободное время немного пишу код :)

Давайте обсудим проект

Вы гарантированно получите квалифицированный ответ в течение рабочего дня

* - обязательные поля