Безопасность в IE8

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

— Cross-Site-Scripting Defenses
— Safer Mashups (HTML and JSON Sanitization)
— MIME-Handling Changes (Restrict Upsniff and Sniffing Opt-Out)
— Add-on Security
— Protected Mode
— Application Protocol Prompt
— File Upload Control
— Social Engineering Defenses

Итак, начнем…

1. Cross-Site-Scripting Defenses
XSS (да, именно такая аббревиатура у межсайтого скриптинга, так как CSS занят каскадной таблицей стилей) стал уязвимостью номер один за последние годы. Статистика от NGS за 2007 год неутешительна:
— Broken authentication 67%
— Broken access controls 78%
— SQL injection 36%
— Cross-site scripting 91%
— Information leakage 81%

91% исследуемых веб-приложений оказались уязвимы для XSS. XSS по сути является разновидностью Injection атак (внедрение опасного кода). На эту тему написано много статей, даже больших и умных книг, проблема действительно серьезная. (посмотреть про XSS на www.virtualforge.de/vmovie.php — чудесная флешка, красиво и доходчиво, правда, на английском). Везде, где реализован пользовательский ввод, существует опасность XSS. Все дело в том, что если ввод не фильтруется, то достаточно оставить сценарий скрипта на странице (например, форума, или того же хабра), и этот скрипт автоматически будет выполняться на браузере всех, кто посмотрит данную страницу. Хабру это должно быть знакомо :)
А на IE8 реализован компонент XSS Filter, который анализирует все request и response, выявляет XSS и показывает пользователю красивое окошко, уведомляя его о том, что он спас тебя, модифицировал страничку и предотвратил XSS. Тут конечно встает 2 проблемы: как не заблокировать не XSS, и не накосячить в этом фильтре, чтобы другой запрос в свою очередь не скомпрометировал этот фильтр. Проверка временем покажет. Также мелкософтовцы предусмотрели возможность отключения этого фильтра, передаваемым через http заголовок параметром X-XSS-Protection: 0. Таким образом, компании, которые беспокоятся за то, чтобы их сайт не был «случайно» заблокирован этим фильтром, могут решить свою проблему.
Подробно можно прочитать тут (eng): blogs.msdn.com/ie/archive/2008/07/01/ie8-security-part-iv-the-xss-filter.aspx

2. Safer Mashups (HTML and JSON Sanitization)
Представьте себе ресурс, который является контейнером для других ресурсов, создавая свой контент на основании других страниц. Короче машап  Можно делать машап по разному, например, просто используя SCRIPT SRC. В этом случае, никто не помешает «заинтересованным» лицам получить доступ к Document Object Model. Надо, видимо, как-то изолировать все это дело. Инженеры IE8 реализовали поддержку HTML5 cross-document messaging, чтобы IFRAME’ы могли взаимодействовать более безопасно, благодаря DOM изоляции. Также введен XDomainRequest, чтобы получать открытые (public) данные через домены. Но даже в этом случае опасность остается – можно запихнуть строку скрипта в свой DOM, все это замашапится и выполнится.
IE8 предлагает новый метод для объекта window – toStaticHTML (строка, переданная данному методу проверяется на наличие скрипта, и если он там есть, то скрипт удаляется, и на выходе строка не будет содержать скрипта. Пример:
document.attachEvent('onmessage',function(e) {
if (e.domain == 'weather.example.com') {
spnWeather.innerHTML = window.toStaticHTML(e.data);
}
}

Передавая в toStaticHTML строку “This is some HTML with embedded script following… !", на выходе получим
This is some HTML with embedded script following…!
Примерно тоже самое и с JSON объектами, проверяется содержат ли они исполняемый скрипт. Но это уже где-то было ;) Чем же удивил Мелкософт – производительностью. Так это или нет, проверить мне не удасться :)

3. MIME-Handling Changes (Restrict Upsniff and Sniffing Opt-Out)
Каждый передаваемый веб-сервером тип файла ассоциирован с MIME типом (так же называют content-type). Каждый тип файлов браузер обрабатывает по разному. Для совместимости IE имеет свой MIME сниффер, который пытается определить переданный тип файлов. На просторах инета можно встретить веб-серверы, которые посылают response со страничкой с атрибутом Content-Type: text/plain, хотя эта самая страничка на HTML. MIME сниффер определяет, что в теле ответа присутствуют HTML тэги, и решает, что нужно рендерить как HTML. Но как говориться, ни одно доброе дело не остается безнаказанным, и MIME сниффер играет нередко злую шутку. Например, можно создать специальный JPEG файл, содержащий скрипт, и когда пользователь зайдет на страницу с картинкой, браузер выполнит замаскированный скрипт. Теперь IE8 не будет снифать ответ с атрибутом image/* (до этого он снифал, «понимал», что перед ним HTML/Script и выполнял его :) ). Стало безопаснее, ничего не скажешь)

Введен новый атрибут, передаваемый через http заголовок:
— authoritative=true – запрещает MIME сниффинг
Пример: Content-Type: text/plain; authoritative=true; — страница отобразится как чистый текст, а не HTML.
И еще
X-Download-Options: noopen
Content-Disposition: attachment; filename=untrustedfile.html

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

4. Add-on Security
Использование Data Execution Prevention Memory Protection больше не даунит ишака. Некоторые адд-оны из-за DEP роняли IE7, поэтому он был отключен. В IE8 все ОК, работает по умолчанию. Подробнее blogs.msdn.com/ie/archive/2008/04/08/ie8-security-part-I_3A00_-dep-nx-memory-protection.aspx

Per-Site ActiveX – защитный механизм для предотвращения использования контролов «со злым умыслом». Да и вообще ActiveX поправили (http://blogs.msdn.com/ie/archive/2008/05/07/ie8-security-part-ii-activex-improvements.aspx). Хотя использовать его только там, где без него, ну вообще никак.

5. Protected Mode
Eсть и в IE7. Сделано много улучшений в API. Должно по идее предотвращать незаметные установки опасного кода.
Только вот пугает фраза «For improved performance and application compatibility, by default IE8 disables Protected Mode in the Intranet Zone». Технология явно сыровата 

6. Application Protocol Prompt
Теперь появляется окошко с вопросом, хотите ли вы запустить что-то напрямую из браузера (например, потоковое медиа).

7. File Upload Control
Cтарый добрый аплоад. Теперь текстовое поле в диалоге с выбором файла доступен только для чтения. Также IE8 вместо C:\users\ericlaw\documents\secret\image.png image.png отправит лишь image.png, то есть инфа локального характера, не уйдет в инет.

8. Social Engineering Defenses
Очень громкое название. Непонятно, как может программа научить людей быть менее наивными и доверчивыми. В общем, антифишинг одним словом.
Address Bar Improvements – теперь в адресной строке имя домена черное, а все остальное серое. Сделано это, чтобы юзер отличал зерна от плевел. А то зрение рассеянно, и не сразу отличишь paypal.com от paypal.com.evil.org. К слову, все равно не видно разницы. На моей LCD черный и серый цвет под некоторым углом идентичны.
SmartScreen® Filter – как раз то самое развитие антифишинга. Теперь каждый раз, когда при попытке зайти на «плохой» сайт, будет появляться окошко: «Туда не хади, сюда хади». И вежливо предлагать хоумпейдж. Хотя можно и отказаться :)

Все то же самое, но в строгом стиле, без моих комментариев и на английском можно найти тут: blogs.msdn.com/ie/archive/2008/05/07/ie8-security-part-ii-activex-improvements.aspx

Вот такой он должен быть, новый IE. Надеюсь, что он действительно будет безопаснее. К слову, бета IE8 мне пока совсем не понравилась – но вдруг будет хэппи энд. Защита от XSS дейсвительно хорошая фича.

Ps: No holywars please
+13
3 июля 2008, 16:16
6
dmodeus 8,1

комментарии (19)

–2
fisher22 #
>...передаваемым через http заголовок параметром X-XSS-Protection: 0.
А кто помешает злому хакеру изучить работу сайта и генерировать этот и еще несколько указанных заголовков, отправляя их при этом на сайт?
0
dmodeus #
Это решает владелец сайта. Если он уверен, что его ресурс не восприимчим к XSS, то он добавляет этот параметр в каждый response. В случае чего, виноватым по логике будет он :). Отправлять надо на клиентский браузер, сайту от нашего request'а с X-XSS-Protection не горячо, и не холодно.
0
khim #
Как правило сайты позволяющие вставлять "чужой" контент не позволяют менять заголовок - и это довольно сложно обойти. Надеюсь этот заголовок не будет приниматься при его вставке через HTTP-EQUIV, иначе да - непонятно какой смысл ...
–1
barbalion #
Ну здорово! Опять IE впереди паровоза... X-XSS-Protection, toStaticHTML и т.п. добавят, и опять будут проблемы с браузерной совместимостью. Нет чтобы сначала стандарт принять по-человечески. Я тоже тут могу десяток функций защиты придумать, в чем сложность? Идеи же на поверхности лежат. Проблема в том что доля IE8 не будет такой, как когда-то была у IE6. А значит проблему сетевой безопасности в масштабах всей сети это не исправит. Стандарт нужен!!! Ау, Майкрософт, время твоей гегемонии прошло. Балмер, ты уже не можешь так легко навязывать свои решения всем подряд!
+1
smartello #
Когда нет защиты - говорят "дырка а не браузер"
Когда есть защита - говорят "вы совсем чтоль охренели, давайте по стандартам работать"

Вы уж определитесь.
0
cachealot #
автору спасибо за статью, лично мне понравлилось как расписаны все уязвимости, в свое время долго мучилася в поисках что есть что, вообще плюс вам =)
0
cachealot #
>Когда нет защиты - говорят "дырка а не браузер"
>Когда есть защита - говорят "вы совсем чтоль охренели, давайте по стандартам работать"
ну хотелось бы что бы и по стандартам и с защитой
0
khim #
А чего определяться? Разрабатываешь новые виды защиты - отправь их на стандартизацию в W3C когда у тебя бета ещё. К релизу уже авось реакцию получишь. А то получается ультиматум: либо вы принимаете наши предложения как есть, либо мы их всё равно реализуем так как мы хотим.

Этот подход ещё можно принять как-то когда дело касается обычных фич, но когда речь идёт о безопасности - хочется согласованных действий со стороны разработчиков всех браузеров.
0
smartello #
Вот когда у вас будет свой браузер, посмотрим как вы будете афишировать его подробности реализации его принципиальных преимуществ ещё до релиза, особенно в условиях стремительной потери рынка, когда других преимуществ вобщем-то и нету.
+1
XaocCPS #
Скажите, что заставляет вас (и многих других) коверкать название компании и писать "мелкософт"? Вы себя уважаете? Не будьте быдлом, уважайте себя и других.
+1
dmodeus #
Довольно устоявшееся название в узких кругах - сленг. Видимо, все мы крутимся (или крутились) на одних и тех же ресурсах. Передаю привет редакции журнала Хакер за 2000 год, оттуда у меня это пошло. Не считаю название обидным, наоборот, очень удачным. Этакое русское название, дословный перевод.
0
EaE #
Мелкосхемы? Мелкоскопы?
0
dmodeus #
Да-да, звуковая деформация слов иностранного происхождения, еще Лесков пользовался ;)
0
vilgeforce #
Спасибо за обзор! Почитал про Active-X в IE8 по ссылке. Порадовала фраза: <<When the user encounters a Web page with a disabled ActiveX control, they will see an Information bar with the following text: "This website wants to run the following add-on "ABC Control" from "XYZ Publisher". If you trust the website and the add-on and want to allow it to run, click here …" >>

То есть если сайт пытается использовать горячо любимые всеми дырявые компоненты от MS, юзер увидит: Сайт пытается юзать компонент "client-side RDS DataSpace object" от компании M$. Хотите позволить его запустить?

Я не сомневаюсь, что юзер увидев что-то малопонятное и "компания M$" тут же нажмет OK. И получит себе экзешник с запуском :-)
0
dmodeus #
Есть такая проблема :( Многие видят ОК, и жмут сразу, не особо разбираясь.
0
vilgeforce #
В этом отношении понравился подход FF: при загрузке exe-файла кнопка "открыть" отсутствет в принципе.
0
EaE #
Тот же флеш с теми же дырами такого вопроса вообще не задает.
0
vilgeforce #
Это да... :-(
0
xnodev #
В скором будущем IE окажетя аутсайдером на арене браузеров. Его груз - извращенность и несовместимость(т.е. пытается продвигать свои стандарты). Имхо мелкомягким уже сейчас надо переписывать IE с нуля(хотя звучит как бред), чтобы достичь безопастности и совместимости при отсутствии ошибок :)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.