modulo seguridad avanzada - septiembre 2011

97
  PARTE III INSEGURIDAD EN SISTEMAS OPERATIVOS Et vaonlineF  :   , 2010 ,   . : ://.. : ..          

Upload: titanio0

Post on 21-Jul-2015

222 views

Category:

Documents


0 download

TRANSCRIPT

COLECCIN: SEGURIDAD DE LA INFORMACIN PARTE IIIFundamentos sobre la inseguridad de la informacin, OPERATIVOS un enfoque pragmticoEt vaonlineF

INSEGURIDAD EN SISTEMAS

Armando Carvajal Mster en seguridad informtica - Universidad Oberta de Catalunya Especialista en construccin de software para redes - Uniandes Ing. Sistemas Universidad Incca de Colombia Pagina web: http://www.globalteksecurity.com e-mail: [email protected]

Colombia, Abril de 2010

INCLUYE DVD

CON

LINUX

OPEN SOURCE BACKTRACK

Cifrando documentos y servicios de red SSH

1.0

SSH

SSH indica Secure Shell, es un programa que permite ejecutar comandos, hacer sesin remota y mover archivos hacia mquinas remotas de forma segura, para esto provee fuerte autenticacin y encriptacin sobre los canales de transmisin inseguros entre el cliente y el servidor. Es el reemplazo de los comandos rlogin, rsh y rcp, adicionalmente provee conexiones X window seguras. Los tradicionales comandos rcomo rlogin, rcp, rsh son vulnerables a diferentes clases de ataques.

SSHLos tradicionales comandos r como rlogin, rcp, rsh son vulnerables a diferentes clases de ataques. Si alguien registra el trfico que entra y sale de sus servidores descubrir las contraseas de cualquier usuario

Es posible que alguien registre todo el trfico que entra y sale de sus servidores para descubrir las contraseas de cualquier usuario. SSH encripta el canal y permite conexiones seguras transparentes al usuario.

2.0

Que problemas resuelve

SSH nos protege de ataques como Ip spoofing, Ip Source Routing y DNS Spoofing, SSH no confa en la red, si un intruso tomo el control de la red solo podra forzar a ssh a desconectarse pero no podra desencriptar la informacin sin embargo si el atacante ha ganado el acceso al usuario root puede derribar a ssh tambin. Todas las conexiones son encriptadas usando el algoritmo IDEA, mientras que las llaves de encripcin son intercambiadas usando RSA y DSA los datos usados en el intercambio son destruidos de forma peridica (

Cifrando documentos y servicios de red SSH las llaves no estn a salvo en ninguna parte ). Cada host tiene una llave RSA ( privada ) la cual es usada para autenticar el host. La versin de Openssh puede ser distribuida libremente segn GNU pero la versin de ssh sobre MS Windows es un producto comercial el cual requiere de una licencia. En algunos pases, particularmente Francia, Rusia, Iraq y Pakistan, puede ser ilegal usar cualquier clase de encripcin. Si reside en EEUU, debe estar enterado que mientras ssh fue escrito fuera de los Estados Unidos, usando informacin pblica disponible para todo el mundo, el gobierno de este pas considero una gran ofensa exportar este software desde U.S una vez haba sido importado, incluyendo ponerlo en un sitio FTP. Los algoritmos RSA e IDEA, los cuales son usados por ssh, son patentados en diferentes pases, incluyendo U.S, necesitando obtener licencias para uso comercial. Respecto a la administracin de SSH el problema central radica en el manejo de las llaves, para permitirle a un cliente conectarse a un host remoto con autenticacin RSA, el servidor necesita conocer la llave pblica del cliente. Cuando el cliente se conecta por primera vez entonces se establece una conexin segura de ese cliente con ese servidor y el Digital finger Print no se encontrar dentro del anillo de known-hosts del cliente, en ese momento el servidor sshd notifica que la autentificacin no puede ser establecida pues el cliente no es conocido. A continuacin se le pide al cliente la autorizacin para negociarla en forma automtica, es decir el cliente traer la llave pblica y la insertar en el anillo. SSH establece conexiones seguras evitando de esta manera la vulnerabilidad de otros servicios como el telnet, rlogin, rsh y ftp. SSH usa el binario sshd como demonio para atender requerimientos de clientes, el puerto por donde se presta el servicio es el 22 y por lo tanto es importante inhabilitar servicios que no se deberan utilizar como el telnet que trabaja en el puerto 23, esto puede hacerse a travs del archivo de configuracin /etc/xinetd.d/telnet poniendo la palabra yes frente a la variable disable y reiniciando el demonio inetd.

# /etc/init.d/xinet restart SSH en Linux Si desea saber que versin de SSH est instalada actualmente en su sistema, corra el comando: # ssh V.

Ultima versinSi desea saber que versin de SSH est instalada actualmente en su sistema, corra el comando # ssh V

# rpm q opensshLas ltimas versiones se obtienen directamente de www.openssh.org

Cifrando documentos y servicios de red SSH Las ltimas versiones puede obtenerlas directamente de www.openssh.com.

3.0

Generacin de llaves

La llave privada y la pblica residirn en el directorio $home/.ssh. Se recomiendan los siguientes permisos para no permitir la escritura al grupo y otros usuarios del sistema: # chmod 755 ./ssh

Generacin de llavesEl comando para generar las llaves es: # ssh-keygen Al ejecutarse, pedir informacin necesaria para la configuracin como el directorio donde quedarn las llaves Pedir la contrasea para generar la clave de tipo oracin

Para las versiones 3.0.1 o mayores la llave privada de tipo DSA residir en el archivo $home/.ssh/id_dsa y la publica en $home/.ssh/id_dsa.pub. Para las llaves de tipo RSA residir en el archivo $home/.ssh/id_rsa y la publica en $home/.ssh/id_rsa.pub. El comando para generar las llaves es: # ssh-keygen, sin parmetros esto genera un par de llaves de tipo rsa. # ssh-keygen t rsa, para el sistema de llaves publicas RSA # ssh-keygen t dsa, para el sistema de llaves publicas DSA Al ejecutarse, pedir informacin necesaria para la configuracin como el directorio donde quedarn las llaves y la contrasea para generar la clave de tipo oracin.

Importante: Nunca cambie el nombre de los archivos de las llaves

Cifrando documentos y servicios de red SSH 4.0 Comandos

Conexin a un servidor dado con el usuario actual: # ssh intrarred.net Conexin a un servidor con un usuario especfico: # ssh l acarvaja intrared.net

Conexin en modo caractrConexin a un servidor dado con el usuario actual: # ssh intrarred.net Conexin a un servidor con un usuario especfico: # ssh l acarvaja intrared.net En ambos casos las contraseas correspondientes son solicitadas.

En ambos casos las contraseas correspondientes son solicitadas.

Conexin desde modo grfico: # ssh e ssh host

Transferencia de archivos a un servidor remoto: # scp archivo.doc ibm:/home/pepe Este comando copiar el archivo.doc al servidor ibm en el directorio /home/pepe. # ssh-keyscan permite buscar hosts y adicionarlos al anillo de confianza esta herramienta puede obtenerse de ftp://cag.lcs.mit.edu/pub/dm ftp://ftp.cs.hut.fi/ssh/contrib. Tambin existe un script que permite chequear nuevas llaves y advertir sobre hosts que han cambiado sus llaves lo que puede ser un indicio de que hay un intruso, este script puede obtenerse de www.uni.karlsrure.de/~ig25/ssh-faq/comp-host-list.

5.0

Archivos de configuracin

Servidor: Para las versiones anteriores a la 3.0.1 el servicio se debe arrancar con el comando sshd y leer el archivo de configuracin /etc/ssh/sshd_config.

Cifrando documentos y servicios de red SSH

Archivos de configuracinEn el Servidor: El servicio se debe arrancar con el comando sshd SSHD leer el archivo de configuracin /etc/ssh/sshd_config Cuando se instala manualmente buscara /usr/local/etc/ssh/sshd_config

Un comando genrico para subir el servicio es: # /etc/init.d/sshd start Un comando genrico para bajar el servicio es: # /etc/init.d/sshd stop

Nota: Se recomiendan /etc/ssh/sshd_config

las

siguientes

variables

en

el

archivo

de

configuracin

del

servidor

Port Protocol PasswordAuthentication ChallengeResponseAutehtication GSSAPIAuthentication GSSAPICleanupCredentials UsePAM X11Forwarding Para mayor seguridad:

22 2 yes no no yes yes yes

PermitRootLogin no PermitEmptyPasswords no Banner /etc/issue IgnoreRhosts yes RhostsAuthentication no RhostsRSAAuthentication no HostbasedAuthentication no LoginGraceTime 1m (O menos, el defecto es 2 minutos) SyslogFacility AUTH (logging con el detalle AUTH) AllowUsers [lista de usuarios autorizados] DenyUsers [lista de usuarios no autorizados] MaxStartups 10 (O menos use 1/3 del total de usuarios remotos) Nota: MaxStartups se refiere al maximo nmero de conexiones simultneas que an estan por verificar la autenticacin. Esto ayuda a contrarestar ataques por fuerza bruta.

Cliente: Los comandos de clientes leern el archivo de configuracin /etc/ssh/ssh_config.

Cifrando documentos y servicios de red SSH

Archivos de configuracinEn el cliente: Guarda registros individuales de las llaves publicas de los hosts a los que podemos acceder $home/.ssh/know_hosts son las llaves publicas de esos servidores SSH cliente leer el archivo de configuracin /etc/ssh/ssh_config $home/.ssh/authorized_ keys son las llaves publicas por usuario de esos servidores.Existen archivos que se crean de manera automtica a medida que el servicio los requiere, tal es el caso de known_hosts, este archivo guarda en registros individuales las llaves de los hosts a los que podemos acceder y $home/.ssh/authorized_ keys son las llaves publicas por usuario de esos servidores. Por ejemplo para adicionar una llave pblica del archivo id_dsa digite: # cat id_dsa.pub >> authorized_keys

5.0

Trucos

No pedir password cada vez que se inicia sesin:

Para que ssh no solicite el password al usuario se debe adicionar la llave publica $home/.ssh/id_rsa.pub o la $home/.ssh/id_dsa.pub del usuario remoto (o el nombre de llave que se le haya asignado) en el servidor remoto al final del archivo $home/.ssh/authorized_keys. # cat id_dsa.pub >> authorized_keys Nota: Nunca cambie el nombre id_rsa.pub, si lo hace pedir password.

nicamente permitir el acceso a usuarios diferentes a root: Para que ssh solo permita el acceso a los usuarios acarvaja, Juana y pepe pero no el usuario root debe editar el archivo /etc/ssh/sshd_config y listar nicamente los usuarios permitidos: AllowUsers acarvaja Juana pepe PermitRootLogin No Luego el usuario podra cambiarse al usuario root con el comando su y as obtener permisos de administrador. No olvide reiniciar el servicio con /etc/init.d/sshd restart Esto es altamente recomendable en un firewall o mejor aun deshabilitar el servicio SSH. Esta es una muestra de parte del archivo de logs /var/log/messages de un ataque por fuerza bruta a nuestro servidor ssh:

Cifrando documentos y servicios de red SSH Oct 26 21:34:06 in AllowUsers Oct 26 21:34:06 ssh2 Oct 26 21:34:07 in AllowUsers Oct 26 21:34:07 ssh2 Oct 26 21:34:08 AllowUsers Oct 26 21:34:08 59203 ssh2 Oct 26 21:34:09 in AllowUsers Oct 26 21:34:09 ssh2 Oct 26 21:34:10 in AllowUsers Oct 26 21:34:11 ssh2 Oct 26 21:34:12 in AllowUsers Oct 26 21:34:12 AllowUsers Oct 26 21:34:12 ssh2 Oct 26 21:34:12 59864 ssh2 Oct 26 21:34:14 in AllowUsers Oct 26 21:34:14 ssh2 Oct 26 21:34:15 in AllowUsers Oct 26 21:34:15 ssh2 Oct 26 21:34:16 AllowUsers Oct 26 21:34:16 60271 ssh2 Oct 26 21:34:17 in AllowUsers server1 sshd[17200]: User root from host.gamerwithin.com not allowed because not listed server1 sshd[17200]: Failed password for invalid user root from 209.59.161.30 port 37955 server1 sshd[17204]: User root from host.gamerwithin.com not allowed because not listed server1 sshd[17204]: Failed password for invalid user root from 209.59.161.30 port 38042 server1 sshd[17202]: User root from 202.168.249.106 not allowed because not listed in server1 sshd[17202]: Failed password for invalid user root from 202.168.249.106 port server1 sshd[17206]: User root from host.gamerwithin.com not allowed because not listed server1 sshd[17206]: Failed password for invalid user root from 209.59.161.30 port 38125 server1 sshd[17209]: User root from host.gamerwithin.com not allowed because not listed server1 sshd[17209]: Failed password for invalid user root from 209.59.161.30 port 38209 server1 sshd[17213]: User root from host.gamerwithin.com not allowed because not listed server1 sshd[17210]: User root from 202.168.249.106 not allowed because not listed in server1 sshd[17213]: Failed password for invalid user root from 209.59.161.30 port 38284 server1 sshd[17210]: Failed password for invalid user root from 202.168.249.106 port server1 sshd[17215]: User root from host.gamerwithin.com not allowed because not listed server1 sshd[17215]: Failed password for invalid user root from 209.59.161.30 port 38370 server1 sshd[17219]: User root from host.gamerwithin.com not allowed because not listed server1 sshd[17219]: Failed password for invalid user root from 209.59.161.30 port 38443 server1 sshd[17217]: User root from 202.168.249.106 not allowed because not listed in server1 sshd[17217]: Failed password for invalid user root from 202.168.249.106 port server1 sshd[17221]: User root from host.gamerwithin.com not allowed because not listed

Cifrando documentos y servicios de red SSH 7.0 Laboratorio: Autenticacin de usuarios confiables entre maquinas diferentes sin usuario y password Objetivo: Se deben crear los certificados en ambas maquinas para el usuario root Se debe adicionar la llave publicada de cada maquina del respectivo usuario en el archivo authorized_keys

Prerrequisitos: Se deben tener como mnimo 2 PCs: Uno con el IP 192.168.100.111 y el otro con el IP 192.168.100.112 En cada PC se debe editar el archivo /etc/hosts y se debe adicionar la IP y el nombre de cada maquina

Paso 1: La llave publica se debe generar cuando esta no exista o cuando el IP, La direccin MAC o el nombre de la maquina se haya cambiado. Entre al primer servidor con el usuario root y posicinese en el directorio /root/.ssh # ssh-keygen t rsa Este comando generar llaves pblicas segn el mtodo RSA Al ejecutarse, pedir informacin necesaria para la configuracin como el directorio donde quedarn las llaves y la contrasea para generar la clave, No digite contrasea. Notas: Paso 2: La llave publica se debe generar cuando esta no exista o cuando el IP, La direccin, MAC o el nombre de la maquina se haya cambiado. Entre al segundo servidor con el usuario root y y posicinese en el directorio /root/.ssh # ssh-keygen t rsa Este comando generar llaves pblicas segn el mtodo RSA Al ejecutarse, pedir informacin necesaria para la configuracin como el directorio donde quedarn las llaves y la contrasea para generar la clave, No digite contrasea.

Revise que la llave quede en el directorio /root/.ssh/id_rsa.pub Nunca cambie el nombre id_rsa.pub, si lo hace ssh pedir password

Notas: Paso 3:

Revise que la llave quede en el directorio /root/.ssh/id_rsa.pub Nunca cambie el nombre id_rsa.pub, si lo hace ssh pedir password.

Para que ssh no solicite el password al usuario root de este caso se debe adicionar la llave publica /root/.ssh/id_rsa.pub del usuario remoto en el servidor local al final del archivo /root/.ssh/authorized_keys. Entre al primer servidor con el usuario root Vaya a la carpeta /root/.ssh

Cifrando documentos y servicios de red SSH

# cd /root/.ssh Copie la llave pblica id_rsa.pub del segundo PC en el primer PC con otro nombre para no destruir la llave del PC donde estoy posicionado. # scp IP_del_segundo_PC:/root/.ssh/id_rsa.pub id_rsa.pub.segundopc Observe el nombre de la llave publica del primr nodo en el directorio donde estoy posicionado Nota: Revise que existan dos archivos llamados id_rsa.pub para la llave pblica del primer PC y el archivo id_rsa.pub.segundopc que identifica la llave publica del segundo PC. Adicione la llave pblica del segundo PC al primer PC: # cat id_rsa.pub.segundopc >> authorized_keys

Paso 4: Entre al segundo PC con el usuario root Vaya a la carpeta /root/.ssh # cd /root/.ssh Copie la llave pblica id_rsa.pub del primer PC en el segundo PC con otro nombre para no destruir la llave del PC donde estoy posicionado. # scp IP_del_primer_PC:/root/.ssh/id_rsa.pub id_rsa.pub.primerpc .

Observe el punto final que indica copiarlo en el directorio donde estoy posicionado Nota: Revise que existan dos archivos llamados id_rsa.pub para la llave pblica del segundo PC y el archivo id_rsa.pub.primerpc que identifica la llave publica del primer PC. Adicione la llave pblica del primer PC al segundo PC: # cat id_rsa.pub.primerpc >> authorized_keys

Paso 5: Entre a cada PC y reinicie el servicio ssh con el comando: # /etc/init.d/ssh restart En Unixware: # /etc/rc2.d/S98opensshd restart

Paso 6: Prueba el comando ssh ip_del_pc y revise que no se pida password pero la primera vez le pedir que digite yes para crear el archivo know_hosts.

8.0

Laboratorio: Tneles con SSH

Objetivo:

Cifrando documentos y servicios de red SSH Se debe crear un tnel entre dos mquinas de tal manera que la mquina 1 redirija las conexiones que le lleguen al puerto 8080 hacia el puerto 80 de la mquina 2.

Prerrequisitos: Se deben tener 3 PCs: Uno con Windows e Internet Explorer con el IP 192.168.100.111, este PC se har pasar por el cliente windows. Un PC llamado maquina1 con IP 192.168.100.222 que ser el gateway y un servidor o maquina2 con IP 192.168.100.223 que ser el servidor web que no usa SSL.

Paso 1: En la maquina2 se sube el servicio apache con el comando: # /etc/init.d/apache start Para subir el servicio SSH se debe utilizar el comando: # /etc/init.d/ssh start

Paso 2: En el nodo maquina1 o servidor SSH gateway se edita el archivo /etc/ssh/ssh_config y se adiciona al final la variable GatewayPorts yes Ahora suba el servicio ssh con el comando /etc/init.d/ssh start. Paso 3: En el servidor gateway SSH se crea un shell en /etc/init.d/sshgateway.sh con las siguientes instrucciones que hacen el tnel: #!/bin/sh ssh -N -T -C -L Donde: -N indica no hacer comandos nicamente generar un tnel -T indica no crear pseudo terminales asociadas a los procesos -C Indica comprimir los datos para usar en forma optima el canal -L Indica hacer reenvo de datos entre puertos e IPs 8080:192.168.100.222:80 192.168.100.223

Paso 4: Al ejecutar el shell /etc/init.d/sshgateway.sh el comando ssh pedir el password del usuario root que controla el servidor principal donde reside el servicio SSH. Para que se ejecute automticamente se hace un enlace al directorio de arranque as: # ln -s /etc/init.d/sshgateway.sh /etc/init.d/rc5.d/S99sshgateway.sh

Paso 5: Desde el cliente Windows pruebe en el explorador digitando el URL https://192.168.100.222:8080 Que es equivalente a: http://192.168.100.222:8080

Cifrando documentos y servicios de red SSH

Cuestionamientos Los datos entre el cliente y el gateway estn cifrados? Los datos entre el gateway ssh y el servidor apache estn cifrados? Se podra asegurar cualquier servicio que transfiera datos en claro?

Tambin se quiere que el acceso va SSH para administrar el servidor web no se pueda realizar con contrasea sino solamente con autenticacin basada en clave pblica. Genere un par de claves RSA para usarlas en la autenticacin SSH, con la clave privada protegida con la passphrase cliente, indique donde se debe copiar los archivos generados para permitir la conexin al sistema como usuario knoppix y qu cambios se debe realizar al archivo de configuracin del servidor SSH (p.e: /etc/ssh/sshd_config) para que la conexin solamente se pueda realizar con autenticacin de cliente por clave pblica. Respuesta: El usuario knoppix existe en el servidor web.uoc.edu.co y en el cliente remoto, el usuario knoppix hace login en su sistema linux cliente y se posiciona por defecto en la carpeta /home/knoppix. Ahora para generar el par de llaves digita: # ssh-keygen -t rsa El sistema le propone crear la llave privada en el directorio /home/knoppix/.ssh/id_rsa, de inmediato le pide dos veces la palabra secreta 'cliente' para la generacin de la llave privada. Adems genera la llave publica y muestra el fingerprint como el usuario@dominio de la maquina donde reside el usuario. Al terminar el comando anterior, se nota que existe la carpeta .ssh y dentro de esta hay dos archivos: id_rsa para la llave privada y como llave publica el archivo id_rsa.pub Por ejemplo esta es la salida de la llave pblica: ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA3tn1U6TUsxvsuNf5GV9AYk9fP2fPFSQjoewptWevseCIIQ sw+d0kSsrBl7HpFZTxSV8WVIxvXo9eQ1U4JCGhEbPXk7OylxFyogYGwg7GVMon7ifox68B2/2 2mkbR7lm9/YLmCz50YcI9GNyBJhKZFnyiZOgy7taj7T5vHEtoFJU= knoppix@cortafuegos2

Donde ssh-rsa indica el tipo de cifrado usado. Luego sigue la clave pblica y finalmente el usuario y su dominio local donde se le genero la llave. 1. 2. 3. 4. 5. 6. Se Las llaves deben existir en la carpeta .ssh del usuario respectivo. Ademas el archivo /etc/ssh/sshd_config del servidor (web.uoc.edu.co) remoto debe contener las siguientes variables: RSAAuthentication YES PubkeyAuthentication Yes AuthorizedKeysFile .ssh/authorized_keys PasswordAutehtication no debe copiar la llave pblica id_rsa.pub al servidor remoto (web.uoc.edu.co) en el archivo

Cifrando documentos y servicios de red SSH /home/knoppix/.ssh/authorized_keys

Finalmente se debe reiniciar el servicio ssh para que tome la nueva configuracin: # /etc/init.d/sshd stop # /etc/init.d/sshd start Establezca una conexin SSH utilizando la clave anterior y capture los paquetes de la conexin con el analizador de paquetes Ethereal. Indique qu paquetes se pueden ver en claro y cuales no. En la maquina cliente linux se debe lanzar el ethereal:

# ethereal & y se pone a escuchar por la tarjeta de red que deseamos atrapar los paquetes. Por otra Terminal se lanza el comando cliente para que se conecte al servidor:

# ssh 20.0.0.2, de inmediato el sistema pide el password de la llave privada del sistema remoto. Se le digita 'cliente' y permite continuar la sesin.

Conclusines: Mirando el trafico generado por ethereal se encuentra que se ve en claro solo la negociacin inicial para el intercambio de llaves, esto aparece como los protocolos: SSH client y SSHv2 Server. No se muestra informacin en claro cuando se termina el intercambio de llaves y esto aparece como el protocolo SSHv2 Server Encrypted.

9.0

Blindaje/Remediacion del servicio de red SSH

Es altamente recomendable mantener con suplementos a la fecha el servidor SSH para evitar las vulnerabilidades de tipo exploit de las versiones antiguas. Ademas se debe asegurar que el servior SSH solamente soporte la versin 2, explicitamente se debe editar el archivo de configuracin /etc/ssh/sshd_config y ajustar las siguientes variables: Protocol 2 PasswordAuthentication yes ChallengeResponseAutehtication no GSSAPIAuthentication no GSSAPICleanupCredentials yes UsePAM yes X11Forwarding yes PermitRootLogin no PermitEmptyPasswords no Banner /etc/issue IgnoreRhosts yes RhostsAuthentication no RhostsRSAAuthentication no HostbasedAuthentication no LoginGraceTime 1m (O menos, el defecto es 2 minutos) SyslogFacility AUTH (logging con el detalle AUTH) AllowUsers [lista de usuarios autorizados] DenyUsers [lista de usuarios no autorizados] MaxStartups 10 (O menos use 1/3 del total de usuarios remotos) Nota: MaxStartups se refiere al maximo nmero de conexiones simultneas que an estan por verificar la autenticacin. Esto ayuda a contrarestar ataques por fuerza bruta.

Cifrando documentos y servicios de red SSH

Bibliografawww.ssh.org SSH, The secure shell: The definitive guide, Daniel J Barrett, Mayo 2005, OReilly Pro Open SSH, Michael Stahnke, Octubre 2005, Apress

Cifrando documentos y servicios de red SSL

1.0

Que es un certificado digital

Es un mecanismo que se basa en la criptografa de llaves pblicas asimtricas, su objetivo es permitir comunicaciones seguras entre origen y/o el destino utilizando medios de comunicaciones inseguros como Internet. Permiten que la comunicacin este certificada por un tercero o notario denominado CA Certificate Authority que garantiza la confidencialidad de la comunicacin.

1.0

Para que sirve un certificado digital Garantizan la Confidencialidad, Autenticidad, integridad y no repudio en el envo de mensajes seguros al transmitirlos por medios inseguros Permiten firmar, Codificar, Firmar y Codificar

Se entiende por gestion de certificados la emisin, renovacin y revocacin de certificados digitales, por lo tanto una lista parcial de soluciones seria:

Soluciones Internas: Gestin de certificado de servidor (web, correo, y otros) Gestin de certificados de usuario para empleados que permitan la autenticacin contra un determinado servicio Gestin de certificados de atributos para empleados que permitan la autenticacin y autorizacin contra una determinada aplicacin/datos

Soluciones Externas: Certificados de usuario para los empleados que permitan firmar correos entre entidades/empresas de confianza Certificados de usuario para los empleados que permitan cifrar correos entre entidades/empresas de confianza Proveer certificados de servidor a terceros (Prestador de Servicios de Certificacin)

3.0

Llaves asimtricas En las las claves simtricas el emisor y receptor usan la misma clave o contrasea para cifrar y descifrar A diferencia de las claves simtricas donde emisor y receptor usan la misma clave o contrasea, en las claves pblicas asimtricas el emisor (E) y el receptor (R) crean un par de claves que consisten en una clave privada y un requerimiento de certificado de tipo CA diferentes para cada elemento de la trasmisin La CA es la entidad certificadora, la CA es al mundo digital como el notario es al mundo anlogo La CA tiene su propia llave privada y su llave publica diferentes a los usuarios que tienen sus propias claves privadas y publicas La CA firma el requerimiento de un usuario con su llave privada para crear la clave pblica que le solicitaron (Se la vende al usuario, ese es su negocio) Emisor, Receptor y CA guardan su clave privada con recelo y hasta con una contrasea para evitar que sea legible a personas no autorizadas Emisor y Receptor ahora tienen su llave publica que la puede tener cualquier persona que desee enviar documentos seguros a sus dueos Ejemplos de implementaciones de llaves asimtricas son Open SSL y Gnu PG (PGP) que funcionan como un algoritmo del tipo de clave pblica asimtrica

Cifrando documentos y servicios de red SSL

Diagrama Claves PublicasEmisor (E) Crea Mensaje original en claro FIRMA Mensaje Firmado CIFRA Mensaje Firmado y Cifrado

Clave Privada (E)misor Enva

Clave Publica (R)eceptor

Enva Clave Publica (E)misor Clave Privada (R)eceptor

Mensaje original en claro Lee Receptor (R)

COMPRUEBA LA FIRMA

Mensaje Firmado

DESCIFRA

Mensaje Firmado y Cifrado

Este diagrama muestra las fases de firmar y cifrar y que claves se requieren para cada paso en el proceso.

Cifrando documentos y servicios de red SSL 4.0 Activacin de conexiones seguras en un servidor web

SSL traduce Socket Secure Layer y funciona como un algoritmo del tipo de clave pblica asimtrica. En las claves pblicas asimtricas el servidor crea un par de llaves que consiste en una llave/clave pblica y una llave/clave privada. El servidor hace un requerimiento de llave pblica a una entidad certificadora basada en la llave privada del servidor, la entidad certificadora modifica la llave de requerimiento de llave pblica y le incrusta la llave pblica de la entidad certificadora. Ahora el servidor quien hizo el requerimiento recibe la nueva y nica llave publica que la entidad certificadora podr verificar con su llave privada en el futuro.

Que es SSLSSL traduce Socket Secure Layer y funciona como un algoritmo del tipo de clave pblica asimtrica En las claves pblicas asimtricas el servidor crea un par de claves que consiste en una clave pblica y una clave privada

Este paso se hace generalmente una vez al ao y tiene costo por parte de la entidad certificadora.

ObjetivoEl objetivo es cifrar la conexin entre el cliente (Browser) y el servidor (web) con la clave pblica nica que siempre le enva el servidor al cliente El servidor difunde la clave pblica, ponindola a disposicin de cualquier browser o cliente que quiera conectarse al servidor por el puerto seguro 443

El objetivo es cifrar la conexin entre el cliente (Browser) y el servidor (web) con la llave pblica nica que siempre le enva el servidor al cliente. El servidor transmite la llave pblica, ponindola a disposicin de cualquier browser o cliente que quiera conectarse al servidor por el puerto seguro 443. Una vez que la llave publica ha sido recibida por el explorador / Browser o cliente este enva la llave publica del servidor a la entidad certificadora para su verificacin y aprobacin, solo la entidad certificadora podr verificar con su llave privada la validez de la llave publica.

Cifrando documentos y servicios de red SSL

ObjetivoEs evidente que la clave o llave privada debe ser mantenida en secreto por el propietario en su respectivo servidor As mismo la entidad certificadora guardar con celo su llave privada

Es evidente que la llave privada debe ser mantenida en secreto por el propietario en su respectivo servidor. As mismo la entidad certificadora guardar con celo su llave privada.

4.1

Implementacion de SSL OpenSSL

OpenSSL es la implementacin GNU de SSL. Para ver la versin del mdulo OpenSSL digite:

Esta instalado?Instale segn el formato rpm # rpm hUv openssl-0.9.6g-4.i586.rpm OpenSSL es la implementacin GNU de SSL Para ver la versin del mdulo OpenSSL digite: # rpm qi openssl

# rpm qi openssl En apache versin 2.0.x ya viene inmerso el mdulo en mencin pero debe compilarse con un parmetro especial para activarlo. El proyecto OpenSSL es un proyecto OpenSource que implementa los protocolos Secure Sockets Layer (SSL v2/v3) y Transport Layer Security (TLS v1). OpenSSL est basado en el excelente trabajo de libreras SSLeay desarrollado por Eric A. Young y Tim J.Hudson

4.2

Instalacion de OpenSSL

Cifrando documentos y servicios de red SSL El sitio principal de OpenSSL es www.openssl.org, descargue la ltima versin e instale con las siguientes lneas de comandos: # tar xzvmf openssl-1.0.0.tar.gz # cd openssl* #./config # make # make test # make install Es importante anotar que por defecto estos programas se instalan en la carpeta /usr/local/ssl y los binarios estaran en /usr/local/ssl/bin. El archivo/fichero de configuracion global openssl.cnf reside en la carpeta: /usr/local/ssl/openssl.cnf Nota: Hay que modificar la variable PATH del usuario para que el binaroio de openssl sea buscado en la carpeta /usr/local/ssl/bin, asi: # PATH=$PATH:/usr/local/ssl/bin

4.2 Criptografia de llaves simtricas: Misma clave para cifrar y descifrar Openssl puede usarse por defecto como una implementacin de claves simetricas, es decir se puede usar para cifrar y descifrar textos con una clave conocida por receptor (R) y emisor (E). Para cifrar con el algoritmo simetrico DES se debe usar el siguiente comando: # openssl enc -des salt base64 k clave in texto.txt out texto.txt.des Para descifrar se debe usar el siguiente comando: # openssl des d base64 k clave in texto.txt.des out texto.txt El parametro des se puede cambiar por cualquiera de los algoritmos simetricos que soporta openssl por ejemplo AES de 256 bits, 3DES o el defecto que es base64. Para cifrar con el algoritmo simetrico AES de se debe usar el siguiente comando: # openssl enc -aes-256-cbc salt base64 k clave in texto.txt out texto.txt.aes Para descifrar con el algoritmo simetrico AES se debe usar el siguiente comando: # openssl aes-256-cbc d base64 k clave in texto.txt.aes out texto.txt Para cifrar con el algoritmo base64 de se debe usar el siguiente comando: # openssl enc -base64 salt k clave in texto.txt out texto.txt.base64 Para descifrar con el algoritmo simetrico base64 se debe usar el siguiente comando: # openssl base64 -d k clave in texto.txt.base64 out texto.txt La clave simetrica tambin se puede pasar como un archivo, para ello no se utiliza la opcin k, en cambio se debe usar la opcin pass file:archivo.ssl Para no generar una salida en formato binario se puede usar la opcin base64.

Cifrando documentos y servicios de red SSL

Apache y OpenSSLOpenSSL est basado en el excelente trabajo de libreras SSLeay desarrollado por Eric A. Young y Tim J.Hudson El principal sitio de OpenSSL es www.openssl.org

5.0 Criptografia de llaves asimtricas: Generacin de llaves privadas y publicas Para generar una llave privada de 1024 bits hacia el archivo mva.key, digite: # openssl genrsa out mva.key 1024 En apache 2.0 generalmente la llave privada reside en /usr/local/apache2/conf/ssl.key/server-dsa.key Para generar una llave de requerimiento para compra de certificado ante una entidad certificadora digite: # openssl req new key mva.key out mva.csr days 360 Para generar una llave de requerimiento y en el mismo paso la llave privada digite: # openssl req new keyout mva.key out mva.csr days 360 Para firmar la llave anterior donde el servidor sea la entidad certificadora # openssl req x509 key mva.key in mva.csr out mva.crt En apache 2.0 generalmente la llave pblica reside en /usr/local/apache2/conf/server.crt

Para generar las llaves privada y publica de la Entidad Certificadora (CA) # openssl req new x509 keyout cakey.pem out cacert.pem days 365 Notas: Se debe observar que las extensiones deben ser .pem. La opcin keyout cakey.pem indica generar la llave privada. Se recomienda estar posicionado en el directorio /usr/local/ssl. Ahora la entidad CA debe generar un directorio para firmar requerimientos de llaves pblicas, por ejemplo: # mkdir p /usr/local/ssl/demoCA/private # mkdir p /usr/local/ssl/demoCA/newcerts Copie la llave privada cakey.pem al directorio de llaves privadas: # cp cakey.pem /usr/local/ssl/demoCA/private

Cifrando documentos y servicios de red SSL

Copie la llave pblica cacert.pem al directorio de llaves pblicas de la CA: # cp cacert.pem /usr/local/demoCA

Genere el archivo index.txt que contendr una lista de los certificados pblicos generados: # touch /usr/local/ssl/demoCA/index.txt

Genere el archivo de nombre serial que contendr el consecutivo de certificados pblicos generados, debe iniciar en ceros: # echo 00 > /usr/local/ssl/demoCA/serial

Para firmar requerimientos como una CA # openssl ca policy policy_anything out mva.crt infiles mva.csr

Para mirar un certificado x509 o llave publica digite: # openssl x509 noout text in mva.crt

Ver llave publicaPara mirar un certificado x509 o llave publica digite: # openssl x509 noout text in mva.crt Para ver informacin de un certificado expedido por una entidad certificadora digite: # openssl x509 noout subject in mva.crt

Para ver informacin de un certificado expedido por una entidad certificadora digite: # openssl x509 noout subject in mva.crt Para mirar una llave privada # openssl rsa noout text in mva.key Para mirar una llave de requerimiento de certificado # openssl req noout text in mva.csr

Los formatos de los archivos pueden ser: PEM: Privacy Enhanced Mail

Cifrando documentos y servicios de red SSL DER: Distinguised Encoded Rules CER: Canonical Encoded Rules PKCS: Publick Key Criptography Standard Los certificados digitales son ideales para cifrar las claves secretas no para cifrar archivos grandes pues consumiran demasiado tiempo de CPU y espacio en disco duro que haran ineficiente el uso de las llaves digitales:

Cifrado de archivos/ficheros pequenios con certificados digitales Para cifrar archivos pequeos que contengan un texto de clave simetrica se debe usar el siguiente comando: # openssl rsautl encrypt inkey llavepublica.pem certin in archivo.txt out salida.ssl -hexdump Para descifrar archivos que se hayan cifrado con claves pblicas se debe usar el siguiente comando que incluye la llave privada relacionada con la clave publica con la que se cifr el texto: # openssl rsautl decrypt inkey llaveprivada.pem in archivo.ssl out salida.txt

6.0

Activacin de SSL en Apache ms actualizada de Apache debe copiarse la ltima versin desde

Para obtener una versin http://www.apache.org.

Recompilar ApacheLa Versin 2.0.x, se debe instalar con los siguientes comandos para soportar SSL y LDAP # tar xvzf httpd-2.0.48.tar.gz # cd httpd* # ./configure --enable-ssl --with-ldap --enableldap --enable-auth-ldap # make # make install

La versin 2.x, se debe instalar con los siguientes comandos para soportar SSL # tar xvzf httpd-2.0.48.tar.gz # cd httpd* #./configure # make # make install --enable-module=so --enable-ssl

Generalmente se instalar en /usr/local/apache2 pero esto se puede cambiar con el parmetro: --prefix=/directorio/deseado. Ahora edite el archivo /usr/local/apache2/conf/httpd.conf y revise que existan los siguientes parmetros: Listen 443 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl

Cifrando documentos y servicios de red SSL SSLPassPhraseDialog builtin SSLSessionCache dbm:/usr/local/apache2/logs/ssl_scache SSLSessionCacheTimeout 300 SSLMutex file:/usr/local/apache2/logs/ssl_mutex SSLRandomSeed startup builtin SSLRandomSeed connect builtin DocumentRoot "/usr/local/apache2/htdocs" ServerName localhost:443 ServerAdmin root@localhost ErrorLog /usr/local/apache2/logs/error_log TransferLog /usr/local/apache2/logs/access_log SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /usr/local/apache2/conf/server.crt SSLCertificateKeyFile /usr/local/apache2/conf/server.key t/ca-bundle.crt SSLCACertificateFile /usr/local/apache2/conf/ca.crt SSLOptions +StdEnvVars SSLOptions +StdEnvVars SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog /usr/local/apache2/logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" Para subir el servicio digite : # /usr/local/apache2/bin/apachectl start

7.0

Probando que SSL est activado por lnea de comandos

Digite el siguiente comando: # openssl s_client -connect localhost:443 -state

Cifrando documentos y servicios de red SSL

Probando SSL# openssl s_client -connect localhost:443 -state Y obtendr en la salida algo como: CONNECTED(00000003) SSL_connect:before/connect initialization SSL_connect:SSLv2/v3 write client hello A SSL_connect:SSLv3 read server hello A depth=0 /C=CO/ST=Cundinamarca/L=Bogota/O=MVA/OU=Sist emas/CN=oms.mvaonline.com/Email=acarvaja@mvao nline.com

Y obtendr en la salida algo como: CONNECTED(00000003) SSL_connect:before/connect initialization SSL_connect:SSLv2/v3 write client hello A SSL_connect:SSLv3 read server hello A depth=0 /C=CO/ST=Cundinamarca/L=Bogota/O=MVA/OU=Sistemas/CN=oms.sco.com.co/[email protected]. co verify error:num=18:self signed certificate verify return:1 depth=0 /C=CO/ST=Cundinamarca/L=Bogota/O=MVA/OU=Sistemas/CN=oms.sco.com.co/[email protected]. co verify return:1

Ahora digite: # GET / http/1.0 Seguido digite dos veces la tecla Enter y obtendr la pagina web del servidor.

Cifrando documentos y servicios de red SSL 8.0 Laboratorio:

Objetivo: Configurar un servidor web localmente para que tengan conexiones seguras mediante OpenSSL Se requiere para este ejemplo que el servidor local haga las funciones de entidad certificadora o CA Probar que localmente se puede ser entidad CA y servidor web con datos diferentes entre CA y servidor web Probar el canal en claro con un sniffer para denostrar que los datos viajan cifrados

Prerrequisitos: Revisar que el DNS haga traslacin de nombres sobre el IP 127.0.0.1 o localhost Es importante instalar apache versin 2.x o mayor con soporte a SSL En el caso de que exista apache preinstalado se debe bajar el servicio con el comando apachectl stop.

Paso 1: Instale apache con soporte de SSL: # cd /tmp # tar xzvf http* # cd http* # ./configure --enable-module=so --enable-ssl # make # make install

Suba el servicio manualmente # /usr/local/apache2/bin/apachectl start Abra un explorador web, pruebe digitando en el URL del navegador el nombre del servidor localhost, entonces deber ver la pgina local de su servidor sin cifrar, es decir si usa un sniffer, vera en este momento el texto en claro que el servidor le enva al cliente. Edite el archivo openssl.cnf y asegrese que el archivo tenga la variable dir = /usr/local/ssl/demoCA Notas: En Fedora este archivo se localiza en /etc/pki/tls/openssl.cnf En SUSE y Debian estar en /etc/ssl/openssl.cnf En centOS esta en /usr/local/share/ssl/openssl.cnf En Debian baje las siguientes libreras: # apt-get install build-essential # apt-get install libapr1 # apt-get install libapreq2 # apt-get install libssl-dev # apt-get install ldap-utils # apt-get install libldap2-dev

Cifrando documentos y servicios de red SSL

Paso 2: Convirtase en entidad Certificadora si no ha comprado su certificado a un tercero como verisign, tauhte o certicamara Borre la carpeta donde se hace la gestin de los certificados, el comando seria: # rm r /usr/local/ssl Cree el directorio y posicinese en el directorio /usr/local/ssl # mkdir p /usr/local/ssl # cd /usr/local/ssl Ahora genere las llaves privada y pblica de la Entidad Certificadora (CA) en un solo paso, digitando: # openssl req new x509 keyout cakey.pem out cacert.pem days 360 outform PEM El sistema le pedir una clave simetrica para generar el certificado en mencin, por ejemplo use para este caso sistemas. La idea es que nadie ms pueda abrir la llave privada de la CA, solo la CA o el duenio de la llave privada debera abrirlo con esa clave simetrica. En el campo pas digite CO para Colombia, es decir las dos letras que identifican a su pas. Estado o provincia: Cundinamarca es decir el departamento o estado donde reside su servidor. Ciudad: Bogota Organization Name: ACIS CA Oraganizational Unit Name: Sistemas Common Name Server: localhost Email address: [email protected] Paso seguido se debe generar un directorio para firmar requerimientos de llaves pblicas pues para este caso el servidor localhost es una entidad Certificadora o CA: # mkdir p /usr/local/ssl/demoCA/private # mkdir p /usr/local/ssl/demoCA/newcerts Copie la llave privada cakey.pem al directorio de llaves privadas: # cp cakey.pem /usr/local/ssl/demoCA/private Copie la llave pblica cacert.pem al directorio de llaves pblicas: # cp cacert.pem /usr/local/ssl/demoCA Genere el archivo index.txt que contendr una lista de los certificados pblicos generados: # touch /usr/local/ssl/demoCA/index.txt

Genere el archivo de nombre serial que contendr el consecutivo de certificados pblicos generados, este debe iniciar en uno: # echo 01 > /usr/local/ssl/demoCA/serial Hasta este momento usted estara listo para comportarse como una entidad certificadora, por favor verifique que el archivo /usr/local/ssl/demoCA/serial contenga el consecutivo 01. # cat /usr/local/ssl/demoCA/serial

Cifrando documentos y servicios de red SSL Paso 3: Haga el requerimiento a la entidad certificadora o CA por 360 das (Usted mismo) Es recomendable estar posicionado en el directorio /usr/local/ssl # cd /usr/local/ssl # openssl req new keyout mva.key out mva.csr days 360 nodes outform PEM Notas:

Revise que el archivo mva.csr exista en el disco, este ser el requerimiento. mva.csr es la llave de solicitud de requerimiento de llave pblica X.509. La opcin nodes indica no pedir una clave simtrica al generar la llave privada, sin esta clave simetrica el servidor web podr subir sin necesidad de suministar el password o palabra clave En la vida real el administrador del servidor web si deberia usar esta palabra clave, solo que siempre deber estar presente para suministrarla cuando el servidor web esta subiendo

Paso 4: Firme el requerimiento como una entidad CA (quien genera el certificado digital) # openssl ca policy policy_anything out mva.crt infiles mva.csr Observar que mva.crt es la llave pblica del cliente que compra el certificado y mva.csr es la solicitud del cliente MVA para que la CA le expida una llave pblica avalada por el notario CA (la certificadora) En este paso, en Linux Fedora, habr un mensaje de error al no haber editado la variable dir del archivo /etc/pki/tls/openssl.cnf

Paso 5: Instale los certificados en el directorio por defecto para que apache los lea al iniciar en modo seguro # cp mva.crt /usr/local/apache2/conf/server.crt # cp mva.key /usr/local/apache2/conf/server.key # cp cacert.pem /usr/local/apache2/conf/

Para la ultima versin de apache2 edite el archivo /usr/local/apache2/conf/httpd.conf y quite el signo comentarios # de la lnea que activa la configuracin ssl: # kwrite /usr/local/apache2/conf/httpd O # gedit /usr/local/apache2/conf/httpd

Ubique la siguiente lnea dentro del archive y quite el signo de comnetario #: # Include conf/extra/httpd-ssl.conf Debera quedar de la siguiente forma: Include conf/extra/httpd-ssl.conf Esto incluye las ordenes para que se activen los certificados de los dominios virtuales.

Paso 6: Reinicie el servidor apache con soporte a SSL Edite el archivo de configuracin del ssl /usr/local/apache2/conf/extra/httpd-ssl.conf # kwrite ssl /usr/local/apache2/conf/extra/httpd-ssl.conf Modifique la variable ServerName para que sea igual a localhost, es decir al nombre del servidor virtual, esta lnea debe quedar: ServerName localhost:443

Cifrando documentos y servicios de red SSL

Reinicie los servicios de apache: # /usr/local/apache2/bin/apachectl stop # /usr/local/apache2/bin/apachectl start

Paso 7: Pruebe la funcionalidad configurada digitando en el URL https://localhost

En este paso el candado debe estar activado en el explorador web, por favor revise los datos del certificado. Vera un mensaje del explorador advirtindole que el certificado no es de confianza, esto se debe a que en el cache del explorador no existe la CA de este caso.

Paso 8: Prueba el dominio por defecto con localhost Configure los dominios virtuales: lacositarica.com y sitioseguro.edu.co Cree un nuevo archivo con la informacin de los dominios virtuales: # cd /usr/local/apache2/conf/ # kwrite dominios.conf O # gedit dominios.conf

En este nuevo archive escriba las siguientes lneas:

NameVirtualHost *:80 # ************ HOST VIRTUAL SOBRE HTTP *************** DocumentRoot /usr/local/apache2/htdocs/lacositarica ServerName www.lacositarica.com AuthName "Manuales *** La Cosita Rica ***" AuthType Basic AuthUserFile /usr/local/apache2/conf/.htpasswd Require valid-user

NameVirtualHost *:443 #************ HOST VIRTUAL HTTPS **************************** DocumentRoot /usr/local/apache2/htdocs/sitioseguro ServerName www.sitioseguro.edu.co:443 AuthName "Manuales de linux sitioseguro" AuthType Basic AuthUserFile /usr/local/apache2/conf/.htpasswd Require valid-user

Cifrando documentos y servicios de red SSL# Estas lineas son obligatorias para activar el SSL para el dominio virtual SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile "/usr/local/apache2/conf/server.crt" SSLCertificateKeyFile "/usr/local/apache2/conf/server.key" SSLCACertificatePath "/usr/local/apache2/conf" SSLCACertificateFile "/usr/local/apache2/conf/cacert.pem" SSLOptions +StdEnvVars SSLOptions +StdEnvVars BrowserMatch ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog "/usr/local/apache2/logs/ssl_request_log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" # FIN - Estas lineas son obligatorias para activar el SSL para el dominio virtual

Ahora, se debe indicar en la configuracin de APACHE, que este nuevo archivo de configuracin se debe tener en cuenta al iniciar el servicio: Para esto, indique: se requiere adicionar al final del archivo /usr/local/apache2/conf/httpd.conf, una lnea que lo

# kwrite /usr/local/apache2/conf/httpd.conf O # gedit /usr/local/apache2/conf/httpd.conf

Al final del archivo escribir: Include conf/dominios.conf

Ahora construiremos las carpetas donde estn almacenados los sitios de los dominios lacositarica.com y sitioseguro.edu.co: # cd /usr/local/apache2/htdocs # mkdir p lacositarica/manuales # mkdir p sitioseguro/manuales Copiamos ahora el archivo index.html base en cada una de las carpetas de los dominios: #cp index.html lacositarica/ #cp index.html sitioseguro/ Ahora se debe editar esos archivos de index y poner los nombres de los dominios correspondientes con el fin de diferenciarlos: # kwrite lacositarica/index.html O # gnome lacositarica/index.html

Cifrando documentos y servicios de red SSL Al abrir el archivo, escribir LA COSITA RICA en lugar de IT WORKS, los tags de HTML NO deben ser borrados, guardar y cerrar. # kwrite sitioseguro/index.html O # gnome sitioseguro/index.html

Al abrir el archivo, escribir SITIO SEGURO en lugar de IT WORKS, los tags de HTML NO deben ser borrados, guardar y cerrar. Es recomendable poner algn tipo de archivo en las carpetas /usr/local/apache2/htdocs/lacositarica/manuales y /usr/local/apache2/htdocs/sitioseguro/manuales, con el fin de visualizar su contenido. Se debe crear ahora el archivo que contendr los usuarios que se autenticarn y tendrn acceso a la carpeta de manuales en cada uno de los dominios: # cd /usr/local/apache2/bin # ./htpasswd c /usr/local/apache2/conf/.htpasswd usuario1 el usuario1

(Ahora debe ingresar el password para

Para agregar un nuevo usuario, se debe ejecutar el comando anterior sin la opcin -c ya que esta opcin creara nuevamente el archivo de passwords y borrara el usuario anterior # cd /usr/local/apache2/bin # ./htpasswd /usr/local/apache2/conf/.htpasswd usuario2 Ahora se debe reiniciar el servicio de apache: # /usr/local/apache2/bin/apachectl stop # /usr/local/apache2/bin/apachectl start Debido a que no contamos con un servicio DNS para resolver los nombres www.lacositarica.com y www.sitioseguro.edu.co, es necesario editar el archivo hosts para hacer esta resolucin: # kwrite /etc/hosts O # gedit /etc/hosts

Se debe agregar al final del archivo la direccin IP de mi servidor Linux y el nombre que queremos resolver, por ejemplo: 192.168.1.34 192.168.1.34 www.lacositarica.com www.sitioseguro.edu.co

Como los dos dominios estn sobre el mismo servidor como dominios virtuales, se deja la misma direccin IP. Abrir un navegador en el sistema Linux y probar el acceso a las pginas, desde un navegador digitar las URLs: http://www.lacositarica.com https://www.sitioseguro.edu.co Acceda tambin a la carpeta de manuales, esta carpeta est protegida por usuario y contrasea: http://www.lacositarica.com/manuales https://www.sitioseguro.edu.co/manuales

Cifrando documentos y servicios de red SSL

Si estamos trabajando con mquinas virtuales, y queremos conectarnos a estos sitios desde nuestra mquina real Windows, es necesario tambin editar el archivo de hosts, el cual est ubicado en: C:/Windows/System32/drivers/etc Y se debe agregar al final del archivo la direccin IP de mi servidor Linux (virtual) y el nombre que se quiere resolver: 192.168.1.34 192.168.1.34 www.lacositarica.com www.sitioseguro.edu.co

Finalmente acceda a los sitios configurados digitando en un navegador desde el sistema windows: http://www.lacositarica.com https://www.sitioseguro.edu.co

y acceda tambin a la carpeta de manuales: http://www.lacositarica.com/manuales https://www.sitioseguro.edu.co/manuales

Con el sniffer mire los paquetes tanto en la conexin HTTP como HTTPS

Cuestionamientos Que pasara si olvidamos hacer el paso 5? Que pasara si en el paso 5 dejamos la llave privada como mva.key y no server.key? Que pasara si en el URL del cliente digitamos 127.0.0.1 en vez de localhost cuando usamos dominios virtuales? Que significan las letras PEM en el parmetro outform?

Cifrando documentos y servicios de red SSL

9.0

Laboratorio: S/MIME con OpenSSL

Prerrequisitos: Se debe tener creada una CA localmente, en el laboratorio anterior se creo una CA donde la clave privada de la CA se llamaba cakey.pem, con passphrase sistemas y la clave publica o certificado digital de la CA se llamaba cacert.pem. El nuevo certificado digital para manejar correos seguros debe tener las siguientes caractersticas: Atributo eMail del CN del titular: [email protected], es decir su cuenta de correo electrnico Organizacin: la empresa donde usted labora, no necesariamente es el mismo texto de la CA del ejemplo anterior Caducidad: 60 das Algoritmo de hash: SHA1 Extensiones: basicConstraints=critical, CA:FALSE extendedKeyUsage: emailProtection

Objetivo: Utilizar S/MIME con OpenSSL para enviar documentos en forma segura. Para ello se debe generar un par de claves RSA de 1024 bits que ser el par de claves del cliente de correo S/MIME (publica y privada) La clave privada se debe guardar en el archivo correo-key.pem protegido con la passphrase correo La clave publica o certificado digital se debe guardar en el archivo correo-cert.pem

Paso 1: Para generar la clave privada se digita: # cd /usr/local/ssl # openssl genrsa -out correo-key.pem -des3 1024

El sistema pide un password para la clave privada del usuario que desea manejar correos electrnicos seguros, y se le digita correo

Paso 2: Para generar un requerimiento de clave publica del usuario que desea manejar correos seguros se digita: # openssl req -new -key correo-key.pem -out correo-csr.pem -config openssl.cnf -sha1 -outform PEM Nota: Observe que el nombre de archivo/fichero openssl debe estar precedido de la ruta donde se encuentra el archivo openssl.cnf pues varia en cada sistema operativo. El sistema pide los datos del certificado que identifica a la persona como: Pais, Estado/departamento, Organizacion, Nombre de la persona (en el campo nombre del servidor) y la direccion de correo que para este requerimiento es critico. Para verificar el requerimiento se digita: #openssl req -in correo-csr.pem -verify -text -noout Y debe aparecer el siguiente textos si todo va bien: verify OK

Cifrando documentos y servicios de red SSL

Paso 3: Se debe editar el archivo/fichero openssl.cnf antes de que la CA pueda firmar requerimientos para generar llaves publicas, dirjase a la seccin existente CA_defualt y actualice las variables default_days y default_md segn lo requerido en el enunciado del problema: [ CA_default ] default_days = 60 default_md = sha1 Adicione al final del archivo/fichero openssl.cnf la seccin requerida para generar certificados de correo electrnico: [ proteccion_de_correo ] basicConstraints = critical,CA:FALSE nsCertType = client, email keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = emailProtection Explicacion de los parmetros: El parametro nsCertType=client, email indica que el certificado sera usado por un cliente de correo y no por un servidor web El parametro keyUsage = nonRepudiation,digitalSignature,keyEncipherment indica que el certificado ser utilizado para firmar y cifrar documentos. El parametro extendedKeyUsage=emailProtection nos indica que el certificado servir para el manejo de correo seguro.

Nota: Existe la extensin usr_cert que muestra unos requerimientos muy parecidos pero estan desactivados y no contienen la extensin adicional extendedKeyusage.

Paso 4: Generacin de la llave publica Para generar el certificado de clave pblica se digita: # openssl ca -verbose -policy policy_anything -out correo-cert.pem correo-csr.pem -extensions proteccion_de_correo -passin pass:sistemas Notas importantes: Observe que el nombre de archivo/fichero openssl debe estar precedido de la ruta donde se encuentra el archivo openssl.cnf pues varia en cada sistema operativo. El parmetro -passin pass:sistemas es obligatorio cuando el tamao de la clave es muy pequeo e identifica la clave simetrica usada en la generacin de la llave privada de la CA. No es la clave simetrica de la llave privada del usuario Si en el atributo policy se utilizara policy_match los nombres de las organizaciones y otros campos deben ser iguales, cosa que no es deseable en esta clase de certificados donde la CA no necesariamente es la misma entidad que hace los requrimientos -days 60 -config openssl.cnf -in

Paso 5: Verificacin del certificado: # openssl verify -verbose -CAfile cacert.pem correo-cert.pem Debe prestarse mucha observacin a que se deben adicionar los certificados digitales de la CA y del usuario para que se pueda verificar la jerarqua de la generacin de las llaves. Y el sistema openssl deber responder con el siguiente texto si todo va bien: verify OK

Paso 6: Escriba un texto en claro, que contenga la cadena Esta es una prueba de Open SSL en correo

Cifrando documentos y servicios de red SSL

seguro y su nombre, gurdelo en el archivo mensaje.txt.

Paso 7: Proceso de Firmado A partir de este texto, genere un mensaje S/MIME firmado y cifrado y gurdelo en el archivo mensaje.msg. El destinatario o los destinatarios sern las llave pblicas generadas en pasos anteriores y si cuenta con otras llaves publicas de otros destinatarios podr utilizarlas para enviarles este mismo correo seguro. # openssl smime -sign -signer /usr/local/ssl/correo-cert.pem -inkey /usr/local/ssl/correo-key.pem -out mensaje.sig -in mensaje.txt correo-cert.pem El archivo/fichero se vera como sigue en el siguiente comando: # less mensaje.sig MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=sha1; boundary="---D4AB7B0DBDA1DDE739F0ED8C370EEE62" This is an S/MIME signed message ------D4AB7B0DBDA1DDE739F0ED8C370EEE62 Esta es una prueba de Open SSL en correo seguro Armando Enrique Carvajal Rodriguez Gerente de consultoria globalteksecurity ------D4AB7B0DBDA1DDE739F0ED8C370EEE62 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIIGkAYJKoZIhvcNAQcCoIIGgTCCBn0CAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3 ... ... ------D4AB7B0DBDA1DDE739F0ED8C370EEE62-Este texto al final del correo representa la firma digital. Nota: Obviamente se ve el texto en claro pero con la firma no legible, es decir con el hash que es lo mismo que firma.

Paso 8: Proceso de Cifrado # openssl smime -encrypt -des3 -out mensaje.msg -in mensaje.sig -from '[email protected]' -to '[email protected]' -subject 'Prueba de correo seguro' correo-cert.pem otro-destinatario.pem Nota: Se adiciona el certificado correo-cert.pem del remitente para que el remitente lo pueda descifrar con su llave privada. Se mira el archivo/fichero: mensaje.msg # less mensaje.msg To: [email protected] From: [email protected] Subject: Prueba de correo seguro MIME-Version: 1.0 Content-Disposition: attachment; filename="smime.p7m" Content-Type: application/x-pkcs7-mime; name="smime.p7m" Content-Transfer-Encoding: base64 MIINwQYJKoZIhvcNAQcDoIINsjCCDa4CAQAxggIuMIIBEwIBADB8MHcxEzARBgoJ

Cifrando documentos y servicios de red SSL

... al0csSXhCLcCzqmz0nG9v43wqCRnI6x4Pd2xaQJIjTNT+1wJ3pofHJ8VF089TW/I Nota: Obviamente no es un correo legible

Paso 9. Suponiendo que el originador borra el texto original (en claro) del mensaje y slo conserva el mensaje S/MIME, cmo se utilizara la herramienta OpenSSL para ver su contenido en claro? # openssl smime -decrypt -in mensaje.msg -inkey /usr/local/ssl/correo-key.pem -recip /usr/local/ssl/correocert.pem Que produce la siguiente salida: Enter pass phrase for /usr/local/ssl/correo-key.pem: Debera digitar la clave clave simetrica correo que se definio cuando creo la clave privada del usuario

Esta es una prueba de Open SSL en correo seguro

Armando Enrique Carvajal Rodriguez

Paso 10: Cmo puede usarse la herramienta OpenSSL para verificar la firma del mensaje anterior? Proceso de descifrado # openssl smime -decrypt -in mensaje.msg -out mensaje.firmado -inkey /usr/local/ssl/correo-key.pem recip /usr/local/ssl/correo-cert.pem Y obtengo el archivo mensaje.firmado al cual se le debe aplicar el proceso de verificacin de firma Proceso de verificacin de firma # openssl smime -verify -signer /usr/local/ssl/correo-cert.pem -in mensaje.firmado -CAfile cacert.pem

Esta es una prueba de Open SSL en correo seguro Armando Enrique Carvajal Rodriguez Gerente de consultoria globalteksecurity Verification successful

Prueba de certificados con Outlook Express Exporte el certificado, la llave y el certificado de la CA en un solo archivo con formato PKCS12 compatible con el sistema operativo Windows: # openssl pcks12 export in correo-cert.pem inkey correo-key.pem certfile cacert.pem out correopkcs12.p12

Cuestionamientos Cmo posibilita la tcnica del sobre digital PKCS#7 que el contenido de un mismo mensaje S/MIME cifrado, como el que se ha generado en este laboratorio pueda ser descifrado tanto por el originador como por los destinatarios? Respuesta: El proceso que el receptor debe seguir para descifrar un sobre digital PKCS#7 es:

Cifrando documentos y servicios de red SSL

a) Descifrar la clave de sesion que va dirigida al sobre digital y abrirlo b) Descifrar el contenido del mensaje con la clave de sesin obtenida en el paso anterior Entonces el hecho de que el sobre permita cifrar un mensaje para varios destinatarios e inclusive el originador obliga a que se utilicen los certificados de cada uno de los destinatarios, por lo tanto cada destinatario con su clave privada podr ver la informacin cifrada que se le envi con su llave pblica respectiva. Esta informacin de los certificados va en el campo recipientinfo de la estructura de datos del PKCS#7

Cifrando documentos y servicios de red SSL

10.0

Laboratorio: Certificados digitales del lado del cliente con OpenSSL mxima seguridad

Prerrequisitos: Se debe tener creada una CA localmente El cliente debe tener un par de claves RSA de 1024 bits con la clave privada protegida mediante la passphrase cliente Asegurese que el puerto 443 no este siendo utilizado

El certificado debe contar con las siguientes caractersticas: Validez: 60 das Algoritmo de hash: SHA1 Extensiones: basicConstraints = critical, CA:FALSE extendedKeyUsage: Autenticacin de cliente web SSL/TLS

Objetivo: Nota: El servidor web debe tener un dominio virtual con soporte SSL para asegurar que el servidor es quien dice ser, y del lado del cliente tambin se desea certificar que el cliente es quien dice ser, esto es muy til en aplicaciones de Intranet y comercio electrnico seguro en ambas direcciones. Autenticar a un usuario basado en su certificado digital contra un servidor web El servidor web debe emitir una conexin segura entre cliente y servidor basado en SSL Finalmente el servidor web le mostrara al usuario la pagina web

Paso 1: Para generar la clave privada del cliente se digita: # cd /usr/local/ssl # openssl genrsa -out cliente-key.pem -des3 1024 outform PEM El sistema pide un password para la clave privada y se le digita cliente Ahora, genere el requerimiento: # openssl req -new -key cliente-key.pem -out cliente-csr.pem -config openssl.cnf -sha1 -outform PEM Nota: Observe que el nombre de archivo/fichero openssl debe estar precedido de la ruta donde se encuentra el archivo openssl.cnf pues varia en cada sistema operativo. El sistema pide los datos del certificado para esta persona especifica como son: pas, estado, nombre, en el CN escriba su nombre, sin dejar espacios, ejemplo: ArmandoEnriqueCarvajalRodriguez para identificar al usuario final, es decir ac va el nombre del usuario que desea el certificado digital y no el nombre del servidor web. Para verificar el requerimiento se digita: #openssl req -in cliente-csr.pem -verify -text -noout Se debe obtener la salida: verify OK Ahora se genera la llave pblica: Se edita el archivo openssl.cnf y se le adiciona la extensin proteccion_de_cliente:

Cifrando documentos y servicios de red SSL

Nota: Observe que el nombre de archivo/fichero openssl debe estar precedido de la ruta donde se encuentra el archivo openssl.cnf pues varia en cada sistema operativo. [ proteccion_de_cliente ] basicConstraints = critical,CA:FALSE nsCertType = client keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth Notas: El parmetro nsCertType=client indica que el certificado ser usado por un cliente para autenticarse en un servidor web El parametro keyUsage = nonRepudiation,digitalSignature,keyEncipherment, indica que el certificado ser utilizado para firmar y cifrar documentos. El parametro extendedKeyUsage=clientAuth nos indica que el certificado se utilizara por un cliente para suministrarlo a un servidor web seguro y autenticarse. Para genererar el certificado de clave pblica se digita: # openssl ca -verbose -policy policy_anything -out cliente-crt.pem -days 60 -config openssl.cnf -in clientecsr.pem -extensions proteccion_de_cliente -passin pass:sistemas El parametro -passin pass:sistemas es obligatorio cuando el tamao de la clave sea muy pequeo. Verificacin del certificado: # openssl verify -verbose -CAfile cacert.pem Y el sistema openssl responde: verify OK cliente-crt.pem

Paso 2: Con la herramienta OpenSSL se debe generar un archivo de tipo PKCS#12 protegido con la contrasea pkcs12 que contenga la clave privada y el certificado digital del del cliente. # openssl pkcs12 -chain -CAfile cacert.pem -out cliente-pkcs12.p12 -in cliente-crt.pem -inkey cliente-key.pem -name "OmarFabianBecerra" -export -certfile cliente-crt.pem -info NOTA: El commando anterior corresponde a una sola lnea. El sistema pregunta el nuevo password de tipo export y se le suministra pkcs12 diferente a la clave privada del usuario que se desea autenticar cuya palabra secreta es: cliente. Paso 3: Indique qu cambios se deben realizar a la configuracin del servidor web para aadirle un servidor HTTPS virtual y que solamente permita el acceso a clientes que tengan un certificado emitido por nuestra CA. Editar el archivo de dominios.conf para agregar un nuevo dominio con las mismas carctersicas del dominio sitioseguro.edu.co pero con una variante en la forma de autentiacin: # kwrite /usr/local/apache2/conf/dominios.conf

Agregue la siguiente configuracin de dominio: #******** HOST VIRTUAL HTTPS UTENTICACION CON CERTIFICADO ***************

Cifrando documentos y servicios de red SSL

DocumentRoot /usr/local/apache2/htdocs/sitiocertificado ServerName www.sitiocertificado.com.co:443 AuthName "Manuales de linux sitio certificado" SSLVerifyClient require SSLVerifyDepth 10 # Estas lineas son obligatorias para activar el SSL para el dominio virtual SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile "/usr/local/apache2/conf/server.crt" SSLCertificateKeyFile "/usr/local/apache2/conf/server.key" SSLCACertificatePath "/usr/local/apache2/conf" SSLCACertificateFile "/usr/local/apache2/conf/cacert.pem" SSLOptions +StdEnvVars SSLOptions +StdEnvVars BrowserMatch ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog "/usr/local/apache2/logs/ssl_request_log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" # FIN - Estas lineas son obligatorias para activar el SSL para el dominio virtual Resumen: Se debe crear una nueva seccin Virtualhost con los nuevos certificados y se deben activar las variables: SSLVerifyClient require SSLVerifyDepth 10 Para ello se debe quitar el signo comentario que se antepone a cada instruccin anterior. Para que el explorador del cliente no falle en la generacion de confianza respecto del certificado digital de la CA, es critico que el servidor web sepa cual es el certificado digital de la CA adems del certificado digital del servidor web mas la llave privada del servidor web. SSLCACertificatePath "/usr/local/apache2/conf" SSLCACertificateFile "/usr/local/apache2/conf/cacert.pem" Paso 4: Pruebe si el servidor pide un certificado digital a los clientes que lo acceden Los exploradores por defecto suministran en forma automtica los certificados al servidor, pero en este caso aun no existe el certificado del usuario importado en el explorador. En Internet Explorer:

Cifrando documentos y servicios de red SSL

Esta ventana nos indica que no existe el certificado y que debemos importarlo.

Mozila Firefox:

Como en el caso del Internet explorer, esta ventana nos indica que no existe el certificado y que debemos importarlo. Para ver mejor lo que est pasando, conviene que en las opciones del navegador (Edit, Preferences, Advanced, Certificates, se especifique que pida el certificado cada vez, en lugar de escogerlo automticamente.

Paso 5: Indique los pasos a seguir para que el navegador utilice el certificado de cliente contenido en el archivo PKCS#12 del lado del cliente para acceder al servidor HTTPS virtual. En Internet Explorer:

Cifrando documentos y servicios de red SSL

Se debe configurar en el apartado del explorador Herramientas, Opciones de Internet, Contenido, certificados, Importar, active el filtro: Archivos PKCS12, elija el archivo/fichero cliente-pkcs12.p12.

Un asistente lo llevara de la mano para finalizar este paso.

Se debe verificar el objetivo del certificado.

Cifrando documentos y servicios de red SSL

El certificado ser mostrado como de una entidad de NO confianza, por lo tanto se debe importar el certificado digital de la CA como una entidad de confianza.

Mozila Firefox: Se debe configurar en el apartado del explorador Mozilla Firefox, Editar, preferencias, Avanzadas, Administrar certificados, Sus certificados, Importar, Archivos PKCS12, el archivo cliente-pkcs12.p12.

Se le pedir que le asigne una clave secreta al dispositivo: pkcs12 Se le pedir que le suministre la clave secreta cuando hizo el export o backup: pkcs12

Esta ventana indica que el certificado digital como la clave privada se instalaron en el cache del explorador.

Verifique que este importado.

Cifrando documentos y servicios de red SSL

Aparece importado pero hay problemas con el propsito del certificado digital. Luego en la opcin Autoridades se busca el certificado de la CA, se debe editar y marcar la opcin Identificar sitios web e Identificar usuarios de correo.

Se marcan los objetivos del certificado, como aparece en la ventana anterior.

Debe observarse que ahora el browser ya sabe para que se va a usar el certificado. Al navegar por el sitio seguro:

Cifrando documentos y servicios de red SSL

La ventana muestra al usuario el certificado que se enviara al servidor. Paso 6: Explique brevemente qu ventajas e inconvenientes puede tener la autenticacin de cliente basada en certificados digitales respecto a la basada en contrasea. Ventajas: El servidor puede verificar la identidad del cliente no solo basado en una cuenta de usuario y clave de secreta La comunicacin es segura punto a punto pues ambas partes estan cifradas y autenticadas Desventajas: No es tan fcil que el cliente genere su par de llaves y que adems las convierta al formato PKCS12 No es tan fcil que el cliente importe sus llaves en el explorador/browser La llave privada estar en un PC fuera del control del usuario, es decir un intruso podra hacer criptoanlisis sobre esas llaves El tiempo de proceso en la transmisin de datos tiende a ser mas baja por que ambos extremos cifran los datos

Cuestionamientos Los datos entre el cliente y el servidor HTTP estn cifrados, puede demostrase con un sniffer? Si se utiliza en el nombre del servidor localhost, que problemas se presentaran con el explorador web y los certificados?

Cifrando documentos y servicios de red SSL

11.0

Laboratorio: Tneles con STUNNEL

Prerrequisitos: Se debe tener creada una CA localmente, en un laboratorio anterior se creo una CA donde la clave privada de la CA se llamaba cakey.pem, con passphrase sistemas y la clave publica o certificado digital de la CA se llamaba cacert.pem. Tambien debera existir la llave privada correo-key.pem del ejercicio anterior Asegurese que el puerto 443 no este siendo utilizado, para esto baje el servicio apache y edite el archivo/fichero httpd.conf ahora inserte un signo comentario # a la instruccin INCLUDE. Finalmente suba el servicio y verifique que el puerto este cerrado.

Objetivo: Se debe crear un tnel entre dos mquinas de tal manera que un PC Windows con un explorador web pueda interpretar el trfico cifrado Entiendase que stunnel es una herramienta que permite convertir protocolos no protegidos en protocolos seguros Este laboratorio utilizara esta herramienta para ofrecer seguridad a una conexin TCP de tipo http Ms informacin de stunnel se puede encontrar en http://www.stunnel.org

Paso 1: Generar un certificado con extensiones de servidor y formato PEM En el directorio /usr/local/ssl basado en la clave privada correo-key.pem se debe generar un requerimiento a la CA local de llave pblica con el comando: # cd /usr/local/ssl # openssl req -new -key correo-key.pem -out stunnel-csr.pem -config openssl.cnf -sha1 -outform PEM

Nota: Observe que el nombre de archivo/fichero openssl debe estar precedido de la ruta donde se encuentra el archivo openssl.cnf pues varia en cada sistema operativo. El sistema pide los datos del certificado que identifica al servidor que se desea asegurar como: Pais, Estado/departamento, Organizacin y Nombre del servidor que para este requerimiento es critico. Paso 2: Firmar el requerimiento utilizando la CA local y generar el certificado del servidor Se edita el archivo de configuracin openssl.cnf [ stunnel ] basicConstraints=critical,CA:FALSE extendedKeyusage=serverAuth El parmetro extendedKeyUsage=serverAuth indica que el certificado ser usado para autenticacin de un servidor # openssl ca -verbose -policy policy_anything -out stunnel-cert.pem -days 180 -config openssl.cnf stunnel-csr.pem -extensions stunnel -passin pass:sistemas -in

Nota: Observe que el nombre de archivo/fichero openssl debe estar precedido de la ruta donde se encuentra el archivo openssl.cnf pues varia en cada sistema operativo. El parmetro -passin pass:sistemas es obligatorio cuando el tamao es muy pequeo en la clave de la llave de la CA Paso 3: Configurar Stunnel de tal forma que permita acceder al servidor Apache de la mquina local utilizando un canal seguro, por ejemplo a travs del puerto 443 donde se cifrara la informacion. Tecnicamente se desea redireccionar el trafico del puerto 80 al 443 pero primero se cifra el canal.

Cifrando documentos y servicios de red SSL

Se prepara el archivo de configuracin /etc/stunnel/stunnel.conf client debug chroot setuid setgid pid CAfile cert key [https] accept = 443 connect = 80 TIMEOUTclose = = = = = = = = = no 7 /var/lib/stunnel/ stunnel nogroup /var/run/stunnel.pid /usr/local/ssl/cacert.pem /usr/local/ssl/stunnel-cert.pem /usr/local/ssl/correo-key.pem

=0

Nota: Los siguientes campos no se deben usar en Fedora VIII: chroot setuid setgid = /var/lib/stunnel/ = stunnel = nogroup

Paso 4: Lanzar apache versin 2 Se lanza el servidor apache con el comando: # /usr/local/apache2/bin/apachectl start

Paso 5: Lanzar stunnel Se lanza el servidor stunnel con el comando: # /usr/sbin/stunnel Notas: La herramienta stunnel le preguntara el password de la clave privada correo-key.pem Si sospecha de problemas se debe reviar el archivo/fichero de logs /var/log/messages Si el servicio no sube por algn error, entonces no aparecer en la tabla de procesos: ps edf | grep stunnel /etc/stunnel/stunnel.conf

Paso 6: Pruebas con un browser La pgina web se ve cifrada en el siguiente url: https://localhost

Cuestionamientos Los datos entre el cliente y el servidor HTTP estn cifrados, puede demostrase con un sniffer? Se podra asegurar cualquier servicio que transfiera datos en claro con stunnel? Esto es lo mismo que una VPN basada en IPSEC? Podria un servidor telnet que no usa SSH emular ssh para sesiones ssh desde un cliente Windows SSH?

Cifrando documentos y servicios de red SSL

Bibliografia Network Security with OpenSSL, John Viega, Matt Messier y Pravir Chandra, Jun 15, 2002. Secure TCP/IP Programming with SSL: Developer's Guide, Edward Zaremba, Mar 8, 2007

Cifrando Documentos con GNU PG

1.

PGP

PGP es el acrnimo de Pretty Good Privacy. Se trata de un programa para cifrar y descifrar datos el cual ofrece tres tipos de servicio:

Confidencialidad: Permite a un usuario, mediante cifrado, garantizar que destinatario podr leer el mensaje. Autentificacin: Permite a un usuario firmar un documento antes de enviarlo:

solamente el

o o

Genera la certeza de que el documento original no ha sido modificado puesto que ha sido firmado. Si se alterara el mensaje la firma no sera vlida. Se puede constatar o verificar que el mensaje ha sido firmado por una determinada persona.

Integridad: La firma antes mencionada tiene la particularidad de que depende no slo de la identidad del remitente sino tambin del contenido del mensaje, por lo que si este es alterado, la firma ya no es vlida.

Cifrando documentos con GNU PG

Adems se caracteriza entre otras cosas por: El paquete PGP es de dominio pblico (existe una versin comercial distribuida por Pretty Good Privacy, Inc). PGP es asequible para una gran variedad de plataformas (DOS/Windows, UNIX, Mac, VMS etc) e independiente del S.O. Esta basado en algoritmos extremadamente seguros como: RSA para cifrado de claves de sesin, IDEA y ElGamal para el cifrado del mensaje y MD5, HASH para la generacin de firmas digitales. El paquete incluye cdigo fuente y documentacin. No ha sido desarrollado ni es controlado por ninguna organizacin gubernamental.

Bsicamente hablando, PGP funciona como un algoritmo del tipo de clave pblica asimtrica. En un sistema de clave pblica, cada usuario crea un par de claves que consiste en una clave pblica y una clave privada. Se puede cifrar un mensaje con la clave pblica y descifrarlo con la privada (NO se puede cifrar y descifrar con la misma clave).

Como funciona 1Bsicamente hablando, PGP funciona como un algoritmo del tipo de clave pblica asimtrica. En un sistema de clave pblica, cada usuario crea un par de claves que consiste en una clave pblica y una clave privada

El usuario difunde la clave pblica, ponindola a disposicin de cualquiera que quiera enviarle un mensaje. Una vez que el mensaje ha sido recibido por el usuario, ste podr descifrarlo con su clave privada. Es evidente que la clave privada debe ser mantenida en secreto por el propietario. Puede considerar este esquema como si fuese un buzn con dos llaves, una para abrir y otra para cerrar. Cualquiera puede introducir un mensaje en el buzn y cerrarlo, pero solamente el propietario podr abrirlo. Una gran ventaja de este tipo de esquema criptogrfico es que, al contrario que los sistemas tradicionales donde la clave de cifrado y descifrado coinciden, no es necesario encontrar un procedimiento seguro para enviar la clave al recipiente del mensaje. Tambin permite la opcin de "firmar" un mensaje con una firma digital que nadie, ni siquiera el receptor, puede falsificar. Esto resulta especialmente til, aunque no se cifre el mensaje en s, porque acta como certificacin de autenticidad, ya que permite comprobar si el mensaje ha sido alterado durante la transmisin. Tambin permite al receptor confirmar que el mensaje ha sido enviado realmente por el remitente.

Cifrando documentos con GNU PG

Para cifrar los datos, PGP se emplea un algoritmo de clave simtrica, cuya clave es cifrada con un algoritmo de clave asimtrica. Por qu esta mezcla? Porque de este modo se combinan las mejores propiedades de ambos: la seguridad de un algoritmo asimtrico (donde clave pblica y privada son distintas) con la rapidez y robustez de un algoritmo simtrico (cuya clave es nica y, por tanto, vulnerable).

Cifrado de datosPor qu esta mezcla? Porque de este modo se combinan las mejores propiedades de ambos: la seguridad de un algoritmo asimtrico (donde clave pblica y privada son distintas) con la rapidez y robustez de un algoritmo simtrico (cuya clave es nica y, por tanto, vulnerable)

Un tercer algoritmo se emplea para firmar documentos: se extrae un conjunto de bits del mensaje llamado resumen (hash) y se cifra con la clave privada del emisor. As, el sistema de operacin de PGP (y programas similares) consta de tres subsistemas: cifrado del documento, cifrado de clave simtrico y firmado del documento. La implementacin de PGP esta en desuso por las sospechas de puertas traseras y esta tomando mucha fuerza el uso de GnuPG que se vera mas adelante.

2.

Instalacin y uso

2.1 PGP de Philip Zimmermann Versin Propietaria Para Latinoamrica y otros pases diferentes a EEUU es recomendable bajar la versin 2.6.3 de tipo internacional debido a que las versiones ms nuevas no bajan en forma completa. Siempre se corrompen los archivos. Se debe crear el directorio /var/lib/pgp y una vez haya bajado el programa, debe extraer los archivos fuentes que se encuentran en formato tar: Descomprimir el archivo: # gunzip pgp263is.tar.gz Obtener los fuentes: # tar xvf pgp263is.tar Generar el siguiente archivo que se deber extraer con el comando: # tar xvf pgp263ii.tar ( Fuentes )

Cifrando documentos con GNU PG

Si ya se tienen en el directorio recomendado los fuentes, la compilacin puede hacerse por medio de los siguientes comandos: # cd src # make linux Si el comando make fue exitoso entonces debi crearse un ejecutable denominado pgp. Es recomendable (para seguir los estndares) copiarlo al directorio /usr/bin. Por defecto, PGP usa el directorio .pgp dentro del home directoy del usuario respectivo para cuando necesita encontrar los anillos de llaves (key rings) y otros archivos de configuracin, entonces es bueno crear este directorio para cada usuario con el comando: #mkdir $HOME/.pgp Dentro de los archivos de distribucin, hay uno llamado config.txt que tiene el propsito de configurar algunos aspectos de PGP. Si se desea tener una configuracin personalizada, es recomendable mover este archivo al directorio recientemente creado. Puede hacer lo mismo con los archivos language.txt y es.hpl. Este ltimo es una ayuda personalizada para el lenguaje que utilice. Se debe copiar el directorio /var/lib/pgp/doc en el subdirectorio .pgp de cada usuario de lo contrario pgp no funcionar.

2.2 Open PGP

Open PGP = GNU PGPGnuPg es el acrnimo de GNU Privacy Guard GNU PGP es la versin que Linux usa por defecto El archivo se llama gnupg...

GnuPG es el acrnimo de GNU Privacy Guard GnuPG es la versin que hoy mas se usa, a la fecha se pueden obtener en formato RPM para linux en el site www.gnupg.org donde se encuentra la ltima versin que se puede instalar con el comando: # rpm hUv gnupg-1.0.6-1.i386.rpm Si se desea instalar en formato tarbal, siga los siguientes pasos:

Cifrando documentos con GNU PG

# # # # # # #

cd /tmp bunzip2 gnupg-1.4.2.tar.bz2 tar xvmf gnupg-1.4.2.tar cd gnupg-1.4.2 ./configure make make install

Se recomienda reiniciar el servidor Linux. GnuPG creara en cada directorio de usuario o HOME directory un directorio llamado .gpg, en este directorio estar el anillo de llaves y sus llaves respectivas.

1.3. 2.3.1

Comandos comunes Creacin de un par de llaves

Para empezar a utilizar PGP o GnuPG, debe crear su propio par de llaves la pblica y la privada, para hacer esto, ejecute el siguiente comando: # pgp kg Enseguida, deber elegir el tamao mximo de la llave: 512, 768, 1024, 2048, 4096 bytes. Entre mayor sea el tamao de la llave, mejor ser el nivel de seguridad obtenido, con el agravante de una disminucin en la velocidad de encriptacin. Se recomienda seleccionar 1024 bytes para los negocios en general. Existen llaves de mayor tamao, pero por cuestiones legales estas solamente las utilizan las fuerzas armadas de EEUU. En GNUpg el commando seria: # gpg --gen-key Los tamaos posibles son: (1) DSA and El Gamal y es la opcin por defecto, (2) DSA Sign Only, (3) RSA Sign only. La opcin por defecto permite llaves desde 1024 hasta 4096 bytes en la ltima versin. Las opciones DSA y RSA solo permiten firmar pero no encriptar. El paso siguiente es definir una identificacin para su clave pblica user ID. Lo ms comn es escribir su nombre seguido de un comentario y su direccin de correo: Janneth Vallejo (Algun comentario) En GNUpg: Le preguntar de su nombre, la direccin e-mail y un comentario para generar la cadena del user ID.

Cifrando documentos con GNU PG

Crear el par de llavesPara empezar a utilizar GNUPG, debe crear su propio par de llaves la pblica y la privada, para hacer esto, ejecute el siguiente comando: # gpg --gen-key En el antiguo PGP sera: # pgp kg

Luego de haber definido la identificacin de su llave pblica, deber elegir una contrasea con el fin de proteger su llave privada. Elija una frase segura que incluya caracteres especiales, letras minsculas y maysculas. Finalmente, el programa le pedir que digite letras nmeros o smbolos de forma aleatoria para poder generar una secuencia aleatoria de bytes que formar las claves. De esta manera, PGP crear las llaves y se lo notificar con un mensaje. En PGP las llaves se guardarn en el directorio .pgp en los archivos especiales pubring.pgp (Anillo con las llaves pblicas) y secring.pgp (Anillo con las llaves privadas). En GnuPG se guardarn en el directorio .gnupg en los archivos pubring.gpg (Anillo con las llaves pblicas) y secring.gpg (Anillo con las llaves privadas). Tanto la identificacin como la contrasea de las llaves pueden ser editadas o modificadas usando el siguiente comando: # pgp ke identificador [ anillo ] Es importante que la cadena que forma al identificador vaya entre comillas dobles. Por ejemplo pgp ke Armando Carvajal (lacositarica) En GNUpg: # gpg --edit-key [email protected]

2.3.2

Aadir (importar), exportar y quitar llaves a un anillo

Si usted tiene un archivo carlos.pgp que le envi su amigo carlos y este archivo contiene una llave publica y usted quiere adicionarla a uno de sus anillos para poderle enviar archivos a Carlos entonces usted debe ejecutar el siguiente comando: #pgp ka carlos.pgp En GNUpg: # gpg --mport carlos.gpg De la misma manera, si lo que desea es eliminar una llave entonces utilice el siguiente comando: #pgp kr identificador [ anillo ]

Cifrando documentos con GNU PG

Si desea enviarle su llave pblica a un amigo para que el le enve archivos a usted, lo primero que debe hacer es extraerla del anillo, esto puede hacerlo por medio del comando: #pgp --kx identificador armando.pgp En GNUpg: # gpg --output armando.gpg --export [email protected] El archivo armando.pgp armando.gpg no son de tipo ASCII, por lo tanto, si queremos enviarlo por email, debe extraerse en formato ascii de la siguiente manera: #pgp kxa identificador archivo [anillo] ( a = ASCII ) En GNUpg: # gpg --armor --output armando.asc --export [email protected]

Importar una llave publicaSi usted tiene un archivo carlos.pgp que le envio su amigo carlos y este archivo contiene una llave publica y usted quiere adicionarla a uno de sus anillos para poderle enviar archivos a Carlos entonces usted debe ejecutar el siguiente comando: # gpg --import carlos.pgp En el antiguo PGP sera: # pgp ka carlos.pgp

Con frecuencia sucede que no recuerde que llaves tiene dentro de determinado anillo, este problema lo resuelve ejecutando: #pgp kv [ identificador ] [ anillo ] #pgp kvv [ identificador ] [ anillo ] ( Tambin ver todos los certificados Para cada llave ). En GNUpg: # gpg --list-keys

Cifrando documentos con GNU PG

Que llaves tengoCon frecuencia sucede que no recuerde que llaves tiene dentro de determinado anillo, este problema lo resuelve ejecutando : # gpg --list-keys En el formato PGP antiguo sera: #pgp kv [ identificador ] [ anillo ] #pgp kvv [ identificador ] [ anillo ] Tambin ver todos los certificados Para cada llave

Para enviar la clave pblica acarvaja.asc a un servidor de claves se utiliza el comando: # gpg --send-keys --keyserver pgp.mit.edu acarvaja.asc La clave no podr ser borrada pero si se puede revocar para que solamente permita comprobar firmas realizadas en el pasado. Una lista interesante de servidores se encuentra en la direccin: http://pgp.uni-mainz.de/bigbrother/ Para buscar una llave pblica se usa el comando: # gpg --keyserver pgp.mit.edu --search-key Armando Carvajal El commando mostrara una lista de llaves con sus respectivos ID Para importar una clave directamente digite: # gpg --keyserver pgp.mit.edu --recv-key ID

2.3.3

Firmar un mensaje

Obviamente la autenticidad es una caracterstica muy importante en el campo de la seguridad. PGP permite el uso de firmas digitales las cuales dan al receptor la capacidad de verificar que el documento no ha sido modificado y que realmente viene de su destinatario. Supongamos que queremos enviar el documento Manual.doc a un amigo llamado Carlos Perez firmado con mi firma secreta. Como parte del identificador de la llave pblica del amigo Carlos es su nombre, entonces podemos adicionar solamente el nombre para que pgp incruste en el archivo la llave pblica. Es importante que primero el seor carlos le haya enviado su llave publica y que usted la haya adicionado a su anillo de llaves publicas segn se explico en