• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Детальный обзор AgentTesla от Group-IB

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
От меня: отличный обзор AgentTesla от фейсов и компании сачкова )


Недавно в Group-IB обратилась европейская компания-производитель электромонтажного оборудования — ее сотрудник получил по почте подозрительное письмо с вредоносным вложением. Илья Померанцев, специалист по анализу вредоносного кода CERT Group-IB, провел детальный анализ этого файла, обнаружил там шпионскую программу AgentTesla и рассказал, чего ждать от подобного ВПО и чем оно опасно.

Этим постом мы открываем серию статей о том, как проводить анализ подобных потенциально опасных файлов, а самых любопытных ждем 5 декабря на бесплатный интерактивный вебинар по теме «Анализ вредоносного ПО: разбор реальных кейсов». Все подробности — под катом.


Механизм распространения

Нам известно, что вредоносное ПО попало на машину жертвы через фишинговые письма. Получатель письма был, вероятно, поставлен в скрытую копию.
cbqjsaal0zmv_a1ged3_ocr3kpg.png


Анализ заголовков показывает, что отправитель письма был подделан. В действительности письмо ушло с vps56[.]oneworldhosting[.]com.
sdxte-21bsjzr-vu4vlwdiyxzma.png


В аттаче письма находится архив WinRar qoute_jpeg56a.r15 с вредоносным исполняемым файлом QOUTE_JPEG56A.exe внутри.
5yk67a4dwqqujs6nnymscwr26-w.png



Экосистема ВПО

Теперь посмотрим, как выглядит экосистема исследуемого вредоносного ПО. На схеме ниже изображена его структура и направления взаимодействия компонентов.
er9dnwfyfi60al-d9f7m-baquhm.png


Теперь рассмотрим каждый из компонентов ВПО подробнее.


Загрузчик

Исходный файл QOUTE_JPEG56A.exe представляет собой откомпилированный AutoIt v3 скрипт.
qsabl8h3dkqgshlrmzgewzivmti.png


Для обфускации исходного скрипта использовался обфускатор с аналогичными PELock AutoIT-Obfuscator характеристиками.
Деобфускация производится в три этапа:
  1. Снятие обфускации For-If

    Первым делом необходимо восстановить поток управления скрипта. Запутывание потока управления (Control Flow Flattening) — один из наиболее распространенных способов защиты бинарного кода приложений от анализа. Запутывающие преобразования резко увеличивают трудоемкость выделения и распознавания алгоритмов и структур данных.

    hqd_7xi045crcr8uricahnyke5i.png
  2. Восстановление строк
    Для шифрования строк используются две функции:
    • gdorizabegkvfca — выполняет Base64-подобное декодирование

      ai3zedm-utilwnwrxhan2pwlkve.png
    • xgacyukcyzxz — простой побайтовый XOR первой строки с длиной второй
      mcmim6zvyn5qqtvsudsj2ddj5hy.png
  3. mo4e33oeg-zhx-nkiqitjjr7nlm.png
  4. Снятие обфускации BinaryToString и Execute

    qyfqzxdgaqfk3mmc3qdmwox6mes.png
Основная нагрузка хранится в разделенном виде в директории Fonts секции ресурсов файла.

fy2zwviixrr3ydjfefzy_mx6egs.png


Порядок склейки следующий: TIEQHCXWFG, IME, SPDGUHIMPV, KQJMWQQAQTKTFXTUOSW, AOCHKRWWSKWO, JSHMSJPS, NHHWXJBMTTSPXVN, BFUTIFWWXVE, HWJHO, AVZOUMVFRDWFLWU.

Для дешифровки извлеченных данных используется WinAPI-функция CryptDecrypt, а в качестве ключа применяется сессионный ключ, сгенерированный на основе значения fZgFiZlJDxvuWatFRgRXZqmNCIyQgMYc.

Дешифрованный исполняемый файл поступает на вход функции RunPE, которая осуществляет ProcessInject в RegAsm.exe при помощи встроенного ShellCode (также известного как RunPE ShellCode). Авторство принадлежит пользователю испанского форума indetectables[.]net под ником Wardow.

-w9v8hqygcur0zjvrlok6zz0puw.png


so103ijljljvad0moazodumpbw0.png


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

Сам ShellCode довольно прост и привлекает к себе внимание лишь позаимствованной у хакерской группы Anunak\Carbanak. функцией хеширования API-вызовов.

7trjs4ewwspmnjjyiyfunnuawiu.png


ygltz2j5yhznpute3zgur78gcjm.png


Нам также известны случаи использования Frenchy Shellcode различных версий.
Помимо описанного функционала мы также выявили неактивные функции:
  • Блокировка ручного завершения процесса в менеджере задач

    pilowznac2anmd86fc6evhbukts.png
  • Перезапуск дочернего процесса в случае его завершения

    bnydrqweveygh-7ijjkhe95r16k.png
  • Обход UAC

    yatofmi3btmiulx2-2fojqh6p4g.png
  • Сохранение полезной нагрузки в файл

    dxqqbqh5qmc8ss8js2pqqfhoiim.png
  • Демонстрация модальных окон

    norbzlid8wuif16l0d0tmpq1lfy.png
  • Ожидание смены позиции курсора мыши

    y7nwpd0hdou7qtbw7hb-qcpmrdq.png
  • AntiVM и AntiSandbox

    gtitzosbkm1ly4k9hgxbw1fvsts.png
  • Самоуничтожение

    6hla1fqy4aihydzu-trd2dq22xq.png
  • Выкачивание полезной нагрузки из сети

    drlp4j5zwf-9qjpwmtwheqnxvlg.png

Нам известно, что такой функционал характерен для протектора CypherIT, которым, судя по всему, и является исследуемый загрузчик.
w-6qj5tvrnzxqq2lkq-61k499-0.png



Основной модуль ВПО

Далее кратко опишем основной модуль ВПО, а более подробно рассмотрим его во второй статье. В данном случае он представляет собой приложение на .NET.
ai_7vzhtgmvmr9ls9qew3kckpzw.png


В ходе анализа мы выявили, что использовался обфускатор ConfuserEX.
zairor-n4gu5n07o2h1vo1u_hjq.png


IELibrary.dll

Библиотека хранится в виде ресурса основного модуля и является известным плагином для AgentTesla, который предоставляет функционал для извлечения различной информации из браузеров Internet Explorer и Edge.
Agent Tesla — это модульное программное обеспечение для шпионажа, распространяемое по модели malware-as-a-service под видом легального кейлоггер-продукта. Agent Tesla способен извлекать и передавать на сервер злоумышленникам учетные данные пользователя из браузеров, почтовых клиентов и клиентов FTP, регистрировать данные буфера обмена, захватывать экран устройства. На момент анализа официальный сайт разработчиков был недоступен.
Точкой входа служит функция GetSavedPasswords класса InternetExplorer.
n3aqew1u7g6u-1feuebla2l-ll8.png


В целом, исполнение кода линейно и не содержит средств защиты от анализа. Внимания заслуживает лишь нереализованная функция GetSavedCookies. Видимо, функционал плагина предполагалось расширить, но это так и не было сделано.
fv7p2rozdp2nq-f2diripyzcl0c.png


Закрепление загрузчика в системе

Изучим, каким образом загрузчик закрепляется в системе. Исследуемый экземпляр не осуществляет закрепления, однако в аналогичных событиях оно происходит по следующей схеме:
  1. В папке С:\Users\Public создается скрипт Visual Basic

    Пример скрипта:
    affzgqk0pc1srvaw3n41kqgprzo.png
  2. Содержимое файла загрузчика дополняется нулевым символом и сохраняется в папку %Temp%\<Произвольное имя папки>\<Имя файла>
  3. В реестре создается ключ на автозапуск для файла скрипта HKCU\Software\Microsoft\Windows\CurrentVersion\Run\<Имя скрипта>
Итак, по результатам первой части анализа нам удалось установить названия семейств всех компонентов изучаемого ВПО, разобрать схему заражения, а также получить объекты для написания сигнатур. Мы продолжим разбор этого объекта в следующей статье, где более детально рассмотрим основной модуль AgentTesla.


Yara
Код:
rule AgentTesla_clean{
meta:
    author = "Group-IB"
    file = "78566E3FC49C291CB117C3D955FA34B9A9F3EEFEFAE3DE3D0212432EB18D2EAD"
    scoring = 5
    family = "AgentTesla"
strings:
    $string_format_AT = {74 00 79 00 70 00 65 00 3D 00 7B 00 30 00 7D 00 0D 00 0A 00 68 00 77 00 69 00 64 00 3D 00 7B 00 31 00 7D 00 0D 00 0A 00 74 00 69 00 6D 00 65 00 3D 00 7B 00 32 00 7D 00 0D 00 0A 00 70 00 63 00 6E 00 61 00 6D 00 65 00 3D 00 7B 00 33 00 7D 00 0D 00 0A 00 6C 00 6F 00 67 00 64 00 61 00 74 00 61 00 3D 00 7B 00 34 00 7D 00 0D 00 0A 00 73 00 63 00 72 00 65 00 65 00 6E 00 3D 00 7B 00 35 00 7D 00 0D 00 0A 00 69 00 70 00 61 00 64 00 64 00 3D 00 7B 00 36 00 7D 00 0D 00 0A 00 77 00 65 00 62 00 63 00 61 00 6D 00 5F 00 6C 00 69 00 6E 00 6B 00 3D 00 7B 00 37 00 7D 00 0D 00 0A 00 73 00 63 00 72 00 65 00 65 00 6E 00 5F 00 6C 00 69 00 6E 00 6B 00 3D 00 7B 00 38 00 7D 00 0D 00 0A 00 5B 00 70 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00 73 00 5D 00}
    $web_panel_format_string = {63 00 6C 00 69 00 65 00 6E 00 74 00 5B 00 5D 00 3D 00 7B 00 30 00 7D 00 0D 00 0A 00 6C 00 69 00 6E 00 6B 00 5B 00 5D 00 3D 00 7B 00 31 00 7D 00 0D 00 0A 00 75 00 73 00 65 00 72 00 6E 00 61 00 6D 00 65 00 5B 00 5D 00 3D 00 7B 00 32 00 7D 00 0D 00 0A 00 70 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00 5B 00 5D 00 3D 00 7B 00 33 00 7D 00 00 15 55 00 52 00 4C 00 3A 00 20 00 20 00 20 00 20 00 20 00 20 00 00 15 55 00 73 00 65 00 72 00 6E 00 61 00 6D 00 65 00 3A 00 20 00 00 15 50 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00 3A 00}
condition:
     all of them
}

rule  AgentTesla_obfuscated {
meta:
    author = "Group-IB"
    file = "41DC0D5459F25E2FDCF8797948A7B315D3CB075398D808D1772CACCC726AF6E9"
    scoring = 5
    family = "AgentTesla"
strings:
    $first_names = {61 66 6B 00 61 66 6D 00 61 66 6F 00 61 66 76 00 61 66 79 00 61 66 78 00 61 66 77 00 61 67 6A 00 61 67 6B 00 61 67 6C 00 61 67 70 00 61 67 72 00 61 67 73 00 61 67 75 00}
    $second_names = "IELibrary.resources"
condition:
     all of them
}

rule AgentTesla_module_for_IE{
meta:
    author = "Group-IB"
    file = "D55800A825792F55999ABDAD199DFA54F3184417215A298910F2C12CD9CC31EE"
    scoring = 5
    family = "AgentTesla_module_for_IE"
strings:
    $s0 = "ByteArrayToStructure"
    $s1 = "CryptAcquireContext"
    $s2 = "CryptCreateHash"
    $s3 = "CryptDestroyHash"
    $s4 = "CryptGetHashParam"
    $s5 = "CryptHashData"
    $s6 = "CryptReleaseContext"
    $s7 = "DecryptIePassword"
    $s8 = "DoesURLMatchWithHash"
    $s9 = "GetSavedCookies"
    $s10 = "GetSavedPasswords"
    $s11 = "GetURLHashString"
condition:
     all of them
}

rule RunPE_shellcode {
meta:
    author = "Group-IB"
    file = "37A1961361073BEA6C6EACE6A8601F646C5B6ECD9D625E049AD02075BA996918"
    scoring = 5
    family = "RunPE_shellcode"
strings:
    $malcode = {
      C7 [2-5] EE 38 83 0C // mov     dword ptr [ebp-0A0h], 0C8338EEh
      C7 [2-5] 57 64 E1 01 // mov     dword ptr [ebp-9Ch], 1E16457h
      C7 [2-5] 18 E4 CA 08 // mov     dword ptr [ebp-98h], 8CAE418h
      C7 [2-5] E3 CA D8 03 // mov     dword ptr [ebp-94h], 3D8CAE3h
      C7 [2-5] 99 B0 48 06 // mov     dword ptr [ebp-90h], 648B099h
      C7 [2-5] 93 BA 94 03 // mov     dword ptr [ebp-8Ch], 394BA93h
      C7 [2-5] E4 C7 B9 04 // mov     dword ptr [ebp-88h], 4B9C7E4h
      C7 [2-5] E4 87 B8 04 // mov     dword ptr [ebp-84h], 4B887E4h
      C7 [2-5] A9 2D D7 01 // mov     dword ptr [ebp-80h], 1D72DA9h
      C7 [2-5] 05 D1 3D 0B // mov     dword ptr [ebp-7Ch], 0B3DD105h
      C7 [2-5] 44 27 23 0F // mov     dword ptr [ebp-78h], 0F232744h
      C7 [2-5] E8 6F 18 0D // mov     dword ptr [ebp-74h], 0D186FE8h
      }
condition:
    $malcode
}

rule AgentTesla_AutoIT_module{
meta:
    author = "Group-IB"
    file = "49F94293F2EBD8CEFF180EDDD58FA50B30DC0F08C05B5E3BD36FD52668D196AF"
    scoring = 5
    family = "AgentTesla"
strings:                                  
    $packedexeau = {55 ED F5 9F 92 03 04 44 7E 16 6D 1F 8C D7 38 E6 29 E4 C8 CF DA 2C C4 E1 F3 65 48 25 B8 93 9D 66 A4 AD 3C 39 50 00 B9 60 66 19 8D FC 20 0A A0 56 52 8B 9F 15 D7 62 30 0D 5C C3 24 FE F8 FC 39 08 DF 87 2A B2 1C E9 F7 06 A8 53 B2 69 C3 3C D4 5E D4 74 91 6E 9D 9A A0 96 FD DB 1F 5E 09 D7 0F 25 FB 46 4E 74 15 BB AB DB 17 EE E7 64 33 D6 79 02 E4 85 79 14 6B 59 F9 43 3C 81 68 A8 B5 32 BC E6}
condition:
     all of them
}


Hashes

Nameqoute_jpeg56a.r15
MD553BE8F9B978062D4411F71010F49209E
SHA1A8C2765B3D655BA23886D663D22BDD8EF6E8E894
SHA2562641DAFB452562A0A92631C2849B8B9CE880F0F8F

890E643316E9276156EDC8A
TypeArchive WinRAR
Size823014


NameQOUTE_JPEG56A.exe
MD5329F6769CF21B660D5C3F5048CE30F17
SHA18010CC2AF398F9F951555F7D481CE13DF60BBECF
SHA25649F94293F2EBD8CEFF180EDDD58FA50B30DC0F08
C05B5E3BD36FD52668D196AF
TypePE (Compiled AutoIt Script)
Size1327616
OrginalNameUnknown
DateStamp15.07.2019
LinkerMicrosoft Linker(12.0)[EXE32]


MD5C2743AEDDADACC012EF4A632598C00C0
SHA179B445DE923C92BF378B19D12A309C0E9C5851BF
SHA25637A1961361073BEA6C6EACE6A8601F646C5B6ECD
9D625E049AD02075BA996918
TypeShellCode
Size1474

взято с хабра, автор - Group-IB
 
Конфигурационный файл

В таблице ниже перечислено, какие функциональные возможности применяются в используемом сэмпле:
ОписаниеЗначение
Флаг использования KeyLoggertrue
Флаг использования ScreenLoggerfalse
Интервал отправки лога KeyLogger в минутах20
Интервал отправки лога ScreenLogger в минутах20
Флаг обработки клавиши Backspace. False – только логгирование. True – стирание предыдущей клавишиfalse
Тип CnC. Варианты: smtp, webpanel, ftpsmtp
Флаг активации потока для завершения процессов из списка «%filter_list%»false
Флаг отключения UACfalse
Флаг отключения менеджера задачfalse
Флаг отключения CMDfalse
Флаг отключения окна «Выполнить»false
Флаг отключения инструмента просмотра реестраfalse
Флаг отключения точек восстановления системыtrue
Флаг отключения панели управленияfalse
Флаг отключения MSCONFIGfalse
Флаг отключения контекстного меню в проводникеfalse
Флаг закрепления в системеfalse
Путь для копирования основного модуля при закреплении в системе%startupfolder% \\%insfolder%\\%insname%
Флаг задания атрибутов «Системный» и «Скрытный» для закрепленного в системе основного модуляfalse
Флаг выполнения рестарта при закреплении в системеfalse
Флаг перемещения основного модуля во временную папкуfalse
Флаг выполнения обхода UACfalse
Формат даты и времени для записи в логyyyy-MM-dd HH:mm:ss
Флаг использования фильтра программ для KeyLoggertrue
Тип фильтрации программ.
1 – имя программы ищется в заголовках окна
2 – имя программы ищется в имени процесса окна
1
Фильтр программ«facebook»,
«twitter»,
«gmail»,
«instagram»,
«movie»,
«skype»,
«porn»,
«hack»,
«whatsapp»,
«discord»


Закрепление основного модуля в системе

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

В зависимости от значения из конфига файлу даются атрибуты «Скрытый» и «Системный».
Автозапуск обеспечивается двумя ветками реестра:
  • HKCU\ Software\Microsoft\Windows\CurrentVersion\Run\%insregname%
  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run\ %insregname%
Поскольку загрузчик производит инжект в процесс RegAsm, установка флага персиста для основного модуля приводит к довольно интересным последствиям. Вместо того, чтобы скопировать само себя, ВПО закрепило в системе оригинальный файл RegAsm.exe, в процесс которого осуществлялся инжект.

a8mxinpopuoixolt4r7tiwulc70.png


9p-fui42mv7y06i5ivacsyh2zqm.png


Взаимодействие с C&C

Вне зависимости от используемого метода сетевое взаимодействие начинается с получения внешнего IP жертвы с помощью ресурса checkip[.]amazonaws[.]com/.
Далее описаны методы сетевого взаимодействия, представленные в ВПО.


webpanel

Взаимодействие идет по HTTP-протоколу. ВПО выполняет POST-запрос со следующими заголовками:
  • User-Agent: Mozilla/5.0 (Windows U Windows NT 6.1 ru rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)
  • Connection: Keep-Alive
  • Content-Type: application/x-www-form-urlencoded
Адрес сервера задается значением %PostURL%. Зашифрованное сообщение передается в параметре «p». Механизм шифрования описан в разделе «Алгоритмы шифрования» (Метод 2).

Передаваемое сообщение имеет следующий вид:
Код:
type={0}\nhwid={1}\ntime={2}\npcname={3}\nlogdata={4}\nscreen={5}\nipadd={6}\nwebcam_link={7}\nclient={8}\nlink={9}\nusername={10}\npassword={11}\nscreen_link={12}
Параметр type указывает на тип сообщения:
lc5lyrzbeie0jr9z-6dpzpylaze.jpeg

hwid — записывается MD5-хеш от значений серийного номера материнской платы и ID процессора. Вероятнее всего, используется в качестве User ID.
time — служит для передачи текущего времени и даты.
pcname — определяется как <Имя пользователя>/<Имя компьютера>.
logdata — данные лога.

При передаче паролей сообщение имеет вид:
Код:
type={0}\nhwid={1}\ntime={2}\npcname={3}\nlogdata={4}\nscreen={5}\nipadd={6}\nwebcam_link={7}\nscreen_link={8}\n[passwords]

Далее следуют описания украденных данных в формате \nclient[]={0}\nlink[]={1}\nusername[]={2}\npassword[]={3}


smtp

Взаимодействие идет по SMTP-протоколу. Передаваемое письмо имеет формат HTML. Параметр BODY имеет вид:

ghvgnpycvdbcsyyakmwjvfppnw4.png

Заголовок письма имеет общий вид: <ИМЯ ПОЛЬЗОВАТЕЛЯ>/<ИМЯ КОМПЬЮТЕРА> <ТИП КОНТЕНТА>. Содержимое письма, как и его вложения, не шифруются.
x57c5ojnqhgfpnec0jnsqix931c.jpeg


Взаимодействие идет по ftp-протоколу. На указанный сервер передается файл с именем <ТИП КОНТЕНТА>_<ИМЯ ПОЛЬЗОВАТЕЛЯ>-<ИМЯ КОМПЬЮТЕРА>_<ДАТА И ВРЕМЯ>.html. Содержимое файла не шифруется.
r-2nwryzwnv7voneopya8y5aazq.jpeg


Алгоритмы шифрования

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

Метод 1

Этот метод используется для шифрования строк в основном модуле. Для шифрования применяется алгоритм AES.

На вход подается шестизначное десятичное число. Над ним производится следующее преобразование:
Код:
f(x) = (((x >> 2 — 31059) ^ 6380) — 1363) >> 3
Полученное значение является индексом для вшитого массива данных.

Каждый элемент массива — последовательность DWORD. При объединении DWORD получается массив байтов: первые 32 байта — ключ шифрования, далее следуют 16 байтов вектора инициализации, а оставшиеся байты — зашифрованные данные.

Метод 2

Используется алгоритм 3DES в режиме ECB с дополнением в целых байтах (PKCS7).

Ключ задается параметром %urlkey%, однако при шифровании используется его MD5-хеш.


Вредоносный функционал

Изучаемый сэмпл использует следующие программы для реализации своей вредоносной функции:

KeyLogger

При наличии соответствующего флага ВПО при помощи WinAPI-функции SetWindowsHookEx назначает свой обработчик для событий нажатия клавиш на клавиатуре. Функция обработчика начинается с получения заголовка активного окна.

Если установлен флаг выполнения фильтрации приложений, производится фильтрация в зависимости от заданного типа:
  1. имя программы ищется в заголовках окна
  2. имя программы ищется в имени процесса окна
Далее в лог добавляется запись с информацией об активном окне в формате:
bxr0cj1srz9us2a4il4rwjfpoqo.png

Затем записывается информация о нажатой клавише:
КлавишаЗапись
BackspaceВ зависимости от флага обработки клавиши Backspace: False – {BACK}
True – стирание предыдущей клавиши
CAPSLOCK{CAPSLOCK}
ESC{ESC}
PageUp{PageUp}
Down&darr;
DELETE{DEL}
&quot;
F5{F5}
&&amp;
F10{F10}
TAB{TAB}
<&lt;
>&gt;
Пробел
F8{F8}
F12{F12}
F9{F9}
ALT+TAB{ALT+TAB}
END{END}
F4{F4}
F2{F2}
CTRL{CTRL}
F6{F6}
Right&rarr;
Up&uarr;
F1{F1}
Left&larr;
PageDown{PageDown}
Insert{Insert}
Win{Win}
NumLock{NumLock}
F11{F11}
F3{F3}
HOME{HOME}
ENTER{ENTER}
ALT+F4{ALT+F4}
F7{F7}
Другая клавишаСимвол в верхнем или нижнем регистре в зависимости от положений клавиш CapsLock и Shift

С заданной периодичностью собранный лог отправляется на сервер. Если передача оказалась неудачной, лог сохраняется в файл %TEMP%\\log.tmp в формате:
xnpzeba3_y7ulwz0wesksvlspkg.png

Когда сработает таймер, файл будет передан на сервер.

ScreenLogger

С заданной периодичностью ВПО создает снимок экрана в формате Jpeg со значением Quality равным 50 и сохраняет его в файл %APPDATA %\\<Произвольная последовательность из 10 символов>.jpg. После передачи файл удаляется.

ClipboardLogger

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


После этого текст вставляется в лог:
ft6l2pmpzecwtkh0hhgbblet30q.png


PasswordStealer

ВПО может производить выгрузку паролей из следующих приложений:
БраузерыПочтовые клиентыFTP клиенты
ChromeOutlookFileZilla
FirefoxThunderbirdWS_FTP
IE/EdgeFoxmailWinSCP
SafariOpera MailCoreFTP
Opera BrowserIncrediMailFTP Navigator
YandexPocomailFlashFXP
ComodoEudoraSmartFTP
ChromePlusTheBatFTPCommander
ChromiumPostbox
TorchClawsMail
7Star
Amigo
BraveSoftwareJabber клиентыVPN клиенты
CentBrowserPsi/Psi+Open VPN
Chedot
CocCoc
Elements BrowserМенеджеры загрузки
Epic Privacy BrowserInternet Download Manager
KometaJDownloader
Orbitum
Sputnik
uCozMedia
Vivaldi
SeaMonkey
Flock Browser
UC Browser
BlackHawk
CyberFox
K-Meleon
IceCat
IceDragon
PaleMoon
WaterFox
Falkon Browser


Противодействие динамическому анализу
  • Использование функции Sleep. Позволяет обойти по таймауту некоторые песочницы
  • Уничтожение потока Zone.Identifier. Позволяет скрыть факт загрузки файла из интернета
  • В параметре %filter_list% задается список процессов, которые ВПО будет завершать с интервалом в одну секунду
  • Отключение UAС
  • Отключение менеджера задач
  • Отключение CMD
  • Отключение окна «Выполнить»
  • Отключение панели управления
  • Отключение инструмента RegEdit
  • Отключение точек восстановления системы
  • Отключение контекстного меню в проводнике
  • Отключение MSCONFIG
  • Обход UAC:

Неактивные возможности основного модуля

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

Worm
В отдельном потоке отслеживаются события подключения съемных носителей. При подключении в корень файловой системы копируется ВПО с именем scr.exe, после чего выполняется поиск файлов с расширением lnk. Команда каждого lnk меняется на cmd.exe /c start scr.exe&start <оригинальная команда>& exit.

Каждой директории в корне носителя дается атрибут «Скрытый» и создается файл с расширением lnk с именем скрытой директории и командой cmd.exe /c start scr.exe&explorer /root,\"%CD%<ИМЯ ДИРЕКТОРИИ>\" & exit

MouseTracker
Метод выполнения перехвата аналогичен используемому для клавиатуры. Этот функционал пока находится в разработке.

Файловая активность

ПутьОписание
%Temp%\temp.tmpСодержит счетчик попыток обхода UAC
%startupfolder%\%insfolder%\%insname%Путь для закрепления в системе ВПО
%Temp%\tmpG\{Текущее время в милесекундах}.tmpПуть для бэкапа основного модуля
%Temp%\log.tmpЛог-файл
%AppData%\{Произвольная последовательность из 10 симоволов}.jpegСкриншоты
C:\Users\Public\{Произвольная последовательность из 10 симоволов}.vbsПуть к vbs файлу, который загрузчик может использовать для закрпления в системе
%Temp%\{Произвольное имя папки}\{Имя файла}Путь, используемый загрузчиком для закрепления в системе

Профиль злоумышленника

Благодаря «зашитым» данным аутентификации нам удалось получить доступ к командному центру.
nqq0ebtlfljriwj4m-97hm7-aww.png


Это позволило нам выявить конечную почту злоумышленников:

junaid[.]in***@gmail[.]com.

Доменное имя командного центра зарегистрировано на почту sg***@gmail[.]com.

Заключение

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

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

Забегая вперед, скажем, что злоумышленники, рассылающие AgentTesla, очень часто меняют первоначальный загрузчик. Это позволяет в момент атаки оставаться незамеченными для статических сканеров и эвристических анализаторов. А склонность этого семейства сразу же начинать свою деятельность делает бесполезными системные мониторы. Наилучший способ борьбы с AgentTesla — предварительный анализ в песочнице.

В третьей статье этого цикла мы рассмотрим другие загрузчики, используемые AgentTesla, а также изучим процесс их полуавтоматической распаковки. Не пропустите!


Hash

SHA1
A8C2765B3D655BA23886D663D22BDD8EF6E8E894
8010CC2AF398F9F951555F7D481CE13DF60BBECF
79B445DE923C92BF378B19D12A309C0E9C5851BF
15839B7AB0417FA35F2858722F0BD47BDF840D62
1C981EF3EEA8548A30E8D7BF8D0D61F9224288DD

C&C

URL
sina-c0m[.]icu
smtp[.]sina-c0m[.]icu

RegKey

Registry
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\{Имя скрипта}
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\%insregname%
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run\%insregname%

Files

Файловая активность
%Temp%\temp.tmp
%startupfolder%\%insfolder%\%insname%
%Temp%\tmpG\{Текущее время в милесекундах}.tmp
%Temp%\log.tmp
%AppData%\{Произвольная последовательность из 10 симоволов}.jpeg
C:\Users\Public\{Произвольная последовательность из 10 симоволов}.vbs
%Temp%\{Произвольное имя папки}\{Имя файла}

Samples Info

NameUnknown
MD5F7722DD8660B261EA13B710062B59C43
SHA115839B7AB0417FA35F2858722F0BD47BDF840D62
SHA25641DC0D5459F25E2FDCF8797948A7B315D3CB0753
98D808D1772CACCC726AF6E9
TypePE (.NET)
Size327680
OrginalNameAZZRIDKGGSLTYFUBCCRRCUMRKTOXFVPDKGAGPUZI_20190701133545943.exe
DateStamp01.07.2019
CompilerVB.NET

NameIELibrary.dll
MD5BFB160A89F4A607A60464631ED3ED9FD
SHA11C981EF3EEA8548A30E8D7BF8D0D61F9224288DD
SHA256D55800A825792F55999ABDAD199DFA54F3184417
215A298910F2C12CD9CC31EE
TypePE (.NET DLL)
Size16896
OrginalNameIELibrary.dll
DateStamp11.10.2016
CompilerMicrosoft Linker(48.0*)

взято с хабра, автор - Group-IB
 
Обычно первая стадия при анализе ВПО — снятие защиты в виде пакера, криптора, протектора или загрузчика. В большинстве случаев эта проблема решается запуском ВПО и выполнением дампа, однако существуют ситуации, когда этот метод не подходит. Например, если ВПО является шифровальщиком, если оно защищает свои регионы памяти от дампа, если в коде присутствуют механизмы обнаружения виртуальной машины или если сразу после старта ВПО выполняет перезагрузку. В таких случаях применяется так называемая «полуавтоматическая» распаковка, то есть исследователь полностью контролирует процесс и может в любой момент вмешаться. Рассмотрим эту процедуру на примере трех сэмплов семейства AgentTesla. Это относительно безвредное ВПО, если отключить ему доступ к сети.


Сэмпл №1

Исходный файл — это документ MS Word, который эксплуатирует уязвимость CVE-2017-11882.

sen2oymx-j-modsjdtrynz8_rku.png

В результате происходит загрузка и запуск пейлоада.

Анализ дерева процессов и поведенческих маркеров показывает инжект в процесс RegAsm.exe.

sm-vd50chyqlggzigduei7bip-m.png


ztrmqqqggwsf_ztrc2tzhwwxcms.png


Имеются характерные для AgentTesla поведенческие маркеры.

nrqbro_k9d1_n0br9zez0b4sbtm.png


Скачанный сэмпл — это исполняемый .NET-файл, защищенный протектором .NET Reactor.
gim5s1jzafhrcnwl1gbcawvqc1a.png


Откроем его в утилите dnSpy x86 и перейдем к точке входа.
nzm13gikyff5kdvxm7nww4p_ask.png


Перейдя в функцию DateTimeOffset, мы обнаружим код инициализации нового .NET-модуля. Поставим breakpoint на интересующей нас строке и запустим файл.
7a7acjpjgqv0qiftf6mlonjxuy0.png


В одном из возвращенных буферов можно увидеть MZ-сигнатуру (0x4D 0x5A). Сохраняем его.
kidcfbitazutwlav20ihuimj1sw.png


Сдампленный исполняемый файл — это динамическая библиотека, которая является лоадером, т.е. извлекает из секции ресурсов полезную нагрузку и производит ее запуск.
45lh5j34n5pflsbwjvunofgbykk.png

При этом сами необходимые ресурсы в дампе отсутствуют. Они находятся в родительском сэмпле.

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

    2frbydn7-vz764pf5oqs-5xqglm.png
  2. Вторая — переписать код функции у точки входа, чтобы вызвать нужный метод вставленной динамической библиотеки.

    zy3i72xavtsynr_bauq5nyazqzm.png
Сохраняем нашего «франкенштейна», ставим breakpoint на строке, возвращающей буфер с дешифрованными ресурсами, и производим дамп по аналогии с предыдущим этапом.

Второй дамп — это написанный на VB.NET исполняемый файл, который защищен знакомым нам протектором ConfuserEx.
xjg9meooplkgp8l7gfoousosxr4.png


lehi7ckvlg7i26bj24ox6mhs40u.png


После снятия протектора используем написанные ранее YARA-правила и убедимся в том, что распакованное ВПО — действительно AgentTesla.
qxomhbhkixl1u8jj6lqnjqlzg3a.png



Сэмпл №2

Исходный файл — документ MS Excel. К исполнению вредоносного кода приводит встроенный макрос.

p6p7z6_sccv0gjw608rxwwdzjs0.png


В результате запускается PowerShell-скрипт.
o6h-i12l0pshpo1p8fp3porfcck.png


shl5o-gwiskazeeyaajb10hglx0.png


Скрипт дешифрует код на C# и передает ему управление. Сам код является загрузчиком, что также видно из отчета песочницы.

asnycqkaabrg3nwn_bwxsu4idbq.png


zobkzz24wctt6ptm6bvsr-igldi.png


Полезная нагрузка представляет собой исполняемый .NET-файл.
c36rs3asfwjorzg686ucedjhgoq.png


Открыв файл в dnSpy x86, можно увидеть, что он обфусцирован. Снимаем обфускацию утилитой de4dot и возвращаемся к анализу.

В ходе исследования кода можно обнаружить следующую функцию:

op2otsscifdiprh3mvbee_8fcw8.png

В глаза бросаются закодированные строки EntryPoint и Invoke. Ставим breakpoint на первую строку, запускаем и сохраняем значение буфера byte_0.

Дамп вновь является приложением на .NET и защищен ConfuserEx.
gcvrpjllett4_ayunmvfchynxoq.png


groitegnkflmt9aosqlgmgib3wc.png


Снимаем обфускацию с помощью de4dot и загружаем в dnSpy. Из описания файла понимаем, что столкнулись с CyaX-Sharp loader.
52206tjxrnylcc_g-ayprten39w.png


Этот загрузчик обладает обширным функционалом для противодействия анализу.
xdtka7g43eqevn6uzn9dd2-j7qi.png

Этот функционал включает обход встроенных систем защиты Windows, отключение Windows Defender, а также механизмы обнаружения песочниц и виртуальных машин. Есть возможность подгружать полезную нагрузку из сети или хранить ее в секции ресурсов. Запуск выполняется через инжект в собственный процесс, в дубликат собственного процесса или же в процессы MSBuild.exe, vbc.exe и RegSvcs.exe в зависимости от выбранного злоумышленником параметра.

Однако для нас они менее существенны, чем AntiDump-функция, которую добавляет ConfuserEx. Ее исходный код можно найти на GitHub.

Для отключения защиты воспользуемся возможностью dnSpy, которая позволяет редактировать IL-код.
3lqf_hhmmpxdyczb1uvcc0z7of4.png


td_rk3haqxgklb20vkobvgw1ny0.png


Сохраняемся и ставим breakpoint на строку вызова функции дешифровки полезной нагрузки. Она находится в конструкторе основного класса.
7hretwjlklrjna4gsku1glbvq9e.png


Запускаем и дампим полезную нагрузку. Используя ранее написанные YARA-правила, убеждаемся, что перед нами AgentTesla.
javap26-msg8yup-eshiyhgbk8o.png



Сэмпл №3

Исходный файл — это исполняемый VB Native PE32-файл.

7uvcynbnrfmhglcq9rskdz0vpyo.png


Анализ энтропии показывает наличие большого фрагмента зашифрованных данных.
2gz4zqmn7vmgdftmyzcovpt1m5q.png


При анализе формы приложения в VB Decompiler можно заметить странный пиксельный фон.
2nqyhg4uktwjbpjtrpblhoiun8o.png


hzmfqsgxyqfedt6-lcoiwgy5xok.png


График энтропии bmp-картинки идентичен графику энтропии исходного файла, а размер составляет 85% от размера файла.

h8renlp6w9_gs0mc3qa8dkj3sme.png

Общий вид изображения свидетельствует об использовании стеганографии.

Обратим внимание на вид дерева процессов, а также на наличие маркера инжекта.

unrwcfp3pyy8-ww5v91rrjo3nv0.png


m_-zb4b0vyjpar3x392toay19qg.png


Это говорит о выполнении распаковки. Для загрузчиков на Visual Basic (они же VBKrypt или VBInjector) характерно использование shellcode для инициализации полезной нагрузки, а также для выполнения самого инжекта.

Анализ в VB Decompiler показал наличие события Load у формы FegatassocAirballoon2.

vagooa-hnf7zt5fg5acxdqqf7gq.png


Перейдем в IDA pro по указанному адресу и изучим функцию. Код сильно обфусцирован. Фрагмент, который нас интересует, представлен ниже.
j2gffjeaub6fpcan8f-xjrtzz34.png

Здесь производится сканирование адресного пространства процесса в поисках сигнатуры. Такой подход крайне сомнителен.

Во-первых, адрес начала сканирования 0x400100. Это значение статично и не корректируется при смещении базы. В идеальных тепличных условиях он будет указывать на конец PE-заголовка исполняемого файла. Однако база не статична, ее значение может меняться, а поиск реального адреса искомой сигнатуры хоть и не вызовет переполнения переменной, но может занять очень много времени.

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

В действительности искомый фрагмент прикреплен к концу найденной ранее bmp-картинки по смещению 0xA1D0D.

hq4-_wm6mkg_jl0jc87yxkccazg.png

Выполнение Shellcode осуществляется в две стадии. Первая производит дешифровку основного тела. При этом ключ определяется перебором.
suja4zppdzosqlzol2tfzx1ddum.png

Сдампим дешифрованный Shellcode и посмотрим на строки.

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

pgjjkewljfg9xc3q9-l0famn9py.png


Во-вторых, нам стал известен механизм закрепления в системе.

-mgpdcb6nkr8op8vujdzgmgiz4g.png


Вернемся к исходному процессу. Поставим breakpoint на CreateProcessInternalW и продолжим выполнение. Далее наблюдаем связку NtGetContextThread/NtSetContextThread, которая меняет адрес начала выполнения на адрес ShellCode.
hylbrwthjvmah2o3a5xvxp76dxs.png

Подключаемся к созданному процессу отладчиком, активируем событие Suspend on libraryu load/unload, возобновляем процесс и дожидаемся подгрузки .NET-библиотек.

Далее при помощи ProcessHucker дампим регионы, содержащие в распакованном виде .NET-приложение.

Останавливаем все процессы и удаляем закрепившуюся в системе копию ВПО.

85vnwxgzesq6euniiplqs_o1bhk.png


anizuhqn3yawpwd_mq7iujucxo0.png


Сдампленный файл защищен протектором .NET Reactor, который легко снимается при помощи утилиты de4dot.
u74gudip_a1ixlqu0fgfpeklx9a.png

Воспользовавшись написанными ранее YARA-правилами, убеждаемся, что перед нами AgentTesla.


Подведем итог

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

взято с хабра, автор - Group-IB
 
под кем ходят груп.иб?
Под небом. По земле.
А так, тесно работают с фейсами и подобного рода структурами.
на сайте разве нет инфы?
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх