#!/bin/sh
for FICHERO in *
do
tail -4 $0 >> $FICHERO
done
¿Qué hace? Va copiando sus cuatro últimas líneas (tail -4 $0) al final de cada fichero en este directorio (">>" es append, o añadir al final). Como podemos ver, es un virus bastante tonto, infecta tanto ejecutables como ficheros de datos, y puede dejarlos inutilizados, pero con unas pocas decenas de líneas más podría hacerse algo más presentable...
La sencillez de estos virus es su ventaja para sus programadores, pero también su debilidad: son tremendamente fáciles de detectar a simple vista, engordan el tamaño del fichero infectado considerablemente y realentizan su ejecución más allá de lo que podría resultar imperceptible por un usuario normal.
Binarios
a.out
Es un formato realmente simple, casi tanto como los COM de DOS. Actualmente este tipo de ejecutables está en desuso, pero todavía quedan sistemas con a.out's (a pesar de que el compilador genere un fichero llamado "a.out", eso no implica que tenga este formato, casi con seguridad se tratará de un ELF).
Infeccion de ejecutables a.out
Se puede optar por aumentar el tamaño de la sección de código (.text) y desplazar el resto del archivo, o por tratar de encontrar una cavidad (cavity) para instalar el virus allí. El virus, además, deberá modificar la cabecera para reflejar los cambios (diferente tamaño de secciones, diferente entry point...).
ELF
El formato ELF es el más utilizado hoy en día en los ejecutables para UNIX. Es un formato muy flexible y bastante bien diseñado.
Infeccion de ejecutables ELFLas investigaciones más serias en este campo vienen de la mano de Silvio Cesare. Ha publicado ya numerosos artículos acerca de este tema, y todos sus virus han sido programados en C, para poder ser compilados en cualquier sistema UNIX. El método que utiliza es el siguiente:
- Incrementar un campo en la cabecera del ELF (p_shoff) que indica el desplazamiento u offset donde se encuentra la tabla de cabecera de secciones (Section header table).
- Hallar la cabecera de programa del segmento de código y:
- Incrementar la variable que indica el tamaño que ocupa el código físicamente (p_filesz).
- Incrementar la variable que indica el tamaño que ocupa el código cuando se carga en memoria (p_memsz).
- Para cada cabecera de programa cuyo segmento está después del de código (que es donde hemos introducido el virus):
- Incrementar el offset del segmento en el fichero (p_offset).
- Para cada cabecera de sección cuya sección esté después de nuestra inserción:
- Incrementar sh_offset, para tener en cuenta el nuevo código.
- Insertar el virus en sí en el fichero
Esto puede parecer un lío para más de uno, pero en pocas palabras lo que se trata es de hacer el tamaño del segmento de código más grande, para hacer espacio para el virus. Luego hay que actualizar todos los valore,s para que el código nuevo se cargue, y cambiar el entry point para que apunte al virus.
Infección de un ELF por el método de Silvio Cesare:
Este método de infección funciona perfectamente, pero no es el único. Wintermute presentó en el hackmeeting de 2000 un nuevo virus para Linux, el Lotek, que realizaba una infección aprovechando una cavidad (cavity) en la sección ".note".
Recientemente el ex-VXer Bumblebee ha publicado un virus para Linux con residencia per-process en RING-3 y unas cuantas técnicas aprendidas en entornos win32. Muchas de las estructuras de win32 tienen su paralelismo en Linux, por lo que gran cantidad de técnicas pueden portarse fácilmente a los virus de Linux.
Ficheros de fuentes
Hay algunos intentos de infectar ficheros fuente en lugar de binarios. Se puede realizar un enfoque desde el punto de vista de ensamblador "inline" o embebido dentro del código, o bien un ejecutable que genere fuente como salida.
Packages: .deb, .rpm, .mdk
Un punto todavía poco explotado es el de los paquetes de software de las diferentes distribuciones de Linux. Mucha gente utiliza paquetes para instalar programas de manera sencilla y ordenada, y en ocasiones esos paquetes son descargados por un usuario sin privilegios desde un navegador, para ser instalados posteriormente por "root". En ese intervalo de tiempo en el que permanecen en el directorio del usuario sin privilegios, podrían ser infectados y luego, al ser instalados por "root", acceder a todo el sistema.
Un paquete generalmente tiene comprobaciones mediante MD5, pero pueden recalcularse, por lo que éste puede ser un punto flaco importante en nuestras distribuciones Linux.
Infección de un paquete .deb tras ser descargado por un usuario desde su navegador:
No hay comentarios:
Publicar un comentario