В начале 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://
После начала выполнения данный файл удаляет «<Свое собственное имя>: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.