¿Hay alguna manera de agregar una dinámica de llamada al sistema, como a través de un módulo? He encontrado lugares donde puedo anular una llamada al sistema existente con un módulo simplemente cambiando la matriz sys_call_table[]
para obtener mi función reemplazada en lugar de la nativa cuando mi módulo está instalado, pero ¿puedes hacer esto con una nueva llamada al sistema y un módulo?kernel de Linux: agregue la llamada al sistema de forma dinámica a través del módulo
Respuesta
La interceptación de una llamada al sistema existente (para hacer algo en el kernel) no es la correcta en algunos casos. Por ejemplo, si los controladores del espacio de usuario necesitan ejecutar algo en kernel, enviar algo allí o leer algo de kernel.
Normalmente, para los controladores, la forma correcta es usar la llamada ioctl(), que es solo una llamada al sistema, pero puede llamar a diferentes funciones del kernel o módulos de controladores, pasando diferentes parámetros a través de ioctl().
Lo anterior es para la ejecución del código del kernel controlado por el usuario.
Para pasar datos, puede usar procfs o controladores sysfs para comunicarse con el kernel.
PD: cuando interceptas la llamada al sistema, que generalmente afecta a todo el sistema operativo, tienes que preocuparte por cómo resolver el problema de hacerlo de manera segura: ¿qué pasa si alguien llama la llamada al sistema y luego modificas/interceptar los códigos?
Zach, sí es posible: D
Aunque sys_call_table es de tamaño fijo, en algunos casos, puede haber posiciones libres en la tabla
Mira este enlaces:
lxr.free electrones. com/fuente/arch/x86/kernel/syscall_32.c
lxr.free-electrons.com/source/arch/x86/kernel/syscall_64.c
En primer lugar el kernel llena todas las posiciones de sys_call_table con un puntero a sys_ni_syscall
durante la compilación, los archivos asm/syscalls_32.h y asm/syscalls_64.h son generada en base a las siguientes tablas:
lxr.free -electrons.com/source/arch/x86/syscalls/syscall_32.tbl
lxr.free-electrons.com/source/arch/x86/syscalls/syscall_64.tbl
Con un breve vistazo a estas tablas Y. Puede ver que algunas posiciones continuarán apuntando a sys_ni_syscall, por ejemplo, las posiciones 17, 31, 32, 35, ..., en syscall_32.tbl ya que no están implementadas.
Por lo tanto, nuestra única tarea es identificar estas posiciones y "registrar" nuestro nuevo syscall.
puse algo similar en mi git
https://github.com/MrN0body/rsysadd
- 1. No se puede escribir en la memoria kernel a través del módulo kernel de Linux (Ubuntu)
- 2. módulo del kernel Linux compilar
- 3. Ubicación del Módulo Kernel de Linux
- 4. Dónde agrego una llamada al sistema en Linux fuente del kernel
- 5. ¿Cómo habilitar la depuración dinámica en el kernel de Linux?
- 6. Acceda a los símbolos del kernel de Linux que no se exportan a través de EXPORT_SYMBOL *
- 7. Cómo codificar un módulo kernel de Linux?
- 8. Agregando una nueva llamada al sistema en el kernel de Linux 3.3
- 9. Makefile para el módulo kernel de Linux?
- 10. Enviando un paquete a través de un módulo kernel
- 11. desarrollo del kernel de Linux
- 12. ¿Llamada al sistema sin cambio de contexto?
- 13. ¿Cuántas llamadas al sistema hay en Linux kernel 2.6?
- 14. Implementación de llamadas/trampas del sistema dentro del kernel fuente de Linux
- 15. Tarea periódica en un módulo de kernel de Linux
- 16. ¿Cómo se implementa la llamada al sistema en Linux?
- 17. ¿Por qué necesito volver a compilar el módulo vmware kernel después de una actualización del kernel de Linux?
- 18. Depurar etapa previa a la descompresión del kernel de Linux
- 19. Edificio módulo del kernel para Android
- 20. Programación del kernel de Linux
- 21. Compilación del módulo Kernel y KBUILD_NOPEDANTIC
- 22. Android: agregue fuentes personalizadas al sistema
- 23. ¿Se puede anular un subproceso en medio de una llamada al kernel del sistema?
- 24. cómo determinar si un módulo del kernel de Linux tiene una pérdida de memoria
- 25. parámetros del módulo del kernel cambios (utilizando/sys/módulo)
- 26. debugging de módulo a través de KGDB
- 27. Cómo mantener la salida de ASM del módulo de kernel de Linux compilación
- 28. Llamada al sistema vs Llamada a la función
- 29. Dirección incorrecta al agregar una llamada al sistema
- 30. ¿Puedo reemplazar una función del kernel de Linux con un módulo?
siempre pensé que la adición de las llamadas del sistema era un nono, pero eso es sólo de oídas. – jdizzle
Sí, la adición de llamadas al sistema es inútil para un rootkit :) –
Definitivamente no es posible agregar un syscall. Es probable que desee una nueva solución a su problema. ¿Por qué sientes que necesitas un nuevo syscall de todos modos? – stsquad