В последнее время Seqrite В ходе исследования была обнаружена фишинговая кампания, в рамках которой вредоносные программы для Formbook распространялись через вложения в электронные письма. Formbook, появившийся в 2016 году, претерпел значительные изменения: от скрытых функций до методов обхода защиты. На хакерских форумах он продается как вредоносное ПО как услуга (Malware as a Service), и существует множество его вариантов. Хотя метод обхода защиты остается тем же, перед развертыванием полезной нагрузки используются несколько уровней защиты, которые загружаются только в память, чтобы избежать идентификации. Как и в других вариантах, здесь также используется стеганография для сокрытия вредоносных файлов внутри изображений, которые затем расшифровываются для загрузки и вызова в памяти.
Этот вариант содержит три ступени перед окончательной полезной нагрузкой
- Заказ на покупку.exe/XXXI.exe
- Артур.dll
- Монтеро.dll
- MASM (конечная полезная нагрузка)

Технический анализ:
Он начинается с фишингового письма, содержащего заказ на покупку и вложенный ZIP-файл. После извлечения он содержит только один PE-файл PurchaseOrder.exe, представляющий собой скомпилированный двоичный файл DotNet.

Этап 1 (Purchase Order.exe):
Этот вариант скрывает вредоносное ПО 2-й и 3-й стадий в ресурсе Purchase Order.exe. Имя ресурса:Хкыл«как показано на рис. 2, это двоичный код этапа 3.
Вредоносная программа сначала «спит» девять секунд, прежде чем приступить к расшифровке полезной нагрузки этапа 2. Как показано на рис. 3, она извлекает зашифрованные данные этапа 2 из APP Ресурс присутствует в файле Purchase Order.exe и хранится в массиве байтов. Он также хранит 16 байт ключа дешифрования для полезной нагрузки этапа 2, который называется «AP7H9H5OI4478F8CH05FGA».


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

После этого он настраивает array3, копируя 16-байтовый ключ в случайные позиции.

После установки значения array3 он выполняет xor-кодирование зашифрованных данных с array3 и сохраняет их в array2, который теперь содержит файл PE этапа 2 arthur.dll,
Для выполнения DLL-файла второго этапа используется метод InvokeMember(), который загружает расшифрованную сборку (Arthur.dll) в память с помощью метода Load. Как показано на рис. 5, функция Load не используется напрямую, а получает значение из объекта, значением которого является Load.

Этап 2 (Arthur.dll):
После загрузки в память, вызывается метод MainForm.Justy() из файла PE второго этапа с тремя аргументами. Эти аргументы используются в файле PE второго этапа для получения файла PE третьего этапа.


- WA = «486B796C» = Hkyl (ресурс в PurchaseOrder.exe, рис. 2)
- WZ = «62616F»=bao (Ключ дешифрования для этапа 3)
- @namespace = «AssessExampleCombatForm»[Имя проекта PurchaseOrder.exe]
Сначала этап 2 бездействует четырнадцать секунд, прежде чем приступить к расшифровке этапа 3.
Эта функция расшифровывает изображение, используя ключ, переданный в качестве аргумента, затем извлекает значения красного, зеленого и синего из каждого непрозрачного пикселя изображения и создает массив.

При использовании значения [ bao ], переданного на этапе 2, этот массив подвергается операции XOR, в результате чего загружается файл montero.dll на этапе 3, который также загружается в память с помощью метода Assembly.Load. После получения основного метода gnWmyvSdDoAS8VNPBy.ukHjJHqoK1 ( ) модуля этапа 3, он вызывается.

Этап 3 (Montero.dll):
На этом этапе 3 в PE-файле, перед вызовом основного метода ukHjJHqoK1(), его конструктор расшифровывает необходимые параметры конфигурации. Эти параметры содержат ключ расшифровки конечной полезной нагрузки, имя мьютекса и флаг включения/выключения мьютекса, место размещения файла, включено/выключено ли поведение загрузки файла, место загрузки файла и т. д. Эти параметры конфигурации хранятся в массиве [gnWmyvSdDoAS8VNPBy.YiEuqBAod0].

После расшифровки параметров конфигурации проверяется, включен ли флаг Mutex в 29 -й ячейке массива YiEuqBAod0. Если да, то создается мьютекс с именем « zpkpGXyWHvBpdzNULuLRtAzq ». Если мьютекс уже существует, процесс завершается. Такое поведение обычно используется для обхода обнаружения поставщиками решений в области безопасности и предотвращения запуска второго экземпляра того же вредоносного ПО. Затем проверяется флаг Sleep. Если он включен, процесс переходит в спящий режим, чтобы отложить выполнение и предотвратить обнаружение вредоносного поведения в песочницах.

Затем проверяется, включен ли флаг отображения диалогового окна в 30 -й позиции массива YiEuqBAod0; если включен, то появляется диалоговое окно, чтобы обмануть пользователя.

После этого проверяется 10 -я позиция массива YiEuqBAod0, которая используется в качестве пути для исключений. Если эта функция включена, путь к вредоносной программе добавляется в исключения, и этот командлет выполняется исполняемым файлом LOL [powershel.exe] в скрытых атрибутах окна, чтобы избежать обнаружения антивирусным программным обеспечением и скрыть его действия от жертвы.

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

Второе местоположение в массиве YiEuqBAod0, используемое злоумышленником для размещения файлов. Если этот флаг включен, вредоносная программа сначала проверяет наличие файла «qwwnzxGmN.exe» в папке «C:\Users\username\AppData\Roaming» на хосте жертвы. Если файла в указанном месте нет, она создает файл с установленным скрытым атрибутом, являющимся самокопией родительского файла. Это свойство может быть использовано злоумышленниками для маскировки присутствия вредоносной программы, чтобы предотвратить ее обнаружение администраторами и пользователями.

После того, как родительский файл будет скопирован в папку «%appdata%Roaming», как показано на рис. 14, этот файл будет добавлен в путь исключения. Затем он декодирует данные, закодированные в base64, которые были расшифрованы в конструкторе метода main на этапе 3, в строку, представляющую собой XML-файл. Этот XML-файл содержит значение, которое генерирует задачу. Эти значения включают в себя скрытый атрибут файла вредоносного ПО , сохранение активности, включенную функцию, выполнение команды по пути к файлу и т. д.


Этот XML-файл создаётся в папке %temp% с расширением «*.tmp», затем он обновляет необходимые значения в XML-файле, такие как «Location» и «USERID» и т. д. После этого он создаёт запланированную задачу со скрытым атрибутом «window» для сокрытия своего поведения от жертвы для сохранения, например, «updates\qwwnzxGmN», и импортирует этот XML-файл. Злоумышленник удалил файл tmp, чтобы не оставлять следов для аналитика безопасности.

На рис. 18 показан модуль 3 -го этапа, расшифровывающий окончательную полезную нагрузку. Переменная gnWmyvSdDoAS8VNPBy.AtOuOF5iCk = “ 4kQLt8DIME ” — это имя ресурса (в motero.dll). gnWmyvSdDoAS8VNPBy.NJMuDv6Sv6 = “ pqDVZxpXC ” — это ключ. Он загружает ресурс и передает его методу расшифровки Pp62t2mj9p вместе с ключом.
Метод дешифрования сохраняет окончательную полезную нагрузку в gnWmyvSdDoAS8VNPBy. w9Yu0dnomp.


Эта финальная полезная нагрузка представляет собой 32-битный двоичный файл, скомпилированный MASM, содержащий только секцию «.text». Это сильно обфусцированный код, расшифровывающий и шифрующий файлы на основе требований.

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

Если значение равно « 1 », то в качестве имени целевого процесса для создания родительского файла выбирается MSBuild.exe; если значение равно « 2 », то в качестве имени целевого процесса выбирается vbc.exe; если значение равно « 3 », то в качестве имени целевого процесса выбирается RegSvcs.exe. Если ни одно из указанных значений не указано, то в качестве родительского файла выбирается сам целевой процесс.

На этапе 3 конструктора он расшифровал последовательность API для опустошения процесса в методе bLmuzQDIA5(), сохраненном в CreateProcessA, эта вредоносная программа создала целевой процесс на основе вышеуказанного значения (рис. 17) и перевела этот процесс в приостановленный режим.
![]()

Метод je3uFjEe5y() сохранил WriteProcessMemory, он расшифровал окончательный раздел полезной нагрузки «.text» в памяти целевого процесса.

IOCS:
6A9F890C529C410FA32793F496E7F200
0DA34A44EE4876DD5E35939AF02F1D32
D751816C3673935BF989716ABD0DAB21
F8EC1BE3F2BD8269DB033375ED1A841E
Обнаружения:
Trojan.Formbook.S34651912
Правило Яры:
импорт «пе»
правило Formbook_varinat
{
строки:
$s1=”AP7H9H5OI4478F8CH05FGA” wide ascii
$s2 = {67 B7 76 87 0A C8 C4 5E 29 AC 76 8F 70 E8 6E 09 91 40 4A AE 28 D5 7F CE AB 90 4B D3 07 C1 A8 B2 A0 B3 88 B9 58 F3 CA A9 43 9D C5 C1}
$s3 = {78 33 66 C6 4D CD 82 2F B8 D6 10 8A B7 E9 D5 65 8B 45 1A B7 ED 08 2E B3 89 2F 0B 89 75 F5 08 5D}
состояние:
все они
}
TTP для атаки MITRE:
| тактика | Техника/Процедура |
| Первоначальный доступ | T1566.001: Вложение для фишинга |
| Типы | T1059.001:Интерпретатор команд и сценариев: PowerShell |
| T1053.005:Запланированная задача/задание:Запланированная задача | |
| Настойчивость | T1053.005:Запланированная задача/задание:Запланированная задача |
| Уклонение от защиты | T1027.003:Запутанные файлы или информация: стеганография |
| T1036:Маскарад | |
| T1497:Уклонение от виртуализации/песочницы | |
| T1055.012:Процесс впрыскивания: процесс выдалбливания | |
| Дискавери | T1082:Обнаружение системной информации |
| T1083:Обнаружение файлов и каталогов | |
| T1057:Обнаружение процесса |
Вывод:
При использовании вредоносного ПО как услуги мы можем наблюдать несколько версий Formbook. Зачастую оболочка постоянно меняется, но конечная полезная нагрузка остаётся неизменной, что позволяет избежать обнаружения антивирусами. Злоумышленники распространяют это вредоносное ПО через фишинговые письма, в которые вложены вредоносные документы или исполняемые двоичные файлы. Пользователям рекомендуется избегать открытия подозрительных писем с вложениями. Этот вариант использует методы уклонения от проверки для поддержания активности. Скрытие атрибутов файла позволяет избежать обнаружения системным администратором или пользователем. Создание мьютекса гарантирует запуск только одного экземпляра вредоносного ПО в системе.
Автор: Румана Сиддики и Манодж Кумар Ниламегам



