0
Рейтинг
Panda Security в России и СНГ
Облачные решения безопасности, антивирусы
16 октября 2017

Анализ последней версии вредоносной программы Dridex для кражи регистрационных данных

Блог компании Panda Security в России и СНГАнтивирусная защита
Перевод
Автор оригинала: Panda Security


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

1. ВВЕДЕНИЕ

Dridex — это банковский троян, известный своей сложностью и способностью оставаться незамеченным на устройствах, которые он заражает. Эти устройства, будучи зараженными, встраиваются в модульную бот-сеть, в которой вредоносные характеристики (внешние или свои собственные) могут быть свободно добавлены к ним через модули или библиотеки.

Первая версия появилась в конце 2014 года. В начале 2015 года было выпущено новое крупное обновление, давшее жизнь второй версии. При просмотре более ранних версий Dridex, самой стабильной и устойчивой из них стала третья версия, которая появилась в апреле 2015 года и использовалась в хорошо известных кибератаках вплоть до четвертой версии – последней известной версии, появившейся в феврале 2017 года.

Никаких других крупных обновлений для Dridex со времен демонтажа основных компонентов бот-сети, выполненного спецслужбами в 2015 году, обнаружено не было.[1]

Этот новый вариант банковского трояна содержит новые функциональные возможности. Одна из них называется AtomBombing – это функционал, предназначенный для встраивания кода без вызова подозрительных API во избежание обнаружения со стороны систем мониторинга. Она содержит технику взлома DLL для повышения своей «живучести». Наконец, были оптимизированы различные криптографические методы, используемые для получения конфигурации. [2]

2. ХАРАКТЕРИСТИКИ ТРОЯНА

Ниже приведены некоторые статические свойства анализируемого файла. Хэш трояна:



Внутренняя дата создания анализируемого образца – 16 мая 2017 года. Рассматриваемый файл был скомпилирован для исполнения в 64-битных окружениях с целью имитации легальной dll от Microsoft.


Рис 1. Свойства файла

В дополнение к этому файл зашифрован с помощью уникального алгоритма, что позволяет ему оставаться незамеченным со стороны антивирусов.

Было установлено, что исполняемый файл имеет довольно большое количество разделов (всего – 11), что мы можем увидеть на рисунке 2:


Рис 2. Статичная информация анализируемого бинарного файла

В разделе DATA мы можем увидеть, что энтропия находится на уровне 7,799, и она является достаточно большой. Она находится именно в том разделе, в котором можно найти сложно зашифрованный и упакованный бинарный файл (он после дешифрации становится реальным вредоносным кодом). В первом расшифрованном слое исполняемый файл хранит память в процессе, затем копирует код и в конечном итоге вызывает и запускает его, как мы можем видеть на рисунке 3:


Рис. 3. Переход к шелкоду

Первое, что делает код, — получает адреса функций, которые он будет использовать. Он делает это с помощью динамического поиска через библиотеки, загруженные программой. Для выполнения этой задачи он выполняется через структуру PEB_LDR_DATA и структуры LDR-MODULE, чтобы найти основной адрес загружаемых dll. Он обращается к начальному адресу таблицы экспорта для того, чтобы выполнить все функции, экспортируемые dll, и найти адрес искомой функции в памяти компьютера.


Рис. 4. Перечисление загруженных модулей

Шелкод, в свою очередь, проверяет, есть ли «хук» в недокументированной функции LdrLoadDll, обращаясь к ее адресу и проверяя, является ли первый бит таким же как E9 (эквивалент jmp ассемблера).


Рис. 5. Верификация хука

Если предыдущая верификация прошла успешно, он переходит к распаковке процесса памяти dll с названием “snxhk.dll”, которая является библиотекой Avast и AVG, создающей «хуки» для мониторинга процессов, происходящих в песочнице.


Рис. 6. Библиотека: snxhk.dll

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


Рис. 7. Расшифрованный исполняемый файл

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


Рис. 8. Полный процесс распаковки

3. ПРОЦЕСС ЗАРАЖЕНИЯ

3.1. Векторы заражения
Пока непонятно до конца, по каким направлениям осуществляется заражение устройства. Это может быть с помощью эксплойта или в рамках спамовой кампании.

3.2. Взаимодействие с зараженной системой
После запуска троян проверяет, является ли он единственным экземпляром вредоносной программы, запущенной на устройстве, а также проверяет, был ли он уже внедрен в процесс explorer.exe.

Все это выполняется путем создания и открытия мьютекса. Для того чтобы добиться этого, он сперва выстраивает вместе название устройства и имя пользователя, а затем вычисляет их MD5-хэш.


Рис. 9. Вычисление хэша

Затем, он добавляет квадратные скобки в начале и конце и разделяет их черточками, подобно COM-объекту.


Рис 10. Мьютекс, созданный в системе

Используя данный алгоритм, можно разработать вакцину, которая создает эти мьютексы в системах, чтобы избежать заражения трояном Dridex. Вредоносная программа, которая не запущена, создает папку в %WINDOWS%\system32\[0-9]{4]


Рис. 11. Созданная папка

Вредоносная программа копирует легальный .exe в папку вместе с соответствующими .dll или .cpl. Этот .dll или .cpl не является легитимным — это и есть троян. После запуска .exe из папки, загружается вредоносный .dll или .cpl с помощью техники, известной как hijacking.

Он также программирует задачу со случайным названием (в нашем примере на рисунке 12 — это “Domitxtdoi”), которая будет запускаться каждые 60 минут.


Рис. 12.Создание задачи

В данном примере мы видим, что запускается tcmsetup.exe, после чего загружается вредоносная dll (TAPI32.dll) и начинается процесс заражения.

После программирования задачи запускается набор команд и создается правило в файерволе для explorer.exe:
netsh advfirewall firewall add rule name=«Core Networking — Multicast Listener Done (ICMPv4-In)» program=«C:\Windows\Explorer.EXE» dir=in action=allow protocol=TCP localport=any

Создание вредоносной задачи

schtasks.exe /Create /F /TN «Utdcm» /SC minute /MO 60 /TR «C:\Windows\system32\3007\tcmsetup.exe» /RL highest

Во время этого процесса вредоносная .dll будет встроена в процесс explorer.exe, используя технику AtomBombing. Затем она будет ожидать момента, когда пользователь откроет браузер (Internet Explorer, Firefox, Chrome и т.д.).

В момент, когда пользователь откроет браузер, новый шелкод будет внедрен из explorer.exe в браузер, используя ту же самую технику AtomBombing.

4. ПРИСУТСТВИЕ В СИСТЕМЕ

Для обеспечения своего присутствия в системе, выполняется ряд следующих действий. Он создает папку с четырьмя случайными цифрами в C:\Windows\System32, внутрь которой он копирует легитимный исполняемый файл Windows (не всегда один и тот же) и .dll, которая должна загружаться данным исполняемым файлом. Как раз эта .dll и будет модифицирована вредоносным кодом.


Рис. 13. Присутствие в системе

Данная техника известна как DLL-hijacking. Она использует команду, которая позволяет системе искать библиотеки/файлы, которые она собирается загрузить/использовать. В случае с рисунком выше, исполняемый файл «SystemPropertiesPerformance.exe» загрузит «SYSDM.CPL» среди других библиотек. По умолчанию, поиск файла «SYSDM.CPL» сперва будет осуществляться в той папке, где было запущено приложение. В нашем примере — это C:\Windows\ System32\1365. Если данный файл там не будет найден, то его поиск будет осуществляться в других папках в зависимости от того, как в системе настроен порядок поиска .dll файлов.

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

Чтобы выполнить файл, он создает запланированную задачу, чтобы запускать его в папке со случайными цифрами (C:\Windows\System32\1365) каждый час, как показано в предыдущей главе.


Рис. 14. Создание запрограммированной задачи

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

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

  1. Он перечислит все исполняемые файлы в «C:\Windows\System32\»
  2. Он схэширует название каждого исполняемого файла и сравнит его со значением, которое было сохранено ранее. Если они совпадают, то он продолжит работу с этим исполняемым файлом.
  3. Он прочитает IAT выбранного исполняемого файла и оттуда выберет .dll для последующей модификации.
  4. Он прочитает IAT .dll, выбранной в п.3.
  5. Он создаст копию вредоносного кода (саму .dll) и добавит в конце раздел со случайным названием, чтобы скопировать IAT, полученный в п.4.
  6. Он скопирует выбранный исполняемый файл (п. 3) и модифицированную вредоносную .dll (п. 5) в случайную папку.

В этом случае он получает присутствие в системе и каждый раз при выполнении исполняемого файла он будет загружать вредоносную .dll.

Вредоносная программа также создаст копию самой себя в исполняемом формате вместе с ключом реестра в AppData\Roaming\[random folder name] с маршрутом в «HKCU\Software\Microsoft\Windows\CurrentVersion\Run».


Рис. 15. Ключ реестра

5. ВНЕДРЕНИЕ ЧЕРЕЗ ATOMBOMBING

Dridex использует технику AtomBombing для записи шелкода в другие процессы, при этом не вызывая каких-либо подозрений. Это достигается через вызовы APC и одного из наиболее часто используемых объектов Windows Executive Objects под названием Atoms. Ниже представлены различные этапы внедрения в другой процесс.

5.1. Поиск целевого процесса

В данном случае целевым процессом является процесс explorer.exe, и чтобы внедриться в него, он должен быть сперва доступен при перечислении участвующих процессов, используя следующие функции:


Рис. 16. Перечисление процессов

Как только он найдет процесс explorer.exe, он вызовет функцию OpenProcess для начала перечисления alertable-потоков.

5.2. Поиск alertable-потоков


Рис. 17. Alertable-потоки

На этом этапе вредоносная программа будет пытаться найти какой-нибудь поток в состоянии alertable, т.к. это позволит ей осуществить вызовы APC, чтобы выполнить код в целевом процессе.

Чтобы найти alertable-поток, троян сперва получает дескриптор для каждого потока в explorer.exe. Затем он запускает вызов в NtQueueApcThread как NtSetEvent, и ждет любой из потоков для ответа.

Если все работает корректно, то он получает первый поток, который ответил на вызов, после чего начинает внедрение кода.

5.3. Внедрение шелкода в целевой процесс

Во-первых, вредоносная .dll делает вызов в GlobalAddAtomW и создает новый Atom с тем содержимым, которое она хочет внедрить в целевой процесс (в данном случае — в explorer.exe).

Во-вторых, вредоносная .dll вызывает NtQueueApcThread, а затем отправляет в качестве параметра функцию, которая должна быть запущена процессом explorer.exe.

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


Рис. 18. Очистка памяти

Важно указать, что зона, которую Dridex выбрал для копирования шелкода, находится в ntdll, как мы можем увидеть в R8. Это вызвано тем, что ntdll всегда загружается в один и тот же начальный номер во всех процессах вне зависимости от ASLR.

В следующих итерациях функция, переданная в качестве параметра NtQueueApcThread, станет GlobalAtomGetAtomNameW, в результате чего целевой процесс получит Atom, который только что был создан вредоносной .dll, и запишет его в указанную зону таким образом, что запись его содержимого во внутрь explorer.exe не будет вызывать каких-либо подозрений.

Во-первых, он создаст IAT для шелкода.


Рис. 19. Создание IAT в explorer.exe

А после некоторых итераций он полностью скопирует шелкод в explorer.exe.


Рис. 20. Шелкод в explorer.exe

5.4. Выполнение шелкода в целевом процессе

После того как шелкод скопирован в explorer.exe, он должен быть выполнен. Для этого Dridex модифицирует функцию GlobalAtomGetAtomNameA точно так же, как был внедрен шелкод, используя Atoms. Исходный код функции:


Рис. 21. Исходная функция

Вот как была модифицирована функция:


Рис. 22. Модифицированная функция

Как Вы можете видеть, когда вы вызываете GlobalAtomGetAtomNameA в explorer.exe, программа будет выполнять шелкод. После модификации из вредоносной .dll будет осуществлен вызов в GlobalAtomGetAtomNameA, используя NtQueueApcThread.


Рис. 23. Удаленное выполнение шелкода

В этот момент начнет выполняться шелкод. После этого GlobalAtomGetAtomNameA вернется в свое первоначальное состояние, чтобы не вызывать никаких подозрений.

6. СЕТЕВЫЕ СОЕДИНЕНИЯ

После того как троян был внедрен в процесс explorer.exe, он открывает порт 443 (обычно используемый для протокола HTTPS) и ожидает определенное подключение.


Рис. 24. Открытый порт 443

7. ИНДИКАТОРЫ КОМПРОМЕТАЦИИ

Чтобы проверить, был ли компьютер скомпрометирован данной версией Dridex, следует учитывать следующие моменты:

  • Процесс explorer.exe прослушивает порт 443, а у файервола есть правило, которое разрешает сетевой трафик для этог процесса.
  • Присутствуют папки, соответствующие выражению %SYSTEM%\[0-9] {4}, которые содержат легитимный исполняемый файл и файл с расширением .dll или .cpl.
  • Имеются запланированные задачи, которые выполняют файл из папки %SYSTEM%\[0-9] {4} каждые 60 минут.

8. ССЫЛКИ

[1] Inside the Dridex Malware Takedown

[2] Dridex v4 — AtomBombing and other surprises

[3] Dridex Banking Malware Sample Technical Analysis and Solution
Теги:Dridexвредоносная программатроянантивирусная защита
Хабы: Блог компании Panda Security в России и СНГ Антивирусная защита
+5
3,3k 13
Комментарии 1
Похожие публикации
Лучшие публикации за сутки