Статья Новые методы антидебага

Admin

Администратор

Новые методы антидебага​


Обход заморозки процесса

Это милый небольшой флаг создания потока, который Microsoft добавила в 19H1. Вы когда-нибудь задумывались, почему есть дыра во флагах создания потоков? Что ж, дыра заполнена флагом, который я назову THREAD_CREATE_FLAGS_BYPASS_PROCESS_FREEZE (я понятия не имею, как он на самом деле называется), значение которого, естественно, равно 0x40.

Дабы продемонстрировать что оно делает,Я покажу как работает PsSuspendProcess.

C:
NTSTATUS PsSuspendProcess(_EPROCESS* Process)
{
const auto currentThread = KeGetCurrentThread();
KeEnterCriticalRegionThread(currentThread);

NTSTATUS status = STATUS_SUCCESS;
if ( ExAcquireRundownProtection(&Process->RundownProtect) )
{
auto targetThread = PsGetNextProcessThread(Process, nullptr);
while ( targetThread )
{
// Our flag in action
if ( !targetThread->Tcb.MiscFlags.BypassProcessFreeze )
PsSuspendThread(targetThread, nullptr);

targetThread = PsGetNextProcessThread(Process, targetThread);
}
ExReleaseRundownProtection(&Process->RundownProtect);
}
else
status = STATUS_PROCESS_IS_TERMINATING;

if ( Process->Flags3.EnableThreadSuspendResumeLogging )
EtwTiLogSuspendResumeProcess(status, Process, Process, 0);

KeLeaveCriticalRegionThread(currentThread);
return status;
}

Как видите, NtSuspendProcess, вызывающий PsSuspendProcess, просто проигнорирует поток с этим флагом. Еще один бонус в том, что поток также не приостанавливается NtDebugActiveProcess! Насколько мне известно, невозможно запросить или отключить флаг после того, как поток был создан с ним, поэтому вы ничего не можете с ним поделать.

Что касается его полезности, я бы сказал, что это просто приятная небольшая добавка против сброса и вызывает путаницу, когда вы нажимаете кнопку приостановить в Processhacker, и процесс продолжает работать, как будто ничего не произошло.

Пример:

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


C:
]#define THREAD_CREATE_FLAGS_BYPASS_PROCESS_FREEZE 0x40

NTSTATUS printer(void*) {
while(true) {
std::puts("I am running\n");
Sleep(1000);
}
return STATUS_SUCCESS;
}

HANDLE handle;
NtCreateThreadEx(&handle, MAXIMUM_ALLOWED, nullptr, NtCurrentProcess(),
&printer, nullptr, THREAD_CREATE_FLAGS_BYPASS_PROCESS_FREEZE,
0, 0, 0, nullptr);

NtSuspendProcess(NtCurrentProcess());

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

C:
ULONG KeSuspendThread(_ETHREAD *Thread)
{
auto irql = KeRaiseIrql(DISPATCH_LEVEL);
KiAcquireKobjectLockSafe(&Thread->Tcb.SuspendEvent);

auto oldSuspendCount = Thread->Tcb.SuspendCount;
if ( oldSuspendCount == MAXIMUM_SUSPEND_COUNT ) // 127
{
_InterlockedAnd(&Thread->Tcb.SuspendEvent.Header.Lock, 0xFFFFFF7F);
KeLowerIrql(irql);
ExRaiseStatus(STATUS_SUSPEND_COUNT_EXCEEDED);
}

auto prcb = KeGetCurrentPrcb();
if ( KiSuspendThread(Thread, prcb) )
++Thread->Tcb.SuspendCount;

_InterlockedAnd(&Thread->Tcb.SuspendEvent.Header.Lock, 0xFFFFFF7F);
KiExitDispatcher(prcb, 0, 1, 0, irql);
return oldSuspendCount;
}

Если вы посмотрите на первый пример кода с PsSuspendProcess, в нем нет проверки на ошибки, и вам все равно, если вы больше не можете приостановить поток. Так что же происходит, когда вы вызываете NtResumeProcess? Он уменьшает счетчик приостановки! Все, что нам нужно сделать, это довести его до максимума, и когда кто-то решит приостановить и возобновить нас, он фактически оставит счет в состоянии, в котором он не был ранее.

Пример

Приведенный ниже простой код довольно эффективен:
Visual Studio - предотвращает приостановку процесса после присоединения.
WinDbg - обнаруживается при подключении.

x64dbg - кнопка паузы становится схематичной с сообщениями об ошибках типа «Программа не запущена» до тех пор, пока вы вручную не переключитесь на основной поток.

ScyllaHide - более старые версии использовали NtSuspendProcess и вызывали его обнаружение, но это было исправлено, как только я сообщил об этом.

C:
for(size_t i = 0; i < 128; ++i)
NtSuspendThread(thread, nullptr);

while(true) {
if(NtSuspendThread(thread, nullptr) != STATUS_SUSPEND_COUNT_EXCEEDED)
std::puts("I was suspended\n");
Sleep(1000);
}

Заключение

Во всяком случае, я надеюсь, что это продемонстрировало, что лучше не полагаться на NtSuspendProcess в работе так хорошо, как вы ожидаете от инструментов, работающих с потенциально вредоносным или защищенным кодом. Надеюсь, вам понравился этот пост, и ожидаем, что в ближайшие недели появится больше контента.
 
Похожие темы
K Новые методы социальной инженерии Ч.2 Полезные статьи 0
K Новые методы социальной инженерии Полезные статьи 0
Adrogrom Старые и новые аккаунты Gmail | с 2FA и без | Ручная регистрация Аккаунты: сервисы, сайты, соц. сети 0
Admin Интересно Здравствуйте, мы ваши новые админы. UAT-8837 берёт под контроль сети в Северной Америке. Новости в сети 0
Admin Интересно Через кряки и YouTube распространяют новые загрузчики вредоносов. Новости в сети 0
Support81 Кибершпионы превратили редакции в новые поля сражений информационной войны Новости в сети 0
Support81 Утечка Pokémon: новые проекты и нереализованные идеи Новости в сети 0
Support81 Отказ от брендов: новые тенденции кибервымогателей Новости в сети 0
Support81 Новые полномочия Роскомнадзора могут изменить работу интернета в России Новости в сети 0
Support81 Бухгалтерия как приманка: новые детали атак VasyGrek на компании РФ Новости в сети 0
Support81 Взломаны 165 организаций: случай со Snowflake ставит новые цифровые рекорды Новости в сети 0
Support81 Bifrost: старый троян использует новые трюки, чтобы украсть вашу идентичность Новости в сети 0
Support81 Тайный декодер: ЕС вводит новые правила перехвата веб-трафика Новости в сети 0
Support81 Договор ООН о киберпреступности: новые стандарты или орудие репрессий? Новости в сети 0
D Скупаю ЛОГИ FACEBOOK|НОВЫЕ ЦЕНЫ УЖЕ В ТЕМЕ|САМЫЕ БОЛЬШИЕ ВЫПЛАТЫ Аккаунты: сервисы, сайты, соц. сети 2
S SHTAZI-IT ГОТОВЫ РЕАЛИЗОВАТЬ НОВЫЕ ПРОЕКТЫ! Ищу работу. Предлагаю свои услуги. 0
DOMINUS Новые поправки Финмониторинга в Украине Новости в сети 0
D Garlic - 50% за ребилы и новые заказы, средняя 400$ с клиента Способы заработка 1
D Получаем новые стикеры с кроликами от Durex Раздачи и сливы 0
Admin Статья Физическая прослушка: методы и защита. Анонимность и приватность 0
Admin Статья Backdoors и шпионы. Методы защиты Анонимность и приватность 0
Admin Статья Методы маскировки трафика и обхода средств обнаружения и блокировок (ShadowSocks, V2Ray/X-Ray и Cloak) Анонимность и приватность 0
Admin Статья Методы иньекции ELF файлов Вирусология 0
Admin Статья Методы поиска по электронной почте OSINT 0
wrangler65 Обход sms уведомлений и вход в лк: Cовременные методы работы с брут ба 2025 Все остальное 0
Support81 Взгляд изнутри: BlackBastaGPT раскрывает тактики и методы известной хакерской банды Новости в сети 0
Support81 HardBit 4.0: шифрование по паролю и сложные методы обхода анализа Новости в сети 0
El_IRBIS Интересно WallEscape: Уязвимость и методы её предотвращения. Уязвимости и взлом 0
TrashHellSoDomy Работающие методы по борьбе с гриппом типа ковида Юмор 3
N Методы манипуляции. 10 приемов. Фишинг, мошенничество, СИ 0
B Ищу методы для того чтобы быстро поспать с парнями бесплатно и безопасно. Свободное общение 2
Y Backdoors и шпионы. Методы защиты Анонимность и приватность 34
G Методы обхода фильтров по расширению при загрузке файлов Полезные статьи 0
K Владимир Макулов-методы Быстрого Погружения В Глубокий Гипноз. Гипнотерапия. Раздачи и сливы 0
K Geekbrains Безопасность в сети. Методы взлома и защиты https://mega.nz/#%2194l2kbLS%21B-PiBnPOyI9xypx8p-SqwM8S-JT5o1GRBlBV5cRFrg4 Раздачи и сливы 0
R [instagram] Раскручиваем Аккаунт С 0 До 50к Фолловеров Быстрые Методы Заработка Способы заработка 0
T Методы психологического воздействия Полезные статьи 0
A Методы шифрования Программирование 1
M Методы взлома телофонов по bluetooth Уязвимости и взлом 2

Название темы