DoS-атаки с использованием регулярных выражений (ReDoS) представляют собой растущую угрозу в сфере кибербезопасности. современная безопасность приложенийПоскольку все больше команд полагаются на проверку входных данных и сопоставление с шаблонами, плохо разработанное регулярное выражение может привести к уязвимостям в производительности, которые злоумышленники могут использовать для замедления работы сервисов или возникновения сбоев. Фактически, OWASP ReDoS описывается как атака типа «отказ в обслуживании», которая использует тот факт, что многие реализации регулярных выражений могут работать крайне медленно, иногда с экспоненциальным ростом времени выполнения с увеличением размера входных данных.
В то же время, ReDoS-атаки особенно опасны в облачных средах. CI/CDВ средах, где уязвимое регулярное выражение в API, шлюзе или потоке аутентификации может повлиять на доступность в масштабе, команды должны рассматривать ReDoS как реальный риск для доступности, а не просто как нишевый частный случай.
Что еще более важно, эти уязвимости часто остаются незамеченными на этапе разработки, поскольку традиционные подходы фокусируются на синтаксисе, а не на поведении при выполнении. В результате неэффективные шаблоны регулярных выражений могут легко попасть в рабочую среду, не вызывая никаких предупреждений.
Именно здесь вступают в игру современные платформы безопасности приложений, такие как Xygeni. Встраивая проверки безопасности непосредственно в рабочие процессы разработки, они помогают выявлять эти проблемы на ранних стадиях и расставлять приоритеты для действительно достижимых и существенных рисков, вместо того чтобы просто создавать лишний шум.
Что такое ReDoS (Regular Expression DoS)?
ReDoS (Regular Expression Denial of Service) — это уязвимость, возникающая, когда шаблон регулярного выражения вызывает чрезмерное отслеживание изменений, что приводит к экспоненциальному увеличению времени выполнения.
Проще говоря, вредоносный ввод может заставить ваше приложение тратить чрезмерно много времени на обработку регулярного выражения, блокируя систему и ухудшая производительность.
Например, шаблоны с вложенными кванторами, такие как:
(a+)+
Обработка определенных входных данных может стать крайне неэффективной, особенно если она специально создана злоумышленником.
Хотя это может показаться частным случаем, в реальных приложениях это удивительно распространенное явление, особенно в логике валидации, полях ввода форм и обработке запросов API.
Как работают RedoS-атаки
Для ReDoS-атаки не требуется сложная эксплуатация уязвимостей. Вместо этого она использует предсказуемое поведение механизма регулярных выражений.
Катастрофический откат назад
Злоумышленник выбирает в качестве цели регулярное выражение, которое может принимать несколько совпадающих путей. Затем он предоставляет входные данные, которые заставляют движок исследовать большинство или все пути.
Ввод данных, созданный злоумышленниками.
Злоумышленники обычно отправляют:
- Длинные строки с повторяющимися символами.
- Входные данные почти совпадают, но в конце происходит сбой.
- Полезные нагрузки, которые концентрируются на наиболее неоднозначной части шаблона.
Снижение производительности
Поскольку каждый запрос может нагружать процессор, эффект быстро накапливается:
- Более высокая задержка между конечными точками.
- Пул потоков исчерпан.
- Цикл обработки событий зависает в однопоточных средах выполнения.
Эти атаки не требуют сложных эксплойтов. Вместо этого они используют неэффективное сопоставление шаблонов, что затрудняет их обнаружение, если ваши инструменты проверяют только синтаксис или известные уязвимости CVE.
Реальные последствия уязвимостей ReDoS-атак
ReDoS-атака затрагивает «А» триады ЦРУ: доступность. Пока не сопоставишь все факты, это может выглядеть как проблема стабильности, а не как инцидент безопасности.
замедление работы API
Использование уязвимого регулярного выражения в одной конечной точке может привести к резкому увеличению нагрузки на процессор во время проверки входных данных, маршрутизации запросов или проверок аутентификации.
Отключение службы
При высокой нагрузке точка доступа ReDoS может привести к перезапуску подов, ухудшению автомасштабирования и запуску каскадных сбоев.
Истощение ресурсов
ReDoS может использовать:
- ЦП на узлах приложения.
- Память возникает из-за возврата к исходному состоянию.
- Рабочие потоки, блокирующие другие запросы.
Поскольку ReDoS-атаки нацелены на повышение производительности, а не на утечку данных, многие команды недооценивают их влияние. Однако доступность является ключевым элементом безопасности приложений, и сбои могут быстро привести к бизнес-рискам.
Решающие перемены — вот настоящая проблема доверия.
Когда разработчики говорят, что не доверяют функции автоматического исправления ошибок, они часто имеют в виду одну очень конкретную вещь: они не доверяют ей и боятся, что она что-нибудь сломает.
Проблема доверия наиболее заметна в процессе устранения зависимостей.
Для уязвимого пакета может быть доступна исправленная версия, но это не означает, что обновление безопасно. Исправленная версия может удалить метод, используемый вашим приложением. Она может переименовать API. Она может ужесточить контракт типов. Она может изменить поведение таким образом, что модульные тесты пройдут успешно, но это приведет к регрессиям в производственной среде. Во многих командах фактическая стоимость устранения проблемы заключается не в применении патча, а в исследовании последствий.
Рассмотрим простой пример на Java. Кодовая база зависит от библиотеки, в которой общий метод существовал в версии 1.x, но был удален в версии 2.x.
Реальные RedoS-атаки и инциденты в сфере безопасности
ReDoS — это не просто теоретическая уязвимость. Она уже использовалась в реальных приложениях, затрагивая широко используемые библиотеки и производственные системы.
Вот несколько показательных примеров, иллюстрирующих влияние неэффективных регулярных выражений:
Уязвимость ReDoS в Moment.js
Одна из наиболее известных уязвимостей ReDoS затрагивает Moment.js, широко используемая библиотека JavaScript для работы с датами.
- Неправильно разработанный шаблон регулярного выражения привел к чрезмерному возврату назад.
- Злоумышленники могут вызвать высокую загрузку процессора с помощью специально сформированных входных данных.
- Приложения, использующие Moment.js, стали уязвимы для атак типа «отказ в обслуживании» (DoS-атаки).
Эта проблема продемонстрировала, как даже проверенные библиотеки могут внедрять уязвимости, влияющие на производительность, в тысячи приложений.
Библиотека валидатора для Node.js (validator.js)
Ещё один пример валидатор.jsОбычно используется для проверки входных данных.
- Некоторые функции проверки использовали неэффективные регулярные выражения.
- Вредоносные входные данные могут значительно замедлить выполнение.
- Это повлияло на API и серверные службы, использующие проверку пользовательского ввода.
Поскольку validator.js широко используется, его влияние распространилось на множество приложений и сервисов.
Сбой в работе Cloudflare (сбой, вызванный регулярными выражениями)
Произошёл громкий инцидент. Cloudflareгде некорректный шаблон регулярного выражения вызвал крупный сбой.
- Использование регулярного выражения в рабочей среде привело к чрезмерной загрузке процессора.
- Системы перестали отвечать по всему миру.
- Значительная часть интернета временно оказалась недоступна.
Хотя это и не было злонамеренным нападением, этот инцидент наглядно демонстрирует, как неэффективность регулярных выражений может иметь реальные последствия в масштабах реального мира.
Почему традиционные инструменты безопасности не справляются с RedoS
Это раздел, посвященный конверсии, поскольку он объясняет разрыв, который ощущает большинство команд: сканеры работают, dashboardНесмотря на заполнение базы данных, ReDoS-атаки всё равно проскальзывают.
Статические инструменты ориентированы на синтаксис.
Многие сканеры могут выявлять «опасные шаблоны регулярных выражений», но зачастую им не хватает уверенности в том, действительно ли этот шаблон может быть использован злоумышленниками в вашем контексте.
Нет контекста выполнения
ReDoS — это алгоритм, описывающий поведение во время выполнения. OWASP отмечает, что многие реализации регулярных выражений могут достигать экстремальных значений и работать очень медленно, иногда с экспоненциальной зависимостью от размера входных данных.
Если инструмент никогда не анализирует форму входных данных, условия сбоя сопоставления или пути выполнения, он либо упустит риск, либо выдаст множество ложных срабатываний.
Анализ возможности эксплуатации отсутствует.
Регулярное выражение может быть «теоретически рискованным», но недостижимым на практике. И наоборот, «небольшой» валидатор в общедоступной конечной точке может стать реальной проблемой. Без контекста команды либо игнорируют оповещения, либо чрезмерно усложняют исправление ошибок.
Традиционные сканеры часто не могут обнаружить ReDoS-атаки, поскольку они не оценивают поведение регулярных выражений во время выполнения или в условиях вредоносного ввода. Именно здесь платформы, такие как Xygeni, играют важную роль, сочетая анализ с контекстная оценка рискапомогая командам понять, действительно ли уязвимость достижима и окажет существенное влияние.
Как обнаружить уязвимости ReDoS
Обнаружить ReDoS-атаки можно, сочетая принципы проектирования и тестирования. Кроме того, необходимы проверки, которые выполняются непрерывно, а не только во время проверки безопасности.
Надежная разработка регулярных выражений
Начните с шаблонов, которые минимизируют неоднозначность. Избегайте вложенных квантификаторов и перекрывающихся альтернатив.
Фаззинг и тестирование
Проверяйте шаблоны регулярных выражений с помощью:
- Очень длинные входные данные.
- Входные данные, близкие к сбоям, которые происходят на поздней стадии.
- Повторяющиеся токены предназначены для запуска возврата к исходным данным.
Статический анализ
Используйте анализ, который выявляет известные рискованные конструкции и модели, соответствующие КВО-1333.
Проверка времени выполнения
По возможности устанавливайте ограничения на длину входных данных и тайм-ауты для оценки регулярных выражений. Руководство OWASP по проверке входных данныхВ документе содержится явное предупреждение о ReDoS-атаках и подчеркивается важность определения минимальной и максимальной длины входных данных.
Передовые решения в области безопасности приложений, такие как Xygeni, выходят за рамки простого обнаружения шаблонов, поскольку анализ кода в контексте рабочего процесса а также помогает командам сосредоточиться на проблемах, которые, скорее всего, будут иметь значение в реальных ситуациях, что снижает количество ложных срабатываний и ускоряет устранение неполадок.
Как предотвратить ReDoS-атаки
Профилактика — это сочетание более безопасных моделей поведения, более безопасных входных данных и более безопасных решений во время выполнения.
Избегайте вложенных кванторов.
Вложенные повторения часто приводят к самым серьёзным проблемам, связанным с необходимостью возвращаться назад.
Ограничить размер входных данных
Это самый простой и надежный способ решения проблемы. Установите максимальные ограничения по длине для входных данных, проходящих проверку с помощью регулярных выражений. OWASP выделяет ограничения по длине как ключевой элемент безопасной проверки входных данных.
По возможности используйте безопасные механизмы регулярных выражений.
Если есть возможность выбора движка, отдавайте предпочтение тому, который разработан таким образом, чтобы избежать катастрофического возврата к исходной точке. RE2 от Google позиционируется как безопасная альтернатива механизмам обратного поиска с использованием регулярных выражений.
Проверяйте входные данные с помощью многоуровневых проверок.
Не полагайтесь на одно регулярное выражение для всей проверки. Объедините:
- списки разрешенных персонажей,
- строгие проверки длины,
- и более простые шаблоны для каждого поля.
Предотвращение ReDoS-атак требует применения безопасных методов кодирования и непрерывная проверка на протяжении всего жизненного цикла разработкиособенно по мере масштабирования приложений и роста зависимостей.
Как Xygeni помогает обнаруживать и предотвращать ReDoS-атаки
Xygeni помогает командам DevSecOps выявлять и предотвращать уязвимости ReDoS, объединяя несколько уровней анализа.
Основные возможности включают в себя:
- Выявление уязвимых шаблонов регулярных выражений в процессе разработки
- Анализ потоков данных и путей выполнения.
- Выявление уязвимостей, которые можно использовать, а не только теоретических.
- Интеграция в CI/CD pipelines для непрерывного сканирования
- Практические рекомендации по устранению проблем для разработчиков
Вместо того чтобы перегружать команды оповещениями, Xygeni расставляет приоритеты. уязвимости, которые действительно достижимы и эффектный.
Это позволяет командам быстрее устранять реальные проблемы, не замедляя разработку.
Рекомендации для команд DevSecOps
Безопасность Shift-Left
Необходимо включить проверку на ReDoS-атаки в ту же процедуру, что и проверку кода и модульное тестирование.
Автоматизация сканирования
Выполните проверки по каждому pull request Таким образом, риск, связанный с регулярными выражениями, не ожидает периодических проверок.
Мониторинг зависимостей
Уязвимости, связанные с регулярными выражениями, также встречаются в зависимостях и библиотеках для анализа входных данных, поэтому необходимо тщательно следить за чистотой зависимостей.
Непрерывно проверяйте входные данные.
Примените ограничения по длине и правила ввода на границах, а затем повторно проверьте внутри критически важных сервисов.
Внедряя средства безопасности непосредственно в рабочие процессы разработки, команды могут предотвращать уязвимости, влияющие на производительность, такие как ReDoS-атаки, до того, как они попадут в производственную среду.
Предотвращение ReDoS-атак начинается с обеспечения видимости без теней.
Атаки типа ReDoS часто упускаются из виду, хотя они могут оказать существенное влияние на производительность и доступность приложений. OWASP определяет ReDoS как риск отказа в обслуживании, основанный на экстремальном поведении регулярных выражений во время выполнения.
Это значит, что вам нужно нечто большее, чем простое сканирование. Вам необходимы контекст, расстановка приоритетов и автоматизация.
Если рассматривать регулярные выражения как код, который может дать сбой при вводе данных, контролируемых злоумышленником, вы сможете выявлять ReDoS-атаки на более ранних стадиях и выпускать более безопасные системы. С помощью Xygeni команды могут уменьшить информационный шум, расставить приоритеты в отношении реальных рисков и усилить контроль безопасности приложений внутри системы. CI/CD рабочих процессов.
Заключение
Уязвимости ReDoS легко внедрить и трудно обнаружить без соответствующего контекста.
В то время как традиционные инструменты сосредоточены на выявлении проблем, современная безопасность приложений требует понимания того, какие уязвимости действительно имеют значение.
Поэтому, чтобы оставаться впереди, командам необходимы прозрачность, расстановка приоритетов и автоматизация, работающие вместе на протяжении всего жизненного цикла разработки.
Именно здесь Xygeni проявляет себя наилучшим образом. Сосредоточившись на потенциально уязвимых рисках, он помогает командам выявлять проблемы на ранних стадиях, снижать информационный шум и обеспечивать безопасность приложений от разработки до развертывания.
В конечном счете, создание безопасного программного обеспечения сегодня означает выход за рамки простого сканирования и внедрение контекстного подхода к безопасности в режиме реального времени.
Начните создавать безопасные и отказоустойчивые приложения с помощью Обнаружение в реальном времени и контекстная безопасность.
Часто задаваемые вопросы (FAQ)
Что такое ReDoS-атака?
Атака ReDoS (Regular Expression Denial of Service) — это тип уязвимости, при котором неэффективные шаблоны регулярных выражений могут быть использованы для вызывания чрезмерного времени обработки, что приводит к снижению производительности или сбоям в работе приложения.
Почему ReDoS-атаки опасны в современных приложениях?
ReDoS-атаки могут негативно влиять на доступность приложений, потребляя ресурсы ЦП и замедляя работу сервисов. В облачных средах это может быстро перерасти в проблемы с производительностью всей системы.
Как разработчики могут предотвратить уязвимости ReDoS?
Разработчики могут предотвратить ReDoS-атаки, избегая сложных регулярных выражений, ограничивая размер входных данных, используя безопасные механизмы регулярных выражений и интегрируя проверки безопасности в процесс. CI/CD pipelines.
Могут ли традиционные средства обеспечения безопасности обнаружить ReDoS-атаки?
Большинство традиционных инструментов с трудом обнаруживают ReDoS-атаки, поскольку не анализируют поведение во время выполнения или возможности эксплуатации уязвимостей. Передовые решения в области безопасности приложений обеспечивают более эффективное обнаружение, оценивая, как выполняется код в реальных сценариях.
Как Xygeni помогает предотвратить ReDoS-атаки?
Xygeni обнаруживает уязвимые шаблоны регулярных выражений, анализирует пути выполнения и определяет приоритетность потенциальных угроз. Он интегрируется в CI/CD pipelineи предоставляет разработчикам практические рекомендации по устранению проблем.
Об авторе
Соучредитель и технический директор
Фатима Said специализируется на создании контента, ориентированного на разработчиков, в области безопасности приложений, DevSecOps и... software supply chain securityОна преобразует сложные сигналы безопасности в четкие, действенные рекомендации, которые помогают командам быстрее расставлять приоритеты, уменьшать информационный шум и создавать более безопасный код.





