miércoles, 14 de agosto de 2013

Onion Routing: problemas

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.
onion routing

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