защита процесса от самого себя

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

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    gloomyraven
    Обойти перехват можно всегда, снять лог также(протрассировать), код считать.. если не из дрова реализовано, бесполезно защищаться в юзермоде. Единственный возможный вариант это перехватить диспетчер исключений(первую его инструкцию) и запретить запись в нтдлл, разумеется если он не перенаправлен(оригинальный адрес).
     
  2. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    gloomyraven
    В детаурах, вероятно, SECURITY_ATTRIBUTES предназначены для защиты процесса. Нет такого понятия, как "защита загружаемой длл с помощью ACL".
     
  3. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Sol_Ksacap
    Ну да... а жаль :)

    Clerk
    С перехватом исключений я уже думал, а вот что ты имеешь в виду под записью в нтдлл? Запись в адресном пространстве этого процесса? Или как?
     
  4. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    А как вам вариант с наложением, скажем, hasp конверта и привязке в usb ключу? :)))
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Диспетчер исклчений может быть перехвачен; единственный вариант выполнить обработку первым - перехват первой инструкции диспетчера(по дефолту это D[KeUserExceptionDispatcher]). Защита от записи - подмена файловой проеции, на не файловую проецию копии образа в памяти, после чего из юзермода запись в неё не возможна.
     
  6. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Тогда процесс отсканирует свою память и сверит через пеб сколько у нев загружено PE в памяти. Далее, если какие то пе содержат внутри себя пе, то проверит нахождение последних в определенных границах, а то что не прописано в пеб и не входит в границы пе, которые прописаны в пеб, будет считать инородным вторжением. Кроме того, если потерт заголовок инородного пе, проверит гарницы и контуры обнаруженной памяти с определенными аттрибутами, которая не принадлежит ни одному из пе, входящих в пеб. Если работа будет проведена неграмотно, то пе-паразит будет замечен.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ну во первых никакие пеб/лдр/заголовок и пр. не нужены чтобы найти проекцию модуля и сам модуль на диске(MemorySectionName). Можно конечно поступить нормальным способом - не внедрять модуль, а использовать пикод. Но обнаружить обработчик перехвата также просто - трассировать. Можно пойти дальше, не использовать инструкции передачи управления в перехватах, а использовать точки останова и обрабатывать перехват в диспетчере исключений(на быстродействии не сильно скажется, так как нормальное приложение не должно использовать бесконечные циклы). Это тоже можно оттрассировать и найти хэндлер обрабатывающий перехват.
    Лучшим вариантом должна стать эмуляция, но недостаток в снижении быстродействия. Например используется инструкция:
    mov dword ptr ds:[0],eax
    Делаем память куда обращаемся не доступной на запись и обрабатываем исключение, извлекаем смещение и уже из кода обработчика исключений пишем куда нужно с учётом смещения. Это только пример. Например можно хардварные регистры заюзать, можно сторожевые страницы.. можно вообще пойти дальше и использовать свой набор инструкций.
     
  8. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Это с учетом что тебя не палят проактивки и антивирьгуано. Для этого уже в процесс писать надо, а это будет ахтунг. По поводу проекции файла - самозагружающаяся длл решит этот вопрос наура.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    k3internal
    Ну и причём тут вири и фаеры ??
    Запись в свой процесс не палят, темболее аппаратными средствами :)
    Это что такое ?
     
  10. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    вопрос, зачем жопе баян ? на кой хрен тагда в свой же процесс писать.
    2. Это такая хрень каторая после загрузки переносит себя в память самостоятельно, настраивает релоки и выходит с кодом ошибки.
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    k3internal
    Это не свой процесс, это чужой процесс, из своего внедряется.
    2. Смысла нет в сказанном.
     
  12. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Народ, это конечно все хорошо, что из юзермода можно много изврата сделать: удаление инфы о библиотеки с хуком, использование точек останова вместо перехода на перехватчик, перехват диспетчера исключений и т.д.
    Но овчинка не стоит выделенки, т.к. неизвестно что именно делает покерный клиент, может так случится, что все эти методы - это стрельба из гаубицы 155мм по воробью, а может и наоборот... упустить нюанс и ппц... спалят.

    Остается два способа, как я понял:
    1. использовать драйвер для защиты (либо перенести перехватчик в драйвер);
    2. использовать сторонний протектор

    Кстати, 2-й вариант я щас и хочу обсудить, никто еще не высказался по поводу HASP`а, интересно услышать кто что думает.
     
  13. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    k3internal
    Clerk
    По поводу антивирусов/мониторов/фаеров:
    Может я немного не досказал? :)
    Все эти нехорошие дела будут происходить на моей машине, мне нужно использовать покерный клиент в своих целях :)
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    gloomyraven
    По сути ты ничего не сказал, не известно что нужно. Для начала что будет делать код из внедряемого модуля нужно знать(если тема про драйвера пошла).
     
  15. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Clerk
    Внедряемый код будет всего лишь перехватывать API функции в жертве, анализировать параметры функций и возвращаемые значения и отдавать жертве управление обратно
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    gloomyraven
    В общем задача не имеет решения. Так как целевой процесс на правах хозяина, пытаться скрыть перехват бесполезно.
     
  17. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Clerk
    В общем... ну даже не знаю.

    Счас создал маленький проектик в VS2005. Два приложение: одно из них внедряет код, другое будет его детектить.
    По ходу разбора буду выкладывать мысли и код.
     
  18. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Могет dll вообще не нужен рас надо токо хукнуть ?
    Например внедрить удаленный поток, который будет хукать ту функцию которая нуна, а еще словить KiFastSystemCall, чтоб проконтролировать сервисы ZwQueryVirtualMemory\ZwReadVirtualMemory\ZwProtectVirtualMemory на предмет обнаружения своего хука.

    Сомневаюсь что подобные клиенты юзают сервисы через int 2eh
     
  19. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Flasher
    процесс все равно сможет определить что функция перехвачена, например используя свой дизассемблер определить функцци, которые перехвачены сплайсингом

    процесс имеет права юзера, я не хочу использовать кернел-мод

    Этим я щас и занимаюсь, перехватываю эти функции (в адр. пространстве процесса-жертвы) и пытаюсь скрыть библиотеку с хуком. Вот только не знаю как обмануть при прямом чтении процессом своей памяти
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    gloomyraven
    Это юзермод. Тут подходит фраза против лома нет приёма.., если нет второго лома (c) Great.