Как функциональные пакеты обхода обхода безопасности

Я смотрю на некоторый код, который использует пакет обхода функций под названием DetourXS. Мое приложение предназначено для операционных систем Microsoft Server. У Microsoft Research также есть пакет Detours, и у них есть статья о том, как он работает. Они вносят исправления в машинный код, загруженный в память, и вставляют код, выполняющий безусловный переход во вновь внедренный код.

Если этот код работает путем изменения машинного кода во время выполнения, они должны столкнуться с ограничениями безопасности со стороны операционной системы. Это было бы серьезным нарушением безопасности ОС, поскольку я могу изменить любую критическую DLL, например kernel32, чтобы делать все, что захочу. Насколько я понимаю, если пользовательский процесс пытается изменить код DLL, уже загруженной в память, он должен быть остановлен ОС. Есть ли настройка в ОС Widows Server для включения/отключения этой проверки?

Как они преодолевают это?

Есть ли у кого-нибудь опыт использования такого рода обходных пакетов в любом приложении в производственной среде предприятия?


person LotusPetal    schedule 08.12.2010    source источник
comment
обратите внимание, что Microsoft не будет рассматривать обращения в службу поддержки от вас или ваших клиентов, если вы используете Detours. И тот факт, что ваше приложение использует его, искусственно делается явным, заставляя ваше приложение связываться с DLL marker - Detoured.dll   -  person Andrey    schedule 04.03.2011


Ответы (2)


Во-первых, важно то, что обходными путями вы изменяете инструкции вашего собственного процесса. В вашем процессе - вы все равно можете делать все, что хотите, и вам даже не нужно ничего обходить, с точки зрения ОС, код пользовательского пространства (например, код в вашей DLL и код в системной kernel32.dll, загруженный в ваш процесс) - это именно то, что то же самое с точки зрения безопасности. Причина проста — взломать безопасность ОС — это не то же самое, что изменить какой-то код вашего процесса в пользовательском пространстве. ОС защищает себя, не давая вашему процессу слишком много мощности (если вы не работаете в качестве администратора). В целях безопасности более интересно, как изменить код другого процесса (чтобы получить его привилегии или интересные данные, например, пароли), но это тема для другого обсуждения.

Во-вторых, detouring рассматривался как способ реализовать горячее исправление, то есть исправление критических системных служб на лету, без перезагрузки. Я не знаю, используется/поддерживается ли он в настоящее время Microsoft (согласно google да), но не случайно стандартный пролог имеет длину 5 байт (да, он идеален для выкладывая свою jmp инструкцию).

person Andrey    schedule 04.03.2011

Несмотря на свое название, kernel32.dll на самом деле не является ядром; он содержит точки входа в функции Win32 API, которые реализуют интерфейс Win32 для системных вызовов NT.

Кроме того, Windows (как и любая современная ОС) поддерживает копирование при записи, поэтому, если вы используете обходные пути для исправления общей DLL, такой как kernel32.dll, ОС сначала сделает частную копию для вашего процесса и исправит ее. Само ядро ​​NT совершенно безопасно.

person Aaron Klotz    schedule 04.03.2011