28 мая 2008 г.

Латание дыр

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

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

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

Всего месяц назад аналогичным вопросом задавался Леонид Каганов - очень рекомендую его текст (коротко, ярко и понятно) и приведённый им пример. Достаточно один раз зайти туда браузером Internet Explorer, чтобы навсегда перестать верить разговорам о его безопасности. Пытливым умам рекомендую подробное описание этой древней проблемы (которая так и не была закрыта в IE7!).

Кстати, поделюсь интересным наблюдением: статистики браузеров по этому блогу и русскому сегменту интернета очень различаются - если в рунете на долю IE приходится около 60-65%, то здесь она колеблется в районе 25-30% (Firefox'у достаётся 40-45%, а Opere - 25%). Полагаю, это говорит о специфике аудитории :) И, видимо, это объясняет, почему одной из самых популярных заметок блога стало руководство по залатыванию другой серьёзной уязвимости - автозапуска вирусов на USB-носителях. Обе проблемы имеют прямое отношение к безопасности, появились из-за расслабленности или нежелания вникать в проблемы разработчиков Microsoft и закрываются за несколько минут, если о них знать. И это тот случай, когда лучше потратить чуть-чуть сил на перестраховку, потому что последствия разведения вирусов на своём компьютере могут быть очень серьёзны (тот же червь Rovud, с которого мы сегодня начали, удаляет все файлы с компьютера 25-го числа каждого месяца - на восстановление после такого удара уйдёт гораздо больше сил).

10 комментариев:

  1. Анонимный28.05.2008, 15:46

    В каком-то смысле создатели "публичных" вирусов - молодцы, потому что обращают внимание на существующие дыры, и в конце концов их закрывают.

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

    ОтветитьУдалить
  2. Не понял. Илья, это очередной тест ничего не принимать на веру? Мой IE7 7.0.05730.13 вполне справился с той картинкой, на которую ссылается Леонид Коганов (http://p-userpic.livejournal.com/73887779/15402874). Ничего кроме черной точки я не увидел.
    Внутренности png действительно интересные :)

    ОтветитьУдалить
  3. Кстати, Алексей, да, не каждый IE7 боится этой реализации этой уязвимости. На странице http://lleo.aha.ru/test/ie/logbro.htm собирается лог браузеров, попавшихся в ловушку - там хватает IE7. Я тестировал на IE6 (нет IE7 под рукой) - ёжики бегали. В комментариях у Каганова были записи от пользователей IE7, что проблема есть (были и обратные утверждения). Это значит, что проблема бывает, но не всегда (не при любых настройках/не с каждым сочетанием версий и т.д.) И пока внятно не сформулировано, что надо сделать с IE7, чтобы этой дыры заведомо не было.

    ОтветитьУдалить
  4. >А точнее, зачем эта особенность (возможность неявно запустить исполняемый файл, нажав на картинку) была реализована.

    Почему вы думаете, что эта особенность была реализована? Я не знаю как работает этот deti.jpg (в той статье нет достаточных технических подробностей), но, скорее всего, это buffer overrun.

    ОтветитьУдалить
  5. Сергей, и Вам спасибо за интересные вопросы. Про устройство того deti.jpg точно не знаю, но выглядит так, как будто сервер отдавал http-заголовки, означающие для IE, что это не картинка, а поэтому это надо попробовать исполнить (как я понимаю, "application/octet-stream"). Есть, например, такое свидетельство: http://www.ciac.org/ciac/bulletins/m-027.shtml - полагаю, есть много таких уязвимостей.
    Признаю, я не специалист в этих вопросах, хочу лишь сказать, что меня в windows давно эта "смышлёность" раздражает - он исполняет почти любой файл, не глядя на расширение (можно переименовать .exe в .bat, .cmd, .pif, .lnk, хотя эта фича нужна только для функционирования вирусов!). Про червь Rovud деталей не знаю, однако других вирусов, использующих такую способность "запускать всё подрят" хватает. И именно об этом речь.

    Кстати, про buffer overrun, это тоже можно избежать, если сделать нормальный код с достаточным количеством проверок. Согласитесь, разобрать png-файл - не такая сверхсложная задача, что её невозможно сделать надёжно.

    ОтветитьУдалить
  6. Анонимный29.05.2008, 12:43

    У меня этот вирус сработал на последней Опере, хотя в ней по идее нет прикола с запуском исполняемых файлов из-под картинок. И запущеный сразу после перехода по ссылкам Аваст ничего не нашел, вирус-то новый. Так умер неделю назад с огромным трудом поставленый на новом ноуте WinXP.
    Так что от всего застраховаться нельзя, даже если знаешь что делаешь.

    ОтветитьУдалить
  7. Анонимный29.05.2008, 17:11

    Мда. Совет всем кто боится вирусов - переходите на никс (сорри за банальщину, но ведь действительно смешно)

    ОтветитьУдалить
  8. Уважаемый аноним, похоже там всё ещё проще: судя по написанному в сети, получив запрос к файлу deti.jpg, сервер злоумышленника отдавал 301-ый или 302-ой редирект на файл deti.scr (как мы знаем, это исполняемый файл). Соответственно, опера его тоже благополучно скачивала и запускала.

    ОтветитьУдалить
  9. Исполнять .exe, .bat, .cmd, .pif, .lnk, .scr можно, они для того и предназначены. Браузеры с настройками по умолчанию всегда спрашивают подтверждения пользователя (видел в IE и FireFox). Если пользователь согласился с запуском, то запускать просто необходимо. То, что пользователь может что-то сделать, ещё не означет дыру в защите.

    Мой поинт в следующем. Из написанного вами складывается картина: глупые разработчики (вероятно, с привычкой не думать, ага) реализовали возможность для легкого распространения вирусов. Этого не было. И они не глупые, а, напротив, довольно вдумчивые ребята.

    ОтветитьУдалить
  10. Сергей, Ваша позиция понятна. Конечно, я не собирался обвинять всех разработчиков в глупости, поэтому приношу извинения всем, кого случайно обидел.

    Я только хочу разобраться, зачем оставляются некоторые очевидные дыры.

    Например, давайте разберёмся, зачем надо исполнять файлы с расширениями bat, cmd, pif и lnk? Именно исполнять (как исполняемые файлы), а не интерпретировать (как должно поступать с bat и cmd) и не вытаскивать путь к программе и дополнительные настройки (как надо делать с pif и lnk). Как я вижу, это нужно только вирусам (потому что пользователь уже знает, что в .exe и .com может быть вирус, а .pif и .lnk ещё не боится). Можно ли придумать логичную причину для исполнения таких файлов? (чтобы пользователь, случайно переименовавший notepad.exe в notepad.pif не пострадал?)

    Другой пример: зачем в visual basic'е была (есть ли сейчас - не знаю) функция, рассылающая данную строку на _все_ адреса из записной книги пользователя? Это же нужно (и использовалось) только для одной цели - чтобы разослать вирус одной командой! Других причин вызывать такую функцию я не знаю. Я не говорю, что разработчики VB специально добавили эту функцию для вирусописателей. Склоее всего, они просто не вникли, кому делают подарок. (Признаю, что и без этой функции проблем у вирусописателей не было бы - всегда можно пробежать циклом по записной книжке, отправляя письма одно за другим всем контактам. Но так это было ещё проще!)

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

    ОтветитьУдалить