Como ya deciamos al principio la importancia de la seguridad en los sistemas informáticos cobra mucha mas importancia desde el momento que incorporamos sistemas de red y posibilitamos el acceso de manera remota a nuestra computadora. Con el auge de internet si nuestro ordenador esta accesible en la "red de redes" podra ser accedido por millones de personas de todo tipo desde miles de lugares a lo largo del mundo, de ahí la importancia que tiene asegurar una maquina contra posibles intrusos o ataques.
La seguridad en un ordenador conectado a una red podría ser similar a la que podría tener una casa con multiples puertas a las que llega mucha gente conocida y desconocida. Hemos de tratar que solo pasen al interior las personas conocidas por nosotros para que no puedan producir ningún tipo de destrozo en el "interior de la casa".
El FTP es uno de los servicios que mas ataques sufre generalmente. Son muy conocidos fallos de seguridad ( generalmente basados en stacks overflows ) de servidores de FTP tan conocidos como wu-ftp o proftp.
Una de las partes mas conflictivas de cualquier ftp es el directorio de incoming donde el usuario puede escribir ( y por tanto probar supuestos problemas con los nombres de archivos, creación de ficheros, etcetera ). Es indispensable poner unos permisos adecuados a los ficheros que sean creados en este directorio e incluso filtrar si es necesario el nombre de los ficheros creados.
Es interesante que el demonio de ftp pueda ser chroot, con esto se evitará que un usuario ( por lo menos anonimo ) pueda salir de la propia estructura de directorios del ftp. Es necesario en algun servidor ftp crear bajo el propio directorio que será raiz, una estructura de directorios que contenga /pub, /bin, etc...
Los servidores WEB, aunque puedan crear problemas de seguridad por su propia configuración, es más común que los problemas de seguridad sean originados por los CGIs que ejecutan estos. Los peligro de seguridad en un servidor web vendrán en su gran mayoría tanto por sus CGIs como por el codigo que será ejectutado por el propio servidor para realizar paginas dinámicas ( php por ejemplo ). Los fallos suelen ser debido a malos usos de programación en estos CGIs que permiten a un posible agresor escribir, leer datos, etc...
Es importante siempre que sea posible, separar el servidor web del resto de servicios de modo que si surge algun problema en el, no se pueda "difundir" con facilidad a las demas máquinas.
El entorno X-Window es un entorno potencialmente inseguro, permite exportar salidas por red utilizando rangos de puertos ( 6000-60?? ). El protocolo de X-Window tampoco va encriptado y la validación de un host para que pueda "escribir" o "leer" de nuestro terminal se hace mediante el comando "xhost". Si por algún metodo se consigue engañar al sistema que valida el host o simplemente se ha concedido permiso a cualquier host ( xhost +), cualquier otro usuario puede leer o escribir en nuestro terminal X, con el peligro que ambas cosas suponen.
Es importante filtrar estos servicios para máquinas que no deban de acceder a ellos, ahorrando así posibles ataques y acotando el rango de maquinas desde el que se pueden producir los mismos.
Retomando la analogía de la "casa de las mil puertas" podemos analizar alguno de los ataques mas habituales que se puede producir contra un ordenador conectado a una red.
El IP-Spoofing es un ataque donde, volviendo a la analogía de la casa, una persona determinada intenta acceder a nuestro "hogar" convenciendo a su dueño de que es una persona conocida por el, aunque no lo sea.
El ataque por IP-Spoofing, se basa en la posibilidad de producir paquetes (TCP/IP) con una dirección IP de destino que no es la nuestra si no una de una maquina determinada que sostiene una "relación de confianza" con el objetivo. Los ataques por IP-Spoofing pueden producir desde vulnerabilidades en un DNS ( haciendo creer a una determinada maquina que una IP es otra maquina distinta a la que le corresponde realmente ), ataques que generan una denegación de servicio de manera muy efectiva y un largo etcetera. Es un ataque dificil de detectar y de evitar.
Siguiendo con nuestra "casa de las mil puertas", los ataques por sniffing se producirían si por ejemplo para introducirse por cada una de las puertas tuvieramos que decir una contraseña y una persona con intenciones aviesas estviera en cada una de las puertas intentando escuchar cada una de las palabras pronunciadas por "nuestros visitantes" para hacerse con la palabra clave.
El sniffing es un tipo de ataque en el cual se busca recavar información para posteriormente analizar el trafico de red y obtener, por ejemplo las passwords de determinados usuarios. Es clasico el ataque de sniffing que se produce en una red ethernet con una topologia de bus en la cual los paquetes de red se difunden a lo largo de todo el bus. El sniffer en este caso será una tarjeta de red en modo "promiscuo" que estará recibiendo todos los paquetes de la red vayan o no vayan dirigidos hacia ella.
Existen algunos metodos para evitar los sniffers. Una de las mejores alternativas para evitar este tipo de compromisos de seguridad es el uso de comunicaciones encriptadas que evitarán que el tráfico, aunque sea interceptado, pueda dar ningún tipo de información.
Otros metodos que han aparecido no ya para evitar si no para detectar este tipo de ataques han sido el uso de "curiosidades" de la pila TCP/IP de las que hace uso el programa Neped por ejemplo para comprobar si existen tarjetas en modo promiscuo o mediciones de tiempos de respuesta de una maquina que suponemos en modo "promiscuo" a una "tormenta de paquetes" hacia otra máquina distinta.
Un ataque por denegación de servicio sería similar a si en nuestras "casa" alguién cubriera de cemento alguna de nuestas puertas para evitar así el funcionamiento normal de la casa.
Los ataques por denegación de servicio buscan que la maquina sufra un funcionamiento anormal degradando los servicios prestados por la misma llegando incluso a tener que dejar de prestarlos.
Este tipo de ataques no suponen en principio ningún tipo de preocupación de cara a la información guardada en nuestros sistemas, pero sí suponen una preocupación en tanto en cuanto evitan el normal funcionamiento de los mismos. Un ejemplo de programas de denegación de servicio son los clásicos "nukes" utilizados en el IRC. Estos programas tratan de colapsar el tráfico de la maquina ( generalmente mediante un bombardeo de paquetes de tipo ICMP ) para que el server de IRC crea que hemos dejado de comunicarnos por el.
De todos modos debemos de tener en cuenta que un DoS no tiene por que venir de la red, cualquier ataque que pretenda un funcionamiento anormal producido de manera deliverada se puede tomar como un ataque por denegacion de servicio.
Ante estos ataques la mejor solucion es el filtrado de paquetes llegando a denegar las respuestas que se producen a una peticion ECHO request del protocolo ICMP. De todas formas los ataques por denegación de servicio que se producen en redes son motivados o bien por algún problema en la implementación de la pila TCP/IP ( con lo que arreglariamos el problema filtrando los tipos de paquetes que lo producen ) o bien por que el ataque lo produce un sistema con un ancho de banda mucho mayor, en este ultimo caso aunque un firewall ayudaría, el ataque puede incluso sobrepasar el firewall produciendose la denegacion de servicio del mismo modo.
Los TCP Wrappers son una primera aproximación a lo que sera el filtrado de paquetes. Con los TCP Wrappers conseguiremos denegar un servicio determinado ( alojado habitualmente en el meta-demonio inetd ) dependiendo de la maquina que lo requiera ( entre otras opciones ).
Es importante saber como funcionan estos wrappers para hacer notar la diferencia que tienen con los firewalls. Los TCP wrappers son activados cuando se realiza una petición de un servicio al inetd, antes de arrancar este servicio, se arranca el programa tcpd que se encarga de chequear de que maquina proviene la petición, actuando en consecuencia. Esta comprobación se realiza a nivel de aplicacion y en espacio de usuario. Los firewalls realizan el filtrado de paquetes en espacio de kernel y los paquetes filtrados lo son ya en el nivel de red de la pila tcp/ip con lo que el filtrado de los paquetes es mucho mas rapido que en los tcp wrappers.
En esta sección trataremos de algun modo que es un firewall y como se puede utilizar un sistema Linux para realizar filtrado de paquetes.
Un firewall es un programa que filtra paquetes TCP/IP pudiendo realizar discrimación de los mismos por diversos parametros como pueden ser el puerto al que van dirijidos, la IP de la que proviene, el protocolo del paquete y un largo etcetera. En muchos casos y para redes pequeñas es sumamente interesante considerar la posibilidad de instalar un firewall con un simple ordenador con Linux abaratando de manera notable gastos de maquina y software
La dificultad de un firewall reside en la planificación de las reglas de filtrado ya que deberemos proteger nuestra maquina todo lo que podamos pero permitiendo el correcto funcionamiento de la misma ya que seguridad, en ningún caso debería de acarrear poca usabilidad
En linux el soporte de firewalling ya existe en los kernels 2.0.x que introducen reglas mediante la directiva ipfwadm sin embargo mejora notablemente en los kernels 2.2.x con la sustitución de ipfwadm por ipchains, mucho mas versatil y con algunas opciones interesantes añadidas a las funcionalidades de ipfwadm