¿Por qué Linux (¿casi?) no tiene virus?

Viendo la entrada de mi querido amigo BacuX en su blog, me di a la tarea de buscar como funciona un virus informático y checar si es capaz de infectar un sistema GNU/Linux. Lo que me he encontrado es, a mi parecer, algo que responde las preguntas; es un documento en formato PDF que lo puedes descargar aqui si lo quieres leer; aqui explicaré un poco y daré mi punto de vista. Esto puede que sirva para tirar esos ‘mitos’ como:

  • “Linux no tiene virus porque no esta tan difundido como Windows”
  • “Linux no tiene virus porque los hackers no le prestan atención”

Y así te puedo nombrar muchas escusas. Por eso el motivo de esta entrada:

Linux y los virus

No se si les ha pasado de que siempre hay un foro en el que preguntan lo “clásico” de si hay virus en Linux (respetando a los que preguntan, porque para saber más, hay que preguntar por más tonta que paresca la pregunta) ya sea en Yahoo! o en foros. Para tomar objetivamente este artículo, veamos la definición de un virus informático:

  1. Virus Informático: es un malware que tiene por objeto alterar el normal funcionamiento de la computadora, sin el permiso o el conocimiento del usuario. Los virus, habitualmente, reemplazan archivos ejecutables por otros infectados con el código de este. Los virus pueden destruir, de manera intencionada, los datos almacenados en un ordenador, aunque también existen otros más “benignos”, que solo se caracterizan por ser molestos.

La diferencia entre los virus y otros tipos de malware (gusanos, rootkits, troyanos, etc.) es su forma de propagación que consiste en propagarse de forma automática y basicamente esta es a través de infectar archivos de la computadora. Ahora, si usamos nuestra imaginación y suponemos que ejecutamos un programa infectado con un virus en Linux, éste tiene 2 métodos o ambos para propagarse:

  1. Replicarse tocando la memoria de otros procesos activos en tiempo de ejecución.
  2. Copiando su código a ejecutables del sistema.

Para poder saber si este virus puede infectar exitosamente el sistema Linux, necesitamos saber que actualmente los procesadores tienen un “Modo Protegido” y este funciona a través de “anillos o niveles privilegiados” enumerados del 0 al 3:

  • El anillo 0 (cero) es utilizado exclusivamente para el kernel o el ‘núcleo’ del sistema.
  • Los anillos 1 y 2 son asignados por el Sistema Operativo a servicios de sistema, como protocolos de red o la gerencia de ventanas, que las aplicaciones pueden llamar
  • El último anillo que es el número 3, es asignado para el usuario común.

Como podemos ver, entre menor número tenga el anillo, más privilegios tienen las aplicaciones que se ejecuten ahí. También es muy importante señalar que lo que se ejecuta en el anillo 3, no puede invadir el anillo 0, 1, ó 2 y la única manera de cambiar ésto es ser el propio kernel.

Volviendo a nuestra imaginación, si el virus es ejecutado por un usuario (anillo 3) no puede trasladarse a otro anillo ni tampoco infectar otros procesos latentes en el mismo anillo [Debido a que el kernel usa la memoria virtual para hacer ‘creer’ a cada proceso que la memoria es para el solo y asi solo puede ver la memoria que le han configurado (no puede ver otros procesos).]. Para poder cambiar ésto, el virus necesitaria estar en el anillo 0 o dicho de otro modo, tendría que ser el propio Kernel.

Si el virus tuviera el segundo método de propagación (copiar su código en ejecutables), tendria otra barrera que lo impide, y me refiero a los permisos. Un virus no puede infectar un ejecutable sobre el cual no tiene permiso; es decir, tendria que tener la cuenta ‘root‘. Para darles una idea de cuantos ejecutables tienen permisos en su cuenta, basta escribir ésto en la consola (tarda un poco, pero lo pueden probar)

find / -type f -perm -o=rwx -o \( -perm -g=rwx -group `id -g` \) -o \( -perm -u=rwx -user `id -u` \) -print 2> /dev/null | grep -v /proc

Se excluye el directorio /proc por ser un directorio basicamente virtual en donde se explica como funciona el sistema y sus archivos casi siempre son enlaces virtuales.

La respuesta a este script (lo he sacado del PDF) en una máquina usada por 4 personas fue:

  • /tmp/.ICE-unix/dcop5265-1205225188
  • /tmp/.ICE-unix/5979
  • /home/irbis/kradview-1.2/src/kradview

La salida muestra 3 archivo que podrian ser ejecutados. Los 2 primeros se borran automáticamente al arranque de sistema y el tercero es un fichero de un programa en desarrollo que se borra cada que se compila. Como ven, el virus aquí, no se podria propagar.

Tengo que ser honesto, en mi caso salieron muchos archivos aunque la mayoria eran cookies.

CONCLUSIÓN: Para que un virus infecte un sistema UNIX, necesita tener los permisos de root.

NOTA: Cabe señalar que aqui se alude únicamente a los virus; los rootkits, gusanos, vulnerabilidades y otras formas de ataque tienen otros métodos por los cuales SI pueden atacar exitosamente un sistema UNIX.

Espero les agrade y quite algunas dudas, para más información, descarguen el artículo PDF.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: