Привет, WASM. У меня следующий вопрос — возможно ли в принципе перехватывать инструкцию sysenter из под winxp, если оба процесса (и перехватчик, и жертва) находятся в ring3? Это точно возможно с помощью замены на ходу инструкций, изменяющих codeflow, аля jmp, call, ret, EIP и пр., но есть ли более быстродейственный метод? Процесс-жертва создается через CreateProcess. P.S. Пишу не руткит, но sandbox. P.P.S. Если я невнимательно облазил гугль, ткните меня туда, где можно почитать об этом?
Дык тогда уже патч win32k.sys. ntdll.dll ведь по сути является оберткой вокруг sysenter-ов, и некоторые хитрые приложения, которые (ошибочно) полагают, что я пытаюсь сломать их защиту, используют syscall-ы напрямую, таким образом не обращаясь к ntdll.dll. Дело в том, что идея заключается в написании именно sandbox - чтобы приложение, допустим, требующее прав администратора (например, пишущее в HKLM), думало, что оно туда и пишет, а на самом деле изменения вносились только в мой собственный hive. Если писать драйвер, перехват реализуется относительно просто — загвоздка в ring3.
Представь ситуацию, где мне нужно sandbox перенести на другую машину, на манер portable application. На другой машине тогда придется тоже патчить систему. Хуки в SSDT никак нельзя назвать ring3, или я чего-то недопонимаю. К тому же патчинг либ на диске - это ну совсем не "чистый" метод, различные антивирусы будут дико вопить, windows update тоже не обрадуется... В общем, этот вариант пригоден разве что для очень личного использования.
mwizard Ну и пусть процессы в ринг 3. Думаю запуск с правами админа не проблема, так что остаётся сделать дровину. Перехватывать инструкцию Sysenter не обязательно, начиная с XP SP2, достаточно поменять одну ячейку памяти, и все вызовы из юзермода пойдут не на Sysenter, а на твою процедуру. ohne Мне такой sanbox нахрен был-бы не нужен.
А если проблема? Т.е. у меня изначально цель создать сэндбокс, который был бы способен грузить "обернутое" приложение, требующее прав администратора, из под, например, гостевого аккаунта. Взять тот же Corel Draw. По сути, ему не нужны права администратора - только для регистрации activex-ов. Если я корректно зароутю запросы на запись файлов и изменение реестра в свою директорию сэндбокса, то нужные ему type libraries будут зарегистрированы только персонально для него, чего вполне достаточно для корректной работы приложения. Если бы все приложения пользовались ntdll, то и проблемы бы не было. Но почему-то все считают себя самыми умными и сопротивляются, по сути, безобидным операциям. btw, надо будет посмотреть, на каком уровне реализует перехват VMware ThinApp - как мне подсказали, он делает приблизительно то, что хочу написать я. Если ты имеешь в виду изменение MSR, то разве это возможно из usermode?
Вот некто blast ответил, что из usermode никак syscall не перехватить. Но так ли это на самом деле? Ведь остается еще как минимум динамическое дизассемблирование ближайших кусков кода с патченьем джампов, коллов и прочего - пока не найдем sysenter. Прозреваю, что это будет достаточно медленно.
Ооо, это уже лучше, ближе к цели. Но подозреваю, что обработчик должен всё равно находиться в kernel space. Или тоже нет? (скрестил пальцы)
Очень и очень замечательно. Спасибо за наводку, TSS, буду копать в этом направлении. Если будут какие-то успехи либо наоборот, неудачи, я тут отпишусь.
mwizard Переходники начиная в XP SP2 примерно такого плана. Код (Text): ZwSetValueKey :7C90E7BC mov eax, 0f7h :7C90E7C1 mov edx, 7ffe0300h :7C90E7C6 call dword ptr [edx] :7C90E7C8 ret 018 То есть меняем значение по адресу 7ffe0300h(юзермод), и вуаля. Не проверял как обстоят дела с последующими версиями, но думаю принцип не поменялся.
mwizard пишешь в MSR адрес своего хендлера, предварительно сохранив адрес системного хендлера, потом из дрова делаешь коллбэк в юзер-мод с последующим дёрганьем системного обработчика.
Если он не устанавливает драйвера, и моя тестовая программка, создающая файлики с помощью syscall-а, отследится нормально, то я его пореверсю. Надеюсь, авторы не будут сильно против Я пока смотрю на это, похоже, это то почти то, что нужно. Я еще проверю немного, и отпишусь сюда о прогрессе.
Exp10der Вы пробовали такое делать ? Юзер обосрётся от страха когда выскочит бсод при попытке заюзать Sysenter с взведённым TF(Trap Flag).
Позвольте, но Вы говорите о весьма и весьма странных юзерах Те, которых я знаю, даже слов таких страшных не слышали.