2.3.5 Capa de sesión Protocolos
RPC El RPC (del inglés Remote Procedure Call, Llamada a Procedimiento Remoto) es un protocolo que permite a un programa de computadora ejecutar código en otra máquina remota sin tener que preocuparse por las comunicaciones entre ambos. El protocolo fue propuesto inicialmente por Sun Microsystems como un gran avance sobre los sockets usados hasta el momento. De esta manera, el programador no tenía que estar pendiente de las comunicaciones, estando éstas encapsuladas dentro de las RPC. Las RPC son muy utilizadas dentro del paradigma cliente-servidor. Siendo el cliente el que inicia el proceso solicitando al servidor que ejecute cierto procedimiento o función y enviando éste de vuelta el resultado de dicha operación al cliente. Hay distintos tipos de RPC, muchos de ellos estandarizados como pueden ser el RPC de Sun (RFC 1057), Distributed Computing Environment (DCE), DCOM de Microsoft. No siendo compatibles entre sí. La mayoría de ellos utilizan un lenguaje de descripción de interfaz (IDL) que define los métodos exportados por el servidor. Hoy en día se está utilizando el XML como lenguaje para definir el IDL y el HTTP como protocolo de red. Dando lugar a lo que se conoce como servicios web.
SMB Server Message Block. Protocolo de red que permite compartir archivos e impresoras (entre otras cosas) entre nodos de una red. Es utilizado principalmente en computadoras con Microsoft Windows. SMB fue originalmente inventado por IBM, pero la versión más común hoy en día es la modificada ampliamente por Microsoft. Microsoft renombró SMB a Common Internet File System (CIFS) en 1998 y añadió más características como, por ejemplo, mayores tamaños de archivo. Hay características en la implementación de SMB de Microsoft que no son parte del protocolo SMB original. También existe Samba, que es una implementación libre del protocolo SMB con las extensiones de Microsoft. Samba es una implementación libre del protocolo de archivos compartidos de Microsoft Windows (antiguamente llamado SMB, renombrado recientemente a CIFS) para sistemas de tipo UNIX. De esta forma, es posible que computadoras con Linux o Mac OS X se vean como servidores o actúen como clientes en redes de Windows. Samba también permite validar usuarios haciendo Controlador Principal de Dominio (PDC), miembro de dominio e incluso como un dominio Active Directory para redes basadas en Windows; aparte de ser capaz de servir colas de impresión, directorios compartidos y autentificar con su propio archivo de usuarios. Entre los sistemas tipo Unix en los que se puede ejecutar Samba, están las distribuciones GNU/Linux, Solaris y las diferentes variantes BSD, entre las que podemos encontrar el Mac OS X Server de Apple. Historia Samba fue desarrollado originalmente para Unix por Andrew Tridgell, utilizando un sniffer o capturador de tráfico para entender el protocolo a través de la ingeniería inversa. El nombre viene de insertar dos vocales al protocolo estándar que Microsoft usa para sus redes, el SMB o server message block. En un principio Samba tomó el nombre de smbserver, pero tuvieron que cambiarlo por problemas con una marca registrada. Tridgell buscó en el diccionario de su máquina Unix alguna palabra que incluyera las letras s, m y b hasta que dio con Samba. Características Samba es una implementación de una docena de servicios y una docena de protocolos, entre los que están NetBIOS sobre TCP/IP (NetBT), SMB (también
conocido como CIFS), DCE/RPC, o más concretamente, MSRPC, el servidor WINS también conocido como el servidor de nombres NetBIOS (NBNS), la suite de protocolos del dominio NT, con su Logon de entrada a dominio, la base de datos del gestor de cuentas seguras (SAM), el servicio Local Security Authority (LSA) o autoridad de seguridad local, el servicio de impresoras de NT y recientemente el Logon de entrada de Active Directory, que incluyen una versión modificada de Kerberos y una versión modificada de LDAP. Todos estos servicios y protocolos son frecuentemente referidos de un modo incorrecto como NetBIOS o SMB. Samba configura directorios Unix/Linux (incluyendo sus subdirectorios) como recursos para compartir a través de la red. Para los usuarios de Microsoft Windows, estos recursos aparecen como carpetas normales de red. Los usuarios de Linux pueden montar en sus sistemas de archivos estas unidades de red como si fueran dispositivos locales, o utilizar la orden smbclient para conectarse a ellas muy al estilo del cliente de la línea de órdenes ftp. Cada directorio puede tener diferentes permisos de acceso sobrepuestos a las protecciones del sistema de archivos que se esté usando en Linux. Por ejemplo, las carpetas home pueden tener permisos de lectura y escritura para cada usuario, permitiendo que cada uno acceda a sus propios archivos; sin embargo, deberemos cambiar los permisos de los archivos localmente para dejar al resto ver nuestros archivos, ya que con dar permisos de escritura en el recurso no será suficiente. SSL Secure Sockets Layer (SSL) y Transport Layer Security (TLS) -Seguridad de la Capa de Transporte-, su sucesor, son protocolos criptográficos que proporcionan comunicaciones seguras en Internet. Existen pequeñas diferencias entre SSL 3.0 y TLS 1.0, pero el protocolo permanece sustancialmente igual. El término SSL según se usa aquí, se aplica a ambos protocolos. SSL proporciona autentificación y privacidad de la información entre extremos sobre Internet mediante el uso de criptografía. Habitualmente, sólo el servidor es autentificado (es decir, se garantiza su identidad) mientras que el cliente se mantiene sin autentificar; la autentificación mutua requiere un despliegue de infraestructura de claves públicas (o PKI) para los clientes. Los protocolos permiten a las aplicaciones cliente-servidor comunicarse de una forma diseñada para prevenir escuchas (eavesdropping), la falsificación de la identidad del remitente y mantener la integridad del mensaje. SSL se ejecuta en una capa entre los protocolos de aplicación como HTTP, SMTP y sobre el protocolo de transporte TCP, que forma parte de la familia de protocolos TCP/IP. Aunque pueda proporcionar seguridad a cualquier protocolo que use conexiones de confianza (tal como TCP), se usa en la mayoría de los
casos junto a HTTP para formar HTTPS, el cual es usado para asegurar páginas World Wide Web para aplicaciones de comercio electrónico, utilizando certificados de clave pública para verificar la identidad de los extremos. SSL implica una serie de fases básicas: Negociar entre las partes el algoritmo que se usará en la comunicación. Intercambio de claves públicas y autenticación basada en certificados digitales. Encriptación del tráfico basado en cifrado simétrico. Durante la primera fase, el cliente y el servidor negocian qué algoritmos criptográficos se van a usar. Dos conceptos importantes de SSL son: Conexión: es un transporte que proporciona un tipo de servicio adecuado. En SSL dichas conexiones son relaciones entre pares. Cada conexión se asocia con una sesión. Sesión: es una asociación entre un cliente y un servidor. Las sesiones se utilizan para evitar la costosa negociación de nuevos parámetros de seguridad para cada conexión. Cómo funciona El protocolo SSL intercambia registros; opcionalmente, cada registro puede ser comprimido, encriptado y empaquetado con un código de autentificación del mensaje (MAC). Cada registro tiene un campo de content_type que especifica el protocolo de nivel superior que se está usando. Cuando se inicia la conexión, el nivel de registro encapsula otro protocolo, el protocolo handshake. El cliente envía y recibe varias estructuras handshake: Envía un mensaje ClientHello especificando una lista de conjunto de cifrados, métodos de compresión y la versión del protocolo SSL más alta permitida. Éste también envía bytes aleatorios que serán usados más tarde (llamados Challenge de Cliente o Reto). Además puede incluir el identificador de la sesión.
Después, recibe un registro ServerHello, en el que el servidor elige los parámetros de conexión a partir de las opciones ofertadas con anterioridad por el cliente. Cuando los parámetros de la conexión son conocidos, cliente y servidor intercambian certificados (dependiendo de las claves públicas de cifrado seleccionadas). El servidor puede requerir un certificado al cliente, para que la conexión sea mutuamente autenticada. Cliente y servidor negocian una clave secreta común llamada master secret, posiblemente usando el resultado de un intercambio Diffie-Hellman, o simplemente encriptando una clave secreta con una clave pública que es desencriptada con la clave privada de cada uno. Todos los datos de claves restantes son derivados a partir de este master secret (y los valores aleatorios generados en el cliente y el servidor), que son pasados a través una función pseudo aleatoria cuidadosamente elegida. TLS/SSL poseen una variedad de medidas de seguridad: Numerando todos los registros y usando el número de secuencia en el MAC. Usando un resumen de mensaje mejorado con una clave (de forma que sólo con dicha clave se pueda comprobar el MAC). Protección contra varios ataques conocidos, como los que implican un degradado del protocolo a versiones previas (por tanto, menos seguras), o conjuntos de cifrados más débiles. El mensaje que finaliza el protocolo handshake (Finished) envía un hash de todos los datos intercambiados y vistos por ambas partes. La función pseudo aleatoria divide los datos de entrada en 2 mitades y las procesa con algoritmos hash diferentes (MD5 y SHA), después realiza sobre ellos una operación XOR. De esta forma se protege a sí mismo de la eventualidad de que alguno de estos algoritmos se revelen vulnerables en el futuro. Aplicaciones SSL se ejecuta en una capa entre los protocolos de aplicación como HTTP, SMTP, NNTP y sobre el protocolo de transporte TCP, que forma parte de la fa-
milia de protocolos TCP/IP. Aunque pueda proporcionar seguridad a cualquier protocolo que use conexiones de confianza (tal como TCP), se usa en la mayoría de los casos junto a HTTP para formar HTTPS. HTTPS es usado para asegurar páginas World Wide Web para aplicaciones de comercio electrónico, utilizando certificados de clave pública para verificar la identidad de los extremos.