Con la aparición de los computadores, la seguridad
de la información en las organizaciones, en las últimas décadas
ha sufrido básicamente dos cambios.
Antes de la aparición de las computadoras, la
seguridad era física, es decir, se conseguía guardando los
documentos en cajas fuertes con combinación de apertura, y mediante
medios de administración, como son los medios de investigación
del personal a la hora de la contratación.
El segundo cambio, viene con el crecimiento de las redes
informáticas, la posibilidad de una fácil
comunicación entre maquinas, ha hecho necesario
el desarrollo de una serie de mecanismos para
garantizar la seguridad como pueden ser la criptografía
y los firewalls para proteger los datos durante la transmisión y
garantizar la autentificación de los datos transmitidos. El aumento
de los usuarios que son peligro potencial para el resto de sistemas y la
cantidad de fallos de seguridad de los actuales sistemas hacen que sea
necesario proteger nuestros equipos con algún tipo de firewall para
evitar ataques indeseados.
La seguridad en los computadores y en redes implica cumplir
tres exigencias:
La conexión de un sistema a Internet, se expone
a numerosas amenazas de seguridad que aumenta día a día.
Existen diversos tipos de amenazas, que podemos clasificar en cuatro tipos
diferenciados:
Los tipos y estilos de ataques son fácilmente
definibles. Podemos encontrar nueve tipos básicos de ataques que
se pueden llevar a cabo contra las redes conectadas a Internet:
A continuación explicaremos brevemente estos
distintos estilos:
Los ataques basados en las contraseñas
son los ataques a computaras más clásicos. Inicialmente,
el acceso se intentaba, mediante un identificador de acceso y una contraseña,
probando una y otra vez hasta que encontraba la contraseña correcta.
De aquí, pronto comenzó una nueva modalidad del ataque, ataque
basados en diccionario, se trata de ataques automatizados a las contraseñas
mediante el uso de un programa que recorre todo un diccionario.
La Interceptación de paquetes (packet sniffer), es el más difícil de todos los ataques, y una amenaza seria para el comercio en Internet. Ya que pueden interceptar todo tipo de paquetes, desde los mensajes de inicio de sesión, transmisiones de los números de las tarjetas de crédito, correo electrónico... una vez capturado el paquete, se puede usar y leer toda la información contenida en él, como puede ser el nombre del host, nombre de usuario y la contraseña asociada al paquete. Normalmente, este tipo de ataque es el previo para el posterior ataque usando direcciones IP falsas.
El ataque basado en acceso de confianza, este tipo de ataques son especialmente usados, especialmente sobre sistemas UNIX, ya que sus mecanismos de confianza 1 son especialmente débiles. Con lo que los hackers pueden acceder al sistema simplemente con averiguar el nombre de una máquina de confianza.
Las direcciones IP falsas como hemos comentado anteriormente, entre los datos que envía un ordenador a otro, se incluye tanto la identidad del emisor como la del receptor. Con lo que el hacker utiliza este sistema para atacar su red proporcionando una información falsa acerca de la identidad de su ordenador. De esta forma tiene acceso a los paquetes entrantes (no a los salientes) en los sistemas y a los servicios de los mismos. Debemos tener en cuenta, que todas las respuestas a consultas y peticiones no llegarían al intruso, sino al host que se pretende emular.
Los ataques de Ingeniería social son cada vez más habituales y peligrosos, ya que cada vez se conectan más personas a Internet y a redes internas. Se trata de enviar un correo al usuario, fingiendo ser el administrador del sistema, para que este le comunique su password. Todo dependerá de la ignorancia del usuario acerca de ordenadores y de redes.
Predicción de números de secuencia
es una técnica habitual para falsificar direcciones IP en redes
UNIX.
El secuestro de sesiones es más popular que el de falsificación de direcciones IP. Se debe a que permite importar y exportar datos del sistema. Este tipo de ataque, más sencillo que el de predicción de números de secuencia, se establece siempre que el intruso encuentra una conexión entre servidor y cliente, y al penetrar a través de encaminadores desprotegidos o firewalls poco adecuados, y este detecta los números de secuencia entre usuarios. El intruso se apodera de las direcciones de un usuario legítimo, el usuario secuestra su sesión, para lo cual simula los números de la dirección del usuario. Después, el anfitrión desconecta al usuario legítimo y el intruso obtiene libre acceso a los archivos a los que podía acceder el usuario.
Los ataques dirigidos a aprovechar los puntos vulnerables
de la tecnología, todos los sistemas
operativos principales tienen sus puntos débiles.
Algunos más accesibles que otros. Por otro lado, la
probabilidad de que un hacker encuentre algún
punto débil es extremadamente reducida.
Los ataques dirigidos a aprovechar las bibliotecas
compartidas, utilizan bibliotecas 2 compartidas que suelen encontrarse
en Unix. Los hackers reemplazan estos archivos por nuevos programas que
les servirán a sus propósitos, como permitirles el acceso
privilegiado.
2.Firewalls
Un firewall o cortafuegos es un sistema o grupo de sistemas
que hacen cumplir una política de control de acceso entre dos redes.
Puede ser desde un simple router hasta varias redes en serie, que separa
en cuanto a seguridad se refiere una maquina o subred del resto de la red,
protegiéndola así de protocolos y servicios que desde el
exterior puedan suponer una amenaza a la seguridad. Para que un firewall
sea efectivo tiene que pasar por él todo el trafico que entre y
salga al exterior, es decir a Internet. El espacio protegido, llamado perímetro
de seguridad, perteneciente a una organización, a subredes domesticas
cada vez más comunes o simplemente un PC protegido de Internet.
2.1.Tipos
Los tipos de firewalls existentes son:
La segunda decisión que habrá que tomar será el nivel de monitorización, redundancia y control. Para esto existen las denominadas políticas por defecto que queremos establecer en el firewall:
Evidentemente la segunda es mejor en cuanto a seguridad
pero a la hora de trabajar los usuarios en muchas ocasiones están
limitados. Es menos costosa de implementar, es más fácil
denegar y permitir solo unos cuantos servicios que permitirlo todo y luego
denegar todo aquello que pueda ser una amenaza para nuestra seguridad.
Existe la posibilidad de rechazar, que es como denegar
pero se envía un paquete ICMP para avisar que este paquete ha sido
rechazado. Esto supone una sobrecarga de la red y una información
muy útil para los hackers.
La tercera consideración a tener en cuenta es el aspecto económico. Depende de la información que tenemos que proteger será necesario hacer un esfuerzo económico si realmente lo requiere, no podemos emplear mas dinero en proteger la información de lo que esta vale.
Para que un firewall sea eficiente tendremos que tener en cuenta que el numero de reglas sea el mínimo posible para hacer cumplir la política escogida porque sino perderemos demasiado tiempo en evaluar los paquetes. La gestión natural de reglas y tolerancia a errores de gestión es también muy importante sobre todo cuando la red es de un tamaño considerable, y por ultimo la granuralidad máxima, interesa ajustarse lo más posible al nivel de detalle exigido por la política de la organización.
2.3.Arquitecturas
Host de doble conexión.
Se trata de una configuración muy simple aunque
muy efectiva. Se trata de la conexión de las dos redes mediante
software, ya que esta compuesto por dos tarjetas de red separadas físicamente.
El principal inconveniente es que el usuario, podría
habilitar fácilmente e incluso por error, el
encaminamiento interno. Lo que deshabilitaría
el firewall. Para funcionar utilizan un conjunto de proxies a nivel de
aplicación o de circuito. El software ejecuta los proxies para controlar
el tráfico entre ambas redes.
Debemos hacer una apreciación para los sistemas
UNIX, ya que son especialmente susceptibles, ya que para que funcione este
tipo de configuración es necesario que las funciones de encaminamiento
estén desactivadas, sin embargo, en algunas versiones , en especial
Berkeley Unix, estas funciones se habilitan de forma predeterminada. Por
tanto es necesario comprobar que el sistema operativo haya desactivado
todas las funciones de encaminamiento.
Filtrado de host.
Posiblemente este tipo de firewalls son los mas seguros
incluso más que los de doble conexión.
Al crearlo, le añadimos un encaminador de filtrado
a la red, lo que nos permite separar el ordenador de Internet. Este tipo
de configuración es muy efectivo y fácil de mantener.
Los usuarios que deseen conectarse con Internet deberán
hacerlo a través de este ordenador. De este
modo, los usuarios internos creen tener un acceso directo
a Internet mientras que el host restringe el
acceso a los usuarios externos.
Filtrado de subred.
Esta red permite aislar aún más la red privada
de Internet. Esta compuesto por un servidor proxy y dos encaminadores de
filtrado independientes. Los encaminadores controlan el tráfico
de la red local,
mientras que el proxy vigila y controla el tráfico
de entrad y salida para Internet.
Esta configuración proporciona una defensa formidable
frente a cualquier ataque. Al aislar el host de una red independiente,
limita el daño que puede sufrir la red interna.
3.Firewall
para linux: iptables
La cadena INPUT se aplica para
paquetes que van destinados a nuestra máquina local.
La cadena OUTPUT se aplica únicamente a los paquetes
generados localmente.
La cadena FORWARD sólo se ve los paquetes que
simplemente están de paso.
Si la cadena dice que hay que descartar (DROP) el paquete,
se le mata ahí mismo, pero si la cadena dice que hay aceptarlo (ACCEPT),
continúa su camino por el diagrama.
Antes de ejecutar alguna orden iptables (hay que tener
cuidado algunas distribuciones puede que ejecuten iptables en sus guiones
de iniciación), no habrá reglas en ninguna de las cadenas
de uso interno («INPUT», «FORWARD» y «OUTPUT»),
todas las cadenas tendrán la política de ACCEPT. Se puede
alterar la política por defecto de FORWARD proporcionando la opción
«forward=0» al módulo iptable_filter.
Veamos las operaciones que se pueden hacer en todas las cadenas:
Las reglas de una cadena se pueden manipular de varias
maneras:
3.1.Parámetros de especificación
de reglas
3.1.1.Especificar la acción
La opción «-j» seguido de las opciones
ACCEPT, DROP, QUEUE, RETURN, indican la acción que se tomara si
el paquete cumple con la regla. Un ejemplo:
3.1.2.Especificar las direcciones IP de Origen
y Destino
Las direcciones IP de origen («-s», «--source», o «--src») y destino («-d», «--destination», o «--dst») se pueden especificar de cuatro maneras. La más común es usar el nombre completo, tal como «localhost» o «www.linuxhq.com». La segunda manera es especificar la dirección IP, como «127.0.0.1».
Las tercera y cuarta maneras permiten especificar un grupo de direcciones IP, como «199.95.207.0/24» o «199.95.207.0/255.255.255.0». Ambas especifican cualquier dirección entre 199.95.207.0 y 199.95.207.255, ambas inclusive; los dígitos tras la «/» dicen qué partes de la dirección IP son significativas. «/32» o «/255.255.255.255» es la opción por defecto (coincide con toda la dirección IP). Para especificar cualquier dirección IP, se debe usar «/0», de esta manera:
[ NOTA: «-s
0/0» es redundante en este caso. ]
# iptables
-A INPUT -s 0/0 -j DROP
#
Se usa rara vez, ya que el efecto que se consigue en
esta regla es lo mismo que si no se especificase la opción «-s».
3.1.3.Especificar una inversión
Hay muchos indicadores, como «-s» (o «--source») y «-d» («--destination») cuyos respectivos argumentos pueden ir precedidos por «!» (se pronuncia «not» o «no»), para que coincidan con direcciones que NO sean iguales a las proporcionadas. Por ejemplo, «-s ! localhost» coincide con cualquier paquete que no venga de localhost.
3.1.4.Especificar el protocolo
Se puede especificar el protocolo con el indicador «-p» (o «--protocol»). El protocolo puede ser un número (si sabe los valores numéricos) o un nombre en el caso especial de «TCP», «UDP» o «ICMP». No importa si lo pone en mayúscula o minúscula; «tcp» valdrá lo mismo que «TCP».
El nombre de protocolo puede ir prefijado de una «!», para invertirlo, de manera que «-p ! TCP» especifica paquetes que no sean TCP.
3.1.5.Especificar la Interfaz
Las opciones «-i» (o «--in-interface»)
y «-o» (o «--out-interface») especifican el nombre
de una interfaz con la que coincidir. Una interfaz es el dispositivo físico
por el que entra («-i») o sale («-o») un paquete.
Puede usar la orden ifconfig para obtener una lista de las interfaces que
están «up» (esto es, funcionando en ese momento).
Los paquetes que pasan por la regla INPUT no tienen un
interfaz de salida, con lo que nunca se activará una regla de esta
cadena que use «-o». De forma similar, los paquetes que atraviesan
OUTPUT no tienen interfaz de salida, de manera que ninguna regla que use
«-i» en esta cadena funcionará.
Sólo los paquetes que pasan por la cadena FORWARD
tienen a la vez interfaz de entrada y de salida.
Es perfectamente correcto especificar una interfaz que
no existe en este momento; la regla no será activada por nada hasta
que la interfaz empiece a funcionar. Esto es extremadamente útil
con enlaces PPP de llamada (normalmente la interfaz ppp0) y similares.
Como caso especial, un nombre de interfaz que acabe en
«+» coincidirá con todas las interfaces (que existan
en ese momento o no) cuyo nombre empiece de esa manera. Por ejemplo, para
especificar una regla que funcione para todas las interfaces PPP, se podría
usar la opción -i ppp+.
El nombre de la interfaz puede ir precedido por «!»
para coincidir con un paquete que no vaya por la(s) interfaz/ces especificada(s).
does not match the specified interface(s).
3.1.6.Especificar fragmentos
Algunas veces ocurre que un paquete es demasiado grande para pasar por el cable de un solo golpe. Cuando esto ocurre, el paquete se divide en fragmentos, que se envían como varios paquetes. El otro extremo reensambla los fragmentos para reconstruir el paquete entero.
El problema de los fragmentos es que el primero de ellos tiene todos los campos de cabecera (IP + TCP, UDP e ICMP) que hay que examinar, pero los siguiente sólo tienen un subconjunto de la cabecara (IP sin los campos adicionales de protocolo). Por lo tanto, no es posible buscar cabeceras de protocolos (como se hace con las extensiones TCP, UDP e ICMP) en los siguientes fragmentos.
Si está haciendo un seguimiento de conexión o NAT, entonces se reunirán todos los fragmentos antes de que alcancen el código de filtrado de paquetes, de manera que no se deba preocupar por ellos.
Por otro lado, es importante comprender cómo son tratados los fragmentos por las reglas de filtrado. Cualquier regla de filtrado que pida información que no tenemos no será activada. Esto significa que el primer fragmento se trata como cualquier otro paquete. El segundo y los siguientes no. Por tanto una regla que diga -p TCP --sport www (que especifica como puerto origen el «www») nunca será activada por un fragmento (excepto el primero). Tampoco la regla opuesta -p TCP --sport ! www.
Sin embargo, podemos especificar una regla específicamente para el segundo fragmento y los siguientes, usando la opción «-f» (o «--fragment»). También es válido especificar que una regla no se va a aplicar al segundo fragmento ni a los siguientes, precediendo «-f» con «!».
Normalmente se considera seguro dejar pasar el segundo fragmento y siguientes, ya que el filtrado afectará al primero, y por lo tanto se evita que el destino de los paquetes pueda reensamblarlos por completo; sin embargo, se conocen fallos de programación que permiten poner fuera de combate máquinas simplemente enviándoles fragmentos.
3.2.Extensiones
Iptables es extensible, lo que significa que se pueden
extender tanto el núcleo como la herramienta iptables para proporcionar
nuevas características.
Algunas de estas extensiones son estándar, y otras
más exóticas. Las extensiones las puede hacer otra gente
y pueden ser distribuidas por separado para diferentes nichos de usuarios.
Las extensiones al núcleo normalmente residen
un directorio de módulos, como /lib/modules/2.3.15/net. Normalmente
el núcleo los carga cuando son necesario, si fue compilado con la
opción CONFIG_KMOD, de manear que no sería necesario cargarlos
de forma manual.
Las extensiones al programa iptables son bibliotecas
compartidas que residen normalmente en /usr/local/lib/iptables/, aunque
una distribución podría ponerlas en /lib/iptables o /usr/lib/iptables.
Para utilizar una extensión se debe utilizar «-m»
«nombre de iptables». La lista siguiente muestra las opciones
«-m» y «-p» que establecen el contexto de la extensión,
y las opciones proporcionadas por esa extensión.
3.2.1.Extensiones de TCP
Las extensiones TCP se cargan de forma automática si se especifica «-p tcp». Esto proporcionar las siguientes opciones (ninguna de las cuales se activa con fragmentos).
--tcp-flags
Seguido por una «!» opcional, y después
dos cadenas de indicadores (flags), le permite filtrar dependiendo de ciertos
indicadores de TCP. La primera cadena es la máscara: una lista de
los indicadores que desea examinar. La segunda cadena indica cuales deben
estar activos. Por ejemplo,
# iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DENY
Esto indica que deben ser examinados todos los indicadores («ALL» es sinónimo de «SYN,ACK,FIN,RST,URG,PSH»), pero sólo deben estar activos SYN y ACK. Hay otro argumento llamado «NONE», que significa «ningún indicador».
--syn
precedido de forma opcional por un «!», es
equivalente a «--tcp-flags SYN,RST,ACK SYN».
--source-port
seguido de forma opcional por un «!», y después
un puerto o rango de puertos TCP. Estos pueden estar representados por
su nombre, tal como viene en /etc/services, o por número. Los rangos
pueden ser dos nombres de puerto separados por un «-», un puerto
seguido de un «-» (para especificar un puerto mayor o igual
al indicado), o un puerto precedido de «-» (para especificar
un puerto menor o igual al indicado).
--sport
sinónimo a «--source-port».
--destination-port
y
--dport
son lo mismo que lo anterior, sólo que especifican
el puerto de destino, en lugar del de origen.
--tcp-option
seguido por un «!» (opcional) y un número,
se ajusta a paquetes con una opción TCP igual a ese número.
Un paquete que no tenga una cabecera TCP completa, será descartado
automáticamente si se intenta examinar sus opciones TCP.
Explicación de los indicadores (flags) TCP
A veces es útil permitir conexiones TCP en una
dirección, pero no en la otra. Por ejemplo, puede que quiera permitir
conexiones a un servidor WWW externo, pero no desde ese mismo servidor.
La solución del inexperto sería bloquear
los paquetes TCP que vengan del servidor. Desafortunadamente, las conexiones
TCP precisan que los paquetes fluyan en ambas direcciones para poder funcionar.
La solución es bloquear sólo los paquetes
que se usan para solicitar una conexión. A éstos se les llama
paquetes SYN ( técnicamente son paquetes con el indicador SYN activo,
y los FIN y ACK inactivos). Rechazando estos paquetes, podemos detener
intentos de conexión en su inicio.
El indicador (flag) «--syn» se usa para este
propósito: sólo es válido para las reglas que especifican
TCP como protocolo. Por ejemplo, para especificar intentos de conexión
TCP desde 192.168.1.1:
-p TCP -s 192.168.1.1 --syn
Este indicador puede ser invertido precediéndolo con un «!», lo que significa cualquier paquete excepto el de inicio de conexión.
3.2.2.Extensiones UDP
Estas extensiones se cargan de forma automática si se especifica «-p udp». Proporciona las opciones «--source-port», «--sport», «--destination-port» y «--dport» con los mismos detalles que los indicados para TCP.
3.2.3.Extensiones ICMP
Esta extensión se carga de forma automática
si se especifica «-p icmp». Proporciona sólo una opción
nueva:
--icmp-type
seguida de un «!» opcional, y luego del nombre
de un tipo icmp (p.ej. «host-unreachable»), un tipo numérico
(«3»), o un tipo numérico y un código separados
por «/» («3/3»). Puede ver una lista de los nombres
de los tipos icmp disponibles usando «-p icmp --help».
3.2.4.Extensiones Mac
Este módulo debe ser especificado de forma explícita
con «-m mac» o «--match mac». Se usa para coincidencias
en las direcciones Ethernet (MAC) de los paquetes entrantes, y por tanto
sólo son útiles para los paquetes que pasan por las cadenas
PREROUTING e INPUT. Proporciona sólo una opción:
--mac-source
seguida de un «!» opción, y luego
una dirección ethernet en notación hexadecimal separada por
«:», por ejemplo «--mac-source 00:60:08:91:CC:B7».