Перейти в канал

infosec&anti_malware

1
• В Cloudflare раскрыли причину почти пятичасового глобального сбоя в работе своих сервисов. Оказалось, что это была ошибка в файле конфигурации системы защиты от ботов, который перед началом инцидента был обновлён инженерами Cloudflare в плановом порядке. • После изменения конфигурации возникла скрытая ошибка в сервисе, лежащем в основе системы противодействия ботам, который начал давать сбои. В пресс-службе компании добавили, что сбой возник из-за того, что размер файла конфигурации превысил ожидаемый. Именно эта ситуация привела к сбою в работе ПО, обрабатывающего трафик ряда сервисов Cloudflare, а также к масштабному ухудшению работы клиентской сети и других сервисов компании. • Технические детали под спойлером: Сбой произошёл после изменения в структуре БД, размещённой в хранилище ClickHouse, после которого файл с параметрами для системы противодействия ботам в два раза увеличился в размере. В БД были образованы дублирующиеся таблицы, при том, что SQL-запрос для формирования файла просто выводил все данные из всех таблиц по ключу, без отсеивания дубликатов. Созданный файл распространился по всем узлам кластера, обрабатывающего входные запросы. В обработчике, использующем данный файл для проверки на обращение от ботов, указанные в файле параметры сохранялись в оперативной памяти и для защиты от излишнего расхода памяти в коде был предусмотрен лимит на максимально допустимый размер файла. В обычных условиях фактический размер файла был значительно меньше выставленного ограничения, но после дублирования таблиц превысил лимит. Проблема оказалась в том, что вместо корректной обработки превышения лимита и продолжения использования прошлой версии файла с информированием системы мониторинга о внештатной ситуации, в обработчике срабатывало аварийное завершение, которое блокировало дальнейший проброс трафика. Ошибка была вызвана использованием в коде на языке Rust метода unwrap() с типом Result. Когда значение Result имеет состояние Ok, метод unwrap() возвращает связанный с этим состоянием объект, но если результат не является успешным - вызов приводит к аварийному завершению (вызывается макрос panic!), . Обычно unwrap() применяется в процессе отладки или при написании тестового кода и не рекомендован для использования в рабочих проектах. • Инженеры добавили, что ситуация усложнялась тем, что файл конфигурации обновлялся каждые пять минут. Эта закономерность на какое-то время навела команду на мысль, что они, возможно, подверглись DDoS атаке. Как только инженеры поняли, что каждый узел начал создавать нерабочую версию, след привел к искажённому файлу управления ботами. В Cloudflare остановили распространение файла, отправили заведомо исправный файл, перезапустили основные прокси-сервисы, и трафик начал восстанавливаться. • В Cloudflare описывают инцидент как самый серьёзный сбой с 2019 года... #Новости