Bajo la etiqueta de `amenazas lógicas' encontramos todo tipo de programas que
de una forma u otra pueden dañar a nuestro sistema, creados de forma
intencionada para ello (software malicioso, también conocido como malware) o simplemente por error (bugs o agujeros). Una excelente
lectura que estudia las definiciones de algunas de estas amenazas y su
implicación en el sistema Unix se presenta en [GS96]; otra buena
descripción, pero a un nivel más general, se puede encontrar en
[Par81].
- Software incorrecto
Las amenazas más habituales a un sistema Unix provienen de errores cometidos
de forma involuntaria por los programadores de sistemas o de aplicaciones. Una
situación no contemplada a la hora de diseñar el sistema de red del kernel o un error accediendo a memoria en un fichero setuidado pueden
comprometer local o remotamente a Unix (o a cualquier otro sistema operativo).
A estos errores de programación se les denomina bugs, y a los
programas utilizados para aprovechar uno de estos fallos y atacar al sistema,
exploits. Como hemos dicho, representan la amenaza más común contra
Unix, ya que cualquiera puede conseguir un exploit y utilizarlo contra
nuestra máquina sin ni siquiera saber cómo funciona y sin unos conocimientos
mínimos de Unix; incluso hay exploits que dañan seriamente la
integridad de un sistema (negaciones de servicio o incluso acceso root
remoto) y están preparados para ser utilizados desde MS-DOS, con lo que
cualquier pirata novato (comúnmente, se les denomina Script Kiddies)
puede utilizarlos contra un servidor y conseguir un control total de una
máquina de varios millones de pesetas desde su PC sin saber nada del
sistema atacado; incluso hay situaciones en las que se analizan los logs
de estos ataques y se descubre que el pirata incluso intenta ejecutar órdenes
de MS-DOS.
- Herramientas de seguridad
Cualquier herramienta de seguridad representa un arma de doble filo: de la
misma forma que un administrador las utiliza para detectar y solucionar fallos
en sus sistemas o en la subred completa, un potencial intruso las puede utilizar
para detectar esos mismos fallos y aprovecharlos para atacar los equipos.
Herramientas como NESSUS, SAINT o SATAN pasan de ser útiles
a ser peligrosas cuando las utilizan crackers que buscan información
sobre las vulnerabilidades de un host o de una red completa.
La conveniencia de diseñar y distribuir libremente herramientas que puedan
facilitar un ataque es un tema peliagudo; incluso expertos reconocidos como
Alec Muffet (autor del adivinador de contraseñas Crack) han recibido
enormes críticas por diseñar determinadas herramientas de seguridad
para Unix. Tras numerosos debates sobre el tema, ha quedado bastante claro
que no se puede basar la seguridad de un sistema en el supuesto desconocimiento
de sus problemas por parte de los atacantes: esta política, denominada
Security through obscurity, se ha demostrado inservible en múltiples
ocasiones. Si como administradores no utilizamos herramientas de seguridad que
muestren las debilidades de nuestros sistemas (para corregirlas), tenemos que
estar seguro que un atacante no va a dudar en utilizar tales herramientas (para
explotar las debilidades encontradas); por tanto, hemos de agradecer a los
diseñadores de tales programas el esfuerzo que han realizado (y nos han
ahorrado) en pro de sistemas más seguros.
- Puertas traseras
Durante el desarrollo de aplicaciones grandes o de sistemas operativos es
habitual entre los programadores insertar `atajos' en los sistemas habituales
de autenticación del programa o del núcleo que se está diseñando.
A estos atajos se les denomina puertas traseras, y con ellos
se consigue mayor velocidad a la hora de detectar y depurar fallos: por
ejemplo, los diseñadores de un software de gestión de bases de datos
en el que para acceder a una tabla se necesiten cuatro claves diferentes de
diez caracteres cada una pueden insertar una rutina para conseguir ese acceso
mediante una única clave `especial', con el objetivo de perder menos tiempo
al depurar el sistema.
Algunos programadores pueden dejar estos atajos en las versiones definitivas
de su software para facilitar un mantenimiento posterior, para garantizar
su propio acceso, o simplemente por descuido; la cuestión es que si un
atacante descubre una de estas puertas traseras (no nos importa el método que
utilice para hacerlo) va a tener un acceso global a datos que no debería
poder leer, lo que obviamente supone un grave peligro para la integridad de
nuestro sistema.
- Bombas lógicas
Las bombas lógicas son partes de código de ciertos programas que permanecen
sin realizar ninguna función hasta que son activadas; en ese punto, la
función que realizan no es la original del programa, sino que generalmente
se trata de una acción perjudicial.
Los activadores más comunes de estas bombas lógicas pueden ser la ausencia
o presencia de ciertos ficheros, la ejecución bajo un determinado UID o la
llegada de una fecha concreta; cuando la bomba se activa va a poder realizar
cualquier tarea que pueda realizar la persona que ejecuta el programa: si las
activa el root, o el programa que contiene la bomba está setuidado a su
nombre, los efectos obviamente pueden ser fatales.
- Canales cubiertos
Según la definición de [B$^+$85] y [B$^+$88], los canales cubiertos
(o canales ocultos, según otras traducciones) son canales de
comunicación que permiten a un proceso transferir información de forma que
viole la política de seguridad del sistema; dicho de otra forma, un proceso
transmite información a otros (locales o remotos) que no están autorizados
a leer dicha información.
Los canales cubiertos no son una amenaza demasiado habitual en redes de I+D, ya
que suele ser mucho más fácil para un atacante aprovechar cualquier otro
mecanismo de ataque lógico; sin embargo, es posible su existencia, y en este
caso su detección suele ser difícil: algo tan simple
como el puerto finger abierto en una máquina puede ser utilizado a modo
de covert channel por un pirata con algo de experiencia.
- Virus
Un virus es una secuencia de código que se inserta en un fichero ejecutable
(denominado huésped), de forma que cuando el archivo se ejecuta, el
virus también lo hace, insertándose a sí mismo en otros programas.
Todo el mundo conoce los efectos de los virus en algunos sistemas operativos de
sobremesa; sin embargo, en Unix los virus no suelen ser un problema de
seguridad grave, ya que lo que pueda hacer un virus lo puede hacer más
fácilmente cualquier otro mecanismo lógico (que será el que hay que
tener en cuenta a la hora de diseñar una política de seguridad).
Aunque los virus existentes para entornos Unix son más una curiosidad que una
amenaza real, en sistemas sobre plataformas IBM-PC o compatibles (recordemos que
hay muchos sistemas Unix que operan en estas plataformas, como Linux, FreeBSD,
NetBSD, Minix, Solaris...) ciertos virus, especialmente los de boot,
pueden tener efectos nocivos, como dañar el sector de arranque; aunque se
trata de daños menores comparados con los efectos de otras amenazas, hay que
tenerlos en cuenta.
- Gusanos
Un gusano es un programa capaz de ejecutarse y propagarse por sí mismo a
través de redes, en ocasiones portando virus o aprovechando bugs de
los sistemas a los que conecta para dañarlos. Al ser difíciles de
programar su número no es muy elevado, pero el daño que pueden causar es
muy grande: el mayor incidente de seguridad en Internet fué precisamente el
Internet Worm, un gusano que en 1988 causó perdidas millonarias al
infectar y detener más de 6000 máquinas conectadas a la red.
Hemos de pensar que un gusano puede automatizar y ejecutar en unos segundos
todos los pasos que seguiría un atacante humano para acceder a
nuestro sistema: mientras que una persona, por muchos conocimientos y medios
que posea, tardaría como mínimo horas en controlar nuestra red
completa (un tiempo más que razonable para detectarlo), un gusano puede hacer
eso mismo en pocos minutos: de ahí su enorme peligro y sus devastadores
efectos.
- Caballos de Troya
Los troyanos o caballos de Troya son instrucciones escondidas en un programa de
forma que éste parezca realizar las tareas que un usuario espera de él,
pero que realmente ejecute funciones ocultas (generalmente en detrimento de
la seguridad) sin
el conocimiento del usuario; como el Caballo de Troya de la mitología
griega, al que deben su nombre, ocultan su función real bajo la apariencia de
un programa inofensivo que a primera vista funciona correctamente.
En la práctica totalidad de los ataques a Unix, cuando un intruso consigue el
privilegio necesario en el sistema instala troyanos para ocultar su presencia
o para
asegurarse la entrada en caso de ser descubierto: por ejemplo, es típico
utilizar lo que se denomina un rootkit, que no es más que un conjunto
de versiones troyanas de ciertas utilidades (netstat, ps, who...), para conseguir que cuando el administrador las ejecute no vea la
información relativa al atacante, como sus procesos o su conexión al
sistema; otro programa que se suele suplantar es login, por ejemplo
para que al recibir un cierto nombre de usuario y contraseña proporcione
acceso al sistema sin necesidad de consultar /etc/passwd.
- Programas conejo o bacterias
Bajo este nombre se conoce a los programas que no hacen nada útil, sino que
simplemente se dedican a reproducirse hasta que el número de copias acaba con
los recursos del sistema (memoria, procesador, disco...), produciendo una
negación de servicio. Por sí mismos no hacen ningún daño, sino que
lo que realmente perjudica es el gran número de copias suyas en el sistema,
que en algunas situaciones pueden llegar a provocar la parada total de la
máquina.
Hemos de pensar hay ciertos programas que pueden actuar como conejos sin
proponérselo; ejemplos típicos se suelen encontrar en los sistemas Unix
destinados a prácticas en las que se enseña a programar al alumnado: es
muy común que un bucle que por error se convierte en infinito contenga entre
sus instrucciones algunas de reserva de memoria, lo que implica que si el
sistema no presenta una correcta política de cuotas para procesos de
usuario pueda venirse abajo o degradar enormemente sus prestaciones. El hecho
de que el autor suela ser fácilmente localizable no debe ser ninguna excusa
para descuidar esta política: no podemos culpar a un usuario por un simple
error, y además el daño ya se ha producido.
- Técnicas salami
Por técnica salami se conoce al robo automatizado de pequeñas cantidades
de bienes (generalmente dinero) de una gran cantidad origen. El hecho
de que la cantidad inicial sea grande y la robada pequeña hace extremadamente
difícil su detección: si de una cuenta con varios millones de pesetas
se roban unos céntimos, nadie va a darse cuenta de ello; si esto se automatiza
para, por ejemplo, descontar una peseta de cada nómina pagada en la
universidad o de cada beca concedida, tras un mes de actividad seguramente se
habrá robado una enorme cantidad de dinero sin que nadie se haya percatado de
este hecho, ya que de cada origen se ha tomado una cantidad ínfima.
Las técnicas salami no se suelen utilizar para atacar sistemas normales, sino
que su uso más habitual es en sistemas bancarios; sin embargo, como en una red
con requerimientos de seguridad medios es posible que haya ordenadores dedicados
a contabilidad, facturación
de un departamento o gestión de nóminas del personal, comentamos esta
potencial amenaza contra el software encargado de estas tareas.
© 2002 Antonio Villalón Huerta