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