Взлом Аспро? Проблема решена! Полное руководство по защите и устранению последствий
В конце января — начале февраля 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

В каждом из этих файлов нужно запретить десериализацию классов, добавив параметр ['allowed_classes' => false].

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

4. Проверка папки upload на наличие PHP-файлов
В случае серьезного взлома часть вредоносных файлов может находиться в папке upload, откуда они могут запускаться, вызывая новые волны заражений. Проверку также удобно проводить через SSH-консоль.

5. Поиск троянов в Битриксе
В новых версиях Битрикса появился встроенный инструмент для поиска троянов. Рекомендуем воспользоваться им для дополнительной проверки.

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

Итог:
Защита сайта — это необходимость, а не опция. В данном случае важно закрыть все возможные уязвимости, а не просто устранять последствия атак. Если вам нужна помощь в проведении подобных работ на вашем сайте — обращайтесь. Мы всегда готовы помочь!

Нетипичные ситуации при взломе Аспро:
  1. Сайт взломали, а бэкапа нет
  2. В этом случае действуйте по стандартному сценарию: очистите сайт от вредоносных файлов, закройте уязвимости и обновите Битрикс. После этого обязательно создайте бэкап. Если не уверены в своих силах — обратитесь в нашу техподдержку.
  3. Не могу войти в админку после взлома
  4. В такой ситуации потребуется предварительный анализ через подключение к серверу. Возможна потеря данных из базы, но чаще всего проблема связана с программной ошибкой. Подключитесь к серверу, проведите очистку и попробуйте войти в админку. Если не получается — пишите, поможем разобраться.
  5. После взлома часть страниц не работает, сайт стал медленным
  6. Перезагрузите сервер, чтобы завершить все процессы. Затем остановите Apache (httpd) и проведите очистку от вредоносных файлов через SSH. После этого можно снова запустить Apache.
Список будет дополняться по мере появления новых ситуаций.
Made on
Tilda