Описание вредоносного ПО

Технический анализ QakBot

Общее описание

QakBot, также известный как QBot, QuackBot и Pinkslipbot, — это банковский троянец, существующий уже более тринадцати лет. Он был обнаружен в 2007 году и с тех пор постоянно совершенствуется.

В последние годы QakBot стал одним из самых активных банковских троянцев в мире. Его основная цель — кража учетных данных (логинов, паролей и т. д.) для входа в финансовые сервисы. Однако это не единственная его функция. QakBot может шпионить за банковской деятельностью организации, распространяться по сети и устанавливать программы-шифровальщики для получения максимальной прибыли от атаки на организации.

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

Еще одна интересная функция — перехват электронных писем. Злоумышленники впоследствии используют их для целевых рассылок: содержащаяся в них информация может помочь убедить жертву открыть вредоносное письмо.

Цепочка заражения QakBot

QakBot известен тем, что заражает системы жертв в основном через спам. В некоторых случаях письма содержат вложенные документы Microsoft Office (Word, Excel) или защищенные паролем архивы с такими файлами. В документах, в свою очередь, присутствуют вредоносные макросы. Пользователям предлагается открыть вложение, потому что оно якобы содержит важную информацию (например, счет-фактуру). В других письмах злоумышленники рассылают ссылки на страницы загрузки вредоносных документов.

Помимо спам-рассылок злоумышленники используют еще один вектор заражения, который предусматривает загрузку полезной нагрузки QakBot на компьютер жертвы с помощью другого вредоносного ПО, уже присутствующего на нем.

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

Цепочка заражения QakBot

Цепочка заражения QakBot

Цепочка заражения для последних вариантов QakBot (2020–2021 гг.) выглядит следующим образом:

  • Пользователь получает фишинговое письмо с вложенным ZIP-архивом, содержащим документ Office со встроенным макросом или незаархивированным документом; также в письме может быть ссылка для загрузки исполняемого файла QakBot.
  • Пользователь открывает вредоносное вложение или ссылку и соглашается включить содержимое документа.
  • Выполняется вредоносный макрос. Некоторые варианты зловреда отправляют GET-запрос на загрузку файла PNG. Однако на самом деле это бинарный исполняемый файл.
  • Загруженная полезная нагрузка (промежуточный компонент) включает в себя другой бинарный файл, содержащий зашифрованные модули ресурсов. Один из зашифрованных ресурсов содержит двоичный файл DLL (загрузчик), который расшифровывается позже при выполнении вредоносного файла.
  • Промежуточный компонент загружает в память загрузчик, который дешифрует и выполняет полезную нагрузку. Параметры конфигурации извлекаются из другого ресурса.
  • Полезная нагрузка взаимодействует с командным сервером.
  • На зараженный компьютер могут загружаться дополнительные вредоносные программы, например программа-шифровальщик ProLock.

Стандартные функции QakBot

По нашим наблюдениям, QakBot выполняет следующие вредоносные действия:

  • Сбор информации о скомпрометированном хосте.
  • Создание планируемых заданий (эскалация привилегий и закрепление в системе).
  • Сбор учетных данных:
    • Cоздание дампа учетных данных (Mimikatz, доступ к exe)*.
    • Кража паролей (данные браузера и cookie-файлы).
    • Манипуляции с веб-страницами банков (веб-инжект)*.
  • Подбор паролей.
  • Манипуляции с реестром (закрепление в системе).
  • Копирование себя.
  • Внедрение кода в процессы, чтобы скрыть вредоносную активность.

Взаимодействие с командным сервером

QakBot содержит список из 150 IP-адресов, которые встроены в один из ресурсов бинарного файла загрузчика. Большая часть этих адресов принадлежит другим зараженным системам, которые используются как прокси-серверы для перенаправления трафика на другие прокси или на реальный командный сервер.

Зловред отправляет на командный сервер запрос HTTPS POST с данными, закодированными по методу Base64. Данные шифруются по алгоритму RC4. Для шифрования используется статическая строка jHxastDcds)oMc=jvh7wdUhxcsdt2 и случайная 16-байтная последовательность. Сами данные имеют формат JSON.

Исходное сообщение в формате JSON

Исходное сообщение в формате JSON

Запрос HTTPS POST с зашифрованными данными в формате JSON

Запрос HTTPS POST с зашифрованными данными в формате JSON

В общем случае после заражения бот отправляет сообщения PING, SYSTEM INFO и ASK for COMMAND. Командный сервер отвечает сообщениями ACK и COMMAND. Если командный сервер передает дополнительные модули, бот отправляет сообщение STOLEN INFO с данными, украденными этими модулями.

  • Сообщение PING— запрос от бота к командному серверу с данными BOT ID для проверки активности командного сервера.

Сообщение PING

Сообщение PING

  • Сообщение ACK— ответ командного сервера с единственным значимым полем «16», содержащим внешний IP-адрес зараженной системы.

Сообщение ACK

Сообщение ACK

  • Сообщение SYSTEM INFO— запрос от бота к командному серверу с собранной информацией о зараженной системе. Помимо общей информации о системе (версия и разрядность ОС, имя пользователя, имя компьютера, домен, разрешение экрана, системное время, время работы системы, время работы бота), здесь также содержатся результаты выполнения следующих команд и запросов WMI:
    • whoami /all
    • arp -a
    • ipconfig /all
    • net view /all
    • cmd /c set
    • nslookup -querytype=ALL -timeout=10 _ldap._tcp.dc._msdcs.{DOMAIN}
    • nltest /domain_trusts /all_trusts
    • net share
    • route print
    • netstat -nao
    • net localgroup
    • qwinsta
    • WMI Query ROOTCIMV2:Win32_BIOS
    • WMI Query ROOTCIMV2:Win32_DiskDrive
    • WMI Query ROOTCIMV2:Win32_PhysicalMemory
    • WMI Query ROOTCIMV2:Win32_Product
    • WMI Query ROOTCIMV2:Win32_PnPEntity

Сообщение SYSTEM INFO

Сообщение SYSTEM INFO

  • Сообщение ASK for COMMAND— запрос команды от бота к командному серверу. После отправки сообщения SYSTEM INFO бот начинает запрашивать у сервера команду для выполнения. Поле «14» — один из основных параметров запроса (SALT). Его значение уникально и изменяется в каждом запросе. Оно используется для защиты от перехвата управления ботом. После получения этого запроса командный сервер использует значение SALT в процедуре подписывания. Он добавляет подпись в ответ, чтобы бот мог удостовериться, что данные подписаны. Выполняться будут только действительные и подписанные команды.

Сообщение ASK for COMMAND

Сообщение ASK for COMMAND

  • Сообщение COMMAND— ответ сервера с командой для выполнения. Текущая версия бота поддерживает 24 команды, большинство из которых связаны с загрузкой, выполнением, внедрением дополнительных модулей и конфигурационных файлов модулей с различными параметрами, а также настройкой и обновлением параметров конфигурации.
    Сообщение этого типа содержит подписанное значение SALT (полученное из поля «14» в запросе бота), а также идентификаторы COMMAND ID и MODULE ID. Остальные значения в сообщении не подписываются.В предыдущих версиях бот получал модули и команды сразу после заражения и отправки сообщения SYSTEM INFO. Сейчас командный сервер примерно в течение часа отвечает пустой командой и только по истечении этого времени отправляет в ответ необходимые команды и модули. Мы полагаем, что эта временная задержка нужна для того, чтобы затруднить получение и анализ новых команд и модулей в изолированной контролируемой среде.

Сообщение COMMAND — ответ сервера с пустой командой

Сообщение COMMAND — ответ сервера с пустой командой

Если командный сервер доставляет какие-либо модули, их бинарное содержимое в кодировке Base64 помещается в поле «20» сообщения.

Сообщение COMMAND — ответ сервера с дополнительным модулем

Сообщение COMMAND — ответ сервера с дополнительным модулем

  • Сообщение STOLEN INFO— сообщение от бота к командному серверу, содержащее украденную информацию (пароли, учетные записи, электронную почту и т. д.). Эти данные шифруются по алгоритму RC4 и кодируются по алгоритму Base64. Ключ для RC4-шифрования генерируется другим способом — с использованием идентификатора зараженной системы (Bot ID), а не статической строки, как при шифровании трафика.

Сообщение STOLEN INFO

Сообщение STOLEN INFO

После взаимодействия с командным сервером QakBot скачивает и использует дополнительные модули для выполнения вредоносных действий.

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

Злоумышленники могут создавать их самостоятельно или брать из сторонних репозиториев и адаптировать для своих целей. В разных образцах могут использоваться разные модули. Например, более старые образцы использовали утилиту Mimikatz для выгрузки дампа учетных данных.

Ниже перечислены модули, которые мы нашли во время анализа.

Дополнительные модули

  • Сборщик cookie-файлов собирает cookie из популярных браузеров (Edge, Firefox, Chrome, Internet Explorer).

  • Скрытый VNC-доступ (hVNC) позволяет злоумышленникам подключаться к зараженному компьютеру и взаимодействовать с ним незаметно для пользователя.

  • Сборщик электронных писем пытается найти Microsoft Outlook на зараженном компьютере, затем последовательно просматривает программные папки одну за другой и рекурсивно собирает письма. В конце модуль отправляет собранную информацию на удаленный сервер.

Какое-то время злоумышленники распространяли отладочную версию модуля сборщика электронных писем

Какое-то время злоумышленники распространяли отладочную версию модуля сборщика электронных писем

  • Модуль перехвата перехватывает жестко заданный набор функций WinAPI и DLL-библиотек браузера Mozilla (если он имеется в системе). Это необходимо для выполнения веб-инжектов, мониторинга трафика и данных, вводимых с клавиатуры, и даже предотвращения DNS-резолвинга определенных доменов. Перехват выполняется следующим образом: QakBot внедряет в нужный процесс модуль перехвата, который находит функции из заданного в коде зловреда набора и изменяет их, чтобы они выполняли код злоумышленников.

Модуль содержит зашифрованный список DLL-библиотек и функций, которые бот будет перехватывать

Модуль содержит зашифрованный список DLL-библиотек и функций, которые бот будет перехватывать

  • Сборщик паролей собирает имена пользователей и пароли из разных источников: файлов Firefox и Chrome, хранилища Microsoft Vault и т. п. Вместо Mimikatz, как в предыдущих версиях, модуль использует собственные алгоритмы для сбора паролей.

Процедура сбора паролей из разных источников

Процедура сбора паролей из разных источников

  • Прокси-модуль старается определить доступные для прослушивания порты, используя переадресацию портов через UPnP и запросы к командному серверу второго уровня. При сравнении текущей и старой версий загрузчика прокси обнаружились интересные моменты: злоумышленники решили убрать из бинарного файла зависимость от библиотеки cURL и осуществлять все коммуникации по протоколу HTTP с помощью собственного кода. Помимо этого, они также убрали зависимости от библиотеки OpenSSL и свели все функции вместе: отдельные модули загрузчика прокси и собственно прокси стали единым исполняемым файлом.

Формирование запроса на переадресацию портов через UPnP

Формирование запроса на переадресацию портов через UPnP

После попытки определить, открыты ли порты и может ли компьютер выступать в роли прокси для командного сервера второго уровня, модуль прокси также запускает многопоточный прокси-сервер SOCKS5. Протокол SOCKS5 инкапсулируется в прокси-протокол QakBot, который выглядит следующим образом: команда прокси QakBot (1 байт), версия (1 байт), идентификатор сеанса (4 байта), общая длина пакета (значение типа DWORD), данные (общая длина пакета минус 10). Входящие и исходящие пакеты хранятся в буферах; в одном сегменте данных TCP может приниматься или передаваться один или несколько таких пакетов (потоковая передача данных).

Стандартный поток выполнения прокси-модуля выглядит следующим образом:

  1. Установка связи с командным сервером, попытка выполнить переадресацию портов через UPnP, определение доступных портов и передача информации о них командному серверу. Как правило, для связи с командным сервером используются запросы HTTP POST с данными в формате JSON, зашифрованными по алгоритму RC4.
  2. Загрузка библиотеки OpenSSL. При этом загруженный файл не сохраняется — QakBot лишь измеряет скорость загрузки и удаляет полученный файл.
  3. Настройка соединения с внешним командным прокси по полученной от промежуточного компонента команде 37 (обновление конфигурации) для модуля 274 (прокси).

Взаимодействие с внешним командным прокси:

  1. Отправка начального запроса прокси-модуля. Начальный запрос содержит идентификатор бота, внешний IP-адрес зараженного компьютера, данные обратного просмотра DNS для этого внешнего IP-адреса, измеренную ранее скорость интернет-соединения и время с момента запуска прокси-модуля (в секундах).
  2. Установление соединения с командным прокси (с помощью последовательности прокси-команд 1->10->11).
  3. Инициализация сеансов, аутентификация SOCKS5 с использованием логина и пароля, полученных от командного прокси по команде 10.
  4. Инициация соединения типа SOCKS5, инкапсулированного в протокол прокси-модуля Qak

Прокси-команды QakBot:

Команда Описание
1 Приветствие (бот -> командный сервер)
10 Настройка учетных данных для авторизации (командный сервер -> бот)
11 Подтверждение настройки учетных данных (бот -> командный сервер)
2 Создание нового прокси-сеанса (командный сервер -> бот)
3 Аутентификация SOCKS5 (бот -> командный сервер)
4 Обработка запросов SOCKS5 (выполняется в обе стороны)
5 Завершение сеанса (выполняется в обе стороны)
6 Обновление состояния сеанса / уведомление об обновлении состояния сеанса (выполняется в обе стороны)
7 Обновление состояния сеанса / уведомление об обновлении состояния сеанса (выполняется в обе стороны)
8 PING (командный сервер -> бот)
9 PONG (бот -> командный сервер)
19 Сохранение текущего времени в реестре (командный сервер -> бот)

Результат парсинга пакетов, полученных от командного сервера

Результат парсинга пакетов, полученных от командного сервера

Отслеживание одиночного прокси

Отслеживание одиночного прокси

  • Веб-инжект— файл конфигурации для модуля перехвата.

После установления связи с командным сервером загружаются дополнительные модули, один из которых — веб-инжект. Он отслеживает трафик жертвы, внедряясь в процесс браузера и перехватывая сетевые API. Модуль перехвата получает доступ к потоку выполнения перехваченных API, и, когда жертва открывает определенные веб-страницы, связанные с банкингом и финансами, в исходный код таких страниц внедряется дополнительный код на JavaScript.

Фрагмент кода на JavaScript, внедренного в исходный код страницы входа на сайт Wells Fargo

Фрагмент кода на JavaScript, внедренного в исходный код страницы входа на сайт Wells Fargo

Статистика QakBot

Мы проанализировали статистику атак QakBot, сформированную с помощью Kaspersky Security Network (KSN), — это решение, которое собирает и обрабатывает обезличенные данные, добровольно предоставленные пользователями продуктов «Лаборатории Касперского». За первые семь месяцев 2021 года наши продукты выявили 181 869 попыток скачать или запустить QakBot. Это меньше, чем в период с января по июль 2020 года, однако количество пострадавших пользователей выросло на 65% по сравнению с прошлым годом и достигло 17 316 человек.

Количество пользователей, пострадавших от атак QakBot в период с января по июль 2020 и 2021 гг. (скачать)

Самые масштабные кампании мы наблюдали в первом квартале 2021 года, когда с QakBot столкнулись 12 704 пользователя продуктов «Лаборатории Касперского»: 8068 пользователей были атакованы в январе и 4007 в феврале.

Выводы

QakBot — известный банковский троянец, в разных версиях которого (старых и новых) могут использоваться разные методы атак. Его разработка ведется уже более тринадцати лет, он до сих пор активно используется, и, судя по всему, его активность не прекратится в ближайшее время. Зловред постоянно обновляется: злоумышленники продолжают добавлять в него новые возможности и обновлять модули, чтобы получать максимальную прибыль.

Известно, что преступники могут менять свои способы работы в зависимости от установленных на устройстве жертвы защитных решений и использовать сложные приемы, чтобы оставаться незамеченными. Несмотря на то, что QakBot применяет различные техники, чтобы избежать обнаружения (например, составляет список запущенных процессов и ищет среди них защитные решения), наши продукты могут обнаружить эту угрозу с помощью поведенческого анализа. Основные вердикты, с которыми детектируется это вредоносное ПО:

Backdoor.Win32.QBot
Backdoor.Win64.QBot
Trojan.JS.QBot
Trojan.MSOffice.QBot
Trojan.MSOffice.QbotLoader
Trojan.Win32.QBot
Trojan-Banker.Win32.QBot
Trojan-Banker.Win32.QakBot
Trojan-Banker.Win64.QBot
Trojan-Downloader.JS.QBot
Trojan-PSW.Win32.QBot
Trojan-Proxy.Win32.QBot

Индикаторы компрометации (адреса командных серверов)

75.67.192[.]125:443 24.179.77[.]236:443 70.163.161[.]79:443
72.240.200[.]181:2222 184.185.103[.]157:443 78.63.226[.]32:443
83.196.56[.]65:2222 95.77.223[.]148:443 76.168.147[.]166:993
105.198.236[.]99:443 73.151.236[.]31:443 64.121.114[.]87:443
213.122.113[.]120:443 97.69.160[.]4:2222 77.27.207[.]217:995
105.198.236[.]101:443 75.188.35[.]168:443 31.4.242[.]233:995
144.139.47[.]206:443 173.21.10[.]71:2222 125.62.192[.]220:443
83.110.109[.]155:2222 76.25.142[.]196:443 195.12.154[.]8:443
186.144.33[.]73:443 67.165.206[.]193:993 96.21.251[.]127:2222
149.28.98[.]196:2222 222.153.122[.]173:995 71.199.192[.]62:443
45.77.117[.]108:2222 45.46.53[.]140:2222 70.168.130[.]172:995
45.32.211[.]207:995 71.74.12[.]34:443 82.12.157[.]95:995
149.28.98[.]196:995 50.29.166[.]232:995 209.210.187[.]52:995
149.28.99[.]97:443 109.12.111[.]14:443 209.210.187[.]52:443
207.246.77[.]75:8443 68.186.192[.]69:443 67.6.12[.]4:443
149.28.99[.]97:2222 188.27.179[.]172:443 189.222.59[.]177:443
149.28.101[.]90:443 98.192.185[.]86:443 174.104.22[.]30:443
149.28.99[.]97:995 189.210.115[.]207:443 142.117.191[.]18:2222
149.28.101[.]90:8443 68.204.7[.]158:443 189.146.183[.]105:443
92.59.35[.]196:2222 75.137.47[.]174:443 213.60.147[.]140:443
45.63.107[.]192:995 24.229.150[.]54:995 196.221.207[.]137:995
45.63.107[.]192:443 86.220.60[.]247:2222 108.46.145[.]30:443
45.32.211[.]207:8443 193.248.221[.]184:2222 187.250.238[.]164:995
197.45.110[.]165:995 151.205.102[.]42:443 2.7.116[.]188:2222
45.32.211[.]207:2222 71.41.184[.]10:3389 195.43.173[.]70:443
96.253.46[.]210:443 24.55.112[.]61:443 106.250.150[.]98:443
172.78.59[.]180:443 24.139.72[.]117:443 45.67.231[.]247:443
90.65.234[.]26:2222 72.252.201[.]69:443 83.110.103[.]152:443
47.22.148[.]6:443 175.143.92[.]16:443 83.110.9[.]71:2222
149.28.101[.]90:995 100.2.20[.]137:443 78.97.207[.]104:443
207.246.77[.]75:2222 46.149.81[.]250:443 59.90.246[.]200:443
144.202.38[.]185:995 207.246.116[.]237:8443 80.227.5[.]69:443
45.77.115[.]208:995 207.246.116[.]237:995 125.63.101[.]62:443
149.28.101[.]90:2222 207.246.116[.]237:443 86.236.77[.]68:2222
45.32.211[.]207:443 207.246.116[.]237:2222 109.106.69[.]138:2222
149.28.98[.]196:443 45.63.107[.]192:2222 84.72.35[.]226:443
45.77.117[.]108:443 71.163.222[.]223:443 217.133.54[.]140:32100
144.202.38[.]185:2222 98.252.118[.]134:443 197.161.154[.]132:443
45.77.115[.]208:8443 96.37.113[.]36:993 89.137.211[.]239:995
45.77.115[.]208:443 27.223.92[.]142:995 74.222.204[.]82:995
207.246.77[.]75:995 24.152.219[.]253:995 122.148.156[.]131:995
45.77.117[.]108:8443 24.95.61[.]62:443 156.223.110[.]23:443
45.77.117[.]108:995 96.61.23[.]88:995 144.139.166[.]18:443
45.77.115[.]208:2222 92.96.3[.]180:2078 202.185.166[.]181:443
144.202.38[.]185:443 71.187.170[.]235:443 76.94.200[.]148:995
207.246.77[.]75:443 50.244.112[.]106:443 71.63.120[.]101:443
140.82.49[.]12:443 24.122.166[.]173:443 196.151.252[.]84:443
81.214.126[.]173:2222 73.25.124[.]140:2222 202.188.138[.]162:443
216.201.162[.]158:443 47.196.213[.]73:443 74.68.144[.]202:443
136.232.34[.]70:443 186.154.175[.]13:443 69.58.147[.]82:2078

* данная операция может быть выполнена как внешняя команда (вызов внешнего модуля).

Технический анализ QakBot

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

 

Отчеты

CloudSorcerer: новая APT-угроза, нацеленная на российские государственные организации

«Лаборатория Касперского» обнаружила новую APT-угрозу CloudSorcerer, нацеленную на российские государственные организации и использующую облачные службы в качестве командных серверов аналогично APT CloudWizard.

StripedFly: двуликий и незаметный

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

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике