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

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
Admin Интересно Почта под колпаком 3,5 месяца. Новые документы раскрывают, насколько глубоко взломщики SolarWinds проникли в Министерство финансов США. Новости в сети 0
Admin Интересно СОРМ 2.0: новые требования к сбору данных о пользователях. Новости в сети 0
Admin Интересно GitHub представил новые функции безопасности для npm. Новости в сети 0
Admin Интересно Пентагон опубликовал новые файлы о НЛО, включая загадочные шары и записи астронавтов. Новости в сети 0
Admin Интересно Британская армия получит новые самоходные гаубицы RCH 155. Новости в сети 0
Admin Интересно VPN, просевший трафик и минус 7 млрд руб. Как новые требования Минцифры ударили по маркетплейсам. Новости в сети 0
Admin Интересно OpenAI представила новые голосовые модели для API. Новости в сети 0
Admin Интересно Telegram обновился до версии 12.7: новые функции для каналов, групп и ИИ-редактора. Новости в сети 0
Admin Интересно В России готовят новые меры против мошенников. Новости в сети 0
Admin Интересно Япония представила новые ракеты Type 25 с дальностью до 1000 км и гиперзвуковыми блоками. Новости в сети 0
Admin Интересно Google Диск представил новые инструменты для защиты от вымогателей. Новости в сети 0
Admin Интересно SuperAgers: старики с суперсилой. Их мозг растит новые нейроны даже в 80 лет. Новости в сети 0
Admin Интересно Еженедельный обзор: уязвимости, атаки на CI/CD и новые угрозы. Новости в сети 0
Admin Интересно Nvidia представит новые чипы и программное обеспечение на конференции GTC. Новости в сети 0
Admin Интересно От входа в FortiGate до полного контроля за 10 минут. Новые сценарии атак на корпоративные сети. Новости в сети 0
Admin Интересно Новые требования в области информационной безопасности для МФО в 2026 году. Новости в сети 0
Admin Интересно Еженедельный обзор кибербезопасности: уязвимости Qualcomm, iOS и новые атаки. Новости в сети 0
Admin Интересно Age assurance — это новые куки-баннеры, только гораздо опаснее и забирают ваши фото. Новости в сети 0
Admin Интересно Еженедельный обзор кибербезопасности: уязвимости, атаки и новые угрозы. Новости в сети 0
Admin Интересно ФБР закрыло RAMP, но вымогатели нашли новые платформы. Новости в сети 0
Admin Интересно Маскировка уровня «так себе». Group-IB нашла новые следы крупнейшего теневого провайдера. Новости в сети 0
Adrogrom Старые и новые аккаунты Gmail | с 2FA и без | Ручная регистрация Аккаунты: сервисы, сайты, соц. сети 6
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 Интересно Группа Webworm активно развивает свои методы атак. Новости в сети 0
Admin Интересно Израильские компании разработали методы отслеживания пользователей Starlink. Новости в сети 0
Admin Интересно Китайские хакеры используют изощрённые методы для слежки за журналистами и активистами. Новости в сети 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

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