Изъяны фреймов HTML в Internet Explorer
Малоизвестной особенностью броузера Internet Explorer является возможность использования доменной модели обеспечения безопасности ("cross-domain security model"). Исчерпывающее описание этой концепции можно найти по адресу http://www.microsoft.com/technet/security/bulletin/fq00-009.asp. Вкратце это означает следующее. Описываемая модель скрыто используется и предотвращает чтение, доступ и любые другие операции с данными, открытыми в окне одного узла (простейшая форма домена IE), со стороны окна другого узла. При таком подходе фреймы HTML, открытые в каком-либо окне, должны быть доступны только из родительского окна при условии, что оба они относятся к одному и тому же домену.
Интересной особенностью этой модели является то, что локальная файловая система, содержимое которой можно просматривать с помощью Internet Explorer, тоже рассматривается как домен. Таким образом, при нарушении доменной безопасности в распоряжении нечестных операторов Web-узлов окажется много возможностей просмотра данных не только других узлов, посещаемых пользователем, но и файлов, которые находятся на его собственном жестком диске.
Используя некоторые из возможных подходов, достаточно написать лишь несколько строк кода и поместить его на Web-узле или отправить в электронном сообщении. Ниже приведено несколько реализаций этой идеи.
Чтение других доменов с помощью дескриптора IFRAME и document.execCommand
Эксперт в области безопасности броузеров Георгий Гунински (Georgi Guninski) обнаружил несколько случаев нарушения модели доменной безопасности, предотвращающей обмен данными между доменами.
При реализации кода Георгий часто использовал дескриптор iFRAME, который уже упоминался выше. Этот дескриптор является расширением стандарта HTML 4.0. В отличие от стандартного дескриптора FRAME, i FRAME позволяет создать плавающий фрейм, который располагается посредине обычной Web-страницы, не содержащей фреймов, подобно вставленному в нее изображению. Это довольно простой способ вставки содержимого других узлов (и даже файловой системы) внутрь Web-страницы, который прекрасно подходит для скрытого получения доступа к данным других доменов.
Описываемая реализация представляет собой замечательный пример. В исходном файле дескриптор I FRAME служит для задания локального файла. Затем в I FRAME вставляется код JavaScript, который выполняется в домене файловой системы. Если нечестный оператор Web-узла знает имя файла (или может о нем догадаться) и его местоположение, то при желании он сможет просмотреть файл любого типа, который может быть открыт в окне броузера. Например, файл winnt\repair\sam._ таким способом прочитать не удастся, поскольку при этом на экран будет выведено диалоговое окно загрузки файла IE. Георгий представил пример кода, который считывает файл C:\test.txt (при условии, что он существует на диске пользователя).
Контрмеры
Установите модуль обновления, который можно найти по адресу http://www. microsoft.com/technet/security/bulletin/ms99-042.asp. Можно также отключить режим использования активных сценариев с помощью процедуры, описанной в разделе "Разумное Использование Зон Безопасности: Общее Решение Проблемы Элементов ActiveX".
Проверка принадлежности к доменам Internet Explorer
В июне 2000 года Эндрю Носенко (Andrew Nosenko) из компании Mead & Company сообщил о том, что в Internet Explorer две функции не выполняют надлежащую проверку принадлежности к домену. Это позволяет создать такую страницу HTML, которая открывала бы фрейм с локальным файлом и могла читать этот файл . В стремлении быть непревзойденным, Георгий Гунински тоже поместил на своем узле сообщение о подобной уязвимости. Код Георгия поражает обманчивой простотой.
<IFRAME ID="I1"X/IFRAME>
<SCRIPT for=Ii event="
NavigateComplete2(b)">
alert("Here is your file:
\n"+b.document.body.innerText);
</SCRIPT>
<SCRIPT>
II.navigate ( "file://c:/test.txt");
setTimeout('II.navigate
("file://c:/test.txt";',1000);
</SCRIPT>
Как и в предыдущем случае, в качестве цели был избран файл test. Но с таким же успехом можно считать любой другой файл системы пользователя, который можно просмотреть в броузере. Для этого нужно внести соответствующие изменения в строку file://с:/test.txt.
Контрмеры
Примените модуль обновления, который можно найти по адресу http://www. microsoft.com/technet/security/bulletin/fq00-033.asp. Как и в предыдущих случаях, альтернативной мерой является отключение активных сценариев. Эта предосторожность значительно ограничит функциональные возможности Web-узлов, работа которых основана на применении сценариев (см. раздел, посвященный зонам безопасности).