La vulnerabilidad no estaba en la estructura, sino en la lógica misma de las operaciones del sistema.
En el contexto del constante enfrentamiento entre los desarrolladores del núcleo de Linux y los autores de módulos maliciosos, cada nueva versión del sistema altera el equilibrio de fuerzas. Un ejemplo reciente —el módulo rootkit FlipSwitch— utiliza un método inusual para interceptar las llamadas al sistema bajo las estrictas restricciones introducidas en el núcleo 6.9. Este recurso no se basa en la habitual sustitución de punteros en sys_call_table, sino en una intervención puntual en el código máquina del propio núcleo, y funciona incluso después de que la técnica clásica haya quedado inútil.
Durante mucho tiempo, rootkits como Diamorphine o PUMAKIT se ocultaron reescribiendo los punteros a las llamadas al sistema en sys_call_table, desactivando la protección de escritura y sustituyendo, por ejemplo, sys_kill por su función maliciosa. Pero a partir de la versión 6.9 del núcleo para la arquitectura x86‑64, las llamadas al sistema ya no se gestionan mediante esa tabla: en su lugar se usa una construcción basada en switch, que invoca directamente los manejadores correspondientes mediante instrucciones codificadas de forma fija. Como resultado, cualquier modificación de sys_call_table deja de afectar al comportamiento del sistema, privando a los rootkits de su punto de entrada habitual.
Sin embargo, la lógica de invocar las funciones necesarias no ha desaparecido: simplemente se ocultó dentro de x64_sys_call. Sobre ello se fundamenta la técnica de FlipSwitch: primero se extrae la dirección de la función original, por ejemplo sys_kill, mediante kallsyms_lookup_name, que por sí mismo suele no estar disponible, pero puede localizarse de forma indirecta mediante el mecanismo kprobe. Con el puntero al símbolo necesario, el rootkit analiza el código de bytes de la función x64_sys_call hasta encontrar una instrucción call concreta con la firma 0xe8 y un desplazamiento que señala con precisión al destino deseado.
Al detectar ese llamado, el módulo desactiva temporalmente la protección de memoria manipulando el bit 16 del registro CR0, lo que permite modificar zonas de código protegidas. A continuación se sustituyen apenas cuatro bytes: la llamada se redirige desde el sys_kill original a un análogo malicioso que imita con exactitud la función legítima, pero con capacidad para filtrar o suplantar resultados. El resto de los manejadores de llamadas al sistema permanece intacto, lo que hace que la intervención sea prácticamente imperceptible.
La principal característica de FlipSwitch es su selectividad y sutileza. Los cambios son reversibles: al descargar el módulo todo vuelve a su estado original y no quedan huellas. Sin embargo, esto también implica que detectar un rootkit así después de su carga resulta extremadamente difícil. Para buscar el prototipo de FlipSwitch, el equipo de Elastic preparó una firma YARA capaz de identificar la presencia de patrones característicos en la memoria o en el disco.
FlipSwitch se convirtió en un ejemplo claro de cómo la evolución de la arquitectura del sistema impulsa a los desarrolladores de módulos maliciosos a idear nuevas técnicas. Incluso la renuncia al acceso directo a sys_call_table no logró cerrar por completo las brechas: basta una intervención puntual en la instrucción adecuada para recuperar el control sobre el núcleo.