проактивка и CreateRemoteThread

Тема в разделе "WASM.WIN32", создана пользователем jtysrtj, 19 сен 2009.

  1. jtysrtj

    jtysrtj New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2009
    Сообщения:
    2
    Внедряю код в процесс с помощью стандартной апи-функции CreateRemoteThread

    все замечательно работает, но проактивка KIS палит создание удаленного потока, и ругается на подозрительную активность

    подскажите пожалуйста, достаточно ли будет для обхода проактивки эмуляции CreateRemoteThread с помощью недокументированных функций ntdll ?
    если да, то каким образом можно ее сэмулировать?
    если нет, то как ее обойти ?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    jtysrtj
    В 7-й виндоз есть какието неизвестные мне сервисы, но в XP нет таких. Клиф мониторит ядерный вызовы в сдт, более того внедрение кода в процесс обычными техническими способами не пройдёт, тредуется описатель целевого процесса, который без открытия или создания процесса негде взять.
     
  3. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Истину глаголит Clerk где брать то "права" на открытия процесса, любая проактивка уже этот фак запалит. ТАк что тут надо рыть чтото новое
     
  4. jtysrtj

    jtysrtj New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2009
    Сообщения:
    2
    а хуки в сдт реально снять или нет ?
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    jtysrtj
    Никаких проблем с восстановлением сдт нет.. из ядра.
     
  6. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Ну-ну, надежды юношей питают... ))
     
  7. maksim_

    maksim_ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2009
    Сообщения:
    263
    можно попробовать через WriteProcessMemory создать поток, но её, насколько мне помнится КАВ тоже хучит. как-то давно (года 2 назад), этот способ прокатывал, КАВ на вызов WriteProcessMemory (без последующего CreateRemoteThread) не жаловался. теперь х.з., давно подобным софтом не занимался.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    В таком случае перемап секций, 10-й клиф не следит за этим.
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    а GetThreadContext/SetThreadContext не пробывал?) ну или там через Mutex...
     
  10. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    можно спросить это как? чисто из любопытства
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Rel
    А толку пробовать, если сервис захвачен(#213):
    [​IMG]
    http://wasm.ru/forum/viewtopic.php?pid=316289#p316289
    Давно кисой не интересовался, но попробуйте физиклмемори секцию замапить через сокращение имени(директорию открыть), может не пофиксили, тогда вся ось доступной будет. Хотя всё это хлам.
     
  12. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    В общем (самом херовом) случае сдт не восстановить. Как говорится, кто первый - тот и папа :) В частном случае нетрудно;)
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Medstrax
    В теории да, но, как правило, авторы проактивок оставляют парочку дырок, из-за которых "папа" теряет свой контроль над системой)
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Medstrax
    Некоторые базовые принципы, которые следует применить если хотите найти дырку(отсутствие проверок вхождения указателя в диапазон пользовательского ап. и тп. не рассматриваем, это вроде реализовано граматно):
    o Проверка нулевых указателей. Ядро не всегда проверяет нулевые указатели, не критично ибо сех обработает сепшен при доступе. Память с нулевого адреса мы можем выделить. Прот также выполняет проверки нулевых указателей, отпуская сервис если такой указатель обнаружен.
    o Аттач. KeStackAttachProcess/KeAttachProcess. Если выполнены эти функции, после них может возникнуть исключение, а сех не выполнит детач, то по возврату потока из сервиса он окажется в другом процессе.
    o SuspendApc. Тред на нулевом IRQL может быть остановлен, если доставка ядерной апк не запрещена. Это грубые ошибки синхронизации. Например ObOpenObjectByName, далее мы можем остановить тред и взять хэндл. Как видно клиф не выполняет подобную синхронизацию.
    o Освобождение/выделение памяти. Например перехватчик проверил валидность буфера, если не валидный, то отпустит сервис. Тут мы выделяем память и буфер становится валидным(2 потока).
     
  15. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    у меня проактивка не палила следующее:

    1. OpenProcess
    2. ???
    3. VirtualAllocEx
    4. WriteProcessMemory
    5. QueueUserAPC

    самое веселое, и вставить бы почаще - эмуляция замолкает.
    ???:
    __try {
    __asm in al, 2
    } __except( EXCEPTION_EXECUTE_HANDLER ) {
    hProcess = (HANDLE)( (DWORD)hProcess + ( STATUS_PRIVILEGED_INSTRUCTION - GetExceptionCode() ));
    }
     
  16. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    эммм... поясните мне тупому блок '???'... в основном вопрос в хитрой строчке с хендлом... что это за вычисления?)
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    PavPS
    Эмулятор != прот. Вдобавок in al,2 будет использована непосредственно как сигнатура.
     
  18. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    Если, к примеру, вы пишите инфектор для PE, и спользуете соответствующие структуры, поинтеры, то вош код либо сразу после компиляции либо после запуска будет назван как вирус (я точно не помню то название, коим каспер его именует). Е вот если испоьлзовать указатели на не валидный, абстрактный блок памяти, затем спомощью такого блока ИМЕННО в except блоке вычислить валидное значение указателя, то это остается не замеченным. Для всех авиров не утверждаю. проверено на каспере. хотя есть сведения, что эта технология все же подходит и для других.
    Так же происходит и с хэндлами к процессу. Каспер палит последовательность открытия процесса и записи в его память. Если использовать этот блок, то кепочка открыть_процесс-записать_в_его_память будет разорвана. Опять таки лично проверено и используется.
    Я предполагаю, что это лишь средство против эмулятора (или как там её, проактивки). Ессно, если хэндлить операции сверху в НТ-шных вызовах, то реальные указатели и хэндлы полюбому всплывут, но на данный момент каспер до этого не дошел.
    Надеюсь пояснил.
     
  19. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    именно используя эту константу и код, который будет возвращен при обработке исклолючения (в сумме даст 0) и дает ровно такое же значение хэндла hProcess. Но... эмуль каспера не корректно работает (видимо) с этим и значение GetExceptionCode() получается не равным STATUS_PRIVILEGED_INSTRUCTION, а значит получает не тот хэндл и теряет связь со следующим этапом записи в память.
     
  20. VaZoNeZ

    VaZoNeZ New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2009
    Сообщения:
    121
    PavPS, ждите в скором времени костылей :)