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