Skip to main content

Как на площадке Darkmoney работают с CarberP

Банковский бот CarberP появился не так давно, в первой половине прошлого года, и можно сказать, что этот финансовый троян имеет отличный потенциал, он использует достаточно большое количество необычных трюков для обхода эвристических алгоритмов современных антивирусов и сканеров. «Полезная» нагрузка же делает его сравнимым с Zeus’ом или SpyEye. 

С чего же все началось?

Когда мы исследовали образец этого банковского бота, то из пяти экземпляров, посланных на VirusTotal.com, только один определялся многими антивирусами, а у остальных четырех количество обнаружений было гораздо меньшим. Сравнив все экземпляры при помощи плагина BinDiff для IDA, мы обнаружили, что код был идентичным. Посмотрев внимательнее на файлы в редакторе HIEW, картина стала проясняться. Во-первых, отличались некоторые поля PE-заголовка. Во-вторых, в первой секции «.text» не было кода вообще, а единственное, что там было прописано, — имена двух библиотек (kernel32.dll и advapi32.dll), а также название одной функции (EqualPrefixSid), которые окружены случайными последовательностями байтов. Эти данные используются при распаковке банковского бота, и наконец, отличались таблицы релокаций. Предпоследние секции «.reloc» были различного размера, и сами значения релоков также не совпадали. Именно эти три отличая позволяли данному трояну обходить сигнатуры.

залив на карту при помощи CarberP
Также, помимо пяти образцов одной версии банковского бота, были исследованы еще две версии, которые отличались друг от друга, как механизмами защиты, так и своим функционалом.
При анализе банковских ботов часто приходится сталкиваться со сложностями при снятии навесной защиты из-за различных антиотладочных приемов и обфускации, но с данным экземпляром проблем не возникло, его упаковщик снялся без особых усилий. 
Временные файлы
При анализе этого банковского бота мы сначала не поняли, зачем же он создает временные файлы, копируя в них стандартные библиотеки Windows (ntdll.dll, kernel32.dll и ws2_32.dll). Оказалось, что это делается для безопасности вируса. После создания копии библиотеки, он отображает ее к себе в память, находит нужные ему при работе функции и сравнивает первые 10 байт с теми, что находятся в импортированной библиотеке. Если они не совпадают, значит какая-то «недобрая» программа поставила хук на эту функцию, и банковский троян сразу восстанавливает эти 10 байт из оригинальной библиотеки, а точнее — из образа ее копии. Поэтому с уверенностью можно сказать, что желающие поизучать внутренности Carberp’а могут отложить API Monitor на дальнюю полку своего жесткого диска :)
Вызовы API-функций также сделаны с изюминкой. В программе присутствует механизм, который получает на вход константу, а на выходе высчитывает необходимый адрес. Конечно, этот подход значительно затрудняет статический анализ банковского бота, хотя также имеет и свои минусы — если поставить точку останова на конец функции расшифрования, то легко можно отследить последовательность вызова функций, а написав парочку сценариев для OllyDbg и IDA, можно восстановить их названия и без проблем статически исследовать код. В одной из исследуемых версий трояна также использовалось шифрование всех текстовых строк, используемых программой, что значительно затруднило анализ возможностей совершения платежей в банковских системах SWIFT или SEPA.

Завоевание новых территорий

Во многих троянах код «полезной нагрузки» не выполняется при первом запуске — он инжектируется в какой-то уже работающий процесс и начинает действовать уже там. Этот банковский бот — не исключение, и для внедрения он использует процесс explorer.exe. Только делает он это очень необычно.

аренда ботнета
Первым делом, процесс вызывает функцию CreateProcess с выставленным флагом CREATE_SUSPENDED, тем самым создавая новый, приостановленный дочерний процесс explorer. exe. Затем вызовом функции ZwCreateSection создается объект «секция» (SectionObject — это часть памяти, которая может разделяться между разными процессами) со всеми возможными правами (чтение, запись, исполнение). Далее секция мапится в контекст трояна функцией ZwMapViewOfSection и при помощи memcpy банковский бот копирует свою распакованную копию в эту область памяти. После этого, секция отображается в контекст дочернего explorer.exe, и тем самым туда заносится код банковского бота. Но это еще не конец, ведь код банковского бота должен также выполниться explorer’ом. Для этого функцией ReadProcessMemory из процесса explorer.exe копируется место, где находится спроецированный исходный файл, в контекст банковского бота. Создается еще одна секция, которая сначала отображается в троянскую программу, а потом в нее с помощью memcpy копируется полученная из explorer’а часть памяти. Следующим шагом патчатся несколько байт на точке входа таким образом, чтобы происходил прыжок на функцию перевода денежных средств владельца банковского счета. И наконец, секция отображается в контекст explorer’а на то место, где раньше находился исходный образ.
Теперь все готово для запуска дочернего explorer’а. Троян вызывает ZwResumeThread, тем самым запуская исполняемый код, уже находящийся в другом процессе. Получив управление в новом месте, Carberp начинает работать в полную силу, запуская свои встроенные функции payload’а и внедряясь во все запускаемые процессы. Естественно, во всех новых захваченных территориях банковский бот также производит описанную выше проверку на наличие хуков в необходимых ему API-функциях.
В более новой версии Carberp’а нами был обнаружен другой способ внедрения порожденного процесса explorer.exe. Первые шаги остались неизменными — сначала создается глобальная секция, которая мапится в дочерний процесс, и туда копируется исполняемый код. А дальше вызывается недокументированная функция ZwQueueApcThread, которая ставит в очередь на выполнение в explorer’е асинхронный вызов одной из вредоносных функций, находящихся в образе секции. При вызове ZwResumeThread начинается выполнение банковского перевода.

Игра в прятки

Прежде чем обсуждать функции, которыми может похвастаться данный банковский троян, стоит разобрать еще несколько интересных моментов его жизни. Конечно же, как и любой уважающий себя бот, Carberp прописывается в автозагрузку, причем банально копируя себя под случайным именем в директорию %HOMEDRIVE%\%HOMEPATH%\StartMenu\Programs\StartUp\. Тем не менее, не все так просто! В самом боте предусмотрен механизм, позволяющий скрыть присутствие файла в системе.
После внедрения трояна в дочерний explorer.exe, вызываются механизмы, которые инжектируют его в исходный explorer. Сначала происходит поиск PID-процесса. Стоит отметить, что в программе заложено два способа поиска. Первый способ заключается в последовательном вызове функций FindWindow ("Shell_ TrayWnd", 0) и GetWindowThreadProcessId (hWnd, &id), таким образом, в переменной id должен появиться нужный PID. Если же по какой-то причине функция вернула «id=0», то происходит обыкновенный перебор процессов и поиск нужного.
аренда CapberP
Когда заветный PID найден, программа внедряется в explorer давно известным способом — ZwOpenProcess + WriteProcessMemory. Также банковский бот делает хук двух функций в захваченном процессе — NtQueryDirectoryFile и NtResumeThread из библиотеки ntdll.dll. Чтобы уйти от обнаружения некоторыми антивирусами (например, RootkitUnhooker), хук делается не совсем стандартным способом. Троян подменяет не адрес нужной функции, а адрес функции KiFastSystemCall. Так для чего же подменяются функции? NtQueryDirectoryFile перебирает все файлы, находящиеся в директории. Она вызывается почти во всех программах (в том числе в explorer и cmd) при обзоре каталогов файловой системы. Ее подмена необходима для того, чтобы скрыть факт присутствия файла. NtResumeThread вызывается explorer’ом при смене директории и при (!) запуске приложения. Таким образом, если explorer заражен, то при запуске любого приложения программная «закладка» определяет PID запускаемого процесса и инжектится в него, также подменяя вышеупомянутые функции. Легко понять, что при старте системы троян автоматически запускается, внедряется в explorer, а соответственно и все порожденные им процессы.
На этом заканчивается список средств защиты, используемых Carberp’ом. Полный список средств защиты, применяемый этим трояном, приведен в таблице 2.

Начинка

Разобравшись со всеми защитными механизмами банковского трояна, мы приступили к изучению вирусной начинки. Оказалось, что в нем имеет место вполне стандартный функционал похищения пользовательских данных и перевода денежных средств на счета дропов, сравнимый с функционалом того же IBank’а или Zeus’а, дополненный неплохим протоколом обмена данных между компьютерами холдеров и дроповода. Собирая по всей системе пользовательские сертификаты, пароли к учетным записям и прочей ключевой информации, добытые с помощью работающего кейлоггера и снятия скриншотов рабочего стола, банковский бот упаковывает все найденное в cab-архив и готовит его к отправке.

Общение с ботоводом

Теперь посмотрим на реализованный в трояне протокол обмена данными. Условно в нем можно выделить этап установки соединения и непосредственно рабочий этап обмена информацией.

Этап установки соединения

1 — Зараженный компьютер

1. Установка соединения с сервером 1.
2. Отправка строки GET-запросом, предусматривающей указание параметров:
  • uptime;
  • downlink;
  • uplink;
  • id (зашифрованная строка, содержащая информацию о зараженной системе);
  • statpass (начальный пароль);
  • comment.
Вот пример такого запроса:
/stat?uptime=<val1>&downlink=<val2>&uplink=<val3>
&id=<val4>&statpass=<val5>&comment=<val6>

3. Ожидание приема информации от сервера.

2 – Сервер заливщика (оператора ботнэта)

1. Отправка информации зараженному компьютеру. Могут быть отправлены следующие коды:
  • ok;
  • badpass;
  • session: <№ сессии>.

3 — Компьютер холдера (владельца банковского счёта)

1. Распознавание полученной от сервера информации:
  • ok — соединение установлено;
  • badpass, session — повторная передача начальной информации от сервера.
Этап передачи данных

1 — Компьютер холдера (владельца банковского счёта)

1. Отправка строки POST-запросом на сервер 2, предусматривающей указание параметров:
  • относительного пути, по которому на сервере дроповода будут располагаться переданные файлы;
  • зашифрованная строка, содержащая закодированную строку с информацией о системе и кодовое слово.
Передаваемая строка может выглядеть так:
1|palladin|05B45905A93F7D4B843D385AAE079AF1|0|0
А зашифрованная следующим образом:
a=e15e327af46a915c1b0014a284c052787ea7d63c8c40b1
a3dcafea6bb8e7076b0f6601861783dff7cbca429eb76a47
Шифрование строки сопровождается дополнением избыточности.
2. Отправка сформированного .cab-файла с похищенной информацией серверу 2.
3. Периодически происходит проверка установленного соединения. Данное действие аналогично предыдущему, за исключением того, что передается строка:
0|check|00000000000000000000000000000000|

2 — Сервер ботовода (оператора ботнета)

1. На стороне сервера осуществляется расшифровка принятого сообщения. Отправка уведомления об успешном приеме проверочного пакета.
2. Отправка информации зараженной машине. Вот что сервер может отправить в зависимости от версии троянца.

3 — Компьютер холдера (владельца банковского счёта)

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

аренда ботнета Darkmoney
Здесь они предусмотрели возможность обновления банковского бота, возможность самоудаления и загрузки дополнительных модулей. Кстати, последние направлены на целевые банковские системы. Эти модули содержат механизм перехвата выполняемой клиентом транзакции и подмены страниц аутентификации на страничках интернет-банкинга.

Дополнительные возможности

Дополнительную мощь банковскому трояну добавляют специальные плагины, которые он загружает вдобавок к основному функционалу. На момент исследования у нас было три зашифрованных плагина с символичными именами miniav.plug, killav.plug и passw.plug (именно в таком виде их удалось достать с сервера, с которым Carberp взаимодействует).

загрузка ботнета Darkmoney
Потратив немного времени на исследование шифрованных файлов и написание к ним декриптора на языке python, удалось выяснить, что содержимое этих плагинов соответствует их названию. Действительно, miniav.plug занимается устранением конкурентов — если на компьютере жертвы помимо Carberp’a присутствует другой зловред, например, тот же самый Zeus, то последний безжалостно удаляется из системы. Плагин killav.plug нейтрализует работу антивирусных систем, ну а passw.plug способен перехватывать вводимые пользователем пароли.

Comments

Popular posts from this blog

Сбербанк и дропы с площадки Dark Money, и кто кого?

Крупных открытых площадок в даркнете, специализирующихся именно на покупке-продаже российских банковских данных, обнале и скаме около десятка, самая большая из них – это Dark Money . Здесь есть нальщики, дропы, заливщики, связанный с ними бизнес, здесь льют и налят миллионы, здесь очень много денег, но тебе не стоит пока во все это суваться. Кинуть тут может любой, тут кидали и на десятки миллионов и на десятки рублей. Кидали новички и кидали проверенные люди, закономерности нету. Горячие темы – продажи данных, банковских карт, поиск сотрудников в скам и вербовка сотрудников банков и сотовых операторов, взлом аккаунтов, обнал и советы – какими платежными системы пользоваться, как не попасться милиции при обнале, сколько платить Правому Сектору или патрулю, если попались. Одна из тем – онлайн-интервью с неким сотрудником Сбербанка, который время от времени отвечает на вопросы пользователей площадки об уязвимостях системы банка и дает советы, как улучшить обнальные схемы. Чтобы пользова

Перехват BGP-сессии опустошил кошельки легальных пользователей MyEtherWallet.com

Нарушитель ( реальный заливщик btc и eth ) используя протокол BGP успешно перенаправил трафик DNS-сервиса Amazon Route 53 на свой сервер в России и на несколько часов подменял настоящий сайт MyEtherWallet.com с реализацией web-кошелька криптовалюты Ethereum . На подготовленном нарушителем клоне сайта MyEtherWallet была организована фишинг-атака, которая позволила за два часа угнать 215 ETH (около 137 тысяч долларов) на кошельки дропов. Подстановка фиктивного маршрута была осуществлена от имени крупного американского интернет-провайдера eNet AS10297 в Колумбусе штат Огайо. После перехвата BGP-сессии и BGP-анонса все пиры eNet, среди которых такие крупнейшие операторы, как Level3 , Hurricane Electric , Cogent и NTT , стали заворачивать трафик к Amazon Route 53 по заданному атакующими маршруту. Из-за фиктивного анонса BGP запросы к 5 подсетям /24 Amazon (около 1300 IP-адресов) в течение двух часов перенаправлялись на подконтрольный нарушителю сервер, размещённый в датацентре п

DDOS атаки на маршрутизатор и методы защиты Juniper routing engine

По долгу службы мне часто приходится сталкиваться с DDOS на сервера, но некоторое время назад столкнулся с другой атакой, к которой был не готов. Атака производилась на маршрутизатор  Juniper MX80 поддерживающий BGP сессии и выполняющий анонс сетей дата-центра. Целью атакующих был веб-ресурс расположенный на одном из наших серверов, но в результате атаки, без связи с внешним миром остался весь дата-центр. Подробности атаки, а также тесты и методы борьбы с такими атаками под катом.  История атаки Исторически сложилось, что на маршрутизаторе блокируется весь UDP трафик летящий в нашу сеть. Первая волна атаки (в 17:22) была как раз UDP трафиком, график unicast пакетов с аплинка маршрутизатора: и график unicast пакетов с порта свича подключенного к роутеру: демонстрируют, что весь трафик осел на фильтре маршрутизатора. Поток unicast пакетов на аплинке маршрутизатора увеличился на 400 тысяч и атака только UDP пакетами продолжалась до 17:33. Далее атакующие изменили стратегию и добавили к

Сброс BGP-сессии при помощи TCP Connection Reset Remote Exploit

Уже ни раз рассказывал о протоколе ТСР , так что повторятся особо не буду, напомню лишь основные положения: Transmission Control Protocol описывается в RFC 793 и преимуществом его является надежность передачи данных от одной машины к другому устройству по сети интернет. Это означает, что ТСР гарантирует надежность передачи данных и автоматически определит пропущенные или поврежденные пакеты. Что для нас важно из его конструкции? В общем виде заголовок ТСР пакета выглядит так: Программа передает по сети некий буфер данных, ТСР разбивает данные на сегменты и дальше упаковывает сегменты в наборы данных. Из наборов данных формируются пакеты и уже они передаются по сети. У получателя происходит обратный процесс: из пакетов извлекаются набор данных, его сегменты, затем сегменты передаются в ТСР стек и там проверяются, потом собираются и передаются программе. Sequence numbers Данные разбиваются на сегменты, которые отдельными пакетами направляются по сети получателю. Возможна ситуация, к

Как найти реального заливщика

Своего первого реального заливщика, который показал мне как можно скачать деньги в интернет с банковских счетов, я нашел случайно, когда еще трудился в Укртелекоме сменным инженером немного подрабатывая продавая трафик налево , но потом этот человек отошел от дел в связи со слишком уж скользкой ситуацией в данной сфере, и я решил поискать партнера на форумах, разместив рекламу на трёх электронных досках объявлений. Честно говоря поначалу даже был готов сразу закинуть 500 000 гривен в Гарант, но потом призадумался, а стоит ли? Ко мне начал обращаться народ обращается разных категорий 1. Дебильная школота, которая что-то любит повтирать про свою серьезность и просит закинуть 10 000 USD им на Вебмани в качестве аванса  2. Реальные мэны, которые  льют сразу большую сумму по SWIFT  без разговоров про гарантии и прочую шнягу, но после того, как им отдаёшь нал, они сразу пропадают, суть данных действий я так и не понял. зачем пропадать, если всё прошло гладко? 3. Мутные личност

Обзор внутренней инфраструктуры безопасности Google

Обычно компании предпочитают хранить в тайне особенности своей инфраструктуры безопасности, которая стоит на защите дата-центров, полагая, что раскрытие подобной информации может дать атакующим преимущество. Однако представители Google смотрят на этот вопрос иначе. На то есть две причины. Во-первых, публикация таких отчетов позволяет потенциальным пользователям Google Cloud Platform (GCP) оценить безопасность служб компании. Во-вторых, специалисты Google уверены в своих системах безопасности. На днях компания обнародовала документ Infrastructure Security Design Overview («Обзор модели инфраструктуры безопасности»), в котором Google достаточно подробно описала свои защитные механизмы. Инфраструктура разделена на шесть слоев, начиная от аппаратных решений (в том числе физических средств защиты), и заканчивая развертыванием служб и идентификацией пользователей. Первый слой защиты – это физические системы безопасности, которые просто не позволяют посторонним попасть в дата-центры. Эта част