martes, 4 de marzo de 2014

Hay o no hay virus en Linux?



El debate sobre los virus informáticos en GNU Linux no es nada nuevo. Cada cierto tiempo pueden leerse noticias, post y comentarios en blogs, como este, y en las diferentes redes sociales sobre el tema. Aquellos que consultan sobre si existen los virus en Linux, cansados por perder información al ser afectado su MS Windows, recibiendo respuestas dispares, en su mayoría de personas que opinan sin saber realmente sobre el tema... En Linux no hay virus porque los creadores de estos programas malignos no pierden el tiempo en hacer algo para un Sistema Operativo que casi nadie usa”.

Primero tenemos que saber a que nos referimos por virus informático, es un software que se copia y se ejecuta automáticamente, y que tiene por objeto alterar el normal funcionamiento de un equipo informático (hoy podemos hablar no solo de la PC o la Notebook, sino también de la Tablet, el Smartphone y hasta de un Smart TV), sin el permiso o el conocimiento del usuario. Para ello, los virus reemplazan archivos por otros infectados con su código.
Para que un virus se instale en nuestro equipo, basta con que ejecutemos un programa infectado siendo un usuario común del sistema operativo. Esto difiere, por ejemplo, de un troyano que requiere que el usuario confirme ciertos procesos necesarios para que se instale, solicitando generalmente tener algunos privilegios.

Lo que realmente define a un virus es su forma de transmisión, o sea, como se reproduce dentro de un sistema o de una red.
Un sistema operativo es más sensible a los virus cuanto más fácil sea desarrollar un mecanismo eficiente y automatizado de transmisión del mismo. Supongamos que tenemos un virus que quiere transmitirse solo, que ha sido lanzado por un usuario normal, de forma inocente, al ejecutar un programa. Dicho virus tiene dos mecanismos de transmisión:
  • replicarse accediendo a la memoria utilizada por otros procesos, anclándose a ellos en tiempo de ejecución. Al infectar estos procesos, que en MS Windows pueden ser los del Sistema Operativo, el virus se transmite a otros programas.
  • abriendo los ejecutables del Sistema de Archivos (File System), y añadiendo su código –payload– al ejecutable. El Sistema de Archivos es el componente del Sistema Operativo encargado de administrar y facilitar el uso de las memorias periféricas y secundarias, como el disco rígido y los pendrives, al infectarse este el virus podrá propagarse al resto de los archivos.
Todos los virus que podemos considerar como tales tienen al menos uno de estos dos mecanismos de transmisión, o los dos, no hay más mecanismos.

Respecto al primer mecanismo, recordemos la arquitectura de memoria de GNU Linux y cómo funcionan los procesadores Intel. Estos poseen cuatro anillos, numerados de 0 a 3; a menor número, mayores los privilegios que tiene el código que se ejecute en dicho anillo.
Estos anillos corresponden con estados del procesador, y, por lo tanto, con lo que se puede hacer con un sistema estando en un anillo concreto. 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.
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. No es que la memoria de los otros procesos esté protegida; es que para un proceso la memoria de los otros está fuera del es-pacio de direcciones de memoria que puede utilizar, no sería capaz ni de referenciar una dirección de memoria de otro proceso.
Para que un proceso pudiese tocar la memoria de otros procesos o del kernel, debería ser el propio kernel.
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.
Podríamos argumentar que un proceso puede ver el kernel; lo tiene mapeado a partir de su dirección de memoria lógica 0xC0000000. Pero, por el anillo del procesador en el que se ejecuta, no puede modificarlo; generaría un trap, ya que son zonas de memoria que pertenecen a otro anillo. Ni siquiera un virus como root puede saltar esta barrera.

En Linux, un proceso puede hacer simplemente lo que le permita su usuario efectivo y su grupo efectivo. Es cierto que existen mecanismos para intercambiar el usuario real con el efectivo, pero poco más. Si nos fijamos donde están los ejecutables, veremos que solamente root tiene privilegios de escritura tanto en dichos directorios, como en los archivos contenidos. Dicho de otro modo, solamente root puede modificar dichos archivos. Esto es así en Unix desde los 70, en Linux desde sus orígenes, y en su Sistema de Archivos que soporte privilegios, aún no ha aparecido ningún error que permita otro comportamiento. ¿Cuántos ejecutables del Sistema de Archivos podría infectar como usuario común? Podríamos verificarlo escribiendo en una terminal lo siguiente:

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

Los archivos de tipo fichero y con privilegios de ejecución que encontraremos no suponen un problema, ya que con frecuencia son enlaces virtuales que constan como que pueden leerse, escribirse y ejecutarse, y si un usuario lo intenta, nunca funciona. Este script puede demorar bastante, pero solo encontrara unos pocos archivos y subdirectorios, que tienen permiso para el usuario, los cuales serian imposibles de infectar.
Por lo que vemos, la única forma de propagar el payload es siendo root. En ese caso para que un virus funcione es necesario que los usuarios tengan siempre privilegios de administrador. En ese caso sí puede infectar archivos. 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.
En sistemas operativos donde es necesario ser administrador para tareas comunes o para ejecutar muchas aplicaciones diarias, esto sí se puede dar. Pero en Unix es necesario ser administrador para configurar la máquina y modificar los archivos de configuración, así que es escaso el número de usuarios que emplea como cuenta diaria la de root. Es más; algunas distribuciones de Linux ni siquiera tienen habilitada la cuenta de root.
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 de que estos troyanos puedan afectar algo del sistema es ejecutándolo como root y con los privilegios necesarios. Si solemos emplear la máquina como usuarios normales, no es posible que un proceso lanzado por un usuario común infecte al sistema.

Para poder afectar a un archivo en GNU Linux, un virus necesita el privilegio de lectura –hay que leerlo para modificarlo–, y de escritura –hay que escribirlo para que la modificación sea válida– sobre el archivo del ejecutable que quiere ejecutar. Esto es así siempre, sin excepciones. Y en todas y cada una de las distribuciones, los usuarios que no son root no disponen de estos privilegios. Luego simplemente con no ser root, la infección no es posible.

A la pregunta ¿Existen vulnerabilidades en sistemas Linux? la respuesta es ciertamente sí. Otra cosa es la ventana de vulnerabilidad que tiene un sistema Linux que sea actualizado adecuadamente. Si nos preguntamos ¿existen herramientas para aprovechar estos agujeros de seguridad, y explotarlos? Pues también sí, pero eso no son virus, son exploits. El virus debe saltar varias dificultades más que siempre se han puesto como un defecto/problema de Linux por los defensores de Windows, y que complican la existencia de virus reales –kernels que se recompilan, muchas versiones de muchas aplicaciones, muchas distribuciones, cosas que no pasan automáticamente de forma transparente al usuario, etc. Los teóricos “virus” actuales hay que instalarlos a mano desde la cuenta de root. Pero eso no puede ser considerado un virus.

Es cierto que existen antivirus para Linux buenos. El problema es que no hacen lo que los defensores de los antivirus argumentan. Su función es filtrar el correo que pasa de malware y virus para MS Windows, así como verificar la existencia de virus de MS Windows en carpetas exportadas vía SAMBA; con lo que si empleamos nuestra máquina con GNU Linux como gateway de correo o como NAS para máquinas MS Windows, podemos protegerlas.

El principal antivirus existente para GNU Linux es ClamAV. Bajo licencia GPL, compila para la mayor parte de las distribuciones disponibles del mercado. Está diseñado para analizar los adjuntos a los mensajes de correo que pasen por la estación y filtrarlos de virus.
Esta aplicación se integra perfectamente con sendmail para permitir el filtrado de los virus que puedan almacenarse en los servidores Linux que proveen de correo a las empresas; disponiendo de una base de datos de virus que se actualiza diariamente, es un proyecto vivo y muy interesante.
Este potente programa es capaz de analizar virus incluso en adjuntos en formatos más complejos de abrir, como pueda ser RAR (2.0), Zip, Gzip, Bzip2, Tar, MS OLE2, MS Cabinet files, MS CHM (HTML COmprimido), y
MS SZDD.
ClamAV soporta también mbox, Maildir, y archivos de correo en formato RAW, y ficheros Portable Executable comprimidos con UPX, FSG, y Petite.
La pareja Clam AV y spamassassin son la pareja perfecta para proteger a nuestros clientes MS Windows desde los servidores de correo Unix o GNU Linux.


Fuente: Santo Orcero David. (2008). Mitos y realidades: Linux y los virus. Revista Todo Linux, 90, 26-29.

No hay comentarios.:

Publicar un comentario