В начале 2013 года в лабораторию компьютерной криминалистики и исследования вредоносного кода компании Group-IB поступил на анализ образ НЖМД по типичному инциденту – хищение крупной суммы у юридического лица через систему дистанционного банковского обслуживания. Результатами анализа зловреда поделится Трифонов Виталий, ведущий специалист по исследованию вредоносного кода Group-IB.

Предварительное криминалистическое исследование образа носителя компьютерной информации с бухгалтерского компьютера показало, что в данном случае мы имеем дело не с инсайдом, и мошенничество было произведено с помощью вредоносного программного обеспечения. Антивирусное сканирование продуктами ведущих производителей обнаружило целый букет зловредов как не относящихся к банковскому ПО, так и вредонос Shiz, обладающий полными возможностями для работы с банковскими данными пользователей.

Shiz

Обнаруженный экземпляр обладал всеми обычными свойствами своего семейства, генерировал около 500 тысяч адресов управляющих центров и имел версию 4.30.46.

В данном сэмпле отсутствовал функционал по работе с банк-клиентом «iBank 2». Активированный кейлоггер и веб-инжекты позволяют совершить множество мошеннических действий, выгодных оператору ботнета, но вот провести платеж, в тонком банк-клиенте «iBank 2», они не могут. Исходя из практического опыта, можно утверждать, что злоумышленники в таких случаях прибегают либо к удаленному управлению, либо к использованию более сложных программ, позволяющих совершить автозалив.

В данном кейсе не использовалось удаленное управление, а зловредов с автозаливом задействованные антивирусы не обнаружили. Более того, тщательный криминалистический анализ дал понять – Shiz имеет весьма слабое отношение к хищению.

BIFIT_A

При детальном анализе файловой системы был выявлен подозрительный каталог \Documents and Settings\<Имя пользователя>\Application Data\BIFIT_A.

В данном каталоге зарегистрированы файлы со следующими именами: «agent.exe», «all.policy», «bifit_a.cfg», «bifit_agent.jar», «javassist.jar». На момент исследования данные файлы ничем не детектировались, но уже с первого взгляда понятно, что они точно причастны к инциденту, что и подтвердилось данными из главной файловой таблицы (MFT).

  • «all.policy» представляет собой обычный текстовый файл с содержимым «grant { permission java.security.AllPermission; };»
  • «javassist.jar» – jar файл одноименной библиотеки – фреймворка для модификации или генерации байт-кода JAVA.
  • «bifit_a.cfg» – название данного файла говорит само за себя, конфигурационный файл исследуемого зловреда, а содержимое его пока зашифровано.

Два оставшихся файла и есть самое интересное, и на них мы остановимся поподробнее.

Agent.exe

Agent.exe – довольно внушительный по размеру для вредоносного программного обеспечения файл (804Кб) и имеет цифровую подпись. Файл подписан сертификатом «Accurate CNC, Inc.». И на момент исследования данный сертификат уже был отозван поставщиком – «GlobalSign CodeSigning CA – G2».

Представляет из себя несложно запакованный исполняемый файл. Алгоритм упаковщика прост – выделить память, записать туда код, расшифровать его и передать управление.

Сразу после распаковки в глаза бросается «лишняя» секция «cfg». В ней одиноко хранится сетевой адрес управляющего сервера «urls=http:///site1/client.php». Впоследствии этот адрес, а также «botid» будут записаны в вышеприведенный файл «bifit_a.cfg».

После начала выполнения данный файл удаляет «<Свое собственное имя>:Zone.Identifier». Предположительно для того, чтобы затруднить определение своего попадания в систему.

Затем создается экземпляр процесса «svchost.exe» с последующим инжектом кода в него. Инжект делается достаточно тривиальным способом через связку WriteProcessMemory() – ResumeThread().

После того как копия программы будет запущена в процессе «svchost.exe», программа совершает последнее действие – инжект в процессы браузеров и JAVA.


Осуществляется поиск процессов


И внедрение кода только в необходимые

Одной из приятных особенностей этого семпла для анализастало подробное логирование всех своих действий. Функция, обозначенная на скриншотах декомпилированного кода как «AddToLog», записывает сообщение в пайп «\\\\.\\pipe\\10c86ecd51».

Вредоносная программа «Shiz», действующая на компьютере перед инцидентом и в момент хищения, любезно сохранила все данные в файле со случайным именем, где помимо HTTP запросов пользователя находился лог работы программы и все созданные снимки экрана, закодированные по алгоритму «Base64». Этот редкий случай слежки одного вредоноса за другим серьезно помог в проведении исследования.

Стоит отметить, что разработчикам данного модуля еще есть куда развиваться и улучшать свое творение. Сейчас они и их система действуют проверенными и общедоступными техниками. Так, например, автозагрузка вредоноса осуществляется через ключ реестра «bifit_agent» в разделе «Software\Microsoft\Windows\CurrentVersion\Run».


Копирование файла и добавление в автозагрузку

После добавления самого себя в автозагрузку вредонос создает каталог «BIFIT_A», содержимое которого указано выше.

Для инжекта в дочерние процессы используется перехват функции NtResumeThread(). Механизм этого перехвата заключается в следующем.

Функция NtResumeThread() вызывается каждый раз при создании потока. Перехват этой функции определяет, создается ли новый поток в контексте текущего процесса или создается новый процесс. Затем записывает в новосозданный процесс код вредоносной программы и передает на него управление. После чего поток запускается вызовом оригинальной функции NtResumeThread(), и в дочернем процессе выполняется код вредоносной программы.


Внедрение кода в дочерние процессы

Все вышеприведенные действия направлены на закрепление в системе. Также исследуемая программа реализует общий функционал вредоносных программ в качестве команд, а именно по команде от управляющего центра может быть осуществлена загрузка произвольного файла и его выполнение, обновление файла «bifit_agent.jar», отправка информации о запущенных процессах и их завершение по идентификатору или имени.

Однако основное предназначение данного файла заключается в перехвате функции GetCommanLineA() с целью модификации аргументов командной строки.


Код обработчика функции GetCommanLineA()

Функционал данного обработчика заключается в вызове оригинальной функции GetCommanLineA(), и, в случае если это командная строка процесса Java, осуществляется добавка некоторых аргументов. А именно аргумента «-javaagent», где в качестве агента указывается файл «bifit_agent.jar», создаваемый вредоносной программой, и «-Djava.security.policy» с указанием файла «all.policy», а значит «grant { permission java.security.AllPermission; };»

Вот как это выглядело в логе, найденном на исследуемом образе.

GetCommandLineA_handler (125) PID: 4608, new cmdLine: "C:\Program Files\Java\jre7\bin\java.exe" -javaagent:"C:\Documents and Settings\<Имя пользователя>\Application Data\BIFIT_A\bifit_agent.jar" "-Djava.security.policy=C:\Documents and Settings\<Имя пользователя>\Application Data\BIFIT_A\all.policy" <Старые аргументы командной строки без изменений> 

bifit_agent.jar

Таким образом, реализовывается использование технологии JAVA – Java Agent. Теперь специально сконфигурированное приложение «bifit_agent.jar» получает доступ к банк-клиенту «iBank 2» и возможность переопределять и трансформировать его классы.

Java Agent позволяет манипулировать байт-кодом методов. Чтобы использовать механизм трансформации классов необходимо реализовать интерфейс «java.lang.instrument.ClassFileTransformer» И зарегистрировать свою реализацию через метод «Instrumentation.addTransformer». Сам трасформер будет срабатывать каждый раз при:

  • загрузке класса «ClassLoader.defineClass»
  • переопределении класса «Instrumentation.redefineClasses»
  • ретрансформации класса «Instrumentation.retransformClasses»


Реализация трансформера в «bifit_agent.jar»


Регистрация трансформера в «bifit_agent.jar»

Таким образом, функционал вредоносного JAVA приложения будет выполняться непосредственно в легитимном приложении банк-клиента.

Приложение, являющееся Java агентом, должно отвечать спецификации JAR файла и иметь манифест. В манифесте в качестве «Boot-Class-Path» указываются как абсолютные, так и относительные пути поиска классов. В данном случае «Boot-Class-Path» содержит строку «./javassist.jar».


Манифест вредоносного приложения

Само приложение достаточно интересно для анализа хотя бы потому, что в нем не использована обфускация, и уже имена классов говорят о своем функционале. Также, как и в PE модуль приложение логирует свои действия.


Имена классов

Программа активно взаимодействует с банк-клиентом, предоставляя злоумышленнику полный контроль над учетной записью. Так осуществляется получение данных об именах пользователей, паролях и используемых ключах. В важных моментах работы банк-клиента создаются скриншоты. И самое главное – в наличии функционал по созданию платежных поручений!


Метод, выполняющий копирование логина


Результат его выполнения


Фрагмент класса по подмене платежек


Реализация скриншоттера


Фрагмент метода подписи документа

Приложение банк-клиент «iBank 2» обфусцировано путем переименования классов и методов. Но, как видно из приведенного лога, вредонос успешно осуществляет распознавание необходимых ему классов и методов.


Лог деобфускации банк-клиента

Чтобы понять, насколько полную информацию получали злоумышленники о финансовой жизни жертвы, достаточно просто посмотреть на перехваченные снимки экрана.


Окно входа


Окно предварительной выписки


Окно формирования платежного поручения

Выводы

В процессе расследования инцидента специалистами Group-IB была выявлена и разобрана новая вредоносная программа, нацеленная только на банк-клиент «iBank 2». Как на момент хищения денег со счета юридического лица, так и на момент проведения расследования, согласно интернет-порталу virustotal.com, ни один из антивирусных продуктов не детектировал данную программу.

Программа использует механизм модификации кода банковского приложения в процессе исполнения Java-апплета с использованием фреймворка «javassist».

Результатом ее выполнения на компьютере клиента становится полная передача финансовой информации злоумышленникам и реализация подложных платежных поручений.

Данная программа только находится в стадии разработки и активно обновляется. Так, первая обнаруженная версия программы, согласно отсылаемой ей информации на управляющей сервер – «0.7», а в процессе подготовки данного материала специалисты Group-IB обнаружили экземпляр программы версии «1.0.7», в которой присутствует дополнительный функционал и защита от анализа.

Из-за существования программ подобного класса клиентам банков, использующих систему «iBank 2», а это 650 тысяч корпоративных и более 450 тысяч частных клиентов (согласно интернет-порталу www.bifit.com) в России и 300 тысяч корпоративных и более 145 тысяч частных клиентов в Украине, следует внимательно отнестись к своей безопасности и не полагаться только на внутренние механизмы защиты системы «iBank 2».

На момент написания данного материала только три антивирусных продукта детектируют последний экземпляр программы (согласно интернет порталу virustotal.com): Comodo, DrWeb, Symantec.



Оставить мнение