О своих открытиях эксперты рассказали на "хакерской" конференции Chaos Communication Congress в Берлине. Основная уязвимость выявлена в механизме хэширования, который применяется в многих программных средах для ускоренного сохранения и извлечения данных.
Уязвимость, обнаруженная независимыми экспертами по информационной безопасности Александром Клинком и Юлианом Вальде позволяет "обрушить" атакуемый сервер с помощью всего нескольких "правильно сформированных" запросов.
"Дыра" обнаружена в популярных технологиях PHP, Java, ASP.NET, Python, Ruby и ряде других.
После объявления об уязвимости многие крупнейшие производители программного обеспечения, в частности, Microsoft и Oracle, объявили, что в ближайшее время выпустят обновления, устраняющие уязвимость в их продуктах.
По словам Вальде, команда разработчиков Ruby уже исправила большинство заявленных проблем, однако продукты PHP, Oracle, Python, Google и Microsoft все еще уязвимы.
Как это работает
В процессе работы веб-приложений на языках PHP, Java, Python, JavaScript и многих других механизм хэширования применяется для создания так называемого числового значения входных и выходных данных. Например, когда пользователь на сайте вводит пароль, программа берет его и с помощью хэш-функции (математического метода вычисления) вычисляет числовое значение (хэш) этого пароля.
После этого система сравнивает полученное число с тем, которое хранится в базе данных (оно было получено, когда пользователь только зарегистрировался на сайте и впервые ввел пароль), и если хэш из архива совпадает с только что полученным хэшем, то пароль считается правильным.
Хэш пароля хранится в хэш-таблице вместе с именем пользователя, учетной записи которого принадлежит пароль. Таким образом, использование хэширования позволяет, с одной стороны, дополнительно обезопасить персональные данные пользователя (хэш-функция необратима, по ее значению нельзя вычислить пароль). С другой, использование хэшей позволяет ускорить работу приложения, поскольку система во многих случаях работает не с самими данными, а с их своебразным числовым "дайджестом".
Недостатком такого метода является вероятность возникновения ситуации, при которой у разных паролей (или других данных) возникают одинаковые хэши.
Такие ситуации не являются редкими и для разрешения "коллизий" (так называются ситуации совпадения значений хэша) специальные программные средства проводят дополнительное сравнение входных данных и сгенерированных на их основе хэшей. Этот метод работает, когда количество коллизий относительно невелико.
Хакер может повысить их количество до критического, зная функцию, с помощью которой вычисляется хэш. В этом случае он может сгенерировать, относительно небольшое количество данных (например, несколько постов в блог, построенный на базе технологии Microsoft ASP.NET) таким образом, что хэш-функция выдаст одинаковые значения для них и вынудит систему начать дополнительную проверку.
При появлении большого количества коллизий проверка начинает отнимать слишком много вычислительных ресурсов сервера и, в конечном итоге, приводит к отказу в обслуживании.
Для защиты от таких атак существует несколько технологий, которые позволяют скрыть от злоумышленника хэш-функцию или вовремя распознать ведение атаки с помощью множественных коллизий.
Однако, как утверждают исследователи, в большинстве современных языков программирования, используемых для создания веб-приложений, этих средств нет, а используется простая математическая хэш-функция, которую способный хакер может вычислить