miércoles, 9 de mayo de 2012

Seguridad con IPython

Wiki


Paquete de Python IPython.zmq expone toda la potencia del intérprete de Python en una red TCP / IP a los efectos de la computación paralela. Esta característica nos lleva a la importante cuestión de modelo de seguridad de IPython. Este documento da detalles acerca de este modelo y cómo se lleva a cabo en la arquitectura de IPython.



Proceso y topología de la red
Para habilitar la computación paralela, IPython tiene una serie de diferentes procesos que se ejecutan. Estos procesos se discuten en detalle en la documentación IPython y se resumen aquí:


  • El motor IPython. Este proceso es un completo intérprete de Python en el que se ejecuta código de usuario. Varios motores hacen posible la computación paralela.
  • El centro IPython. Este proceso controla un conjunto de motores y programadores, y comprueba el estado de los procesos. Se escucha por conexiones de registro de los motores y los clientes, y las conexiones del monitor de los programadores.
  • Los programadores ipython. Se trata de un conjunto de procesos que transmiten los comandos y los resultados entre los clientes y los motores. Por lo general son en la misma máquina que el controlador, y escuchar las conexiones de los motores y los clientes, sino conectar con el Hub.
  • El cliente IPython. Este proceso es típicamente un proceso interactivo Python que se utiliza para coordinar los motores para obtener un cálculo paralelo.

En conjunto, estos procesos se denominan el grupo IPython, y el cubo y programadores juntos se conocen como el controlador.

Estos procesos se comunican a través de cualquier transporte con el apoyo de ZeroMQ (tcp, pgm, Infiniband, el IPC) con una topología bien definida. El centro IPython y programadores de escuchar en los sockets. Al iniciarse, el motor se conecta a un hub y se registra, que a su vez informa al motor de la información de conexión para los programadores, y el motor se conecta a los programadores. Estas conexiones del motor / eje y motor / programador deben persistir durante la vida útil de cada motor.

El cliente IPython también se conecta con los procesos de mando mediante un número de conexiones de socket. Como la escritura, este es un zócalo por programador (4), y 3 conexiones al centro de un total de 7. Estas conexiones persistir durante la vida útil del único cliente.

Un controlador IPython dado y un conjunto de motores de motores típicamente tiene una vida relativamente corta. Típicamente esta vida corresponde a la duración de una sola simulación paralela a cabo por un solo usuario. Por último, el centro, los programadores, los motores, y los procesos de los clientes por lo general se ejecutan con los permisos de ese mismo usuario. Más específicamente, el controlador y los motores no se ejecutan como root o con permisos de superusuario.

Conexiones de red seguras
Información general


ZeroMQ no proporciona exactamente ninguna seguridad. Por esta razón, los usuarios de IPython debe ser muy cuidadoso en el manejo de las conexiones, ya que un proceso abierto socket TCP / IP presenta el acceso a la ejecución arbitrario como el usuario en las máquinas de motor. Como resultado, el comportamiento predeterminado del controlador de procesos es escuchar sólo para los clientes en la interfaz de bucle invertido, y el cliente debe establecer túneles SSH se conecten a los procesos de controlador.

SSH
Desde ZeroMQ no proporciona ninguna seguridad, los túneles SSH son la principal fuente de conexiones seguras. Un archivo de conexión, como ipcontroller-client.json, contendrá información para la conexión al controlador, que pueden incluir la dirección de un servidor ssh a través con el cliente es hacer un túnel. El objeto del cliente crea túneles que utilizan ya sea OpenSSH o Paramiko, dependiendo de la plataforma. Si los usuarios no desean utilizar OpenSSH o Paramiko, o las utilidades de túneles no son suficientes, entonces se puede construir los túneles de sí mismos, y simplemente conectar a los clientes y los motores, como si el controlador se encontraban en bucle de retorno en el equipo de conexión.


Otras medidas de seguridad
Un número de otras medidas se toman para limitar aún más los riesgos de seguridad involucrados en el funcionamiento del kernel IPython.

En primer lugar, de forma predeterminada, el controlador IPython escucha en números de puertos aleatorios. Si bien esto puede ser anulado por el usuario, en la configuración predeterminada, el atacante tendría que hacer un escaneo de puertos para encontrar incluso un controlador para atacar. Cuando se combina con el tiempo relativamente corto de funcionamiento de un controlador típico (del orden de horas), el atacante tendría que trabajar muy duro y muy rápido para encontrar incluso un controlador en marcha para atacar.

En segundo lugar, la mayor parte del tiempo, especialmente cuando se ejecutan en supercomputadoras o clusters, el controlador se ejecuta detrás de un firewall. Por lo tanto, para los motores o el cliente para conectarse al controlador:

Los diferentes procesos tienen que estar todos detrás del firewall.
o bien:

El usuario tiene que utilizar el reenvío de puerto SSH para hacer un túnel las conexiones a través del firewall.
En cualquier caso, un atacante se presenta con barreras adicionales que impiden atacar o incluso el sondaje.


Referencias

iPy




Nominaciones:

Juan Carlos Espinoza

1 comentario: