Через форму на сайте пишут покупатели, а ещё программы, которые круглые сутки перебирают сайты в поисках дыр. Программе хватит одного поля, куда вместо имени можно вписать команду серверу, или одного файла, внутри которого спрятан код. Фильтр запросов внутри сайта читает такие поля и файлы первым, раньше самого сайта.
У нас такой фильтр свой, waf-ii. Мы пишем его с апреля 2022 года, в наборе больше двухсот правил. Расскажем, что он проверяет, как отвечает на подозрительный запрос и почему первые дни после установки ничего не блокирует.
Где стоит фильтр
Запрос к сайту проходит две проверки. Первую делает веб-сервер - программа, которая принимает запросы раньше всех. Он видит адрес страницы и отсекает очевидное: обращения к служебным файлам и к адресам, которых на сайте быть не должно. Что внутри отправленной формы, веб-сервер без дополнительных модулей не разбирает. Что именно отсекает эта проверка - в статье про фильтр запросов на веб-сервере.
Вторая проверка - фильтр внутри сайта. Сервер запускает его на каждый запрос раньше 1С-Битрикс. Фильтр получает форму уже разобранной на поля, видит прикреплённые файлы и решает, пропустить запрос к сайту или остановить.
Что фильтр ищет в запросе
Каждое правило описывает приём, которым ломают сайты. Вот что фильтр находит чаще всего.
- →Код вместо текста. В поле "Комментарий" вместо отзыва приходит кусок программы или команда серверу. Человеку писать такое незачем, а сайт с дырой может эту команду выполнить.
- →Путь к служебным файлам. В запросе прописан путь к системным файлам сервера, например к списку его пользователей, или подъём по папкам вверх, за пределы сайта.
- →Код внутри файла. К форме прикрепили "картинку" или "документ", а внутри спрятана программа. Фильтр читает начало, середину и конец каждого файла, по 15, 5 и 15 КБ, и ищет в них признаки кода.
- →Запрос к известной дыре 1С-Битрикс. Под известные уязвимости платформы заведены отдельные правила. Например, дыру в модуле опросов (CVE-2022-27228) разработчик платформы закрыл в марте 2022 года, а сайты без обновления через неё взламывали и позже. Правило под неё остаётся в фильтре и прикрывает сайт, которому обновление поставили не сразу.
- →Спрятанная команда. Чтобы правило не узнало команду, её перекодируют в набор латинских букв и цифр, иногда несколько раз подряд. Фильтр раскодирует такие куски слой за слоем и проверяет и исходный текст, и результат.
Что получает тот, кого остановили
Ответ выбирают для каждого набора правил. На явную атаку фильтр отвечает отказом в доступе, ошибкой 403, и сайт дальше не работает с этим запросом. Спамеру можно ответить "страница не найдена". Есть и тихий вариант: фильтр стирает всё, что прислали в форме, и сайт показывает обычную страницу, будто форму не отправляли.
Каждая остановка попадает в журнал: время, адрес страницы, номер правила. Когда покупатель пишет, что форма не отправилась, по журналу видно, остановил ли её фильтр и каким правилом.
Почему фильтр не включают в первый день
Правило фильтра - образец подозрительного текста. Слова, с которыми работает взломщик, встречаются и в обычных запросах. Если включить все правила в день установки, фильтр остановит и часть покупателей. Покупатель увидит ошибку и уйдёт, а в журнале его заказ будет выглядеть как отбитая атака.
| Что пришло на сайт | Почему похоже на атаку | Что сделали |
|---|---|---|
| Покупатель пишет в форме про "кольцо echo" | echo - команда сервера, ею взломщик проверяет, выполнил ли сервер присланное | Разрешили эту фразу в настройках сайта |
| В запросе есть строка Crawl-delay, настройка для поисковых роботов | Словом delay заставляют базу данных сделать паузу и по ней угадывают ответ | Разрешили Crawl-delay для всех сайтов |
| Программист пересылает коллеге в чат Битрикс24 кусок кода | В сообщении команды, как в атаке | Сообщения чата исключили из части правил |
Поэтому фильтр включают по шагам.
- 01Наблюдение. Фильтр работает в пассивном режиме: ничего не блокирует и только записывает, что остановил бы. Так проходит несколько дней на живых запросах сайта.
- 02Разбор журнала. Считают, какое правило сколько раз сработало, и просматривают запросы по каждому правилу. Запрос программы-взломщика подтверждает правило, запрос живого человека - повод его поправить.
- 03Исключения. Правило уточняют, адрес доверенной системы вносят в список разрешённых. Особенности сайта записывают в его отдельный файл: общие правила остаются общими, и обновление набора правил настройки сайта не сотрёт.
- 04Включение. После разбора фильтр начинает блокировать. Журнал читают и дальше: на сайте появляются новые формы, обмены и модули.
В истории изменений waf-ii 32 записи о калибровке и совместимости: с чатами и мобильным приложением Битрикс24, с дизайнером бизнес-процессов, с формами готовых решений для интернет-магазинов. Обычно за такой записью стоит правило, которое задело чей-то рабочий запрос.
Почему фильтр не выключить изнутри сайта
У 1С-Битрикс есть свой проактивный фильтр. Он часть платформы и настраивается в её панели управления. Наш фильтр сервер запускает раньше платформы, поэтому из панели управления сайта его не выключить.
Файл, который подключает фильтр, при установке защищают от правки на уровне системы. Код, который уже попал на сайт, не сможет удалить этот файл и отключить проверку.
Чего фильтр не делает
- →Ловит только известное. Фильтр узнаёт приёмы, которые описаны в правилах. Новую дыру, под которую правила ещё нет, он может пропустить, поэтому обновления платформы ставят всё равно.
- →Заражённый сайт не лечит. Код, который уже лежит в файлах сайта, фильтр не удаляет. Он отрезает такому коду команды снаружи, а сам код ищут и вычищают отдельно. Как это было на одном сайте, мы разбирали в статье про межсетевой экран.
- →От наплыва запросов не спасает. Когда на сайт разом идут тысячи запросов, чтобы его положить, нужна защита на стороне хостинга.
Пять вопросов подрядчику
- 01Что проверяет поля форм и прикреплённые файлы до того, как их получит сайт?
- 02Сколько дней фильтр работал в режиме наблюдения и кто разбирал его журнал?
- 03Покупатель пишет, что форма не отправилась. Как вы узнаете, остановил ли её фильтр и каким правилом?
- 04Где записаны исключения для нашего сайта и не сотрёт ли их обновление правил?
- 05Может ли код, который попал на сайт, отключить защиту?
На третий вопрос хороший ответ называет журнал и номер правила. Если подрядчик отвечает, что посмотрит, остановленные запросы никто не разбирает, и отбитый заказ покупателя в журнале от атаки не отличить.



