Мы уже писали про Hesperbot, эта угроза представляет из себя новое банковское вредоносное ПО и имеет модульную архитектуру. Злоумышленники использовали его для проведения атак на пользователей различных стран, включая Турцию, Чехию, Португалию и Великобританию. Основной целью атак было похищение конфиденциальных данных онлайн-банкинга пользователей и установка мобильного компонента вредоносного кода на устройства под управлением Symbian, Android, Blackberry. Киберпреступники использовали убедительную схему фишинга для заманивания пользователей на вредоносные ссылки, что делало их подход еще более практичным.
Компрометация пользователя происходит при переходе по вредоносной ссылке. Ниже показана схема, используемая злоумышленниками.
Рис. Схема компрометации пользователя.
Основная задача дроппера заключается во внедрении полезной нагрузки (payload или core) в контекст доверенного процесса explorer.exe. Этот код затем скачивает из сети и исполняет дополнительные модули.
Win32/Spy.Hesperbot является кросс-платформенной угрозой и различные перечисленные модули доступны в x86 и x64 вариантах. Различные внутренние функции одних модулей доступны для использования в других модулях через специальную таблицу виртуальных методов (vtable). Большая часть кода Hesperbot написана на C и скомпилирована с использованием Visual Studio 2010 без использования библиотеки run-time.
Полезная нагрузка
Дроппер может использовать один из следующих методов для внедрения компонента core в адресное пространство explorer.exe:
- Запустить новый экземпляр explorer.exe и исправить (patching) байты его точки входа с использованием ntdll!NtGetContextThread и ntdll!NtWriteProcessMemory. После этого точка входа будет указывать на код вредоносной программы.
- Внедрить свой код в уже существующий процесс explorer.exe с использованием метода, основанного на функциях Shell_TrayWnd/SetWindowLong/SendNotifyMessage. Данный метод использовался во вредоносном коде PowerLoader, который ранее был описан Александром Матросовым [1, 2 ,3].
- Внедрить код в explorer.exe с использованием обычной функции CreateRemoteThread.
После успешного внедрения, компонент core начинает в системе свою работу: отвечает за взаимодействие с управляющим C&C сервером, запуск вспомогательных модулей и запись параметров автозагрузки вредоносного кода в системный реестр. Для работы с C&C, Hesperbot использует список жестко зашитых в тело URL-адресов (которые различаются в случае разных стран и ботнетов) или генерирует список новых адресов с использованием специального DGA-алгоритма. Вредоносный код отсылает следующую информацию на C&C сервер:
- Имя бота, которое основано на Computer Name.
- Название ботнета, которое формируется исходя из страны, на которую угроза была нацелена злоумышленниками. Например, «cz-botnet», «tr-botnet», «pt-botnet», «uk-botnet» и «super-botnet» (последний использовался в ранних бета-версиях).
- IP-адреса сетевых адаптеров.
- Названия установленных смарт-карт.
- Информация об установленных плагинах Hesperbot.
Рис. Идентификатор чешского ботнета.
Ответ сервера может содержать следующую информацию или файлы:
- Конфигурационный файл.
- Файлы плагинов.
- Произвольный исполняемый файл для последующего запуска.
- Новая версия Hesperbot.
Вредоносный код получает список активных смарт-карт в системе с использованием следующих API: SCardEstablishContext, SCardListReaders и SCardConnect. В отличие от других, более сложных случаев угроз [1, 2], Win32/Spy.Hesperbot собирает только названия смарт-карт и не имеет возможности с ними взаимодействовать.
Загружаемые файлы (файлы конфигурации и исполняемые файлы плагинов) шифруются с использованием алгоритма Twofish, 256-битный хэш которого основан на данных:
- Имени компьютера (Computer Name).
- Параметра «InstallDate» раздела реестра [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion].
- Версии ОС.
- Архитектуры процессора (x86, x64, IA64).
- Параметра «MachineGuid» раздела реестра [HKEY_LOCAL_MACHINESOFTWAREMicrosoftCryptography].
- Параметра «DigitalProductId» раздела реестра [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion].
Для хранения загруженных с C&C данных и других вспомогательных файлов (например, лог-файла кейлоггера), Hesperbot создает директорию с произвольным именем в папке %APPDATA%.
Модуль Core обладает возможностью внедрения своего кода не только в explorer.exe, но и в другие запущенные процессы. Вредоносный код использует недокументированный трюк с перехватом UserNotifyProcessCreate внутри csrss.exe для того чтобы быть уверенным в активности своего кода в каждом запущенном процессе.
Компонент кейлоггера осуществляет перехват нажатий клавиш через функции GetMessage и TranslateMessage. Далее символы сохраняются в лог-файл с информацией о процессе и названием окна, в котором они вводились. После чего файл отправляется на сервер злоумышленников.
Модуль захвата скриншотов рабочего стола и видео называется httpi. Захват видео был использован и в банковской троянской программе Zeus. Данная возможность предоставляет злоумышленникам видеть более полную картину происходящего у пользователя в системе. Возможность реализуется с использованием API AVIFileCreateStream, AVIFileMakeCompressedStream, AVIStreamWrite из библиотеки Avifil32.dll.
Рис. Код создания видео.
Создание скриншотов рабочего стола производится с использованием функций библиотеки Gdi32.dll.
Возможность VNC-соединения ранее наблюдалась в известной троянской программе Carberp. Она позволяет создать VNC-сервер на стороне зараженного компьютера, к которому будет иметь доступ злоумышленник. Поскольку, в отличие от RDP, VNC не выполняет операцию переключения пользователя (user log off), атакующий может подключиться к жертве в процессе ее работы. Это достигается за счет создания вспомогательного рабочего стола (CreateDesktop), который невидим пользователю. Этот модуль предоставляет злоумышленнику возможность запускать процесс браузера, установленного в системе. В таком случае злоумышленник получает доступ к его сохраненным данным (cookie, сессии и прочее).
Сетевое взаимодействие и веб-инжекты
Hesperbot не является первым банковским вредоносным ПО, которое использует перехваты функций библиотеки WinSock (send, WSASend и прочие) и библиотеки WinInet (HttpSendRequest, InternetReadFile и прочие), для получения полного контроля за сетевым HTTP/HTTPS трафиком пользователя. Схожие механизмы использовались в известых троянах Zeus и SpyEye. Использование такого подхода дает возможность злоумышленникам осуществлять веб-инжекты (web-injects), получать введенные в веб-формы данные (form-grabbing) и проводить другие операции по похищению нужной злоумышленникам информации, которую пользователь вводит в страницы, открываемые в веб-браузере. Перечисленные методы получили название «Man-in-the-Browser» attack. Win32/Spy.Hesperbot использует несколько иной подход при проведении атаки на пользователя, который мы уже наблюдали в другом банковском трояне Win32/Gataka.
Перехват трафика и внедрение HTML-кода осуществляется модулями nethk, httphk и httpi, которые упоминались выше в таблице компонентов.
Рис. Взаимодействие различных модулей Hesperbot.
- nethk – используется для развертывания локального прокси, перехватывает функции для работы с сокетами при отслеживании соединений; содержит перехваты для функций проверки SSL-сертификатов в браузере.
- httphk – используется при разборе HTTP-трафика.
- httpi – используется для снятия скриншотов, захвата видео, снятие данных форм и внедрение HTML-кода (web-injects).
Модуль nethk является первым скачиваемым плагином вредоносного кода. Его скачивание осуществляется компонентом core. Win32/Spy.Hesperbot осуществляет атаку man-in-the-middle через создание локального прокси (local proxy), через который он может контролировать все соединения, инициируемые процессом браузера.
Рис. Код создания прокси.
Рис. Сетевые соединения Internet Explorer через установленный прокси Hesperbot.
Троянская программа с использованием модуля nethk создает прокси на произвольном порту с адресом 127.0.1.1 и перехватывает следующие функции библиотеки mswsock.dll: WSPSocket, WSPIoctl, WSPConnect, WSPCloseSocket. Указатели на эти функции модифицируются в таблице WSPPROC_TABLE. Для понимания того, как работает это перенаправления ниже представлена вредоносная версия WSPConnect.
Рис. Вредоносный вариант WSPConnect API.
Например, если пользователь захотел войти в систему онлайн-банкинга и браузер пытается установить защищенное соединение с веб-сайтом банка, запрос на соединение будет перехвачен кодом Hesperbot для создания локального прокси, после чего система онлайн-банкинга будет иметь дело с сокетом злоумышленников.
Рис. Схема работы вредоносного прокси.
Callback-функция модуля httphk вызывается каждый раз, когда прокси перехватывает запрос от браузера перед его передачей реальному серверу. Кроме этого, httphk вызывается каждый раз, когда прокси перехватывает ответ на запрос от реального сервера, перед тем как передать его браузеру. Далее httphk продолжает работу с трафиком.
Существуют различия в обработке HTTP и HTTPS трафика. В случае простого HTTP-соединения, данные в режиме запрос/ответ просто передаются от httphk и обратно. В случае же защищенного HTTPS соединения, вредоносный код использует возможности модуля nethk для того, чтобы «избавиться от шифрования». Когда HTTPS запрос, инициированный браузером, перехвачен (данные запроса уже зашифрованы с использованием фальшивого сертификата, см. ниже как), он расшифровывается и эти данные отправляются модулю httphk через callback-функцию и затем шифруются уже с помощью настоящего сертификата сервера (т. е. сертификата веб-сайта банка), после чего отправляются по назначению. С приходом ответа сервера, т. е. HTTPS-ответа, прокси расшифровывает его с использованием настоящего сертификата и передает эти данные к httphk для шифрования поддельным сертификатом перед передачей браузеру.
Таким образом, используя «man-in-the-middle» прокси, Win32/Spy.Hesperbot может получить доступ к исходящему HTTPS-трафику жертвы до того как он будет зашифрован настоящим сертификатом. Аналогичный подход использую Zeus и SpyEye, но их реализация MitB отличается от используемой в Hesperbot.
Вредоносный код отдает браузеру свой сертификат для имитации HTTPS-соединения. Модуль nethk имеет на борту собственный self-signed SSL сертификат.
Рис. SSL сертификат внутри nethk.
Рис. Пример использования поддельного сертификата Hesperbot. На обычной системе можно увидеть реальный сертификат Google вместо поддельного.
Для того чтобы обмануть компонент проверки действительности сертификата браузера, вредоносный код перехватывает соответствующие функции проверки сертификата. Релизация подобных перехватов зависит от браузера жертвы. Ниже в таблице представлены браузеры, поддерживаемые Win32/Spy.Hesperbot, и перехватываемые функции.
Авторы вредоносного кода использовали хэши названий процессов, вместо сравнения на основе строк для усложнения анализа.
Скриншот ниже показывает код перехвата CertVerifyCertificateChainPolicy.
Модуль httphk отвечает за анализ данных протокола HTTP. Когда происходит вызов callback-функции этого модуля, он выполняет разбор заголовков HTTP, данных и заполняет свои внутренние структуры данных. В дальнейшем, эта структура будет доступна через модуль httpi. httphk предоставляет две callback-функции для вызова httpi: httpi_request_callback и httpi_response_callback.
Модуль httpi выполняет модификацию данных HTTP протокола в соответствии с настройками файла конфигурации. Когда он вызывает httpi_request_callback, выполняются следующие действия.
- Захват видео и скриншотов рабочего стола. Вредоносный код читает данные конфигурационного файла и проверяет запрашиваемый URL. В случае совпадение происходит захват видео или создаются скриншоты.
- Извлечение данных форм (form grabbing). Вредоносный код проверяет параметр content-type в заголовке POST-запроса HTTPS протокола на совпадение с «application/x-www-form-urlencoded» или «text/plain». В случае совпадения он полагается, что происходит передача данных для login-формы. Если в файле конфигурации задан этот URL, то данные записываются в лог-файл.
При вызове httpi_response_callback троянская программа проверяет HTTP код ответа на значение 200 (OK). После этого осуществляется чтение конфигурационного файла и если для сайта заданы веб-инжекты, они вставляются в веб-страницу.
На рисунке ниже представлен расшифрованный файл конфигурации, который использовался в португальском ботнете. Можно заметить, что первая группа доменов будет игнорироваться модулем httpi. Это говорит о том, что данные аккаунтов Facebook и Google считаются для злоумышленников не такими ценными как данные аккаунтов систем онлайн-банкинга, которые следуют ниже.
Похоже, что люди, писавшие код скриптов web-inject говорят на русском, о чем свидетельствуют сопровождающие комментарии. Однако следует отметить, что сценарии могли быть написаны и совсем другими людьми, отличными от авторов Win32/Spy.Hesperbot. Скрипты web-inject достаточно похожи у разных семейств вредоносных программ и их использование является довольно обычным делом у киберпреступников.
Мобильный компонент
Hesperbot не является первым подобным вредоносным ПО, которое использует мобильные компоненты (ZitMo или SpitMo) для обхода системы подтверждения аутентификации на основе SMS-сообщений (Mobile Transaction Authentication Number). Подобная система подтверждения банковской транзакции широко используется во многих странах Европы и в России.
Hesperbot осуществляет внедрение специальных JS-скриптов в веб-страницы, через которые пользователю предлагается установить приложение для мобильного телефона. Скомпрометированному пользователю предлагается специальный список моделей телефонов и после ввода номера телефона, пользователю передается ссылка на скачивание вредоносного мобильного приложения. Приложение существует в вариантах для Symbian, Android и Blackberry.
Нам удалось проанализировать вредоносные компоненты для платформ Symbian и Android. Они обладают схожими возможностями. Во-первых, это «процедура активации» (activation procedure). Специальный веб-инжект на зараженном компьютере генерирует случайный «номер активации», который отображается пользователю. Пользователю нужно будет продублировать этот номер на своем устройстве, когда такое действие будет предложено мобильным приложением. Далее мобильное приложение отображает «код ответа», который рассчитывается через код активации. Этот код пользователь должен ввести обратно в веб-страницу для подтверждения. Вредоносный скрипт снабжен тем же алгоритмом для расчета кода, что и мобильный. Таким образом, через имитацию доверенного приложения на мобильном устройстве пользователя и используя поддельную веб-страницу на его компьютере, злоумышленники могут обойти систему подтверждения кодов для проведения операций, связанных с онлайн-банкингом.
Рис. Скриншот вредоносного компонента для Android [Android/Spy.Hesperbot.A].
Это вредоносное мобильное приложение регистрирует специальный сервис, который ожидает входящих SMS-сообщений и передает их на номер злоумышленника. Таким образом, злоумышленник получит настоящий код для проведения транзакции или иной банковской операции.
Антивирусные приложения ESET обнаруживают мобильный вредоносный код как Android/Spy.Hesperbot.A и SymbOS9/Spy.Hesperbot.A.
Автор: esetnod32