The article considers methods of code injection tothe process under the operating system of GNU/Linux family. It describes the terms ofapplicability and difficulties of the basic method realization and provides its modification.
The code injection to the process under an operating system GNU/Linux.pdf Внедрение программного кода в процесс в операционной системе (ОС) имеет двойноеназначение: кроме целей исследовательского характера, оно может преследоватьугрозу безопасности компьютерной системы, позволяя нарушителю, например,- получить доступ к данным, находящимся в виртуальном адресном пространствеэтого процесса;- получить данные в обход криптографических механизмов защиты, реализуемыхэтим процессом;- изменять данные процесса.Но как бы то ни было, знание методов внедрения кода в процесс в ОС несёт в себенесомненный положительный эффект: в одном случае оно расширяет возможностидля исследования, в том числе и для обнаружения уязвимостей в ОС, а в другом -мотивирует разработку адекватных методов защиты ОС от соответствующих угроз.Методы внедрения кода в процессы в ОС Windows, в отличие от ОС семействаLinux, широко известны [1, 2]. В данной работе два таких метода переносятся на ОСGNU/Linux. Условиями для их применения являются:1) наличие прав доступа пользователя ОС, в процесс которого внедряется код;2) возможность исполнять системный вызов ptrace этим пользователем.Метод 1 внедрения кода в процесс ОС GNU /LinuxШаг 1. Открыть процесс на отладку, используя системный вызов ptrace.Шаг 2. Определить адреса библиотечных функций, используемых во внедряемомкоде, и разместить их в нем.Шаг 3. Записать внедряемый код в любую область памяти, имеющую право навыполнение кода процессом.Шаг 4. Изменить указатель следующей выполняемой команды на адрес внедренногокода.Шаг 5. Закрыть процесс, используя системный вызов ptrace. При этом процессначинает выполнять внедренный код.Этот метод имеет следующие сложности реализации:- внедряемый код должен быть написан на языке ассемблера и быть позиционнонезависимым, т. е. не зависеть от адреса, по которому его внедрили;- адреса библиотечных функций, используемых кодом, должны быть вычислены дозаписи кода;- необходимые библиотеки могут быть не подгружены в адресное пространство процесса.Для устранения данных ограничений возможно использование следующего метода.Метод 2 внедрения кода в процесс ОС GNU /Linu x с загрузкой библиотекиШаг 1. Написать библиотеку на языке высокого уровня, реализующую необходимыефункции.Шаг 2. Открыть процесс на отладку, используя системный вызов ptrace.Шаг 3. Изменить код библиотеки ld -lin u x .s o , находящийся в адресном пространствепроцесса, так, чтобы можно было загрузить произвольную библиотеку в адресноепространство процесса.Шаг 4. Записать код, подгружающий библиотеку из шага 1, в любую область памяти,имеющую право на выполнение кода процессом.Шаг 5. Изменить указатель следующей выполняемой команды на адрес кода, подгружающегобиблиотеку.Шаг 6. Закрыть процесс, используя системный вызов ptrace. При этом процессначинает выполнять код, подгружающий библиотеку.Эти методы реализованы и опробованы в дистрибутиве Gentoo.
Смит Илья Владимирович | Национальный исследовательский Томский государственный университет | студент | blackzert@gmail.com |
Using Process Infection to Bypass Windows Software Firewalls [Электронный ресурс]. - Режим доступа : http://www.phrack.org/issues.php?issue=62&id=13
http://www.phrack.com/issues.html?issue=65&id=10 phook - The PEB Hooker [Электронный ресурс].
http://www.phrack.com/issues.html?issue=59&id=12 Building ptrace injecting shellcodes [Электронный ресурс].