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

Статья CredoMap - сделано в России

вавилонец

CPU register
Пользователь
Регистрация
17.06.2021
Сообщения
1 116
Реакции
1 265
3333.png

ОРИГИНАЛЬНАЯ СТАТЬЯ
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 на SSD для Jolah Milovski ---> 0x5B1f2Ac9cF5616D9d7F1819d1519912e85eb5C09 для поднятия ноды ETHEREUM и тестов

CredoMap — это стиллер, разработанный российскими APT28/Sofacy/Fancy Bear, который использовался для таргетинга на пользователей в Украине в контексте продолжающейся войны между Россией и Украиной. Первоначально вредоносное ПО было обнаружено Google и CERT-UA Злоумышленник использовал документ для использования уязвимости Follina (CVE-2022-30190), которая привела к загрузке стилера .NET. Вредоносная программа нацелена на кражу учетных данных и файлов cookie из Google Chrome, Mozilla Firefox и Microsoft Edge. Эксфильтрация данных осуществляется путем отправки информации на возможно скомпрометированный сервер C2 по протоколу электронной почты IMAP.

SHA256: 2318ae5d7c23bf186b88abecf892e23ce199381b22c8eb216ad1616ee8877933


Процесс извлекает путь к текущему исполняемому файлу, а затем подключается к жестко запрограммированному серверу C2 (162.241.216.236) через порт 143 (IMAP), используя жестко запрограммированные учетные данные:
1664501385883.png

1664501399426.png


Зловред создает объект TcpClient, получает клиентский поток для чтения и записи, а затем считывает ответ от сервера:

1664501474866.png


Двоичный файл выполняет операцию входа в систему и читает ответ, используя метод Read:

1664501520258.png


Он выбирает папку INBOX с помощью команды SELECT и выполняет несколько вызовов функций, которые крадут учетные данные и файлы cookie браузеров:

1664501552912.png


1664501592552.png


Образец проверяет, существует ли файл «\Google\Chrome\User Data\Default\Network\Cookies» в папке Local AppData, вызывая функцию File.Exists:

1664501616889.png


Метод File.Copy используется для копирования вышеуказанного файла в новый файл с именем «cc»:

1664501640233.png


Вредоносный двоичный файл открывает соединение с базой данных Cookies и выполняет SQL-запрос, который извлекает некоторые поля:

1664501670992.png


Процесс открывает и читает файл с именем «Local/Google/Chrome/User Data/Local State» с помощью File.ReadAllText. Он извлекает случайный ключ в кодировке Base64, зашифрованный с помощью DPAPI, из JSON(["os_crypt"]["encrypted_key"]). Ключ декодируется с помощью Base64 и расшифровывается с помощью вызова функции ProtectedData.Unprotect:

1664501720668.png


Извлеченное из базы данных Cookies «encrypted_value» расшифровывается с помощью методов ProcessBytes и DoFinal:

1664501774480.png


Результирующие значения сохраняются в словаре с ключами «host_key» со значениями «name=<Decrypted зашифрованное_значение>;», как показано на рисунке ниже.

1664501805299.png


Наконец, процесс сериализует словарь в строку JSON, используя JsonConvert.SerializeObject:

1664501841832.png


Эксфильтрация данных происходит путем ввода действительной команды IMAP APPEND. В поле «От» указано имя пользователя, полученное из свойства Environment.UserName, в поле «Тема» — текущая дата и время на компьютере, полученные из свойства DateTime.UtcNow, а строка JSON также включена в команду

1664501885816.png


Вредоносная программа проверяет наличие файла «\Google\Chrome\User Data\Default\Login Data» в папке Local AppData с помощью File.Exists:

1664501911489.png


Функция File.Copy используется для копирования вышеуказанного файла в новый файл с именем «cp»:

1664501935476.png


Бинарный файл открывает соединение с базой данных Login Data и выполняет SQL-запрос, который извлекает поля «action_url», «username_value» и «password_value»:

1664501977082.png


Вредоносный процесс считывает файл «Local/Google/Chrome/User Data/Local State», найденный в каталоге AppData, и десериализует его с помощью метода JsonConvert.DeserializeObject:

1664501996180.png

1664502011220.png


Образец извлекает случайный ключ в кодировке Base64, зашифрованный с помощью DPAPI, из ["os_crypt"]["encrypted_key"]. Ключ декодируется с помощью Base64 и расшифровывается с помощью вызова функции ProtectedData.Unprotect:

1664502040119.png


Зашифрованное поле «password_value» расшифровывается с помощью функции, которая будет объяснена ниже:

1664502057260.png


Первые 12 байтов после пропуска 3 байтов (тег версии) из «password_value» представляют одноразовый номер AES, а остальная информация представляет собой зашифрованный текст, как показано на рисунке ниже.

1664502098998.png


Как и в первом случае, поле «значение_пароля» расшифровывается вызовом функций ProcessBytes и DoFinal:

1664502123977.png


Однако не все пароли могут быть зашифрованы с помощью AES-GCM. В случае более старых версий Chrome злоумышленник пытается расшифровать пароли с помощью API ProtectedData.Unprotect:

1664502160291.png


Как мы видим на рисунке 26, процесс вычисляет строку, содержащую «action_url», «username_value» и расшифрованное поле «password_value», которое было получено с использованием 1-го метода расшифровки или 2-го метода расшифровки соответственно:

1664502189111.png


Эксфильтрация учетных данных происходит таким же образом с помощью команды IMAP на сервер C2. Бинарный файл проверяет, может ли каталог «Mozilla\Firefox\Profiles\» находиться в папке AppData

1664502226327.png


Вредоносная программа ищет файл с именем «cookies.sqlite» в папках профиля. База данных «cookies.sqlite» копируется в файл с именем «fc»:

1664502251522.png


Образец запускает SQL-запрос «SELECT * FROM moz_cookies» для получения файлов cookie Firefox:

1664502276581.png


Создается новый словарь с ключами «host» со значениями «name=value;», как показано на рисунке ниже.

1664502314879.png


Словарь сериализуется в JSON и будет удален через IMAP. Исполняемый файл проверяет, можно ли идентифицировать следующие файлы в папках профиля:
  • logins.json
  • key4.db
  • cert9.db
  • signons.sqlite
  • key3.db
  • cert8.db

1664502391785.png


Если какой-либо из вышеуказанных файлов существует, он копируется в текущий каталог, а его содержимое кодируется с использованием Base64. Расположение файла и содержимое в кодировке Base64 эксфильтрируются с использованием протокола IMAP. Наконец, вновь созданные файлы удаляются с помощью File.Delete:

1664502425001.png


Функция File.Exists используется для проверки наличия файла «\Microsoft\Edge\User Data\Default\Login Data» в каталоге Local AppData:

1664502455989.png


Приведенный выше файл копируется в новый файл с именем «ep»

1664502490157.png


В примере выполняется следующий SQL-запрос, который извлекает имена пользователей и зашифрованные пароли из таблицы «логины»:

1664502514413.png


Поле «password_value» расшифровывается путем вызова функции расшифровки, которая также использовалась для расшифровки учетных данных Chrome:

1664502538338.png


В случае более старых версий Microsoft Edge процесс пытается расшифровать пароли с помощью функции ProtectedData.Unprotect:

1664502557640.png


Вредоносная программа создает строку, содержащую «action_url», «username_value» и расшифрованное поле «password_value», полученное одним из двух способов расшифровки:

1664502578916.png


Исполняемый файл проверяет, можно ли найти файл «\Microsoft\Edge\User Data\Default\Network\Cookies» в папке Local AppData

1664502607056.png


File.Copy используется для копирования вышеуказанного файла в файл с именем «ec»:

1664502622505.png


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

1664502694306.png


Двоичный файл извлекает ключ в кодировке Base64, зашифрованный с помощью DPAPI, из «%LocalApplicationData%\Microsoft\Edge\User Data\Local State». Ключ расшифровывается через вызов функции ProtectedData.Unprotect:

1664502729047.png


Поле «encrypted_value» расшифровывается с помощью извлеченного выше ключа AES путем вызова методов ProcessBytes и DoFinal:

1664502751370.png


Результатом функции является словарь, содержащий соответствующую информацию, которая сериализуется с помощью JsonConvert.SerializeObject:

1664502779025.png


Все файлы, которые были скопированы в текущий каталог, удаляются с помощью функции File.Delete:

1664502796938.png


Вредоносный процесс устанавливает атрибуты Normal для файла с именем «SQLite.Interop.dll», который, как обнаружила Malwarebytes, был загружен с сервера C2 вместе с исходным исполняемым файлом. Файл DLL удаляется с помощью File.Delete и другой функции удаления, реализованной вредоносной программой:

1664502819897.png


Реализация функции удаления состоит в создании процесса cmd.exe, удаляющего файл DLL, показанный выше:

1664502841724.png


Процесс удаляет исходный исполняемый файл и затем завершается:

1664502891429.png


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

C2-сервер
162.241.216.236

SHA256
2318ae5d7c23bf186b88abecf892e23ce199381b22c8eb216ad1616ee8877933

Порожденные процессы
cmd.exe «/C Del <files>»

Правило YARA для обнаружения угрозы

rule CredoMap_APT28

Код с оформлением (BB-коды):
{
meta:
 author = "Vlad Pasca - SecurityScorecard"
 Date = "2022-09-16"
strings:
 $s1 = "\\cookies.sqlite" fullword wide
 $s2 = "SQLite.Interop.dll" fullword wide
 $s3 = "Subject:" fullword wide
 $s4 = "$ LOGIN" fullword wide
 $s5 = "/C Del" fullword wide
condition:
 (uint16(0) == 0x5A4D) and (4 of ($s*))
}
 


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