Mitos y realidades: Linux y los virus

Cada cierto tiempo se ve un correo en alguna lista preguntando si existen virus para Linux; y automáticamente alguien responde afirmativamente, también son frecuentes las notas de prensa de desarrolladores de antivirus diciendo que sacan versiones contra los virus de Linux. Lo primero, vamos a comenzar definiendo qué es un virus.

se trata de un programa que se copia y se ejecuta automáticamente, y que tiene por objeto alterar el normal funcionamiento de un ordenador, sin el permiso o el conocimiento del usuario.Un rootkit es un parche al kernel que permite ocultar determinados procesos a las utilidades de área de usuario y un troyano es análogo: es una modificación al código fuente de un servicio concreto para ocultar determinada actividad fraudulenta.

En ambos casos es necesario obtener el código fuente de la versión exacta instalada en la máquina Linux, parchear el código, recompilarlo, obtener privilegios de administrador, instalar el ejecutable parcheado, e inicializar el servicio –en el caso del troyano– o el sistema operativo completo –en el caso del rootkit–.

Por otro lado un virus se propaga con rapidez y eficiencia; un rootkit o un troyano necesitan que vayan específicamente a por nosotros.

Los virus tiene exclusivamente dos mecanismos de transmisión:

1.-Replicarse tocando la memoria de otros procesos, anclándose a ellos en tiempo de ejecución.

2.- Abriendo los ejecutables del sistema de ficheros, y añadiendo su código –payload– al jecutable.

Respecto al primer mecanismo, recordemos la arquitectura de memoria virtual de Linux y cómo funcionan los procesadores intel. Estos poseen cuatro anillos, numerados de 0 a 3; a menor número. Linux hace uso del anillo 0 para el kernel, y del anillo 3 para los procesos.

No hay código de proceso que se ejecute en anillo 0, y no hay código de kernel que se ejecute en anillo 3.solo hay un único punto de entrada al kernel desde el anillo 3: la interrupción 80h.

El kernel mediante el uso de la memoria virtual hace creer a cada proceso que tiene toda la memoria para él solo. Un proceso –que trabaja en anillo 3– solo puede ver la memoria virtual que le han configurado, por el anillo en el que opera.

Si un proceso diese una batida a todas las direcciones de memoria, no sería capaz ni de referenciar una dirección de memoria de otro proceso. Por que se encuentran fuera de direcciones. Por ello, la arquitectura de memoria virtual impide este mecanismo de transmisión; ningún proceso –ni siquiera los que tienen privilegios de root– tienen forma de acceder a la memoria de otros.

La “solución” sería un programa que modificara el código del kernel cuando es un fichero. Pero no se puede parchear el binario, ya que hay millones de kernels binarios distintos en el mundo.Todo un reto para el campo de la Inteligencia Artificial.

Como vemos, ni siquiera un virus como root puede saltar esta barrera.Para la segunda forma de infección En Linux, un proceso puede hacer simplemente lo que le permita su usuario efectivo y su grupo efectivo.Dicho de otro modo, solamente root puede modificar dichos archivos.Por lo que vemos, la única forma de propagar el payload es siendo root.

Pero aquí viene la trampa: para transmitir la infección, necesita tomar otro ejecutable, mandarlo por correo a otro usuario que solamente emplee la máquina como root, y que repita el proceso.

Por ello, en Linux un ejecutable no puede infectar a otros siempre que no estemos usando la cuenta de root como cuenta de uso común; y aunque las compañías antivirus se empeñan en decir que hay virus para Linux, realmente lo más parecido que se puede crear en Linux es un troyano en área de usuario.

La única forma estos troyanos puedan afectar algo del sistema es ejecutándolo como root y con lo privilegios necesarios. Si solemos emplear la máquina como usuarios de a pie, no es posible que un proceso lanzado por un usuario común infecte al sistema.

Comentarios
No hay ningún comentario aún. Sea usted el primero.