Перехват syscall из ring 3

Тема в разделе "WASM.BEGINNERS", создана пользователем mwizard, 13 апр 2009.

  1. mwizard

    mwizard New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    13
    Привет, WASM.

    У меня следующий вопрос — возможно ли в принципе перехватывать инструкцию sysenter из под winxp, если оба процесса (и перехватчик, и жертва) находятся в ring3? Это точно возможно с помощью замены на ходу инструкций, изменяющих codeflow, аля jmp, call, ret, EIP и пр., но есть ли более быстродейственный метод? Процесс-жертва создается через CreateProcess.

    P.S. Пишу не руткит, но sandbox.
    P.P.S. Если я невнимательно облазил гугль, ткните меня туда, где можно почитать об этом?
     
  2. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    патч ntdll.dll на диске?
     
  3. mwizard

    mwizard New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    13
    Дык тогда уже патч win32k.sys.

    ntdll.dll ведь по сути является оберткой вокруг sysenter-ов, и некоторые хитрые приложения, которые (ошибочно) полагают, что я пытаюсь сломать их защиту, используют syscall-ы напрямую, таким образом не обращаясь к ntdll.dll.

    Дело в том, что идея заключается в написании именно sandbox - чтобы приложение, допустим, требующее прав администратора (например, пишущее в HKLM), думало, что оно туда и пишет, а на самом деле изменения вносились только в мой собственный hive.

    Если писать драйвер, перехват реализуется относительно просто — загвоздка в ring3.
     
  4. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    SSDT/Shadow SSDT патч и желательно на диске, это ведь sandbox значит такое поведение допустимо
     
  5. mwizard

    mwizard New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    13
    Представь ситуацию, где мне нужно sandbox перенести на другую машину, на манер portable application. На другой машине тогда придется тоже патчить систему.

    Хуки в SSDT никак нельзя назвать ring3, или я чего-то недопонимаю.

    К тому же патчинг либ на диске - это ну совсем не "чистый" метод, различные антивирусы будут дико вопить, windows update тоже не обрадуется... В общем, этот вариант пригоден разве что для очень личного использования.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    mwizard
    Ну и пусть процессы в ринг 3. Думаю запуск с правами админа не проблема, так что остаётся сделать дровину. Перехватывать инструкцию Sysenter не обязательно, начиная с XP SP2, достаточно поменять одну ячейку памяти, и все вызовы из юзермода пойдут не на Sysenter, а на твою процедуру.

    ohne
    Мне такой sanbox нахрен был-бы не нужен.
     
  7. mwizard

    mwizard New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    13
    А если проблема? Т.е. у меня изначально цель создать сэндбокс, который был бы способен грузить "обернутое" приложение, требующее прав администратора, из под, например, гостевого аккаунта.

    Взять тот же Corel Draw. По сути, ему не нужны права администратора - только для регистрации activex-ов. Если я корректно зароутю запросы на запись файлов и изменение реестра в свою директорию сэндбокса, то нужные ему type libraries будут зарегистрированы только персонально для него, чего вполне достаточно для корректной работы приложения. Если бы все приложения пользовались ntdll, то и проблемы бы не было. Но почему-то все считают себя самыми умными и сопротивляются, по сути, безобидным операциям.

    btw, надо будет посмотреть, на каком уровне реализует перехват VMware ThinApp - как мне подсказали, он делает приблизительно то, что хочу написать я.

    Если ты имеешь в виду изменение MSR, то разве это возможно из usermode?
     
  8. mwizard

    mwizard New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    13
    Вот некто blast ответил, что из usermode никак syscall не перехватить. Но так ли это на самом деле?

    Ведь остается еще как минимум динамическое дизассемблирование ближайших кусков кода с патченьем джампов, коллов и прочего - пока не найдем sysenter. Прозреваю, что это будет достаточно медленно.
     
  9. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    MSR можно изменять из usermode, функцией ZwSystemDebugControl.
     
  10. mwizard

    mwizard New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    13
    Ооо, это уже лучше, ближе к цели. Но подозреваю, что обработчик должен всё равно находиться в kernel space. Или тоже нет? (скрестил пальцы)
     
  11. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Где определите, там и будет.
     
  12. mwizard

    mwizard New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    13
    Очень и очень замечательно. Спасибо за наводку, TSS, буду копать в этом направлении.

    Если будут какие-то успехи либо наоборот, неудачи, я тут отпишусь.
     
  13. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    mwizard
    Переходники начиная в XP SP2 примерно такого плана.
    Код (Text):
    1. ZwSetValueKey
    2. :7C90E7BC mov eax, 0f7h
    3. :7C90E7C1 mov edx, 7ffe0300h
    4. :7C90E7C6 call dword ptr [edx]
    5. :7C90E7C8 ret 018
    То есть меняем значение по адресу 7ffe0300h(юзермод), и вуаля.
    Не проверял как обстоят дела с последующими версиями, но думаю принцип не поменялся.
     
  14. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    это не спасет от того кто юзает int2e/syscall
     
  15. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    mwizard
    пишешь в MSR адрес своего хендлера, предварительно сохранив адрес системного хендлера, потом из дрова делаешь коллбэк в юзер-мод с последующим дёрганьем системного обработчика.
     
  16. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Exp10der
    То, что ты написал противоречит постановке задачи топик-стартера.
     
  17. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Вроде Thinstaller реализует sandbox, может ли он перехватить sysenter - анализом кода или как?
     
  18. mwizard

    mwizard New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    13
    Если он не устанавливает драйвера, и моя тестовая программка, создающая файлики с помощью syscall-а, отследится нормально, то я его пореверсю. Надеюсь, авторы не будут сильно против :)

    Я пока смотрю на это, похоже, это то почти то, что нужно. Я еще проверю немного, и отпишусь сюда о прогрессе.
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Exp10der
    Вы пробовали такое делать ?
    Юзер обосрётся от страха когда выскочит бсод при попытке заюзать Sysenter с взведённым TF(Trap Flag).
     
  20. mwizard

    mwizard New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    13
    Позвольте, но Вы говорите о весьма и весьма странных юзерах :) Те, которых я знаю, даже слов таких страшных не слышали.