
Коллекция образцов и материалов, связанных с внедрением в процессы.
Комплексный набор техник внедрения кода в процессы для Linux, демонстрирующий различные способы инжекции кода в запущенные процессы. Эти примеры предназначены для образовательных целей, исследований в области безопасности и понимания низкоуровневого управления процессами в Linux.
Инжекция процессов — это техника, используемая для выполнения кода в контексте другого процесса. Хотя она часто ассоциируется с вредоносным ПО, эти методы также полезны для:
Каталог: ptrace/
Классический метод инжекции процессов с использованием системного вызова ptrace() для прямой записи шеллкода в память процесса и перенаправления исполнения.
Ключевые особенности:
Вариант использования: Понимание низкоуровневого управления процессами и прямой инжекции кода
Каталог: ld_preload/
Интерпозиция функций с использованием переменной окружения LD_PRELOAD для загрузки вредоносной библиотеки перед всеми остальными библиотеками.
Ключевые особенности:
Вариант использования: Перехват функций, мониторинг API, изменение поведения
Каталог: proc_mem/
Прямая запись в память через файловый интерфейс /proc/<pid>/mem в сочетании с ptrace для управления процессом.
Ключевые особенности:
Вариант использования: Быстрая массовая инжекция в память, обход традиционных ограничений ptrace
Каталог: dlopen_inject/
Сложная техника, которая заставляет запущенный процесс загрузить разделяемую библиотеку путём перехвата исполнения для вызова dlopen().
Ключевые особенности:
Вариант использования: Продвинутая постоянная инжекция, манипулирование библиотеками во время выполнения
# Build ptrace injection
cd ptrace && make all
# Build LD_PRELOAD injection
cd ../ld_preload && make all
# Build /proc/mem injection
cd ../proc_mem && make all
# Build dlopen injection
cd ../dlopen_inject && make all
Каждая техника следует схожему шаблону:
Запустите процесс-жертву:
cd <technique>/victim-process
./sample
Запомните отображаемый PID
Выполните инжекцию:
cd <technique>
sudo ./<injector> <PID> [additional args]
Наблюдайте результаты: Проверьте вывод процесса-жертвы на предмет выполнения внедрённого кода
Смотрите отдельные README-файлы для получения инструкций по конкретным техникам.
| Техника | Сложность | Скрытность | Постоянство | Скорость | Работает с запущенным процессом |
|---|---|---|---|---|---|
| ptrace | Средняя | Низкая | Нет | Средняя | Да |
| LD_PRELOAD | Низкая | Очень низкая | Нет | Быстрая | Нет |
| /proc/mem | Средняя | Низкая | Нет | Быстрая | Да |
| dlopen | Высокая | Средняя | Да | Средняя | Да |
Yama ptrace_scope: Ограничение ptrace привилегированными пользователями
echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope
SELinux/AppArmor: Мандатный контроль доступа
Мониторинг: Использование auditd для журналирования попыток ptrace и инжекции процессов
auditctl -a exit,always -F arch=b64 -S ptrace
Проверка целостности во время выполнения: Периодическая проверка памяти процессов
Подпись кода: Проверка подписей библиотек
/proc/<pid>/maps на предмет неожиданных областей памяти или библиотекlsof, pmap и утилит мониторинга процессовВАЖНО: Эти техники следует использовать только в авторизованных контекстах:
Этот репозиторий предназначен исключительно для образовательных и исследовательских целей. Авторы не несут ответственности за неправомерное использование этих техник. Всегда получайте надлежащее разрешение перед тестированием на любой системе.
Ошибки отказа в доступе:
sudo/proc/sys/kernel/yama/ptrace_scopeИнжекция завершается молча:
Ошибки сегментации:
Смотрите README-файлы каждой техники для получения конкретных рекомендаций по устранению неполадок.
Вклад приветствуется! Возможные дополнения:
man 2 ptrace — системный вызов трассировки процессовman 5 proc — документация файловой системы /procman 3 dlopen — загрузка динамических библиотек