1 / 35

Sockets, el interfaz

Sockets, el interfaz. Seguridad en nuestros Sockets Adaptación de nuestros Sockets a IPv6. Seguridad en programas de red. ¿Mejora su funcionalidad un programa seguro?. ¿Qué niveles de seguridad podemos implementar?. Seguridad en programas de red.

Download Presentation

Sockets, el interfaz

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sockets, el interfaz • Seguridad en nuestros Sockets • Adaptación de nuestros Sockets a IPv6

  2. Seguridad en programas de red • ¿Mejora su funcionalidad un programa seguro? • ¿Qué niveles de seguridad podemos implementar?

  3. Seguridad en programas de red • Compartir información: Base de la programación en red • Necesitamos conocer con quién se trabaja • Problemas: Naturaleza de la red y Hackers

  4. Seguridad en programas de red • Idea: Establecer niveles de seguridad y determinar “donde” aplicar dicha seguridad • Primer paso: Identificación del usuario

  5. Seguridad en programas de red • Niveles de seguridad en identificación de usuarios: • Autenticación (Nombre de usuario y contraseña) • Autorización (autorizar o no el acceso a los servicios del sistema) • Certificación (servidor de certificados )

  6. Seguridad en programas de red • Información que se intercambiará • Escrutinio (Revelación de información) • Intrusión (Puede agregar e incluso modificar)

  7. Seguridad en programas de red • El siguiente paso es conocer las formas de ataque a las que estamos expuestos • Intervención de la línea. • Corte de la línea. • Secuestro de la línea

  8. Seguridad en programas de red • Seguridad en un nodo de red • Acceso restringido • Firewalls • Zonas desmilitarizadas (DMZ)

  9. Seguridad en programas de red • Acceso Restringido • Permisos de archivos • Limitaciones en la conexión • Reducción de los agujeros en los puertos • Centrarse en las tarjetas • Separación de los servicios no necesarios

  10. Seguridad en programas de red • Firewalls: • Filtrado Activo (direccionamiento) • Filtrado Pasivo (detalle)

  11. Seguridad en programas de red • Zonas desmilitarizadas (DMZ). • Firewall tras firewall • Problema: sincronización con la red • Solución: Túneles

  12. Seguridad en programas de red • Seguridad a nivel de Sockets (Secure Sockets Layer SSL) • Uso de la API SSL: OpenSSL • http://www.openssl.org

  13. Seguridad en programas de red • Uso de OpenSSL • Descargue el paquete completo • Ejecutar config (./config) (./config linux-elf) • Ejecutar make • Ejecutar make test • Entrar como root. Ejecutar make install (/usr/local/ssl/) • Crear las referencias a las bibliotecas: • ln –s /usr/local/ssl/lib/libssl.a /usr/lib/ • ln –s /usr/local/ssl/lib/libcrypto.a /usr/lib/

  14. Seguridad en programas de red • Uso de OpenSSL • Crear la referencia a los archivos incluidos: • ln –s /usr/local/ssl/include/openssl/ /usr/include • Incorporar MANPATH /usr/local/ssl/man al archivo /etc/man.config. • 9. Incorporar en la ruta de acceso /usr/local/ssl/bin. • Todo listo para programar sockets seguros

  15. Seguridad en programas de red • Creación de un cliente SSL • Lo primero es configurar la biblioteca SSL: SSL_METHOD *method; SSL_CTX *ctx; OpenSSL_add_all_algorithms(); //Cargar el cifrado, etc. SSL_load_error_strings(); //Cargar el mensaje de error method = SSLv2_client_method(); //Crear el nuevo método/cliente ctx = SSL_CTX_new(method); //Crear el nuevo contexto

  16. Seguridad en programas de red • Luego, crear un socket normal: //Conecta el socket del cliente al servidor SSL struct sockaddr_in addr; struct hostent *host = gethostbyname(hostname); int sd = socket(PF_INET, SOCK_STREAM, 0); //Crea el socket bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); //puerto del servidor addr.sin_addr.s_addr = *(long*)(host->h_addr); //IP del servidor connect(sd, &addr, sizeof(addr)); //conexión con el servidor

  17. Seguridad en programas de red • Luego de la conexión de los sockets entre cliente y servidor, se debe crear una instancia SSL y asociarla a la conexión //Establecer el protocolo SSL y crear el enlace de cifrado SSL *ssl =SSL_new(ctx); //crea un nuevo estado de conexión SSL SSL_set_fd(ssl, sd); //adjunta el descriptor del socket if( SSL_connect(ssl) == -1) //realiza la conexión ERR_print_errors_fp(stderr);//informa el error si hay

  18. Seguridad en programas de red • Conexión SSL con cifrado completo. Ahora, leer certificados: // Leer certificados Char line[1024] X509 *x509=X509_get_subject_name(cert); //Obtener asunto X509_NAME_oneline(x509, line, sizeof[line]); //convertirlo Printf(“Subject: %s \n”, line); X509=X509_get_issuer_name(cert); //Obtener emisor de certificado X509_NAME_oneline(x509, line, sizeof[line]); //convertirlo Printf(“Issuer: %s \n”, line);

  19. Seguridad en programas de red • Ya estamos preparados para enviar y recibir datos con: //Enviar y recibir mensajes int bytes; bytes = SSL_read(ssl, buf, sizeof(buf)); //obtener/descifrar bytes = SSL_write(ssl, msg, strlen(msg)); //cifrar/enviar

  20. Seguridad en programas de red • Creación de un servidor SSL El Cliente y el Servidor son muy parecidos, ahora vemos la creación del servidor: // Iniciar el estado del servidor SSL SSL_METHOD *method; SSL_CTX *ctx; OpenSSL_add_all_algorithms(); //Cargar el cifrado. SSL_load_error_strings(); //Cargar el mensaje de error method = SSLv2_server_method(); //Crear el nuevo método-servidor ctx = SSL_CTX_new(method); //Crear el nuevo contexto

  21. Seguridad en programas de red • El servidor debe cargar su archivo de certificados. //Cargar archivos de clave privada y certificado //Establecer el certificado local de certfile SSL_CTX_use_certificate_file(ctx, CertFile, SSL_FILETYPE_PEM); //Establecer la clave privada KeyFile SSL_CTX_use_PrivateKey_file(ctx, CertFile, SSL_FILETYPE_PEM); //verificar la clave privada if( !SSL_CTX_check_private_key(ctx) ) fprintf(stderr, “Key and Certificate don’t match);

  22. El socket es escencialmente un socket normal de servidor: //Establecer el puerto del servidor struct sockaddr_in addr; int sd, client; sd = socket(PF_INET, SOCK_STREAM, 0); //crea el socket bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = INADDR_ANY; //permite cualquier puerto bind(sd, &addr, sizeof(addr); //enlazar a un puerto listen(sd, 10); //prepara al socket para la escucha client = accept(server, &addr, &len); //acepta conexión

  23. Seguridad en programas de red • Creación de estado SSL: //Crea estado de sesión SSL en función del contexto y SSL_accept ssl = SSL_new(ctx) //obtener nuevo estado SSL con el contexto SSL_set_fd(ssl, client); //asociar el socket con el estado SSL if( SSL_accept(ssl) == FAIL) //aceptar el protocolo SSL ERR_print_errors_fp(stderr); else { int bytes; bytes = SSL_read(ssl, buf, sizeof(buf)); //obtener petición SSL_write(ssl, reply, strlen(reply)); //enviar réplica }

  24. Seguridad en programas de red • Cliente servidor seguro • Incremento de productividad • Presencia en Internet

  25. Sockets en IPv6 • IPv6: La próxima generación de IP

  26. Sockets en IPv6 • ¿IPv4 e IPv6 juntos? • Las direcciones de IPv4 son reasignadas a una dirección de IPv6(todos los bits superiores se establecen a cero y los últimos 48 bits son 0xFFFF seguidos de la dirección IPv4) • No funciona al revés (Obviamente)

  27. Sockets en IPv6 • Configuración del Núcleo: • Se debe entrar al directorio /proc/net y buscar un archivo llamado igmp6 o if_inet • Necesitamos cargar el módulo ipv6.o.

  28. Sockets en IPv6 • Configuración de las herramientas: • Ejecutariconfig • Ejecutar iconfig –helpp • Necesitamos conseguir el RPM net_tools • configure.sh • Reiniciar el host,

  29. Sockets en IPv6 • Transformación de las llamadas IPv4 a IPv6: • En la estructura del socket, en vez de la utilización de sockaddr_in, usar sockaddr_in6: • struct sockaddr_in6 addr; • bzero( &addr, sizeof( addr ));

  30. Sockets en IPv6 • Esta estructura se debe usar para las llamadas del sistema accept(), connect() y bind(). Similarmente, la opción socket para obtener la dirección del socket origen o del socket remoto necesita esta estructura nueva.

  31. Sockets en IPv6 • El segundo cambio es el tipo de socket, no puede recibir protocolos distintos desde el mismo socket. Aunque IPv6 es un superconjunto de IPv4, se debe elegir un tipo de socket distinto: sd = socket(PF_INET6, SOCK_STREAM, 0); // para TCP6 sd = socket(PF_INET6, SOCK_DGRAM, 0); //para UDP6 sd = socket(PF_INET6, SOCK_RAW, 0); //paar Raw-6 o ICMP6

  32. Sockets en IPv6 • Otros campos que debemos cambiar levemente son: • addr.sin6_family = AF_INET6; • addr.sin6_port = htons(MY_PORT); • if( inet_pton(AF_INET6, “2FFF::80:9AC0:351”, &addr.sin6_addr) == 0) • perror(“inet_pton failed”);

  33. Sockets en IPv6 • Este fragmento de código utiliza la nueva llamada, inet_pton(). #include <arpa/inet.h> int inet_pton(int domain, const char* prstn, void* buf); char inet_ntop(int domain, void buf, char* prstn, int len);

  34. Sockets en IPv6 • Ventajas de IPv6: • La dirección de 128 bits • Mayor tamaño de paquete (64kB -> 4GB) • Multidifusión

  35. Sockets en IPv6 • Linux & IPv6: • Desde Linux V2.2.0 • Aún no es estándar • Soporta lo que puede • Objetivo en movimiento

More Related