Actualmente hacer que los
sistemas que usan encaminamiento de cebolla sean seguros es un área
de investigación en activo. Se están desarrollando muchos estudios
de mejoras, pero se siguen teniendo puntos débiles que hay que
subsanar. Aunque no hay propuesta definitiva se han desarrollado una
serie de técnicas que han demostrado ser efectivas para mejorar las
prestaciones y el grado de seguridad.
Confusión de paquetes
Si analizamos el tráfico
de entrada y salida de cada router podemos llegar a establecer una
correspondencia y establecer qué paquete de salida se corresponde
con cierto paquete de entrada. Aplicando este análisis a todos los
routers podemos llegar a establecer quien se está comunicando con
quien. Para evitar que se pueda llegar a este tipo de conclusiones se
pueden tomar distintas estrategias:
- Introducir retardos artificiales en el tiempo de proceso de los mensajes en los routers.
- Introducir tráfico de relleno, esto es, paquetes que tienen información inútil y que su única función es confundir al posible atacante.
- Hacer que el tráfico se realice a través de mensajes de tamaño fijo. A estos paquetes se les suele llamar células. Si los mensajes que circulan por la red no son de tamaño fijo nos podríamos basar en este tamaño para hacer conjeturas sobre que paquete de entrada se corresponde con qué paquete de salida.
- Hacer que los paquetes, en lugar de viajar en solitario, viajen agrupados y junto a ellos viaje información de relleno e información de control (por ejemplo instrucciones para los retardos en los nodos). Todo ello se encapsula en un paquete cifrado. A esta forma de encaminamiento se la conoce como encaminamiento de ajo. Este sistema lo usan por ejemplo I2P o Perfect Dark.
Proxy de aplicación
En este sistema se
requiere un proxy de aplicación para cada protocolo de aplicación
soportado. Esto conlleva mucho trabajo y provoca que algunos proxys
no sean escritos nunca y por tanto algunas aplicaciones nunca sean
soportadas. Por este motivo, en posteriores diseños de redes que
usan encaminamiento de cebolla (Ej. TOR), se suele usar un protocolo
como interfaz genérico (Ej. SOCKS) de forma que toda aplicación con
soporte en ese protocolo genérico puede usar la red de cebolla para
realizar comunicaciones anónimas sin necesidad de modificaciones
adicionales. Ese protocolo genérico tiene que dar soporte a
distintos protocolos y al final los múltiples posibles protocolos de
entrada se convierten en uno solo. Por ejemplo el protocolo SOCKS
permite tener por debajo cualquier tipo de tráfico TCP/IP.
Reinyección de paquetes
Los sistemas con
encaminamiento de cebolla son vulnerables a ataques de replay, que se
basan en capturar mensajes y luego los reinyectan en la red con el
objetivo de sobrecargarla y que deje de funcionar (ataque de
denegación de servicio). Para evitar este tipo de ataques es
habitual que los routers detecten cuando un paquete ya ha sido
procesado (y por tanto descarten ese paquete) y que los propios
mensajes tengan un tiempo de validez que una vez agotado permita que
los routers eliminen esos mensajes.
Publicación de datos de configuración
Observar que los nodos
necesitan saber una serie de valores de configuración (Ej. routers
activos, direcciones y claves públicas). Si esos valores de
configuración son fijos, podemos decidir que, como parte de la
configuración del nodo, se cargue un fichero con esa lista de
valores y a partir de ahí se utilizan.
![]() |
| Fuente: josemariagonzalez.es |
Sin embargo en la
realidad esto no es operativo ya que los valores de configuración
cambian (por ejemplo caducan las claves asimétricas), se añaden o
desaparecen nodos, etcétera. Por eso es necesario el uso de un
sistema que permita tener disponible para los distintos nodos esos
valores de configuración necesarios para el correcto funcionamiento.
Algunos sistemas publican esa información mediante un sitio Web.
Otros, como Tor o Mixminion, usan un servicio de directorio para
publicar esa información. Los servidores que proporcionan estos
servicios son autoridades confiables y se encargan de mantener el
servicio actualizado y de distribuir la información, normalmente de
forma firmada. Esta información firmada a veces también puede ser
distribuida a modo de mirror por otros routers de la red para así
reducir la carga del servicio de directorio.
Observar que tener un
servicio para dar valores de configuración puede ser usado para
protegerse contra ataques basados en introducir en la red routers
malintencionados. Esto es debido a que cada router para entrar
efectivamente en la red (se publiquen sus datos de configuración)
tiene que ser aprobado por el proveedor del servicio.
Políticas de entrada y salida
Algunos sistemas (Ej.
Tor) permiten establecer un conjunto de restricciones de
funcionamiento del nodo en el caso de que este sea el último nodo de
un circuito de datos. A esto se le suele llamar políticas de salida.
Por ejemplo puede definir una lista de posibles direcciones IP o una
serie de puertos a los cuales tiene que estar dispuesto el nodo de
salida para llevar el tráfico. La exit-policy puede ser variable a
lo largo del tiempo.
Análogamente se pueden
establecer políticas de entrada o entry policy. Por ejemplo
podríamos usarlas en una organización para obligar a que se use un
punto de entrada a la red de encaminamiento de cebolla.
Observar que las
políticas de salida son críticas en infraestructuras distribuidas
de voluntarios ya que cada OR puede restringir el tipo de tráfico
que puede salir de su nodo.
Control de congestión
En las redes del mundo
real es necesario balancear la carga y realizar control del flujo.
Esto provoca que sea necesarias comunicaciones de control entre los
nodos y una visión del tráfico de forma global. Para ello algunos
sistemas (Ej. Tor) permite a los nodos en los bordes de la red
detectar congestiones y enviar allí menos datos hasta que esto se
haya subsanado.
Integridad extremo a extremo
Muchos sistemas (Ej. Tor)
proveen integridad extremo a extremo para evitar que algún nodo del
circuito pueda cambiar el contenido de los mensajes de datos que
pasan por ellas, para por ejemplo alterar el servidor web al que se
está pidiendo conexión o cualquier otra utilidad. Esta integridad
se verifica antes de que los datos salgan de la red.
Número de saltos variable
Algunos sistemas (Ej Tor)
permiten a los iniciadores cambiar parcialmente la topología del
circuito. Por ejemplo se puede aprovechar para permitir la salida del
circuito usando un nodo intermedio (Leaky-pipe circuit topology) y de
este modo frustrar ataques que se basan e detectar y atacar el último
nodo de un circuito.
Ineficiencia
Utilizar exclusivamente
criptografía de clave pública para cifrar cada capa de la cebolla
es muy costoso a nivel de computación. Esto es especialmente
importante para aplicaciones de baja latencia. Por esta razón en
muchos casos es necesario el uso de criptografía simétrica la cual
es, en general, mucho más 'barata' computacionalmente.
Para poder usar
criptografía simétrica es necesario que todas las partes que se
comunican compartan una clave que mantienen en secreto. Se puede
aprovecha la criptografía de clave pública para en un primer paso
establecer esta clave (simétrica) compartida y que a partir de ahí
se use ésta a modo de clave de sesión. Por esta razón, en estos
casos, se dice que usamos la criptografía de clave pública,
computacionalmente más cara, para establecer un circuito (ruta) de
claves simétricas compartidas.
Una vez establecido el
circuito, este puede ser utilizado para ir transportando los mensajes
usando criptografía simétrica. El circuito construido puede usarse
de forma bidireccional. Un ejemplo de esquema usando claves
simétricas podría ser el siguiente:
- Se establecen una serie de claves simétricas compartidas entre los routers.
- A continuación los datos son enviados 'envueltos' en capas creadas usando las claves simétricas. Cada router quitará una capa de cifrado de los datos que le pasan, usando la clave simétrica que obtuvo cuando se estableció el circuito. De esta forma los datos original emergerán en claro al final del circuito.
- El destinatario puede responder con otro mensaje. Este mensaje en cada nodo se le añadirá una capa de cifrado simétrico y luego se mandará al siguiente. Cuando llega al destino (el iniciador de la comunicación) llegará como una estructura de datos con las distintas capas de cifrado. El iniciador de la comunicación, para obtener el mensaje de vuelta en claro, quita las distintas capas descifrando con las distintas claves simétricas utilizadas.
Entre
los enfoques que se han ido proponiendo para conseguir encaminamiento
de cebolla, se han propuesto distintas formas de establecimiento de
circuito usando claves simétricas construidos a partir de
criptografía de clave pública. Sin embargo los sistemas utilizados
no son la panacea teniendo cada uno sus propios inconvenientes por lo
que se considera un problema abierto habiendo actualmente nuevas
propuestas de formas de establecer los circuitos, algunos usando solo
criptografía asimétrica.








0 comentarios:
Publicar un comentario