Как мы уже рассказывали на VolgaCTF2012, сейчас более чем в 2/3 случаев опасные сайты заражают компьютеры пользователей, загружая в браузер вредоносные Java-апплеты. Такое заражение может происходить при регулярном обновлении браузера, в некоторых случаях – даже если используется ОС не от Microsoft. Если на компьютере нет виртуальной машина Java, заражённый сайт «заботливо» предложит установить её версию с уязвимостью, после чего повторно атакует компьютер пользователя.Чтобы обнаруживать сайты, использующие этот способ заражения, Яндекс запустил специальный поведенческий анализатор вредоносного кода для Java-приложений. Он позволяет детектировать обфусцированный вредоносный код, который использует самые популярные на сегодняшний день уязвимости JRE. В результате с начала февраля было обнаружено более четырех тысяч зараженных сайтов, суммарная посещаемость которых до заражения достигала 1,5 млн. пользователей в сутки.
Одним из наиболее актуальных способов распространения вредоносного кода на сегодняшний день являются Java-эксплойты, которые встречаются в любом эксплойт-паке. Такая популярность обусловлена несколькими факторами:
- использование Oracle Java более чем на 3 миллиардах компьютеров;
- кроссплатформенность эксплойтов;
- относительная простота эксплуатации уязвимостей;
- в большинстве случаев Java-плагин включен в браузере.
Java-эксплойты обрели широкую популярность у злоумышленников из-за большого количества логических уязвимостей в Java. Такие уязвимости позволяют выполнить произвольный код незаметно для пользователя, потому что их использование обычно не сопровождается падением процессов браузера или виртуальной машины Java. С 2010 года злоумышленники использовали для заражения уязвимости CVE-2010–0806, CVE-2010–4452, CVE-2011–3544, CVE-2012-0500 и CVE-2012-4681, а с самого начала 2013 года стали активно использовать новую уязвимость СVE-2013-0433.
Рассмотрим СVE-2013-0433. Суть этой уязвимости заключается в том, что при помощи уязвимого метода com.sun.jmx.mbeanserver.MBeanInstantiator.findClass можно получить ссылку на класс из любого пакета по имени класса. Однако конструктор класса MBeanInstantiator является приватным и не может быть вызван напрямую. Нужная ссылка на объект класса MBeanInstantiator содержится в экземпляре класса com.sun.jmx.mbeanserver.JmxMBeanServer и может быть получена при помощи метода getMBeanInstantiator.Класс JmxMBeanServer имеет публичный конструктор. Таким образом чтобы повысить свои привилегии, достаточно выполнить:
javax.management.MBeanServer ms =
com.sun.jmx.mbeanserver.JmxMBeanServer.newMBeanServer("any", null, null, true);
com.sun.jmx.mbeanserver.MBeanInstantiator mi =
((com.sun.jmx.mbeanserver.JmxMBeanServer)ms).getMBeanInstantiator();
Class clazz = mi.findClass("some.restricted.class.here", (ClassLoader)null);
Чтобы заразить компьютер пользователя, злоумышленники размещают на зараженной веб-странице вредоносный код, например:
После посещения страницы происходит цепочка редиректов:
В итоге пользователь перенаправляется на страницу с эксплойтами:
При наличии уязвимой версии Java, вредоносный апплет 887.jar повышает свои привилегии в системе, загружает и запускает вредоносную программу. По данным сервиса VT на 27.02.2013, рассмотренный вредоносный апплет детектируют 5 антивирусов из 40, а устанавливаемое с его помощью вредоносное ПО не детектирует ни один антивирус из 40. Злоумышленники почти всегда обфусцируют или шифруют вредоносный код внутри Java-апплетов, что позволяет им обходить сигнатурные методы детектирования. Так, рассматриваемый образец после декомпиляции имеет вид:
Все строковые константы, встречающиеся в данном апплете, обфусцированы, имена переменных и классов изменены на случайные. В апплете эксплуатируется описанная уязвимость СVE-2013-0433: