Тень в настройках: Как 1С-Битрикс выполняет вредоносный eval из базы
Кейс из практики: когда антивирус чист, файлы целы, а сайт отдает спам ботам. И где в этой цепочке ошибка архитектуры?
В мире веб-разработки есть проблемы, о которых не принято говорить вслух, особенно когда речь идет о дорогих коробочных решениях. Недавно я столкнулся с инцидентом безопасности на проекте под управлением 1С-Битрикс: Управление Сайтом. Ситуация вышла за рамки обычного «взлома» и подняла неудобные вопросы об архитектуре CMS, ответственности вендора и безопасности данных, хранящихся в базе.
Все началось с жалобы на SEO. Позиции сайта в Google начали падать, а в консоли Search Console появились предупреждения о «вредоносном ПО». При ручном открытии сайта в браузере все работало идеально: чистая верстка, корректный контент.Однако при запросе страницы под User-Agent бота Google (Googlebot) сайт отдавал совершенно другой контент. Вместо полезной информации происходил загрузка информация со страницы, наполненную иероглифами и спам-ссылками. Классический клоакинг.
Расследование: Тупик в файловой системе
Первым делом была проведена стандартная процедура безопасности:
- Сверка хешей файлов с дистрибутивом ядра.
- Проверка модифицированных файлов за последние месяцы.
- Сканирование антивирусом (в том числе специализированными сканерами для Bitrix).
- Анализ .htaccess на предмет правил редиректа.
Результат: Чисто. Ни одного зараженного файла, ни одного подозрительного скрипта в папках /local/, /bitrix/ или корне сайта. Вредоносный код не жил в файлах.
Обнаружение: Ящик Пандоры в админке
Поскольку файловая система была чиста, внимание переключилось на базу данных и конфигурацию. Я начал аудировать, разделы, элементы, данные модулей и другие настройки сайта в административной панели. В разделе «Настройки сайта», в поле, отвечающем за подключение шаблонов, был обнаружен посторонний код.Там был прописан новый шаблон, условие которого содержал функцию eval(). Как только эта запись была удалена из настроек, клоакинг прекратился. Боты Google снова начали видеть нормальный контент.
Технический вопрос: Почему это возможно?
Здесь начинается самая интересная и тревожная часть истории.
Вопрос №1: Почему CMS выполняет eval из настроек? Архитектурно верно, когда настройки хранят пути, флаги или строки, которые интерпретируются движком. Однако в данном случае значение из поля настроек попало в контекст, где оно было выполнено как PHP-код.
Если административная панель позволяет сохранить eval-код в поле настройки, и ядро сайта впоследствии этот код исполняет — это критическая архитектурная уязвимость. Адекватный администратор не должен иметь возможности (даже теоретически) прописать eval в настройках сайта без явного предупреждения и санитизации.
Вопрос №2: Как код туда попал? Скорее всего, первоначальный вектор атаки был другим (уязвимость в стороннем модуле, слабый пароль, уязвимость в шаблоне). Злоумышленники получили доступ к админке и, понимая, что файловые сканеры ищут изменения в .php файлах, спрятали payload в базу данных, в поле, которое движок исполняет. Это «файл-less» атака, которую стандартные средства мониторинга целостности файлов не видят.
Проблема доверия: Деньги есть, безопасности нет
Этот кейс поднимает вопрос, который многие партнеры и клиенты 1С-Битрикс боятся задать вслух.
- Стоимость лицензии. 1С-Битрикс — одна из самых дорогих CMS на рынке РФ. Покупая редакцию «Бизнес» или «Малый бизнес», клиент платит не только за функционал, но и за ожидаемый уровень безопасности и поддержки.
- Реакция техподдержки. После обнаружения инцидента мы направили официальный запрос в службу безопасности и техподдержку 1С-Битрикс. Ответ: «Обратитесь к разработчикам шаблона». Мой аргумент: Проблема не в шаблоне, а в том, что ядро исполняет eval код из настроек остался без ответа.
- Отсутствие патча. На момент написания статьи установлены все последние обновления CMS. Проблема не признана уязвимостью, исправлений нет.
Создается впечатление замкнутого круга: Вендор перекладывает ответственность на интеграторов и разработчиков шаблонов, а те, в свою очередь, не могут повлиять на архитектуру ядра.
Почему это ненормально?
В современной разработке действует принцип Separation of Code and Data (Разделение кода и данных).
- Данные (настройки, контент) хранятся в БД.
- Код (логика) хранится в файлах и проходит контроль версий.
Когда CMS позволяет данным из админки трансформироваться в исполняемый код без жесткой валидации, она создает идеальную среду для persistence-атак (закрепления в системе). Злоумышленнику проще один раз записать скрипт в базу, чем постоянно перезаписывать файлы, которые могут быть восстановлены из бэкапа или заблокированы правами доступа.Для платной Enterprise-системы такое поведение выглядит как анахронизм из 2000-х годов.
Что делать интеграторам и владельцам сайтов?
Пока вендор молчит, защищаться приходится своими силами. Вот рекомендации, основанные на этом кейсе:
- Аудит таблиц. Регулярно проверяйте содержимое таблицы настроек на наличие подозрительных конструкций (eval, base64_decode, preg_replace с модификатором e, system, exec).
- Ограничение прав. Минимизируйте количество пользователей с доступом к главному уровню администрирования («Настройки сайта»).
- WAF на уровне приложения. Используйте решения, которые анализируют не только файлы, но и логи выполнения, а также изменения в критических таблицах БД.
- Отключение опасных функций. В php.ini стоит отключить eval (через disable_functions), если это не ломает легитимный функционал. Примечание: в случае с Битриксом это может быть сложно из-за зависимостей ядра, но попробовать стоит в тестовом окружении.
- Мониторинг User-Agent. Настройте алерты на аномальное поведение при запросах от поисковых ботов.
Заключение
Я не призываю отказываться от 1С-Битрикс. Это мощный инструмент, на котором держится огромный сегмент е-кома в СНГ. Но когда у продукта есть проблемы подобного характера невольно возникает вопрос о том как сделано все остальное и не будет ли подобных "сюрпризов" в будущем.