lunes, 14 de enero de 2013

Mitos y mentiras sobre los virus en GNU/Linux


Mito 1:

“No todos los programas malignos, particularmente los virus, necesitan privilegios de root para infectar, sobre todo en el caso particular de los virus ejecutables (formato ELF) que infectan otros ejecutables”.

Respuesta: 


Quien realice semejante afirmación desconoce cómo funciona el sistema de privilegios de Unix. Para poder afectar a un fichero, 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 fichero 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. Prueba empírica: En la sección anterior vimos un simple script para comprobar el rango de ficheros que pueden ser afectados por una infección. Si lo lanzamos en nuestra máquina, veremos como es ínfimo, y respecto a ficheros de sistema, nulo. Además, a diferencia de operativos como Windows, no es necesario tener privilegios de administrador para realizar tareas comunes con programas que emplean comúnmente usuarios normales.



Mito 2:

“Tampoco necesitan ser root para entraren el sistema por vía remota, es el caso de Slapper un gusano que explotando una vulnerabilidad en el SSL de Apache (los certificados que permiten comunicación segura), creó su propia red de máquinas zombie en septiembre de 2002”.

Respuesta: 


Ese ejemplo no alude a un virus, sino un gusano. La diferencia es muy importante:
un gusano es un programa que explota un servicio de cara a Internet para transmitirse. No afecta a programas locales.
Por ello, solamente afecta a los servidores; no a máquinas particulares.
Los gusanos han sido siempre muy pocos y de incidencia ínfima. Los tres realmente importantes nacieron en los 80, una época en la que Internet era inocente, y todo el mundo se fiaba de todo el mundo. Recordemos que eran los que afectaban a sendmail, fingerd y rexec.
Hoy en día la cosa es más complicada. Aunque no podemos negar que sigue habiéndolos y que, si no se controlan, son extremadamente peligrosos. Pero ahora, los tiempos de reacción ante los gusanos son muy cortos. Es el caso del Slapper: un gusano creado sobre una vulnerabilidad descubierta –y parcheada– dos meses antes de la aparición del propio gusano.
Aun suponiendo que todo el mundo que usara Linux tuviese Apache instalado y funcionando siempre, simplemente con actualizar mensualmente los paquetes hubiese sido más que suficiente para que nunca se corriera ningún riesgo.
Es cierto que el fallo de SSL que originó Slapper era crítico –de hecho, el mayor fallo encontrado en toda la historia de SSL2 y SSL3–, y como tal fue solucionado en pocas horas. Que dos meses más tarde de que se encontrara y se solucionara dicho problema, alguien hiciera un gusano sobre un error ya corregido, y que ese sea el ejemplo más potente que se puede dar como vulnerabilidad, cuando menos tranquiliza.

Como regla general, la solución a los gusanos no es comprar un antivirus, instalarlo y desperdiciar tiempo de cómputo manteniéndolo residente. La solución es hacer uso del sistema de actualizaciones de seguridad de nuestra distribución: teniendo la distribución actualizada, no habrá problemas. Ejecutar solamente los servicios que necesitamos es también una buena idea por dos razones: mejoramos el aprovechamiento de recursos, y evitamos problemas de seguridad.







Mito 3:

“No creo que el núcleo sea invulnerable. De hecho existe un grupo de programas malignos denominados con las siglas LRK (Linux Rootkits Kernel), que se basan precisamente en que explotan vulnerabilidades de módulos del kernel y sustituyen los binarios del sistema”.

Respuesta:

Un rootkit es básicamente un parche al kernel que permite ocultar la existencia de determinados usuarios y procesos ante las herramientas habituales, gracias a que no aparecerán en el directorio /proc. Lo normal es que lo utilicen al final de un ataque, en primer lugar, van a explotar una vulnerabilidad remota para tener acceso a nuestra máquina. Después emprenderán una secuencia de ataques, para hacer escalado de privilegios hasta llegar a tener la cuenta de root. El problema cuando lo consiguen es cómo instalar un servicio en nuestra máquina sin ser detectados: ahí entra el rootkit.
Se crea un usuario que será el usuario efectivo del servicio que queremos que se oculte, instalan el rootkit, y ocultan tanto dicho usuario como todos los procesos pertenecientes a dicho usuario.
De cómo ocultar la existencia de unusuario es útil a un virus es algo que podríamos discutir largamente, pero un virus que emplee un rootkit para instalarse parece divertido. Imaginemos la mecánicadel virus (en pseudocódigo):

1) El virus entra en el sistema.
2) Localiza el código fuente del kernel. Si no está lo instala él mismo.
3) Configura el kernel para las opciones de hardware que procedanpara la máquina en cuestión.
4) Compila el kernel.
5) Instala el nuevo kernel; modificando LILO o GRUB si es preciso.
6) Reinicia la máquina.


Los pasos (5) y (6) necesitan privilegios de root. Es algo complicado que los pasos (4) y (6) no sean detectados por el infectado. Pero lo divertido es que haya alguien que crea que existe un programa
que puede hacer el paso (2) y (3) automáticamente.
Como colofón, si nos encontramos con alguien que nos dice “cuando haya más máquinas con Linux habrá más virus”,
y nos recomienda “disponer de un antivirus instalado y actualizarlo constantemente”, posiblemente esté relacionado con la empresa que comercializa el antivirus y las actualizaciones. Desconfía, posiblemente
sea el mismo dueño.


CONCLUSIÓN


A la pregunta ¿Existen vulnerabilidades en sistemas Linux? la respuesta es ciertamente sí.
Nadie en su sano juicio lo duda; Linux no es OpenBSD. 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.

Como siempre digo a mis alumnos: no me creáis, por favor. Descargad e instalaros un rootkit en la máquina. Y si queréis más, leed el código fuente de los “virus” que hay en el mercado. La verdad está
en el código fuente. Es difícil a un “autoproclamado” virus seguir nombrándolo de esa forma después de leer su código.Y si no sabéis leer código, una única medida de seguridad sencilla que os recomiendo: usad la cuenta de root solo para administrar la máquina, y mantener al día las actualizaciones de seguridad.Solamente con eso es imposible que os entren virus y muy poco probable que lo hagan gusanos o que alguien ataque vuestra máquina con éxito.-