Спешу заметить, эта статья никак не связана с переходом Opera на WebKit. Я просто хочу обратить внимание на одну проблему, которая преследовала меня с Оперой многие годы на одном простом примере.
Предисловие
Мое знакомство с браузером Опера началось еще в конце 90-х. Именно тогда мне посчастливилось купить у незнакомого бородача за покрытым январским снежком рыночным прилавком диск. Назывался он, как ни странно, вроде бы «Золотой софт» и содержал на обложке перечень программ и броские врезки «100% вирусов нет!». С этого диска началась моя дружба с тогда еще «shareware» Оперой. Многовкладочный интерфейс, возможность отключать картинки – что еще нужно было для российского диалапа?
Поэтому последние годы, когда я раз за разом натыкаюсь на то, что Опера «по умолчанию» попустительствует в скрытой загрузке вредоносного ПО, я все равно не хочу с нее уходить.
Завязка
Каждый инцидент начинается печально и неожиданно. Ничего не предвещает беды. Стандартный серфинг в интернете, включен файрвол, антивирус бодро висит в трее, поиск какой-то информации, переход по ссылкам, файлообменниками и неожиданно вылет сообщения брэндмауэра «Приложение fghtdhdffsdhr.exe запрашивает доступ к реестру, разрешить?» (Имя «fghtdhdffsdhr.exe» взято наобум, но отражает общий принцип именования подобных файлов). Начинается спокойная паника. В мыслях всегда опасаешься самого страшного – нарваться на криптовирус и потерять годами наработанные документы и исходники. Взгляд на диод активности дисков, прислушиваюсь к ним – молчат, а, значит, вирус застыл в ожидании завершении вызова на доступ к реестру. И, пока он держится, начинаются разборки.
Быстро выясняется, что вирус запущен из директории пользователя (или папки временных файлов интернета), запустил его процесс java.exe, а процесс java.exe, в свою очередь, был запущен процессом opera.exe. Процесс вируса убивается и его файл изничтожается.
Больше я никаких действий в таких случаях особо не принимал. Беспокоило это меня мало. Да и плагин Java, включенный, кстати, в Opera по умолчанию, отключать мне не хотелось. Лицензия на файрвол продлялась стабильно, операционную систему я тоже периодически переустанавливал, а дел находилось много и без разборок с Оперой. Хотя обновлять ее и Java я не забывал, втайне надеясь, что когда-то они обновятся до такой степени, что решат эту проблему.
Кульминация
Наступил 2012 год. И прошел на удивление спокойно. Ничего опасного не происходило, что заставило меня совсем расслабиться и решить было, что в злобной связке Opera + Java наконец-то проблему с исполнением произвольного кода на удаленной машине решили. Зря надеялся.
Осенью 2012 неожиданно при скачивании какой-то жутко редкой книги с жутко противного файлообменника начинается старая история. И это обозлило: надо же, чтобы хоть кто-нибудь сказал компании Opera, чтобы они разобрались с такой уязвимостью. Начал я думать: допустим, что этот файлообменник я вообще видел первый раз, и больше никогда не увижу. Но ведь раньше такое случалось и на популярных ресурсах, трекерах тех же самых, перегруженных рекламой, но все же ценящих своих пользователей. Неужели администраторы этих сайтов настолько продажны, что могут разрешать выполнять java-апплеты неизвестных разработчиков с последующими плачевными последствиями для жертв? Сомнительно.
Вооружившись виртуальной машиной, HTTP-дебаггером, монитором сетевой активности, а еще утилитой для отслеживания активности процессов от Sysinternals, я приступил к разбирательству. Переход на сайт файлообменника к тому же файлу никаких результатов не дал. Обновление страницы тоже. Опера порождать процесс java.exe не спешила, двоичных файлов было много только в виде изображений: одна реклама, реклама, реклама.
Первая же мысль, оказавшаяся впоследствии правильной, была простой – сайт, раздающий троянца, не отдает больше одного файла в одни руки. Вернее, одному IP. Сменил внешний IP, полез на файлообменник опять. Нет реакции.
Вторая мысль, оказавшаяся впоследствии также правильной, была опять простой – сайт, раздающий вирус, не отдает больше одного файла в одни руки. Вернее, отдает только тем, у кого нет его cookie. Уничтожаем все полученные cookie от всех сайтов, меняем IP, идем на сайт. Через секунды диспетчер задач фиксирует запуск java.exe, затем очередного «fghtdhdffsdhr.exe», который я не без удовольствия изничтожаю после того, как, на мой взгляд, он достаточно напакостил.
Начались разборки с log-файлами. Вирус проявлял типичную активность. Это было неинтересно, было интересно, как он появился. То, что его изначально загружает java-апплет, я понимал, но очень хотелось понять, как администраторы файлообменника такое допустили. Оказалось все очень просто, хотя запутанно из-за обилия перенаправлений и рекламы. Одна из «рекламок» просила загрузить счетчик страниц в виде файла *.swf со стороннего сайта. Счетчиком он был, я думаю, потому, что сайт подходяще назывался. И был в домене ru, кстати. Но этот файл перенаправлял браузер на другой сайт counter.*.com. И вот он уже практически всегда возвращал пустую страницу с намеком что, да, пользователь засчитан. Но в случае, если пользователь загружал счетчик впервые, браузер перенаправлялся на страницу с java-апплетом, который обрабатывался java.exe, загружал исполняемый файл на компьютер пользователя и запускал его. Java.exe запускался Оперой с рядом параметров, включая, насколько я понял, имя именованного канала, через который Опера и сливает апплет. На более тщательное расследование времени не было.
Конечно, я запостил баг-репорт на opera.com с описанием последовательности появления проблемы. Вполне ожидаемо мне ответили, что это проблема Java, браузер работает правильно, и пишите письма в Oracle. В Oracle я уже писать не стал, с моей точки зрения, Java тоже работает правильно. Выполняет код, загружает файлы, запускает программы, на что жаловаться? Проблема заключалась как раз в том, что Opera разрешает Java выполнять неизвестный код от неизвестных источников. Справедливости ради отмечу, что Chrome и Firefox по умолчанию запрещают работать плагину Java как раз из-за проблем с безопасностью. Вторая проблема, конечно, в веб-мастерах популярных ресурсов, которые в погоне за показами и трафиком размещают у себя на сайтах рекламу из сомнительных источников, которая, с одной стороны, может работать по прямому предназначению, а может, выдавая свои действия за вполне безобидные, и творить зло.
Развязка
Толчком к статье послужила еще одна форма головотяпства, проявленного, что уже совсем страшно, на сайте очень популярного в моем городе супермаркета. На определенных страницах этого сайта Опера опять запускала неизвестные файлы через Java! Но там оказалось все намного проще: в коде страницы, в нижней ее части, даже за закрывающим тегом <html> был вызов JS-скрипта со стороннего сервера, который спустя ряд перенаправлений загружал апплет. Срабатывал он по событию onmousemove и загружался в миниатюрный iframe. И, как всегда, повторный переход по страницам магазина к загрузке вируса не приводил: вредоносный сервер устанавливает cookie и запоминает IP-адрес. Для такого знакомого сочетания сайт вместо вируса возвращал код 404. Именно благодаря этой способности, вирус и вредоносный код на странице могут очень долго оставаться необнаруженными. Администратор сайта, однажды поймав cookie, уже никогда не увидит эту проблему. А при условии того, что обновляется только контент сайта, то следующая ревизия кода может быть через очень долгое время, за которое злоумышленники смогут обновлять и свои подходы, и подсаживаемых троянцев.
Способ заражения тоже прост: скорее всего, у администратора увели пароль к ftp-аккаунту для сайта магазина. Возможно, таким же троянцем. А дальше автоматически прописали во все *.html файлы или файлы c html-кодом тег <script></script>. Не зря же он располагается даже за </html>-тегом.
А с администратором сайта связаться я не могу, контакты сайта указывают только на пресс-офис. Зная, как долго мое заявление будет пробиваться через бюрократический корпоративный аппарат, и, понимая, что оно может и «случайно» затеряться, я не хочу к ним «официально» обращаться. Тем более администратор сайта, прочитав письмо, через пару минут устранит все проблемы и продолжит свое блаженное существование, не поменяв, возможно, даже пароль доступа к сайту. Через своего знакомого в IT-отделе магазина я напрямую выйду на администраторов сайта и поясню суть проблемы.
Послесловие
Надеюсь, это получилась поучительная история, из которой можно сделать ряд выводов:
- Безответственность и невнимательность могут привести к печальным последствиям.
- Не стоит доверять даже любимым сайтам. Если вчера на них все было хорошо, то сегодня уже может стать плохо.
- Сервера, раздающие вирусы, не дураки. Больше одного в одни руки не отгружают. Только одна попытка заражения на один IP или компьютер.
- Думаю, проблему можно решить, отключив плагин Java в Опере с помощью opera:plugins, либо запретив автоматическое перенаправление в настройках (сомнительно и неудобно).
P.S. Не исключаю возможности наличия этой «проблемы» в других браузерах старых версий.
Автор: Darksan