Банковский троян Zeus Panda распространяется через результаты поиска в Google

Банковский троян Zeus Panda распространяется через результаты поиска в Google

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

Авторы: Edmund Brumaghin, Earl Carter и Emmanuel Tacheau

Введение

Если вы пытаетесь раздобыть нужную информацию, то, как правило, идете в Google, где можно найти практически любые сведения. Однако нет гарантии, что ссылки, возвращаемые Google, всегда будут безопасными. Конкретно в той теме, которая будет освящена в этой статье, злоумышленники решили воспользоваться поисковой оптимизацией с целью продвижения вредоносных ссылок на более выгодные позиции и заражением пользователей банковским трояном Zeus Panda. Продвигая ссылки по определенным запросам банковской тематики, злоумышленники смогли нацелиться на нужную целевую аудиторию нестандартным методом.

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

Первоначальный вектор атаки

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

В одном из примеров злоумышленник по-видимому продвигал ссылку по следующему поисковому запросу:

Рисунок 1: Один из поисковых запросов, используемых злоумышленниками

В большинстве случаев злоумышленнику несколько раз удавалось выводить вредоносные ссылки на первую страницу результатов поисковой системы по определенному запросу. Пример вредоносной ссылки, выводимой Google, показан на рисунке ниже:

Рисунок 2: Пример вредоносного результата по запросу "al rajhi bank working hours in Ramadan"

Используя скомпрометированные бизнес-сайты, у которых высокие рейтинги и много отзывов, злоумышленник смог повысить доверие к вредоносной странице со стороны жертвы.

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

    "nordea sweden bank account number"
   "al rajhi bank working hours during ramadan"
   "how many digits in karur vysya bank account number"
"free online books for bank clerk exam"
"how to cancel a cheque commonwealth bank"
"salary slip format in excel with formula free download"
"bank of baroda account balance check"
"bank guarantee format mt760"
"free online books for bank clerk exam"
"sbi bank recurring deposit form"
"axis bank mobile banking download link"

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

"found download to on a forum"
"found global warez on a forum"
"can you download free on the site"
"found download on on site"
"can download on a forum"
"found global downloads on forum"
"info site download to on forum"
"your query download on site"
"found download free on a forum"
"can all downloads on site"
"you can open downloads on"

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

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

 

Рисунок 3: Поддельные страницы, информирующие о заражении системы

Процесс инфицирования

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

Рисунок 4: Код, отвечающий за перенаправление жертвы

В итоге на стороне клиента (жертвы) выполнялся Javascript, размещенный по адресу, который указан в методе document.write(). Последующая страница содержит схожую функциональность, но в этот раз выполнялся GET-запрос к другой странице.

Рисунок 5: Вредоносный URL для перенаправления

Затем промежуточный сервер возвращал код HTTP 302 с целью перенаправление жертвы на еще один скомпрометированный сайт, используемый для хранения вредоносного Word-документа. Как итог, клиент загружал вредоносный документ. Эта техника носит название "302 cushioning" и часто используется для распространения эксплоитов.

Рисунок 6: Использование кода HTTP 302 для перенаправления жертвы на еще один сайт

После выполнения следующего запроса происходит загрузка вредоносного Word-документа.

Рисунок 7: Загрузка вредоносного документа

Во время загрузки жертве предлагается открыть или сохранить файл. При открытии документа отображается сообщение с предложением разрешить редактирование (Enable Editing) и включить содержимое (Enable Content).

Рисунок 8: Для просмотра документа необходимо разрешить некоторые функции

После разрешение всех нужных функции происходит выполнение вредоносных макросов, встроенных в Word-документ. При выполнении макросов происходит загрузка и выполнение исполняемого PE32-файла и инфицирование системы. Код макроса обфусцирован и довольно примитивен. Во время выполнения кода происходит загрузка и сохранение вредоносного файла в папку %TEMP% с именем "obodok.exe".

Рисунок 9: Код вредоносного макроса

В нашем случае вредоносный исполняемый файл находился по следующему адресу:

hXXp://settleware[.]com/blog/wp-content/themes/inove/templates/html/krang.wwt

Макрос использовал следующую Powershell-команду для инициации этого процесса:

Рисунок 10: Команда для загрузки и сохранения вредоносного исполняемого файла

Во время анализа DNS-запросов к домену, где хранился исполняемый файл, обнаружились два пика активности, связанной с преобразования домена, за период с 07.06.2017 по 08.06.2017.

Рисунок 11: График активности, связанной с DNS-запросами

Компания Settleware Secure Services, Inc. предоставляет услуги по электронной подписи документов. Кроме того, услуги предоставляются и в других областях, включая Real Estate escrow e-Signing и eNotary.

Функционал вредоноса

Вредоносная полезная нагрузка, используемая в данной кампании, по-видимому, является новой версией Zeus Panda, банковского трояна крадущего банковскою и другую конфиденциальную информацию. Полезная нагрузка, проанализированная специалистами Talos, является многоуровневой. Вначале используются техники, затрудняющие анализ. Кроме того, предусмотрен отложенный запуск с целью избежания детектирования. Другие методы направлены на проверку того, что вредонос не запускается внутри сред, предназначенных для автоматического анализа, или песочниц. Общая схема работы банковского трояна Zeus Panda хорошо задокументирована, однако специалисты компании Talos решили предоставить дополнительную информацию, относительно упаковщика, используемого трояном на начальной стадии.

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

  • LANG_RUSSIAN
  • LANG_BELARUSIAN
  • LANG_KAZAK
  • LANG_UKRAINIAN

Кроме того, вредонос выполняет проверки на предмет запуска внутри следующих сред:

  • VMware
  • VirtualPC
  • VirtualBox
  • Parallels
  • Sandboxie
  • Wine
  • SoftIce

Еще происходит проверка присутствия различных инструментов и утилит, которые обычно используют исследователи вредоносов. Полный перечень проверок различных сред, выполняемых вредоносом, показан на рисунке ниже:

Рисунок 12: Перечень проверок, выполняемых вредоносом

Если любая из проверок заканчивается результативно, вредонос самоудаляется, вначале записывая командный файл в директорию %TEMP% и осуществляя выполнение при помощи Windows Command Processor. Вредонос использует инструкцию RDTSC для вычисления времени, которое используется в имени командного файла. Этот командный файл удаляет первоначальный исполняемый файл. Как только файл удален, командный файл также самоудаляется из директории %TEMP%.

 

Рисунок 13: Содержимое командного файла

Чтобы затруднить анализ на начальной стадии выполняются сотни API-вызовов с некорректными параметрами. Кроме того, вредонос использует структурную обработку исключений (Structured Exception Handling; SEH) для изменения собственного кода. Вредонос несколько раз запрашивает и сохраняет позицию текущего курсора с целью обнаружения детектирования активности и запуска внутри песочницы или среды, предназначенной для автоматического анализа. Пример использования корректных API-вызовов с некорректными параметрами, показан на рисунке ниже, где вызов для получения местоположения курсора – корректен, а вызов ScreentoClient содержит некорректные параметры.

Рисунок 14: Участок кода, использующий различные API-вызовы

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

Рисунок 15: Мусорные вызовы, используемые с целью запутывания анализа вредоноса

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

Рисунок 16: Мусорные структуры

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

 

Рисунок 17: Использование HeapCreate для выполнения последующего вызова

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

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

Рисунок 18: Перечень мусорных условных выражений

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

Ниже показана инициализация SEH:

Рисунок 19: Инициализация обработчика исключений

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

Рисунок 20: Расшифрованные участки кода

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

Рисунок 21: Место размещения адреса процедуры обратного вызова

Во время выполнения вредонос продолжает самомодификацию и выполнение.

Строки зашифрованы при помощи функции XOR. Однако для каждой строки используются различные значения с целью затруднения детектирования. Ниже показан код на языке Python, который можно использовать для расшифровки строк.

def decrypt(data, length, key):
    c = 0
    o = ''
    while c < length:
        o += chr((c ^ ord(data[c]) ^ ~key) & 0xff)
        c +=1
    return o

def get_data(index):
    base_encrypt = 0x1251A560
    key = Word(base_encrypt+8*index)
    length=Word(base_encrypt+2+8*index)
    data=GetManyBytes(Dword(base_encrypt+4+8*index), length)
    return key, length, data

def find_entry_index(addr):
    addr = idc.PrevHead(addr)
    if GetMnem(addr) == "mov" and "ecx" in GetOpnd(addr, 0):
        return GetOperandValue(addr, 1)
    return None

for addr in XrefsTo(0x1250EBD2, flags=0):
    entry = find_entry_index(addr.frm)
    try:
        key, length, data = get_data(entry)
        dec = decrypt(data, length, key)
        print "Ref Addr: 0x%x | Decrypted: %s" % (addr.frm, dec)
        MakeComm(addr.frm, ' decrypt_string return :'+dec)
        MakeComm(ref, dec)
    except: 
        pass

Этот код снабжает комментариями расшифрованные и упоминаемые IDA-строки. Адрес 0x1250EBD2 соответствует процедуре дешифрования, адрес 0x1251A560 – таблице расшифрованных строк.

Рисунок 22: Процедура дешифрования строк

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

Рисунок 23: Комментарии к расшифрованным строкам

Что касается API-вызовов, то здесь также существуют хорошо известные хеши API-вызовов, использующих алгоритм ниже. И снова этот код можно использовать внутри IDA для комментирования API-вызовов.

def build_xor_api_name_table():
    global table_xor_api
    if not table_xor_api:
        table_xor_api = []
        entries = 0
        while entries < 256:
            copy_index = entries
            bits = 8
            while bits:
                if copy_index & 1:
                    copy_index = (copy_index >> 1) ^ 0xEDB88320
            else:
                copy_index >>= 1
            bits -= 1
        table_xor_api.append(copy_index)
        entries += 1
    return table_xor_api
 
def compute_hash(inString):
    global table_xor_api
    if not table_xor_api:
        build_xor_api_name_table()
 
if inString is None:
    return 0
ecx = 0xFFFFFFFF
for i in inString:
    eax = ord(i)
    eax = eax ^ ecx
    ecx = ecx >> 8
    eax = eax & 0xff
    ecx = ecx ^ table_xor_api[eax]
ecx = ~ecx & 0xFFFFFFFF
return ecx

Вредонос использует стандартную функцию, которая принимает следующие аргументы:

· Значение DWORD соответствует модулю.

· Начальный индекс соответствует таблице зашифрованных строк для модулей (если не загружен).

· Хеш API-вызова.

· Индекс, где хранится адрес API-вызова.

Рисунок 24: Функция для работы с API-вызовами

Ниже показан пример псевдокода, демонстрирующего выполнение API-вызова, посредством поиска процесса в памяти на базе перечня снимков.

Рисунок 25: Схема выполнения API-вызова

Как только вредонос переходит к выполнению основной части, исполняемый файл копируется в следующую папку:

C:\Users\<Username>\AppData\Roaming\Macromedia\Flash Player\macromedia.com\support\flashplayer\sys\

Присутствие в системе поддерживается при помощи следующего ключа в реестре:

HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Run\extensions.exe 

В ключ заносится значение, содержащее путь к файлу, созданному вредоносом. Пример значения показан ниже:

"C:\Users\<Username>\AppData\Roaming\Macromedia\Flash Player\macromedia.com\support\flashplayer\sys\extensions.exe"s\\0 

Конкретно в этом случае файл внутри инфицированного профиля пользователя назывался "extensions.exe". Однако специалисты Talos также находили файлы под другими именами.

Если желаете, можете ознакомиться с дополнительной информацией относительно работы банковского трояна Zeus Panda после распаковки.

Заключение

Злоумышленники постоянно пытаются найти новые способы заражения компьютеров пользователей. Спам, вредоносная реклама и атаки типа watering hole являются наиболее распространенными средствами. Специалисты Talos обнаружили целый фреймворк, предназначенный для продвижения вредоносных ссылок в поисковой системе, который использовался для распространения банковского трояна Zeus Panda. В нашем случае злоумышленники использовали специальные ключевые слова и продвижения отдельных страниц на скомпрометированных серверах в поисковых системах.

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

Только устойчивая, многоуровневая и эшелонированная защита может помочь компаниям своевременно реагировать на появление новых угроз. С другой стороны, пользователи также должны крепко подумать прежде, чем переходить по ссылке, открывать вложение в письме или слепо доверять результатам поисковой системы.

Методы защиты

Дополнительные способы защиты, при помощи которых можно предотвратить эту угрозу:

Advanced Malware Protection (AMP) – идеально подходит для предотвращения выполнения этого вредоноса.

Веб-сканеры CWS / WSA предотвращают доступ к вредоносным веб-сайтам и позволяют обнаружить вредоносов.

AMP Threat Grid помогает обнаружить вредоносные бинарные файлы и защищает все продукты из линейки Cisco Security.

Umbrella – безопасный интернет шлюз (SIG) блокирует подключение к вредоносным доменам, IP-адресам и URL, пользователей, находящихся внутри или вне корпоративной сети.

Подписка на правила сервиса Snort.org также помогает своевременно защититься от появления новых угроз.

Индикаторы компрометирования

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

Домены, распространяющие вредоносные документы:

mikemuder[.]com

IP-адреса, распространяющие вредоносные документы:

67.195.61[.]46

Домены:

acountaxrioja[.]es
alpha[.]gtpo-cms[.]co[.]uk
arte-corp[.]jp
bellasweetboutique[.]com
billing[.]logohelp[.]com
birsan[.]com[.]tr
bitumast[.]com
bleed101[.]com
blindspotgallery[.]co[.]uk
blog[.]mitrampolin[.]com
calthacompany[.]com
cannonvalley[.]co[.]za
coinsdealer[.]pl
corvettescruisingalveston[.]com
craigchristian[.]com
dentopia[.]com[.]tr
dgbeauty[.]net
dressfortheday[.]com
evoluzionhealth[.]com
gemasach[.]com
japan-recruit[.]net
jaegar[.]jp
michaelleeclayton[.]com
www[.]academiaarena[.]com
www[.]bethyen[.]com
www[.]bioinbox[.]ro
www[.]distinctivecarpet.com
www[.]helgaleitner[.]at
www[.]gullsmedofstad[.]no
usedtextilemachinerylive[.]com
garagecodes[.]com
astrodestino[.]com[.]br

Промежуточные домены, используемые для перенаправления:

dverioptomtut[.]ru

Имена Word-документов:

nordea-sweden-bank-account-number.doc
al-rajhi-bank-working-hours-during-ramadan.doc
how-many-digits-in-karur-vysya-bank-account-number.doc
free-online-books-for-bank-clerk-exam.doc
how-to-cancel-a-cheque-commonwealth-bank.doc
salary-slip-format-in-excel-with-formula-free-download.doc
bank-of-baroda-account-balance-check.doc
bank-guarantee-format-mt760.doc
incoming-wire-transfer-td-bank.doc
free-online-books-for-bank-clerk-exam.doc
sbi-bank-recurring-deposit-form.doc

Хеши документов:

713190f0433ae9180aea272957d80b2b408ef479d2d022f0c561297dafcfaec2 (SHA256)

URL для распространения файлов PE32:

settleware[.]com/blog/wp-content/themes/inove/templates/html/krang.wwt

PE32-хеши:

59b11483cb6ac4ea298d9caecf54c4168ef637f2f3d8c893941c8bea77c67868 (SHA256)
5f4c8191caea525a6fe2dddce21e24157f8c131f0ec310995098701f24fa6867 (SHA256)
29f1b6b996f13455d77b4657499daee2f70058dc29e18fa4832ad8401865301a (SHA256)
0b4d6e2f00880a9e0235535bdda7220ca638190b06edd6b2b1cba05eb3ac6a92 (SHA256)

С2-домены:

hppavag0ab9raaz[.]club
havagab9raaz[.]club

С2 IP-адреса:

82.146.59[.]228

Ваш провайдер знает о вас больше, чем ваша девушка?

Присоединяйтесь и узнайте, как это остановить!