В конце января — начале февраля 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. Смена паролей доступа к серверу и базе данных
Этот шаг не будет лишним, даже если взлом уже устранен. Лучше перестраховаться и обновить пароли.
Итог:
Защита сайта — это необходимость, а не опция. В данном случае важно закрыть все возможные уязвимости, а не просто устранять последствия атак. Если вам нужна помощь в проведении подобных работ на вашем сайте — обращайтесь. Мы всегда готовы помочь!
Нетипичные ситуации при взломе Аспро:
- Сайт взломали, а бэкапа нет
- В этом случае действуйте по стандартному сценарию: очистите сайт от вредоносных файлов, закройте уязвимости и обновите Битрикс. После этого обязательно создайте бэкап. Если не уверены в своих силах — обратитесь в нашу техподдержку.
- Не могу войти в админку после взлома
- В такой ситуации потребуется предварительный анализ через подключение к серверу. Возможна потеря данных из базы, но чаще всего проблема связана с программной ошибкой. Подключитесь к серверу, проведите очистку и попробуйте войти в админку. Если не получается — пишите, поможем разобраться.
- После взлома часть страниц не работает, сайт стал медленным
- Перезагрузите сервер, чтобы завершить все процессы. Затем остановите Apache (httpd) и проведите очистку от вредоносных файлов через SSH. После этого можно снова запустить Apache.
Список будет дополняться по мере появления новых ситуаций.