Ice IX – «не айс»!

На прошлой неделе мой коллега Хорхе Мьерес обнаружил сервер управления ботнетом, построенном на базе вредоносной программы Ice IX. Как анонсировалось на нескольких форумах, Ice IX — это бот, созданный на основе появившихся в мае этого года в публичном доступе исходников ZeuS 2.0.8.9. Как утверждает автор нового бота, в программу внесены значительные изменения, которые должны заинтересовать киберпреступников, занимающихся хищением денежных средств пользователей с помощью банковских троянцев.


рис. 1. Описание бота


рис. 1a. Описание бота

Как видно на скриншотах выше, в описании новой программы акцент делался на улучшения, которым якобы подверглись исходники ZeuS. Среди них: обход файерволов, обход проактивного обнаружения антивирусами, защита от наблюдения со стороны трекеров (имеется в виду, конечно, ZeuS Tracker https://zeustracker.abuse.ch, который успешно портит кровь киберпреступникам). Автор просил $600 за версию бота с жестко прописанным адресом, с которым боту необходимо связываться после заражения (то есть, адрес центра управления), и $1800 за версию, в которой не было жесткой привязки к такому адресу. К сожалению, обнаружить сампл расширенной версии Ice IX не удалось, возможно, ее никто и не купил. Скорее всего, в этой версии реализован механизм, похожий на тот, который использовался в ZeuS, начиная с версии 2.1. В ZeuS это работало так: бот содержит лишь некий ключ — число, в зависимости от которого, а также от текущей даты, генерируется каждый день 1020 доменных имен, и бот последовательно перебирает их, пытаясь найти свой центр управления среди этого списка.

Но вот конструктор ботов базовой комплектации кто-то уже опробовал. Эти самплы и были проанализированы на предмет отличий от оригинальных самплов ZeuS, на базе которых был построен бот Ice IX.

Признаюсь сразу, что ожидал я большего. Все-таки такой анонс, да и в ветке обсуждения некто писал, что автор заслуживает одобрения: обход проактивного детектирования дорогого стоит, это, безусловно, новый бот, улучшенный ZeuS… На поверку же оказалось, что все это — липа. Никаких качественных новшеств в функционал оказавшегося в публичном доступе ZeuS 2.0.8.9 внесено не было!

Вот какие отличия удалось обнаружить:

1). ZeuS умеет находить в зараженной системе сохраненные учетные данные пользователя от почтовых ящиков. Найденные данные бот отправляет оператору ботнета, так что злоумышленник получает доступ к почтовым ящикам пользователя зараженного компьютера. Но в оригинальных исходниках ZeuS этот раздел кода, отвечающий за поиск и обработку данных, связанных с почтовыми ящиками, был закомментирован. Автор Ice IX просто раскомментировал этот код, соответственно, в его боте появились соответствующие модули, которые отсутствовали в самплах ZeuS 2.0.8.9..

2). Бот ZeuS 2.0.8.9 может быть запущен со следующими аргументами: -f, -n, -v, -i. Не стану загружать описанием того, что они означают, упомяну лишь кратко про ключ –i: если запустить сампл ZeuS 2.0.8.9 c этим ключом, будет показано окошко с некой информацией по боту:


рис. 2. Информационное окно ZeuS 2.0.8.9

Так вот, автор Ice IX просто убрал из кода обработку этого ключа, соответственно, сампл Ice IX не поддерживает такой аргумент.

3). Также была замечена одна измененная функция, связанная с чтением данных из реестра. Есть маленькая вероятность того, что это может быть тем самым «новшеством», направленным на обход проактивной защиты антивирусов. Но это изменение также может быть просто результатом оптимизации компилятора, который скомпилировал код бота немного по-другому, учитывая пусть и незначительные изменения в Ice IX. В коде ZeuS 2.0.8.9 функция для чтения данных из реестра содержит все API-функции для этой задачи, то есть функции RegOpenKeyEx, RegQueryValueEx, RegCloseKey:


рис. 3. Функция чтения из реестра, ZeuS

И если необходимо было прочитать какое-то значение из реестра, это делалось следующим образом:


рис. 3a. Вызов функции чтения из реестра, ZeuS

В сампле же Ice IX в тех местах, где вызывалась вышеописанная функция, произошли некоторые изменения. Из функции чтения данных реестра была вынесена функция RegOpenKeyEx:


рис. 4. Функция чтения из реестра, Ice IX

Соответственно, там, где надо было прочитать значения из реестра, перед вызовом функции чтения таких данных вызывалась API-функция RegOpenKeyEx для открытия ключа реестра (например, HKEY_CURRENT_USER или HKEY_LOCAL_MACHINE):


рис. 4a. Вызов функции чтения из реестра, Ice IX

Я допускаю, что какой-то антивирус детектирует ZeuS по описанной функции чтения из реестра. Скорее всего, эта фундаментальная функция присутствует во всех самплах ZeuS, независимо от версии, и, возможно, ее код уникально идентифицирует это семейство. Почему бы и нет? Тогда изменение этой функции (как вынесение, например, RegOpenKeyEx за ее пределы), позволило бы сбить детектирование, ориентированное на эту функцию.

Со всеми антивирусными продуктами самплы Ice IX я не проверял, потому сказать, потерял ли какой-либо продукт детект из-за этого изменения, я не могу. Я проверил сампл только на нашем продукте KIS 2012 — со старыми, еще июньскими базами, когда Ice IX еще не был известен. KIS 2012 обнаружил при выполнении кода бота опасные операции и остановил исполнение программы. Что неудивительно, ибо для ZeuS, с его долгой историей и богатым функционалом, в KIS или KAV найдется не один критерий, по которому наши продукты обнаруживают вредоносный код этого семейства.

Ну и самые значительные изменения, которые позволяют хоть как-то отделить Ice IX от ZeuS 2.0.8.9.

3). В файле конфигурации ZeuS есть раздел, называемый “Web Filters”, в котором оператор ботнета определяет, как боту реагировать, когда пользователь зараженного компьютера заходит на те или иные сайты. Для этого используются спецсимволы: “!”, “@”, “-“, “^”. Возьмем символ “@”. Этот символ ставится перед URL (например, @*/login.osmp.ru/*) и говорит боту, что если пользователь зашел на подходящий под маску адрес, то надо делать скриншоты, когда пользователь щелкает левой кнопкой мыши, чтобы впоследствии отправить эти картинки своему хозяину. Это нужно для того, чтобы злоумышленник смог восстановить введенные данные на сайте, если для ввода использовалась виртуальная клавиатура. Остальные символы тоже назначают определенное поведение бота. Все, что сделал автор Ice IX, так это изменил вышеобозначенные спецсимволы своими: теперь использовались буквы “N”, “S”, “C” и “B” соответственно.

4). И последнее — это чуть-чуть модифицированный способ, с помощью которого бот скачивает файл конфигурации. ZeuS содержит в своем коде URL к файлу конфигурации, по которому любой желающий может этот файл скачать — например, http://www.example.com/files/config.bin. Автор Ice IX делает упор на то, что якобы такая доступность файлов конфигурации и есть корень проблем с трекерами. И как же он собрался с этим бороться? А вот как: теперь файл конфигурации скачать просто так по URL не получится. Для этого надо по определенному адресу (тоже URL, «зашитый» в коде бота, в том же месте, что и у ZeuS 2.0.8.9) послать специально сформированный POST запрос. Отсылаемые данные представляют собой пару параметров: «id=<bot id>&hash=<md5 of ciphered bot id>», например:

id=TEST_WIN_XP_B5DF77116522DF69&hash=DC0D2CAB39D49FC3D5E467501A2682C5

id — это идентификатор бота, который вычисляется по тому же алгоритму, что и в ZeuS 2.0.8.9 (он используется в ZeuS при непосредственном «общении» бота с центром управления). Идентификатор представляет собой имя компьютера плюс некое уникальное шестнадцатеричное число, состоящее из 16 символов, которые могут быть произвольными, как и имя компьютера. Этот идентификатор зашифровывается алгоритмом RC4 (который повсеместно используется в ZeuS для кодирования данных) с S-box, который также «вшит» в тело бота. От зашифрованных данных берется контрольная сумма — MD5. Полученное значение и отсылается как переменная hash. Если учесть, что идентификатор бота может быть произвольным (максимум, должен соответствовать формату COMPUTERNAME_16CHARSHEXNUMBER), то для получения файла конфигурации необходим только S-box — чтобы зашифровать идентификатор бота. Но минуточку! Ведь файл конфигурации уже зашифрован тем же самым RC4 с тем же самым S-box. Без этого S-box сам по себе файл конфигурации бесполезен, ибо это поток бессмысленных байт. Самое ценное — то, что внутри.

В итоге мы имеем:

Бот Что нужно для получения полезных
данных из файла конфигурации
Ice IX S-box
ZeuS S-box

В чем, спрашивается, усложнение жизни трекерам? Ответ очевиден — практически ни в чем. Разве что потребуется лишних полчаса на то, чтобы запустить сампл, снять дамп и выделить в знакомом коде изменения. И это в том случае, если анализировать и ставить на поток скачку файлов конфигурации различных ботов. А ведь можно и проще — снять трафик с зараженной машины и скопировать параметры POST-запроса, это вообще минутное дело. А как преподносится!

Вспоминается одно изречение, правда, касательно спорта, но это не так важно: чтобы выиграть олимпиаду, нужен один прыгун, который прыгает на 9 метров, а не 9 прыгунов, которые прыгают на 1. Так и здесь — какая разница, сколько раз и сколько значений шифровать одним и тем же алгоритмом с одним и тем же ключом — все равно исходные данные одни и те же, и увеличение количества итераций шифрования к существенному усложнению алгоритма не приведет. Но, судя по всему, такой задачи и не ставилось, потому что все это — чистой воды мошенничество. Некто просто захотел заработать легких денег, и под шумок об усовершенствованиях продает функционал, который и так есть в публичном доступе бесплатно.

Публикации на схожие темы

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *