Чтение онлайн

ЖАНРЫ

Защита от хакеров корпоративных сетей

авторов Коллектив

Шрифт:

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

[root@fire x10]# cat webcache.html

<html>

<head>

<title>You think that’s SSL you’re parsing?</title>

</head>

<frameset rows=“*,20” frameborder=“0” framespacing=“0”

topmargin=“0”

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

marginheight=“0”

framespacing=“0”>

<frame src=“encap.html”>

<frame src=“bottom.html” height=20 scrolling=“no”

frameborder=“0”

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

</frameset>

<body>

</body>

</html>

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

[root@fire x10]# cat bottom.html

<HTML>

<body bgcolor=#3267CD topmargin=“0” leftmargin=“0”>

<TABLE CELLSPACING=“0” CELLPADDING=“0” VALIGN=“bottom”>

<TR ALIGN=center>

<TD><IMG hspace=“0” vspace=“0” ALIGN=“left”

SRC=“left.gif”></TD>

<TD WIDTH=90%><IMG hspace=“0” vspace=“0” VALIGN=“bottom”

WIDTH=500

HEIGHT=20 SRC=“midsmall.gif”></TD>

<TD><IMG hspace=“0” vspace=“0” ALIGN=“right”

SRC=“right.gif”></TD>

</TR>

</TABLE>

</BODY>

</HTML>

Если

читатель хоть раз задумывался о строке состояния, по крайней мере во время работы с 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). Это позволяет вполне правильно определить точное число и стиль символов, которые следует удалить из адресной строки. В данном случаеДостаточно было разместить замаскированные под мусор переменные и удостовериться, что это выглядит как еще одна страница со слишком большим числом внешних параметров.

В отдельности каждая из этих проблем не опасность, а всего лишь небольшая неприятность. Но когда они сливаются воедино – это смертельная угроза. Рисунок 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.

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

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

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

...

Примечание

Вероятно, лучшее решение состоит в том, чтобы добавлять значок блокировки (замок) под знаком указателя мыши и/или справа от него при навигации по безопасной странице. Достаточно при этом соблюсти меру, чтобы не казаться чрезмерно навязчивым. Нельзя прерывать передающий важную информацию поток данных и, что более важно, нельзя заслонять поле просмотра в момент получения информации от браузера по безопасным линиям. Конечно, следовало бы подумать о вещах типа «кометы курсора», позволяющей фальсифицировать даже курсор мыши… Таким образом, гонка вооружений продолжилась бы.

...

Мы верим в пиксели: это чистая правда

«Веблен (Veblen) предложил, чтобы психология престижа управлялась тремя „покупаемыми за деньги канонами вкуса“: выставленный напоказ досуг, выставленные напоказ расходы и выставленное напоказ расточительство. Символы положения в обществе выставлены напоказ. Их не обязательно страстно желают только потому, что они полезны или привлекательны (галька, маргаритки и голуби кажутся красивыми, когда их открывают заново или когда они восхищают малышей). Они выставлены напоказ лишь потому, что настолько редки, расточительны или бессмысленны, что только богатый может их себе позволить. К символам положения в обществе относятся слишком тонкая, большая, узкая или пачкающая, не приспособленная для работы одежда, слишком хрупкие для повседневного использования или сделанные из недоступных материалов вещи, бесполезные предметы, для изготовления которых потребовались потрясающие усилия, энергия и украшения, бледная кожа в странах, где плебеи работают в поле, и загар, если они работают в закрытом помещении. Логика перечисленного заключается в том, что хотя нельзя увидеть все богатство и имущественное положение богача (его счет в банке, земли, союзников и лакеев), тем не менее в его ванной можно увидеть золотую сантехнику. Этого не может себе позволить тот, кто вынужден на всем экономить. Таким образом, все знают, что он богат».

Стивен Линкер (Steven Pinker). «Работа мнения» («How The Mind Works»)

Давайте будем честными. Мы доверяем не крошечным изображениям замков в правом нижнем углу. Есть сайты, которые выглядят вполне профессионально. И есть сайты, которые кажутся так, будто они были сделаны 13-летним ребенком, вооруженным старой пиратской версией программы Photoshop. Объяснения насчет предположений о том, что люди в своих делах руководствуются чувствами, имеют тенденцию игнорировать полукриптографическую аргументированность человеческой деятельности. В этих предположениях присутствует бесспорная асимметрия между элегантностью и мастерством. Признать это намного проще, чем попробовать устранить. Но при рассмотрении дизайна и безопасности сайтов аналогия с реальным миром терпит крах. Трудно создать изящный сайт, особенно сайт со значительным количеством фоновых программируемых событий (да, именно поэтому динамическое содержание впечатляет), но достаточно просто скопировать для сайта любое ограниченное количество функциональных возможностей и эффектов. На самом деле доверяют не пикселам на границе окна, сообщающим о его безопасности. В действительности внимание обращается на само по себе окно, хотя любой может позаимствовать (в том числе и незаконно) понравившееся ему проектирование сайта и применить его к доступному домену. Конечно, доступ к доменам требует отдельных пояснений по поводу проблем войны имен домена.

Малоизвестные подробности: разработка систем спуфинга

Ранее уже были обсуждены средства антиспуфинга, начиная от простых и заканчивая сложными, но по-прежнему не был получен ответ на вопрос «Как на самом деле создаются системы спуфинга?». Часто ответ на этот вопрос заключается в изучении сетевого трафика, повторной реализации протокола более простым и универсальным программным способом и отправкой сетевых данных самым неожиданным для получателя способом.

Плевок против ветра: создание скелета маршрутизатора в пространстве пользователя

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

Это – ошибкоустойчивость наоборот.

Что действительно необходимо, так это простая инфраструктура, с помощью которой можно получить доступ к произвольным пакетам, возможно с использованием, но лучше без использования фильтрации пакетов на уровне ядра. Кроме того, она должна обеспечивать эффективную и достаточно легкую обработку пакетов с последующей отсылкой, если это необходимо, их обратно. Возможным решением поставленной проблемы является программа DoxRoute 0.1, которая доступна по адресу www.doxpara.com/tradecraft/doxroute вместе со своей документацией, что является первым подобным случаем.

Поделиться с друзьями: