Популярные веб-технологии содержат серьезную программную уязвимость

30 декабря 2011 года   |  Разное

java

Группа экспертов по информационной безопасности обнаружила в ряде веб-технологий, широко используемых при создании интернет-сайтов, серьезную уязвимость, позволяющую хакерам организовывать атаки типа «отказ в обслуживании», не задействуя при этом значительных ресурсов, сообщает сайт Naked Security.

Обычно при атаках типа «отказ в обслуживании» (DDoS), хакеры используют сети из тысяч зараженных компьютеров, которые по команде из центра управления посылают множество запросов, перегружая ими сервер, обслуживающий сайт. Уязвимость, обнаруженная независимыми экспертами по информационной безопасности Александром Клинком (Alexander Klink) и Джулианом Вальде (Julian Wälde), позволяет «обрушить» атакуемый сервер с помощью всего нескольких «правильно сформированных» запросов. Уязвимость обнаружена в популярных технологиях PHP, Java, ASP.NET, Python, Ruby и ряде других.

После объявления об уязвимости многие крупнейшие вендоры программного обеспечения, в частности, Microsoft и Oracle, объявили, что в ближайшее время выпустят обновления, устраняющие уязвимость в их продуктах.

Как рассказали эксперты на конференции Chaos Communication Congress в Берлине, уязвимость содержится в механизме хэширования, которые применяется в многих программных средах для ускоренного сохранения и извлечения данных.

В процессе работы веб-приложений на языках PHP, Java, Python, JavaScript и многих других механизм хэширования применяется для создания так называемого числового значения входных и выходных данных. Например, когда пользователь на сайте вводит пароль, программа берет его и с помощью хэш-функции (математического метода вычисления) вычисляет числовое значение (хэш) этого пароля.

После этого система сравнивает полученное число с тем, которое хранится в базе данных (оно было получено, когда пользователь только зарегистрировался на сайте и впервые ввел пароль), и если хэш из архива совпадает с только что полученным хэшем, то пароль считается правильным. Хэш пароля хранится в хэш-таблице вместе с именем пользователя, учетной записи которого принадлежит пароль. Таким образом, использование хэширования позволяет, с одной стороны, дополнительно обезопасить персональные данные пользователя (хэш-функция необратима, по ее значению нельзя вычислить пароль). С другой, использование хэшей позволяет ускорить работу приложения, поскольку система во многих случаях работает не с самими данными, а с их своебразным числовым «дайджестом».

Недостатком такого метода является вероятность возникновения ситуации, при которой у разных паролей (или других данных) возникают одинаковые хэши.

Такие ситуации не являются редкими, и для разрешения «коллизий» (так называются ситуации совпадения значений хэша) специальные программные средства проводят дополнительное сравнение входных данных и сгенерированных на их основе хэшей. Этот метод работает, когда количество коллизий относительно невелико.

Хакер может повысить их количество до критического, зная функцию, с помощью которой вычисляется хэш. В этом случае он может сгенерировать относительно небольшое количество данных (например, несколько постов в блог, построенный на базе технологии Microsoft ASP.NET) таким образом, что хэш-функция выдаст одинаковые значения для них и вынудит систему начать дополнительную проверку. При появлении большого количества коллизий проверка начинает отнимать слишком много вычислительных ресурсов сервера и, в конечном итоге, приводит к отказу в обслуживании.

Для защиты от таких атак существует несколько технологий, которые позволяют скрыть от злоумышленника хэш-функцию или вовремя распознать ведение атаки с помощью множественных коллизий. Однако, как утверждают исследователи, в большинстве современных языков программирования, используемых для создания веб-приложений, этих средств нет, а используется простая математическая хэш-функция, которую способный хакер может вычислить.

Статьи