
Una colección de muestras y material relacionado con la inyección de procesos
Una colección completa de técnicas de inyección de procesos para Linux, que demuestra varios métodos para inyectar código en procesos en ejecución. Estos ejemplos están pensados con fines educativos, investigación de seguridad y comprensión de la manipulación de procesos de bajo nivel en Linux.
La inyección de procesos es una técnica utilizada para ejecutar código en el contexto de otro proceso. Aunque a menudo se asocia con malware, estas técnicas también son valiosas para:
Directorio: ptrace/
El método clásico de inyección de procesos que utiliza la llamada al sistema ptrace() para escribir directamente shellcode en la memoria de un proceso y redirigir su ejecución.
Características principales:
Caso de uso: Comprender el control de procesos de bajo nivel y la inyección directa de código
Directorio: ld_preload/
Interposición de funciones utilizando la variable de entorno LD_PRELOAD para cargar una biblioteca maliciosa antes que cualquier otra biblioteca.
Características principales:
Caso de uso: Enganche de funciones, monitorización de APIs, modificación de comportamiento
Directorio: proc_mem/
Escritura directa de memoria a través de la interfaz del sistema de archivos /proc/<pid>/mem, combinada con ptrace para el control del proceso.
Características principales:
Caso de uso: Inyección rápida de memoria en bloque, evitando las limitaciones tradicionales de ptrace
Directorio: dlopen_inject/
Técnica sofisticada que obliga a un proceso en ejecución a cargar una biblioteca compartida secuestrando la ejecución para llamar a dlopen().
Características principales:
Caso de uso: Inyección persistente avanzada, manipulación de bibliotecas en tiempo de ejecución
# Compilar la inyección ptrace
cd ptrace && make all
# Compilar la inyección LD_PRELOAD
cd ../ld_preload && make all
# Compilar la inyección /proc/mem
cd ../proc_mem && make all
# Compilar la inyección dlopen
cd ../dlopen_inject && make all
Cada técnica sigue un patrón similar:
Iniciar el proceso víctima:
cd <technique>/victim-process
./sample
Anotar el PID mostrado
Realizar la inyección:
cd <technique>
sudo ./<injector> <PID> [additional args]
Observar los resultados: Comprobar la salida del proceso víctima para ver la ejecución del código inyectado
Consulta los archivos README individuales para obtener instrucciones específicas de cada técnica.
Yama ptrace_scope: Restringir ptrace a usuarios privilegiados
echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope
SELinux/AppArmor: Controles de acceso obligatorios
Monitorización: Usar auditd para registrar intentos de ptrace e inyección de procesos
auditctl -a exit,always -F arch=b64 -S ptrace
Comprobación de Integridad en Tiempo de Ejecución: Verificar periódicamente la memoria de los procesos
Firma de Código: Verificar las firmas de las bibliotecas
/proc/<pid>/maps para detectar regiones de memoria o bibliotecas inesperadaslsof, pmap y utilidades de monitorización de procesosIMPORTANTE: Estas técnicas solo deben utilizarse en contextos autorizados:
Este repositorio es solo para fines educativos y de investigación. Los autores no son responsables del mal uso de estas técnicas. Obtén siempre la autorización adecuada antes de probar cualquier sistema.
Errores de permiso denegado:
sudo/proc/sys/kernel/yama/ptrace_scopeLa inyección falla silenciosamente:
Fallos de segmentación:
Consulta los README de cada técnica para obtener orientación específica sobre solución de problemas.
¡Las contribuciones son bienvenidas! Adiciones potenciales:
man 2 ptrace - Llamada al sistema de trazado de procesosman 5 proc - Documentación del sistema de archivos /procman 3 dlopen - Carga dinámica de bibliotecasConsulta LICENSE.txt para obtener más detalles.
Este software se proporciona "tal cual" con fines educativos. Úsalo de manera responsable y ética. Obtén siempre la autorización adecuada antes de probar técnicas de seguridad en cualquier sistema que no sea tuyo.
| Técnica | Complejidad | Sigilo | Persistencia | Velocidad | Funciona en Proceso en Ejecución |
|---|
| ptrace | Media | Bajo | No | Media | Sí |
| LD_PRELOAD | Baja | Muy Bajo | No | Rápida | No |
| /proc/mem | Media | Bajo | No | Rápida | Sí |
| dlopen | Alta | Medio | Sí | Media | Sí |