Автор: Александр Амзин
Дата: 10.07.2008, 11:22:27
Одной из самых важных частей интернета, каким мы его знаем, являются DNS-сервера. Именно они узнают, какой IP-адрес соответствует введенному доменному имени (и наоборот). Набирая в браузере “lenta.ru”, пользователь вряд ли знает, что перейдет на ресурс с IP-адресом 81.19.69.28. Зато это знает DNS-сервер, к которому за подобной информацией обратится браузер.
DNS-сервер хранит и обновляет таблицу соответствий. Всего в Интернете есть тринадцать основных DNS-серверов и множество “подсерверов”. Их базы данных обновляются раз в несколько часов.
Около полугода назад Дэн Камински (Dan Kaminsky), специалист по компьютерной безопасности из компании IOActive сидел за компьютером и занимался какими-то делами, не связанными с поиском интернет-уязвимостей. Неожиданно для самого себя он обнаружил недоработку в DNS, которую позже назвали DNS Cache Poisoning.
Как оказалось, эта уязвимость присутствует сразу на многих платформах: в реализацию DNS вкралась одна и та же ошибка. На уровне, настолько близком к “сердцу” интернета, ранее ничего подобного не замечалось.
Камински не стал продавать уязвимость компаниям, занимающимся IT-безопасностью. Вместо этого он обратился напрямую к крупным корпорациям, в числе которых оказались Microsoft, Sun и Сisco.
Игра в угадайку
Пока Камински не раскрывает точных технических подробностей, обещая объяснить все через месяц, но механизм найденной “дыры” в общих чертах уже известен.
Когда пользователь запрашивает DNS-сервер, запросу присваивается идентификационный номер (от 0 до 65535), создаваемый генератором псевдослучайных чисел. Сервер использует тот же номер для отклика, содержащего запрашиваемую информацию.
Генератор псевдослучайных чисел несовершенен. Кроме того, 65535 вариантов явно мало для защиты от злоумышленника. Теоретически хакер может предугадать номер и сформировать фальшивый отклик. Пользователь, введя обычный адрес, перейдет совсем на другой сервер - например, на поддельный сервер интернет-магазина. Хакер может заставить и пользовательскую почту проходить через свой ресурс.
Это еще не все. Запрос остается в кэше DNS-сервера до следующего обновления. То есть результат взлома будет наблюдаться в течение как минимум нескольких часов.
Итого
Утверждается, что произошедшее 8 июля - крупнейшее в истории интернета исправление ошибки. На самом деле, процесс только начался - 9 июля многие системные администраторы бросились устанавливать обновления.
За тем, как большие компании одна за другой выпускают патчи для своих систем, можно наблюдать на сайте американского агентства CERT, занимающегося вопросами компьютерной безопасности.
Самое интересное заключается в том, что даже патчи ошибку до конца не исправили. Действительно, угадать идентификационный номер теперь гораздо сложнее.
Во-первых, он генерируется по алгоритму, дающему распределение, более близкое к случайному. Во-вторых, вместо 16 бит на идентификационный номер выделено 32. Это означает, что подобрать его стало в шестьдесят с лишним тысяч раз труднее, но, по утверждению CERT, не невозможно. Чтобы по-настоящему исправить ошибку, надо менять сам протокол DNS.
У Камински, похоже, от массовой работы над ошибками остались смешанные чувства. Последнюю запись в своем блоге он начинает с поздравлений, а заканчивает “необычной, и возможно необоснованной” просьбой.
Он просит всех коллег внимательно изучить DNS, потому что он мог что-то пропустить, а ему хочется, чтобы его семья продолжала спокойно использовать интернет.
Кому ж не хочется.