Охота на уязвимость нулевого дня в Microsoft Silverlight
В 2015 году особенно горячая дискуссия развернулась вокруг взлома и кражи данных из Hacking Team, знаменитой итальянской компании – разработчика шпионского ПО.
Для тех, кто не слышал о Hacking Team, можем сообщить, что эта компания, основанная в 2003 году, специализируется на продаже правительствам и правоохранительным органам шпионского ПО и средств слежки за пользователями. 5 июля 2015 года в компании произошла утечка большого объема данных, которые попали в Интернет. Ответственность за взлом взял на себя хакер Phineas Fisher (Рыбак Финеас). Ранее Phineas Fisher таким же образом атаковал Gamma International – другую компанию, занимающуюся разработкой шпионского ПО и средств слежки за пользователями.
Взлом компании Hacking Team широко освещался в прессе с самых разных точек зрения: обсуждались и допустимость продажи шпионского ПО деспотичным правительствам, и качество инструментария, и утечка спулов электронной почты с информацией о коммерческой деятельности компании.
Одна из таких статей привлекла наше внимание.
Как русский хакер заработал 45 000 долларов, продав компании Hacking Team эксплойт нулевого дня для Flash Player
Под таким заголовком 10 июля 2015 года в интернет-издании Ars Technica появилась увлекательная статья Сайруса Фаривара. В ней рассказывалось о Виталии Торопове, 33-летнем разработчике эксплойтов из Москвы, который зарабатывал на жизнь продажей уязвимостей нулевого дня компаниям типа Hacking Team.
Приведем фрагмент статьи из Ars Technica, где Сайрус цитирует первоначальное предложение продавца эксплойтов:
Фрагмент статьи в Ars Technica
Первое письмо московского продавца, датированное 13 октября 2013 г., было деловым и кратким: «Здравствуйте! Заинтересована ли ваша компания в приобретении уязвимостей нулевого дня с RCE-эксплойтами для последних версий Flash Player, Silverlight, Java, Safari?
Все эксплойты позволяют внедрять и удаленно выполнять пользовательский код и используют современные способы обхода защиты типа ASLR [случайное распределение адресного пространства] и DEP [предотвращение выполнения кода] в системах Windows, OS X и iOS, не прибегая к таким ненадежным способам, как ROP или heap spraying.»
В письме не содержалось никакой информации об отправителе, за исключением адреса электронной почты: tovis@bk.ru.
Для компании типа Hacking Team эксплойты нулевого дня – просто хлеб насущный! Программы компании не смогут заразить компьютеры своих жертв без эффективных эксплойтов, включая эксплойты нулевого дня. Особенно ценны эксплойты, способные обходить такие современные средства защиты, как ASLR и DEP. Такие эксплойты пользуются очень большим спросом.
Стороны поторговались и пришли к соглашению о покупке эксплойта нулевого дня для Adobe Flash Player, ныне не действующего, за который Виталий Торопов сразу же получил аванс в размере 20 000 долларов.
Как хороший продавец, Виталий Торопов тут же прислал ответное письмо по электронной почте, в котором предложил скидки на следующие покупки. Вот что пишет Сайрус в своей статье в Ars Technica:
Фрагмент статьи в Ars Technica
Торопов сразу же предложил компании скидку как постоянному покупателю:
«Отлично, спасибо!
Теперь вы получите скидку: 5 тысяч на вторую покупку и 10 тысяч на третью.
Могу порекомендовать вам новый эксплойт нулевого дня для iOS 7/OS X Safari или мой старый эксплойт для Silverlight, который был написан 2,5 года назад и имеет все шансы на долгую жизнь.»
Эта часть статьи сразу привлекла наше внимание. Эксплойт для Microsoft Silverlight, написанный более двух лет назад, имеет перспективы на будущее? Если это действительно так, то речь идет о серьезной ошибке, открывающей большие возможности для успешных атак на множество крупных компаний. Известно, что при установке платформы Silverlight она регистрируется не только в Internet Explorer, но и в Mozilla Firefox, а значит, вектор атаки может быть довольно большим.
Охота на эксплойт нулевого дня для Silverlight
Ранее нам удалось обнаружить и прекратить эксплуатацию нескольких уязвимостей нулевого дня; среди них были уязвимости CVE-2014-0515 и CVE-2014-0546, которые использовались APT-группировкой Animal Farm, CVE-2014-0497 (использовалась APT-группировкой Dark Hotel) и CVE-2015-2360 (использовалась APT-группировкой Duqu). Мы также обнаружили уязвимость нулевого дня CVE-2013-0633 в Flash Player, которую использовала компания Hacking Team и другая неизвестная группировка.
Мы глубоко убеждены, что выявление таких эксплойтов и бесплатное информирование о них пострадавших производителей ПО делает мир чуточку безопаснее для всех.
Поэтому, когда мы прочли статью в Ars Technica, у нас появилась идея «поймать» неизвестный эксплойт для Silverlight, о котором упоминал Виталий Торопов.
Как ловят эксплойты нулевого дня? Мы, например, используем для этого качественные инструменты, технологии и свои мозги. Наш собственный инструментарий включает в себя KSN (Kaspersky Security Network) и AEP (Automatic Exploit Prevention).
Чтобы поймать этот, вероятно неизвестный, эксплойт для Silverlight, мы начали изучать другие эксплойты того же разработчика. К счастью, на OVSDB имеется довольно подробный профиль Виталия Торопова. Кроме того, на портале PacketStorm есть несколько его записей:
Эта запись привлекла наше внимание по двум причинам:
- это эксплойт для Silverlight
- к нему прилагается PoC, написанное самим Виталием
PoC можно легко скопировать оттуда же:
Что мы и сделали.
Архив содержит качественно составленный файл readme с описанием уязвимости и исходные коды эксплойта PoC.
Эксплойт PoC просто запускает программу calc.exe на компьютере жертвы. В архиве имеется отладочная версия, скомпилированная автором, которая оказалась нам очень полезна. Мы использовали ее для выявления определенных паттернов: строки, шеллкод и т.д..
Самый интересный файл в архиве:
SilverApp1.dll:
Размер: 17920 байт
md5: df990a98eef1d6c15360e70d3c1ce05e
Это настоящая DLL, которая выполняет эксплойт 2013 года для Silverlight, написанный Виталием Тороповым.
Имея в своем распоряжении этот файл, мы решили создать несколько специальных методов обнаружения этого эксплойта. В частности, мы написали YARA-правило, в котором использовали определенные строки из этого файла. Так выглядел наш метод обнаружения средствами YARA:
Довольно просто, не правда ли?
Вообще говоря, мы сейчас пишем YARA-правила для всех важных случаев и считаем это очень эффективным способом борьбы с кибератаками. Благодарим Виктора Мануэля Альвареса и сотрудников компании VirusTotal (в настоящее время приобретена Google) за создание такого эффективного и универсального инструмента!
Долгое ожидание…
Создав инструмент обнаружения, мы стали ждать, в надежде, что APT-группировка воспользуется этим эксплойтом. Зная, что Виталий Торопов предлагал его компании Hacking Team, мы предположили, что он предлагал его и другим покупателям. А какой прок от эксплойта нулевого дня, если его не использовать?
Прошло несколько месяцев, но ничего не происходило. И мы забыли об этом до конца ноября 2015 года.
25 ноября у нашего пользователя сработал один из наших базовых инструментов обнаружения эксплойта Торопова 2013 года для Silverlight. А несколько часов спустя в сервис мультисканирования был загружен образец из Лаосской Народно-Демократической Республики (Лаоса).
Этот файл был скомпилирован 21 июля 2015 года, то есть примерно через две недели после взлома компании Hacking Team. Поэтому мы предположили, что это не один из ранних эксплойтов 2013 года, а новый эксплойт.
Нам понадобилось некоторое время, чтобы проанализировать образец и обнаружить ошибку. Убедившись, что это действительно эксплойт нулевого дня, мы проинформировали об уязвимости компанию Microsoft.
Microsoft подтвердила наличие уязвимости нулевого дня (CVE-2016-0034) и выпустила патч от 12 января 2016 года.
Технический анализ ошибки
Уязвимость была обнаружена в классе BinaryReader. При создании экземпляра этого класса можно передать собственную реализацию процесса кодирования:
Кроме того, в процессе Encoding можно использовать собственный класс Decoder:
Если посмотреть на код BinaryReader.Read(), можно увидеть следующее:
Действительно, перед вызовом значение «index» точно проверяется:
Но если заглянуть внутрь функции InternalReadChars (она помечена как небезопасная и манипулирует указателями), можно увидеть следующий код:
Проблема возникает из-за того, что функция GetChars может определяться пользователем, например:
Как видите, переменной «index» можно управлять из кода, определяемого пользователем. Выполним отладку.
Это переменная Test.buf. Здесь 05 – длина массива перед эксплуатацией уязвимости:
После вызова метода BinaryRead.Read остановим программу на методе InternalReadChars (index равен 0):
После этого остановим программу на коде, определяемом пользователем:
Это первый вызов функции, определяемой пользователем, и функция возвращает неверное значение. На следующей итерации переменная «index» содержит неверное смещение.
Изменив смещение, можно легко изменить, например, содержимое памяти:
Так выглядит объект Test.buf после наших модификаций, произведенных в методе декодирования:
Итак, это тот дроид, которого вы ищете?
Один из главных вопросов, который стоит перед нами: тот ли это эксплойт нулевого дня, для Silverlight, который Виталий Торопов пытался продать компании Hacking Team? Или это другой эксплойт?
Некоторые детали, например, отладочные сообщения об ошибках, наводят на мысль, что это один из его эксплойтов. Конечно, мы не можем этого утверждать; возможно, существует несколько эксплойтов для Silverlight. Одно можно сказать наверняка – после обнаружения и исправления этой уязвимости мир стал чуточку безопаснее.
И последнее замечание: по причине охраны авторских прав мы не смогли проверить, имелся ли в украденном архиве Hacking Team этот эксплойт. Мы предполагаем, что специалисты по компьютерной безопасности, обнаружившие эксплойты нулевого дня в утечках HackingTeam, смогут проверить и наличие этого эксплойта.
Чтобы научиться писать эффективные YARA-правила, обнаруживать новые APT-угрозы и эксплойты нулевого дня, можно пройти наш курс обучения YARA перед конференцией SAS 2016. Великий ниндзя, или охота на APT-угрозы с помощью Yara (инструкторы: Костин Райю, Виталий Камлюк, Сергей Минеев). Мест уже почти не осталось!
Продукты «Лаборатории Касперского» детектируют новый эксплойт для Silverlight как HEUR:Exploit.MSIL.Agent.gen.
Загадочный случай с уязвимостью CVE-2016-0034