...

Приоткрывая завесу

Прелести монокультуры: темные стороны работы в IE WEB

Большинство из рассмотренных методов браузера Internet explorer (IE) можно реализовать в модели документов, поддерживаемой другими браузерами. Но почему не нравится, когда IE обслуживает более 90 % сети Web? Изменчивость – фактически одна из основных возможностей противостоять сетевым атакам. Идея состоит в том, что если злоумышленнику легко предсказать, что пользователь привык видеть на экране монитора, то у него появляется хорошая возможность подстроиться под ожидания пользователя. Достаточно интересно, что поддерживаемая Windows XP оболочка является фактически позитивным шагом, направленным на защиту против подобных способов атак. Если нельзя выдать удаленный запрос для определения используемой пользователем оболочки, то нельзя удаленно имитировать ее.

С другой стороны, Internet Explorer 6 обладает странной забывчивостью сохранять активную строку состояния, что сильно облегчает задачу злоумышленнику, переводя тем самым задачу фальсификации в разряд почти ненужных (хотя по-прежнему злоумышленник должен угадать, стоит ли что-нибудь фальсифицировать или нет).

На этот раз классическое возражение почти точно: «Это не ошибка, это – особенность».

Блокировка: фальсификация строки состояний в HTML. Наиболее известным признаком обеспечения безопасности при помощи протокола SSL является появление значка блокировки в виде замка в нижнем правом углу экрана. Ожидаемая последовательность действий злоумышленника, бросающего вызов системе безопасности, может быть следующей. Для того чтобы подделать ключ SSL, злоумышленник должен пройти весь внутренний процесс аутентификации браузера. Только после этого у него появится возможность выдать пользователю фальсифицированное уведомление о безопасной работе. Поскольку с точки зрения криптографии подобный ключ сгенерировать невозможно, то предполагалось, что блокировку нельзя фальсифицировать. Но злоумышленник может сделать проще: отключить строку состояния пользователя и вручную пересоздать ее, используя простой способ изменения пикселей в правом углу. Первоначально отключение строки состояния не рассматривалось как угроза безопасности, возможно потому, что Web-страницы защищены от изменения установок собственной строки состояния. Но разработчики, льстящие рекламным дизайнерам, создали очередной класс объекта – всплывающее окно с совершенно новым набором свойств. Если читатель обратил внимание, в функцию popup() включена возможность задания не только адреса, но и высоты, ширины и других нечисловых свойств создаваемого окна, включая возможность установки параметра statusbar в 0 (statusbar=0). Вот эта возможность и используется для преодоления защиты протокола SSL.

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

[root@fire x10]# cat webcache.html

You think that’s SSL you’re parsing?

topmargin=“0”

leftmargin=“0” rightmargin=“0” marginwidth=“0”

marginheight=“0”

framespacing=“0”>

frameborder=“0”

marginwidth=“0” marginheight=“0” noresize=“yes”>

Видно, что высота строки состояния равна точно 20 пикселям, а в присоединенном фрейме нет ни одной из стандартных причуд разработчика (они все отключены). Поэтому содержимое файла bottom.html будет размещено точно на место оригинальной строки состояния. Посмотрите на содержимое файла bottom.html:

[root@fire x10]# cat bottom.html

SRC=“left.gif”>

WIDTH=500

HEIGHT=20 SRC=“midsmall.gif”>

SRC=“right.gif”>

Если читатель хоть раз задумывался о строке состояния, по крайней мере во время работы с Internet Explorer, то он мог заметить, что она состоит из уникальной небольшой полоски слева, обычно небольшого пустого места посередине и нескольких полей справа. Поэтому для отображения строки состояния нужно скопировать подходящий шаблон пикселов в нужное место экрана. В языке разметки HTML предусмотрены стандартные средства растяжения строки состояния по левой и правой границам окна, но в данном случае в этом нет необходимости. Имитируя окружающую среду, можно обмануть пользователя, подсунув ему строку состояния из неожиданного для него источника. Пользователь думает, что пикселы строки состояний формирует система, а на самом деле это просто другая часть Web-страницы.

Совершено новый вид переполнения буфера: опасность выравнивания к правой границе. Все это ужасно. Возможно, читатель обратил внимание на слишком большое число случайных переменных в адресе URL при вызове popup_ie.html. На самом деле никто не пытается перейти по адресу http://www.doxpara.com/x10/webcache.html . Вместо этого указан адрес http://www.doxpara.com/x10/webcache.html?site=https://www.x10.com/hotnewsale/webaccessid=xyqx1412&netlocation=241&block=121&pid=81122&&sid=1 . Браузер игнорирует лишние параметры, посылая их Web-серверу как вспомогательную информацию для регистрации в журнале. Беды в этом нет, потому что никакой вспомогательной информации для статической Web-страницы, предназначенной только для привлечения внимания, не требуется. Но клиент не знает истинного предназначения вспомогательной информации, а оно состоит в следующем. При помещении новых символов на место старых данных, которые могла содержать адресная строка, в текстовое поле с левой стороны записываются адреса потерянных символов. Размер адресной строки устанавливается косвенно при определении в файле popup_ie.html размера окна, а используемый для отображения адреса шрифт практически фиксирован (исключая странные браузеры, которые можно выделить по их способности постоянно вносить мусор в исходящие заголовки HTTP). Это позволяет вполне правильно определить точное число и стиль символов, которые следует удалить из адресной строки. В данном случае http://www.doxpara.com/x10?. Достаточно было разместить замаскированные под мусор переменные и удостовериться, что это выглядит как еще одна страница со слишком большим числом внешних параметров.

В отдельности каждая из этих проблем не опасность, а всего лишь небольшая неприятность. Но когда они сливаются воедино – это смертельная угроза. Рисунок 12.2 показывает то, что видит пользователь, а рис. 12.3 – то, что произошло на самом деле.

Рис. 12.3. Фальсифицированное всплывающее окно

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

Отсутствие этой возможности обеспечения защиты информации было одним из наиболее значимых упущений для среды Microsoft Java.

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

Рис. 12.4. Окно уведомления о работе протокола SSL

К несчастью, это окно – всего лишь массив пикселов, которые легко фальсифицировать при использовании реализованной в браузере Internet Explorer возможности отображения бесцветных всплывающих окон (chromeless popup). Пример такого всплывающего окна представлен на рис. 12.5.

Рис. 12.5. Пример произвольного сетевого диалогового окна уведомления

На самом деле это не окно. Об этом свидетельствуют некоторые признаки, например изображение текста без зубцеобразного дефекта (antialiased) в строке заголовка с плавным изменением цвета. Этого достаточно, чтобы понять, что показано графическое изображение. HTML, Java и особенно Flash предоставляют вполне богатые инструментальные средства для фальсификации интерфейса компьютерной графики CGI, по крайней мере по одному окну за раз. Пользователь доверяет пикселам, а сеть их предоставляет. В рассмотренном случае пользователь ожидает появления дополнительных пикселов, для того чтобы отличить данные, предоставляемые сетью, от данных своей системы. Благодаря ошибке или алгоритму работы системы существуют методы удаления пикселов, что в результате позволяет сетевым средствам делать все, что они пожелают. Все, что потребовалось сделать в примере, – это установить в функции popup две противоречащие друг другу опции. Сначала переменная fullscreen была установлена в 1, увеличивая окно и удаляя его границы. А затем переменная resizable была установлена в 0 (resizable=0), что привело к отмене полноэкранного режима. Заметьте, что к этому времени границы окна были уже удалены. Из-за ошибки или из-за того, что так было предусмотрено при проектировании, но в результате бесцветное окно оказалось подготовленным к какой угодно фальсификации цвета.

Замаскированные под неустойчивые отказы атаки на протокол SSL. Иногда, когда пользователь теряет бдительность, можно внушить ему неверную мысль о нахождении его на безопасном сайте. Для этого нет необходимости делать что-то сверхъестественное. Что, если в одном случае из тысячи кто-то пытался подключиться к своему банку или биржевому маклеру через свою Web-страницу, которая в этот момент не была защищена протоколом SSL?

Было ли это ошибкой? В некотором смысле, потому что в адресной строке был пропущен символ s после названия протокола http, а значок замка внизу экрана размером 16 х 16 пикселов был удален. Но это одноразовая ошибка. Очередная перезагрузка восстановит работу протокола https.

Эту ошибку кто-нибудь когда-нибудь обрабатывал?

Возможно, что кто-нибудь когда-нибудь звонил в службу технической поддержки и спрашивал совета по поводу возникшей ситуации. Скорее всего, ему советовали перезагрузить страницу и посмотреть, не исчезла ли проблема.

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

Загрузка...