Curso de privacidad y protección de comunicaciones digitales


   Lección 0. Introducción. Problemática en la privacidad de comunicaciones digitales
   Lección 1. Introducción al cifrado de la información. Herramienta GPG y OpenSSL
   Lección 2. Cifrado de discos: proteger tu privacidad de forma sencilla y efectiva
   Lección 3. Comunicaciones seguras mediante mensajería instantánea
   Lección 4. Protección de comunicaciones en dispositivos móviles
   Lección 5. Protección de comunicaciones en redes sociales
   Lección 6. Malware: orígenes y evolución
   Lección 7. Canales subliminales. Esteganografía




Lección 1. Introducción al cifrado de la información. Herramienta GPG y OpenSSL
D. Eloi Sanfelix - 10/04/2013 

Objetivos

En el mundo actual, el intercambio de información entre distintas partes se ha convertido en una de las principales tareas que ejecutamos día a día. El carácter de la información intercambiada se mueve entre lo más puramente intrascendente y la información estrictamente confidencial, pasando por todo tipo de niveles intermedios (por ejemplo, información privada pero no confidencial). Cuando tratamos con información sensible, es necesario tomar las precauciones adecuadas para que dicha información no sea accesible a quienes no deberían tener acceso a la misma. Al mismo tiempo, es necesario asegurar que aquellas personas que legítimamente deban tener acceso a dicha información sean capaces de obtenerla en el momento necesario. Con el fin de cumplir estos objetivos, existen técnicas criptográficas que nos permiten hacer la información accesible a las partes deseadas, mientras se mantiene inaccesible al resto del mundo. Para ello, es necesario proteger la información tanto en origen y destino (es decir, cuando la tenemos almacenada en nuestros discos duros) como en tránsito (cuando la transmitimos por la red hacia su destinatario).

En esta lección se introducen los problemas relativos a la seguridad de la información confidencial tanto en tránsito como en almacenamiento, y se describen mecanismos para cumplir los objetivos marcados y proteger nuestra información de ojos indeseados. Veremos cómo asegurar que nuestras comunicaciones con páginas web determinadas están siendo obtenidas únicamente por el destinatario deseado (por ejemplo, nuestro banco) así como formas de almacenar archivos individuales de forma segura. Junto con la problemática y las posibles soluciones, presentaremos distintos tipos de ataques que se pueden producir e introduciremos formas de detectarlos cuando sea posible.

Temario

Apartado 1. Problemática. Integridad y confidencialidad de los datos
Apartado 2. Cifrado de archivos con GnuPG y OpenSSL
Apartado 3. Seguridad en comunicaciones web: SSL
Apartado 4. Referencias



APARTADO 1. PROBLEMÁTICA. INTEGRIDAD Y CONFIDENCIALIDAD DE LOS DATOS

Durante el diseño inicial de Internet, los distintos habitantes de la red se suponían honestos y simplemente interesados en compartir información. De esta forma, en los protocolos básicos de Internet no se diseñaron mecanismos de seguridad que permitiesen proteger a los usuarios de otros usuarios maliciosos. En la gran mayoría de protocolos de Internet, los datos enviados a través de la red viajan en texto claro. Esto es, cualquiera que sea capaz de observar el tráfico de Internet es capaz de leer dichos datos.

Además, cuando dos usuarios intercambian información, ésta se transmite de nodo en nodo hasta alcanzar su destino. Por ejemplo, si un usuario de España se comunica con otro en Argentina, los datos podrían viajar desde Valencia hacia Madrid, de allí a Amsterdam, seguidamente a Nueva York para finalmente acabar en Buenos Aires.

Sin mecanismos de seguridad adicionales, cualquier administrador de sistemas situado en uno de estos puntos intermedios tiene acceso total a los datos intercambiados. No solamente puede leer los datos, sino que sería capaz de imposibilitar la comunicación o incluso realizar modificaciones sobre los datos transmitidos.

Adicionalmente, la gran mayoría de países almacenan las comunicaciones realizadas en sus redes durante un período determinado por ley. Pese a que teóricamente se establecen las garantías adecuadas en un Estado de Derecho, es más que factible acceder a dicha información sin orden judicial de manera preventiva por parte de cuerpos de seguridad y agencias de inteligencia. Por tanto, para garantizar la seguridad y privacidad de nuestras comunicaciones ante agentes externos, ya sean éstos usuarios maliciosos, mafias o incluso agencias de espionaje de unos u otros países, es necesario tomar las precauciones adecuadas.

Integridad y confidencialidad de los datos

Cuando hablamos de garantizar la seguridad y privacidad de nuestros datos, hablamos de garantizar dos propiedades básicas de los mismos:

Confidencialidad: garantizar la confidencialidad de los datos significa asegurarse de que dichos datos son únicamente accesibles para las partes deseadas. Es decir, que si nuestra intención es compartir un archivo con cierta persona y mantenerlo en secreto entre ambos, nadie más debería ser capaz de acceder a ellos (salvo que una de las partes rompa dicha confidencialidad).

Integridad: garantizar la integridad de los datos implica asegurar que dichos datos no han sido modificados, ya sea de forma accidental o intencionada. Otra propiedad relacionada con la integridad de los datos es la autenticidad de los mismos, que generalmente implica asegurar que los datos provienen de quien dicen provenir y que por tanto no han sido modificados en tránsito.

Para garantizar dichas propiedades, disponemos de una serie de algoritmos criptográficos. Para garantizar la confidencialidad de los datos, se utilizan algoritmos de cifrado. Un algoritmo de cifrado se define por una serie de modificaciones a aplicar a los datos, junto con el uso de otros datos conocidos como claves. Existen dos grandes familias de algoritmos de cifrados: los cifrados de clave simétrica y los cifrados de clave asimétrica. En un cifrado de clave simétrica, existe una única clave que debe ser conocida por todos los participantes en la comunicación.

Es decir, si queremos compartir unos datos con nuestro amigo Luis y con nadie más, y otros datos únicamente con nuestra amiga María, vamos a necesitar dos claves distintas: una de ellas la compartiremos con Luis y la usaremos únicamente para asegurar las comunicaciones entre ambos, y con la otra haremos lo mismo con María. Si María y Luis necesitan intercambiar datos confidenciales entre ellos, van a necesitar a su vez otra clave secreta compartida entre ambos, y así sucesivamente. Como se puede imaginar, este procedimiento funciona bien en comunidades pequeñas. En cambio, cuando las comunidades crecen y se quiere tener la posibilidad de intercambiar información de forma segura con cualquier miembro de la comunidad, el número de claves a manejar se vuelve impracticable.

Para resolver este problema se diseñaron los algoritmos de criptografía de clave asimétrica, también conocidos como algoritmos de clave pública. En este caso, cada persona genera un par de claves complementarias. Una de ellas es conocida como clave pública y, como su nombre indica, se encuentra disponible para todo aquel que lo desee. La otra clave, conocida como clave privada, se debe mantener en secreto. Cuando se desea intercambiar información con un usuario, se obtiene su clave pública y se utiliza ésta para cifrar la información. A partir de ese momento, únicamente aquellos conocedores de la clave privada podrán descifrar la información.

En la actualidad existen multitud de herramientas para cifrar datos o comunicaciones en tránsito aplicando criptografía simétrica o asimétrica. En esta lección se ve interesante resaltar dos de las más importantes desarrollando con ejercicios las operaciones básicas de funcionamiento (cifrado). Si desea profundizar en estas herramientas le aconsejamos visitar la página web oficial de cada una de las herramientas.



APARTADO 2. CIFRADO DE ARCHIVOS CON GNUPG Y OPENSSL

Además de la necesidad de proteger nuestras comunicaciones en red, en ocasiones es necesario proteger la información confidencial almacenada en nuestros sistemas informáticos. Para ello, es necesario cifrar la información de forma que aunque ésta caiga en manos no autorizadas no sea posible acceder a los datos. Existen soluciones para este problema tanto a nivel de sistema de ficheros completo (es decir, cifrando el disco duro entero o una de sus particiones) como a nivel de ficheros individuales. En esta lección se verá únicamente cómo proteger archivos concretos mediante herramientas open source y de software libre. Más adelante se dedicará una lección completa al cifrado de disco duro, mediante el cual es posible asegurar la información contenida en un disco duro o en un ordenador en caso de pérdida o sustracción.

Apartado 2.1. GnuPG

La herramienta GnuPG implementa el estándar OpenPGP uno de los sistemas criptográficos más usados en la actualidad. Este estándar permite intercambiar información con usuarios de otras herramientas como PGP Desktop de Symantec. OpenPGP es un sistema híbrido que combina criptografía simétrica y asimétrica. Cada usuario genera un par de claves, publicando su clave pública y manteniendo su clave privada en secreto, generalmente protegida mediante cifrado simétrico usando una frase de paso. Cuando se cifra un documento mediante OpenPGP, se genera una clave simétrica aleatoria y se usa ésta para cifrar el documento mediante un cifrado simétrico como podría ser TDES o AES. Además, la clave usada para cifrar el documento se cifra usando la clave pública de aquellas entidades que se desea tengan acceso a los datos. Por tanto, un documento cifrado mediante OpenPGP contiene una serie de copias de la clave simétrica cifrada con claves públicas de los distintos destinatarios de los datos, así como el propio documento cifrado con dicha clave simétrica. Además de esto, OpenPGP permite proteger la integridad de los datos mediante el uso de firmas digitales. Para ello, se hace uso de la parte privada de un par de claves para generar una firma digital y almacenarla junto al documento a proteger. Por tanto, mediante OpenPGP es posible proteger tanto la confidencialidad como la integridad de los datos. En los siguientes ejercicios se verá cómo utilizar GnuPG paso a paso, con la finalidad de proteger datos para nuestro propio uso futuro.

Ejercicio 2.1. Generando pares de claves con GnuPG

Antes de poder cifrar un archivo mediante GPG, es necesario generar un par de claves. Para crearlas ejecutamos el siguiente comando en un terminal:

eloi@es:~$ gpg --gen-key
gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Por favor seleccione tipo de clave deseado:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sólo firmar)
(4) RSA (sólo firmar)
Su elección: 1

En primer lugar, nos pide elegir el tipo de clave a utilizar. En nuestro caso elegimos claves RSA mediante 1. Seguidamente se nos pide seleccionar el tamaño de clave y el periodo de validez. En este ejemplo, seleccionamos 4096 bits y un periodo de 2 años:

las claves RSA pueden tener entre 1024 y 4096 bits de longitud.
¿De qué tamaño quiere la clave? (2048) 4096
El tamaño requerido es de 4096 bits
Por favor, especifique el período de validez de la clave.
0 = la clave nunca caduca
= la clave caduca en n días
w = la clave caduca en n semanas
m = la clave caduca en n meses
y = la clave caduca en n años
¿Validez de la clave (0)? 2y
La clave caduca mié 14 ene 2015 18:28:11 CET
¿Es correcto? (s/n) s

Tras confirmar que todo es correcto, se nos pedirá introducir nuestro nombre y dirección de correo electrónico. Esto es necesario puesto que gpg está orientado a ser usado para proteger correos electrónicos, aunque aquí lo vamos a utilizar únicamente para cifrar archivos de momento.

Necesita un identificador de usuario para identificar su clave. El programa
construye el identificador a partir del Nombre Real, Comentario y Dirección
de Correo Electrónico de esta forma:
"Heinrich Heine (Der Dichter) "
Nombre y apellidos: test@example.com
Dirección de correo electrónico: test@example.com
Comentario:
Ha seleccionado este ID de usuario:
"test@example.com "

¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? v
Necesita una frase contraseña para proteger su clave secreta.
Introduzca frase contraseña:
Repita frase contraseña:
Es necesario generar muchos bytes aleatorios. Es una buena idea realizar alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar la red y los discos) durante la generación de números primos. Esto da al generador de números aleatorios mayor oportunidad de recoger suficiente entropía.

+++++.......+++++............+++++..+++++

gpg: /home/eloi/.gnupg/trustdb.gpg: se ha creado base de datos de confianza
gpg: clave BD1A80D4 marcada como de confianza absoluta
claves pública y secreta creadas y firmadas.
gpg: comprobando base de datos de confianza
gpg: 3 dudosa(s) necesarias, 1 completa(s) necesarias,
modelo de confianza PGP
gpg: nivel: 0 validez: 1 firmada: 0 confianza: 0-, 0q, 0n, 0m, 0f, 1u
gpg: siguiente comprobación de base de datos de confianza el: 2015-01-14
pub 4096R/BD1A80D4 2013-01-14 [caduca: 2015-01-14]
Huella de clave = A87A BE63 0755 0C38 8A31 AFE7 2230 AC66 BD1A 80D4
uid test@example.com
sub 4096R/855D1F79 2013-01-14 [caduca: 2015-01-14]

Como se puede ver, con esto se ha generado un par de claves pública y privada y se ha añadido nuestra clave al anillo de claves de gpg. Con esto ya estamos listos para poder cifrar archivos, como veremos en el siguiente ejercicio.


Ejercicio 2.2. Cifrando archivos con GnuPG

Una vez hemos generado nuestro par de claves, en primer lugar necesitamos obtener el identificador del destinatario del fichero. Para ello, podemos listar las claves conocidas por gpg:

eloi@es:~$ gpg --list-keys
/home/eloi/.gnupg/pubring.gpg
-----------------------------
pub 4096R/BD1A80D4 2013-01-14 [caduca: 2015-01-14]
uid test@example.com
sub 4096R/855D1F79 2013-01-14 [caduca: 2015-01-14]

De aquí obtenemos que nuestro identificador es BD1A80D4. Con ello, podemos cifrar un archivo (por ejemplo supersecret.txt) tal que así:

eloi@es:~$ gpg -r BD1A80D4 -e supersecret.txt
eloi@es:~$

Esto nos genera un archivo binario con extensión .gpg. Analizando el contenido de este archivo, podemos ver que parece contener datos sin sentido:

eloi@es:~$ hexdump -C supersecret.txt.gpg | head
00000000 85 02 0c 03 d8 a7 1c 1b 85 5d 1f 79 01 0f ff 66 |.........].y...f|
00000010 74 62 7d 0f 28 2d b9 b7 95 75 a2 46 52 b7 78 29 |tb}.(-...u.FR.x)|
00000020 9d 3c ad c3 aa bd 45 f4 2f 75 96 22 35 d2 83 c0 |.<....E./u."5...|
00000030 7c 59 18 ef 0d 06 b7 dd 9d f4 16 a9 8c ce a4 d1 ||Y..............|
00000040 21 ed d3 fd f4 26 50 10 e2 6c 39 04 82 d8 53 65 |!....&P..l9...Se|
00000050 d3 19 55 5b 2b f4 b7 37 07 8e f5 e1 ea 83 0e ff |..U[+..7........|
00000060 b0 fa 90 a8 24 d5 e1 f2 70 ec 1a 5d 4e 10 3f 3f |....$...p..]N.??|
00000070 a4 66 00 c0 94 75 0a bb 06 bd bd 89 33 aa 68 a3 |.f...u......3.h.|
00000080 5d 61 33 50 49 1c e1 f3 79 45 ef 7f 89 21 8b e2 |]a3PI...yE...!..|
00000090 31 12 55 55 13 83 c2 71 80 61 d5 f8 07 ce ba bd |1.UU...q.a......|
eloi@es:~$

Sin embargo, mediante el uso de nuestra clave privada es muy sencillo recuperar el contenido del archivo:

eloi@es:~$ gpg -d supersecret.txt.gpg
Necesita una frase contraseña para desbloquear la clave secreta
del usuario: "test@example.com "
clave RSA de 4096 bits, ID 855D1F79, creada el 2013-01-14(ID de clave primaria BD1A80D4)
Introduzca frase contraseña:
gpg: cifrado con clave RSA de 4096 bits, ID 855D1F79, creada el 2013-01-14
"test@example.com "
TOP SECRET! KTHXBYE!!

Como se puede ver, el contenido del archivo original (TOP SECRET! KTHXBYE!!) se muestra por pantalla. Si se desea guardar el archivo con otro nombre en lugar de mostrarlo por pantalla (recomendable para archivos binarios) se añade la opción –o con el nombre de fichero, tal que así:

eloi@es:~$ gpg -o supersecret.rec.txt -d supersecret.txt.gpg
Necesita una frase contraseña para desbloquear la clave secreta
del usuario: "test@example.com "
clave RSA de 4096 bits, ID 855D1F79, creada el 2013-01-14(ID de clave primaria BD1A80D4)
Introduzca frase contraseña:
gpg: cifrado con clave RSA de 4096 bits, ID 855D1F79, creada el 2013-01-14
"test@example.com "
eloi@es:~$ cat supersecret.rec.txt
TOP SECRET! KTHXBYE!!

Finalmente, es posible almacenar el archivo cifrado en formato texto en lugar de binario. Para ello, no hay más que añadir la opción -a durante el cifrado. Este modo hace sencillo añadir archivos cifrados en e-mails, páginas web, etc.

eloi@es:~$ gpg -a -r BD1A80D4 -e supersecret.txt
eloi@es:~$ cat supersecret.txt.asc
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.10 (GNU/Linux)
hQIMA9inHBuFXR95AQ//egaiN97kwNEm0G9NfJgFN9j1kZHGBHBOQzdRzDIVymak
Cc+GAhEeXrsjQyHUZXeuvj7KuPXrxMxe20YWnJ9Y3P52H2IiJ7wTCyoxeWCfXkXV
/wZEeFeCqc7zTrMF3AYVHy8drzdq6ZJx+YXfrRYzc01DHpBp0hgcgyVw6Lp5d6xH
gmAxposmAif6kuOD1Zg+rhMg12JBniV2xGpSl36/TJ+V0Ck0LFwiZCkVvYlIc5OK
CxxXF8lKtexE1XARzyyXV6M89MI0rDZwwUHOv+v460aMQNrCfVDUHrnSPOTol/vN
Zerry5I+OwkvbeO5Wo5/Q4WDNZ6y+sZYvoAFHSBGoPmo8klgHvye1NhvG+ybngMB
i5fcnW6c8TYTLiNly7eD/pIscwZeSbeCb8Pd7jxrFFOtSNPyXwScdu15faVw/+NP
VskXabjXDHMkjh7waUUjhJ9J46a/7EbbQpJ75fN5r1gNQ6wPdT5c4GdyxT2Jza9r
hscbcyZv5R4/eMh/I45NsY1WXIZTETvuns8vykTdtpN/vizi7hZrV5G7/YZvABVZ
OuUSpHusMXAG2qfwKnJYkWFyNmrexqlmHCCBGSZ3OTW/RDvMnLnmrW/fZWvjgGl6
sODaQ1PwKJ3/VkbqhREBxy5IXQTAz28p7Y/tuYbQz7pq/skirn1NYWiKPehvVvbS
YAH+YfeS27yv5SXI1Je/de8uoiS23SI6YT3Piv97wQ3c2uhNFLEq+k+J5qrXg6Vj
Je7+qIzJJxxevcbml9OfvVw59ZUld6dOnL9GUiqAT8WylHF1i78yQBXid6OGyLoj
YA==
=jCjY
-----END PGP MESSAGE-----


Apartado 2.2. OpenSSL

Además de implementar el estándar SSL, la suite de herramientas y librerías OpenSSL proporcionan una serie de herramientas criptográficas que permiten a los usuarios cifrar información mediante criptografía simétrica o asimétrica. En los siguientes ejercicios se verá cómo generar claves asimétricas, así como cifrar archivos mediante el uso de OpenSSL desde línea de comandos.

Ejercicio 2.3. Generando pares de claves con OpenSSL
Al igual que con gpg, en este ejercicio vamos a generar un par de claves RSA. Para ello, ejecutamos el siguiente comando:

eloi@es:~$ openssl genrsa -des3 -out privkey.pem 2048
Generating RSA private key, 2048 bit long modulus
...........+++
....................+++
e is 65537 (0x10001)
Enter pass phrase for privkey.pem:
Verifying - Enter pass phrase for privkey.pem:
eloi@es:~$
Como resultado, se habrá creado un archivo privkey.pem que contiene la clave privada cifrada mediante Triple DES usando la contraseña proporcionada. Podemos usar openssl para obtener la información relacionada con la clave privada:
eloi@es:~$ openssl rsa -text -in privkey.pem
Enter pass phrase for privkey.pem:
Private-Key: (2048 bit)
modulus:
00:ea:3a:75:d7:95:06:5c:ab:ce:34:73:e7:cb:5b:
47:38:79:a7:f5:b7:1d:be:be:e5:43:15:87:b9:f0:
ba:c6:48:ac:8a:78:2d:56:fb:4d:75:ce:78:5b:0c:
b0:18:d7:7d:d5:50:49:d7:59:e0:4a:7b:84:f2:a5:
44:f1:4b:1d:48:2c:c9:93:04:80:cf:3f:fe:61:9e:
29:ca:f7:65:9a:69:20:96:0d:8b:b9:6b:8a:82:62:
d6:7f:ab:46:0c:76:27:a7:01:a2:58:da:0c:8b:1d:
6f:1a:aa:79:9b:89:04:f2:56:da:43:51:67:c2:ab:
5a:66:26:c3:79:e1:8b:00:7f:0a:d7:38:c2:59:1c:
34:a7:fc:cd:31:a8:32:e4:e2:a7:a2:73:53:e3:89:
ad:ab:85:a1:1b:ee:fd:ba:f3:98:f0:65:25:51:bb:
de:52:f5:60:27:64:a8:8e:f1:83:88:8e:01:c7:fb:
06:e7:ac:e8:1f:76:3b:69:93:77:23:75:71:36:25:
29:03:f9:f4:e0:ad:f5:e6:5d:6e:9b:31:24:43:5b:
bd:13:a9:b8:e8:79:d3:a0:37:88:36:0b:16:d5:9f:
65:be:2f:4f:a8:09:44:f8:7e:7c:cd:a0:a4:b0:15:
6a:8b:3c:79:28:4c:39:b8:7e:c2:81:43:1b:9c:78:
83:03
publicExponent: 65537 (0x10001)
privateExponent:
2b:a4:56:de:a3:3a:bb:3b:9b:c1:34:33:65:35:8d:
b0:9d:22:49:6b:24:14:ad:56:e4:47:f7:b1:12:84:
8a:7b:72:02:9e:df:bb:cc:39:23:91:23:e5:bb:18:
78:98:76:2e:af:b6:02:75:11:90:6f:31:57:50:a9:
e6:d7:9b:0e:1e:a2:34:4d:6b:7e:b2:2a:c0:9f:8a:
a3:f1:b2:b1:b1:92:cb:c2:9c:5d:21:07:7e:c1:d1:
bb:99:fb:04:49:63:9b:ff:76:f3:5d:35:67:1a:45:
e0:4f:11:37:84:b1:32:42:32:8a:c6:79:31:d1:61:
97:94:f3:69:1b:38:1e:10:32:7f:f5:61:ec:ec:51:
a1:6b:c1:4f:fe:66:3d:f7:cf:fe:91:94:9d:39:61:
7b:d5:e6:2e:e7:5f:88:4f:78:44:a9:b3:b1:ac:3c:
78:48:64:d8:30:ba:ab:ae:23:7a:7a:cf:ad:7d:7d:
46:12:dd:dc:2f:ae:f2:18:d6:60:6e:55:e7:3c:26:
8f:33:20:1d:7f:60:b2:d4:7a:c8:85:da:52:73:87:
92:0f:b7:da:25:47:b3:19:69:06:cc:57:d9:14:eb:
e0:79:69:ef:a6:c1:28:e3:b6:81:b2:97:6b:aa:7d:
9a:d1:ac:ce:ba:c4:c5:24:be:86:e2:c0:ad:a7:66:
19
prime1:
00:f7:a9:9f:c6:fd:cc:9c:2f:ef:b0:b2:74:d8:dc:
2d:78:16:c2:60:a7:9c:d5:fd:5a:c1:4b:3a:3e:7d:
10:6c:1c:e4:55:c7:de:28:d3:ec:87:70:6a:db:80:
80:bc:d3:de:61:25:ba:f2:e6:06:ad:1e:c1:56:ce:
1b:de:a4:7e:35:ae:e1:c8:a3:1a:13:a9:80:b9:db:
06:c3:3e:7e:cb:e4:f6:06:bd:e6:f3:a7:20:5e:59:
42:ae:d0:fe:17:af:73:ec:8c:b3:8d:39:2a:cf:b3:
83:29:ef:67:a4:e8:44:b6:b6:2a:e3:f5:98:59:6a:
d6:59:e2:20:63:f2:8c:5f:bf
prime2:
00:f2:1d:0f:14:16:b0:35:d5:e1:92:be:39:fe:18:
99:0d:48:06:ab:c4:fe:14:e4:8a:b9:79:96:06:4c:
3a:2a:9f:42:7f:01:58:69:92:78:c0:e2:f7:fa:e0:
6d:50:4e:1e:e2:44:98:f3:d5:b4:51:f5:3f:9d:19:
ee:49:b4:79:45:03:6f:9d:c6:d5:1e:45:cc:ba:da:
fd:7e:5f:2d:99:95:64:0e:3a:45:21:80:b9:14:d4:
e2:9b:75:eb:6b:2b:db:28:93:61:ec:21:69:2f:7c:
44:b1:1d:e3:f1:5f:54:3a:b6:74:50:3c:95:fd:b2:
9c:f2:a9:36:ba:16:4e:ed:bd
exponent1:
5f:6a:51:6d:57:e0:99:97:fa:4f:68:21:8e:5f:1d:
81:73:bb:45:83:ad:ef:df:a1:34:71:28:2a:65:02:
8b:b4:81:df:ee:95:cf:c2:fe:10:9c:25:ff:15:3e:
04:01:d8:5e:33:2c:18:62:b8:d5:bf:d0:9b:01:e3:
48:de:b4:e5:37:d0:32:fd:6b:91:81:af:5f:6b:5b:
ea:a2:cc:34:ff:ac:2d:a2:c2:34:c3:01:bc:77:c5:
32:16:c0:9e:1d:71:9b:04:06:34:f5:7e:61:f0:f6:
2a:94:da:a8:74:f7:ec:30:b8:cb:84:96:42:74:df:
ca:57:4d:45:54:6f:f2:7f
exponent2:
1e:14:3a:21:56:c8:41:87:f6:e4:52:39:c6:35:ac:
1e:18:4a:ab:e0:67:68:95:14:1f:02:d9:fe:a2:4d:
bf:a9:d5:8b:0d:d1:bc:1b:f4:60:92:52:18:9a:f5:
39:ba:da:df:65:82:53:18:c3:b4:42:f1:ca:44:c4:
73:e7:b6:01:3a:f2:0c:f9:fc:d4:2b:fb:c9:63:17:
87:31:af:ea:9a:c2:b9:79:c7:c8:e7:c3:16:b1:74:
0d:b8:52:ad:17:df:bc:64:c3:0f:a0:fe:fe:65:43:
eb:75:39:32:6d:93:7b:4f:db:97:74:4f:76:1b:50:
a0:5d:21:6d:71:04:11:49
coefficient:
2a:56:34:f2:f7:a5:14:4c:14:60:c8:e6:06:d6:11:
52:38:ce:4c:ee:e1:ff:21:5f:e5:45:ea:87:fe:4b:
39:d5:76:f7:dc:0d:51:69:bb:20:e0:fa:74:ab:0e:
43:5a:ae:f4:f2:ac:4b:e9:6a:ce:db:ad:29:45:0a:
01:e0:0a:0f:6d:a3:d2:36:cc:b6:21:c4:00:55:ed:
b5:39:a7:ab:45:cf:06:57:04:7b:f1:cf:da:e1:6e:
6d:0d:93:2a:e7:0b:46:29:74:d8:c1:28:40:e2:33:
d3:33:38:aa:95:73:16:8a:98:6f:90:7d:cf:11:b9:
12:bd:34:a9:d5:f2:c7:8d
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA6jp115UGXKvONHPny1tHOHmn9bcdvr7lQxWHufC6xkisingt
VvtNdc54WwywGNd91VBJ11ngSnuE8qVE8UsdSCzJkwSAzz/+YZ4pyvdlmmkglg2L
uWuKgmLWf6tGDHYnpwGiWNoMix1vGqp5m4kE8lbaQ1FnwqtaZibDeeGLAH8K1zjC
WRw0p/zNMagy5OKnonNT44mtq4WhG+79uvOY8GUlUbveUvVgJ2SojvGDiI4Bx/sG
56zoH3Y7aZN3I3VxNiUpA/n04K315l1umzEkQ1u9E6m46HnToDeINgsW1Z9lvi9P
qAlE+H58zaCksBVqizx5KEw5uH7CgUMbnHiDAwIDAQABAoIBACukVt6jOrs7m8E0
M2U1jbCdIklrJBStVuRH97EShIp7cgKe37vMOSORI+W7GHiYdi6vtgJ1EZBvMVdQ
qebXmw4eojRNa36yKsCfiqPxsrGxksvCnF0hB37B0buZ+wRJY5v/dvNdNWcaReBP
ETeEsTJCMorGeTHRYZeU82kbOB4QMn/1YezsUaFrwU/+Zj33z/6RlJ05YXvV5i7n
X4hPeESps7GsPHhIZNgwuquuI3p6z619fUYS3dwvrvIY1mBuVec8Jo8zIB1/YLLU
esiF2lJzh5IPt9olR7MZaQbMV9kU6+B5ae+mwSjjtoGyl2uqfZrRrM66xMUkvobi
wK2nZhkCgYEA96mfxv3MnC/vsLJ02NwteBbCYKec1f1awUs6Pn0QbBzkVcfeKNPs
h3Bq24CAvNPeYSW68uYGrR7BVs4b3qR+Na7hyKMaE6mAudsGwz5+y+T2Br3m86cg
XllCrtD+F69z7IyzjTkqz7ODKe9npOhEtrYq4/WYWWrWWeIgY/KMX78CgYEA8h0P
FBawNdXhkr45/hiZDUgGq8T+FOSKuXmWBkw6Kp9CfwFYaZJ4wOL3+uBtUE4e4kSY
89W0UfU/nRnuSbR5RQNvncbVHkXMutr9fl8tmZVkDjpFIYC5FNTim3XrayvbKJNh
7CFpL3xEsR3j8V9UOrZ0UDyV/bKc8qk2uhZO7b0CgYBfalFtV+CZl/pPaCGOXx2B
c7tFg63v36E0cSgqZQKLtIHf7pXPwv4QnCX/FT4EAdheMywYYrjVv9CbAeNI3rTl
N9Ay/WuRga9fa1vqosw0/6wtosI0wwG8d8UyFsCeHXGbBAY09X5h8PYqlNqodPfs
MLjLhJZCdN/KV01FVG/yfwKBgB4UOiFWyEGH9uRSOcY1rB4YSqvgZ2iVFB8C2f6i
Tb+p1YsN0bwb9GCSUhia9Tm62t9lglMYw7RC8cpExHPntgE68gz5/NQr+8ljF4cx
r+qawrl5x8jnwxaxdA24Uq0X37xkww+g/v5lQ+t1OTJtk3tP25d0T3YbUKBdIW1x
BBFJAoGAKlY08velFEwUYMjmBtYRUjjOTO7h/yFf5UXqh/5LOdV299wNUWm7IOD6
dKsOQ1qu9PKsS+lqztutKUUKAeAKD22j0jbMtiHEAFXttTmnq0XPBlcEe/HP2uFu
bQ2TKucLRil02MEoQOIz0zM4qpVzFoqYb5B9zxG5Er00qdXyx40=v
-----END RSA PRIVATE KEY-----
eloi@es:~$


Ejercicio 2.4. Cifrando archivos con OpenSSL
Tras generar un par de claves, OpenSSL nos permite cifrar archivos mediante RSA utilizando el siguiente comando:

eloi@es:~$ openssl rsautl -encrypt -inkey privkey.pem -in supersecret.txt -out supersecret.ossl
Enter pass phrase for privkey.pem:
eloi@es:~$
Si analizamos el contenido del fichero, observaremos de nuevo que se trata de datos aparentemente aleatorios:
eloi@es:~$ hexdump -C supersecret.ossl | head
00000000 8e 26 b1 67 fa bf 25 18 19 32 e9 64 7c a9 07 15 |.&.g..%..2.d|...|
00000010 08 34 5f 95 f2 a9 ab 71 f2 c3 68 77 92 5f b3 8a |.4_....q..hw._..|
00000020 af 71 86 1b b3 9d ce be 05 f3 df 74 25 32 66 8f |.q.........t%2f.|
00000030 2c 0d 33 67 f4 2a 23 db 10 2b 03 a6 a7 fe 4b fa |,.3g.*#..+....K.|
00000040 65 c9 b8 30 ac b2 7f 04 94 01 1d ce 1a 09 8e 6f |e..0...........o|
00000050 f4 80 53 cd df f1 3f 0b 80 c3 43 b4 2a 33 9f 21 |..S...?...C.*3.!|
00000060 e7 eb bb 2b c1 a6 b5 d7 0a 20 73 74 76 32 19 72 |...+..... stv2.r|
00000070 3a 6a d1 4a 42 69 90 b0 7a ca f0 07 67 c7 ac 8b |:j.JBi..z...g...|
00000080 74 9b 85 27 7d e0 b1 e3 cc a9 ff ca 0d 7d ad bd |t..'}........}..|
00000090 88 6f 7e 1c dc c8 8e 73 6c f2 0f e0 0a 95 81 5f |.o~....sl......_|
eloi@es:~$

Para descifrar los datos, ejecutamos un comando similar al de cifrado pero usando -decrypt en lugar de -encrypt.

eloi@es:~$ openssl rsautl -decrypt -inkey privkey.pem -in supersecret.ossl -o supersecret2.txt
Enter pass phrase for privkey.pem:
eloi@es:~$ cat supersecret2.txt
TOP SECRET! KTHXBYE!!
eloi@es:~$




APARTADO 3. SEGURIDAD EN COMUNICACIONES WEB: SSL

En el apartado anterior se han destacado las operaciones esenciales para cifrar ficheros con las dos herramientas más conocidas en Internet. Adicionalmente a este tipo de herramientas es necesario habilitar procedimientos para la protección de los datos en tránsito. En la red Internet actual, la gran mayoría de las comunicaciones a nivel de usuario son comunicaciones vía web, hablamos de Facebook, Twitter, acceso a banca online, etc. Con la intención de securizar las conexiones del mayor número de personas posibles se ve interesante en esta lección profundizar exclusivamente en la protección de comunicaciones web. Es por tanto necesario asegurar que cuando interactuamos con una página web estamos realmente intercambiando información con la página legítima y no con un atacante. Para ello, se ha implementado un modelo de seguridad basado en una infraestructura de clave pública (PKI, del inglés Public Key Infrastructure) en el protocolo SSL.

Apartado 3.1. Modelo de confianza

Cuando nos conectamos a una página web mediante el protocolo HTTPS (HTTP sobre SSL), nuestro navegador se conecta al servidor web e intenta establecer una sesión segura mediante SSL. Para ello, se llevan a cabo los siguientes pasos:

1. Obtención del certificado del servidor. En primer lugar, el servidor nos envía un certificado digital. Esto sería equivalente a un pasaporte o documento de identidad generado por las autoridades de nuestro país. Básicamente, el certificado incluye el dominio de la página web, el período de validez, la parte pública del par de claves que el servidor va a usar para establecer la comunicación y una firma digital creada por una Autoridad de Certificación (CA, Certification Authority).

2. Comprobación del certificado. Una vez se tiene el certificado, se obtiene la clave pública de la CA y se verifica la validez del mismo. Para que este paso sea válido, la CA debe estar dentro de una lista de autoridades de confianza (por ejemplo, equivaldría a ser generado por un país de la UE en el mundo real). Para ello, los navegadores contienen una lista de CA de confianza. Si el certificado no ha sido generado por una CA de confianza, es posible no obstante que haya sido por generado por una CA subordinada. En este caso se procede a comprobar la firma digital sobre el certificado de la CA subordinada. Con esto se genera una cadena de certificados, que debe acabar en una autoridad de confianza. Si es posible verificar todos los certificados de la cadena, entonces se asume que la clave pública expuesta por el servidor es de confianza.

3. Comprobación de la identidad del servidor. Una vez establecida la confianza de la clave pública, es necesario establecer la identidad del servidor. Para ello, se utiliza el protocolo SSL para asegurar que el servidor con el que estamos hablando efectivamente tiene conocimiento de la clave privada correspondiente. Además, el protocolo SSL se asegura de introducir datos aleatorios en la comprobación para evitar que un atacante pueda estar reusando comunicaciones almacenadas con anterioridad.

4. Generación de claves simétricas. Finalmente, se utilizan los datos intercambiados entre cliente y servidor para generar dos claves simétricas. Éstas se usarán para asegurar la confidencialidad y la integridad de las comunicaciones durante la sesión web.

Como es sencillo de entender a partir la descripción proporcionada, si lo desea en la lección 9 de la enciclopedia Intypedia tiene un vídeo con la explicación de todo el proceso, SSL permite proteger la información en tránsito en una sesión web protegida. Sin embargo, SSL no protege frente atacantes capaces de comprometer la seguridad de cualquiera de los dos extremos de la información. Si el cliente ha sido comprometido, es obvio que el atacante tendrá acceso a cualquier comunicación del mismo con un servidor web por mucho que éste utilice SSL. Por otra parte, si un servidor web es comprometido, el atacante sería capaz de inyectar información en las sesiones SSL así como acceder a toda la información a la que tiene acceso el sistema comprometido. Por último, si el atacante es capaz de obtener la clave privada correspondiente al servidor, éste sería capaz también de descifrar las comunicaciones protegidas vía SSL puesto que tendría acceso a toda la información necesaria para derivar las claves simétricas utilizadas en las sesiones web. Así pues, SSL protege la confidencialidad y la integridad de la comunicación pero no puede proteger al usuario ante servidores maliciosos o comprometidos.

Ejercicio 3.1. Comprobando un certificado

Generalmente, cuando se accede a un servicio web vía SSL, el navegador se encarga de verificar el certificado y establecer la sesión si dicha verificación se realiza con éxito. Los navegadores más comunes disponen de mecanismos para notificar al usuario que la verificación se ha realizado con éxito, generalmente mediante el uso de un pequeño candado. En nuestro caso, vamos a usar el navegador Mozilla Firefox para acceder a Gmail y verificar su certificado (el procedimiento es similar en otros navegadores). En primer lugar, escribimos la URL https://gmail.com en la barra de direcciones, y seguidamente clicamos en el icono del candado:


Una vez hecho esto, podemos hacer clic en Más información… para acceder a la información del certificado. Esto nos muestra la siguiente ventana:


Como se puede ver, el navegador nos indica el sitio web consultado, así como la autoridad certificadora. Si ahora pulsamos sobre Ver certificado, aparecerá una nueva ventana con la información contenida en el certificado en sí:


Aquí se puede ver información como el hash del certificado, período de validez, etc. En la pestaña Detalles se puede obtener toda la información contenida en cada uno de los certificados verificados en la cadena de confianza, acabando en un certificado raíz de confianza almacenado en el propio navegador. En este caso, vemos que el certificado de Google está firmado por Thawte SGC CA, cuyo certificado está a su vez cifrado por Verisign:


Además de los certificados SSL convencionales, existe una serie de certificados de validación extendida (Extended Validation, o EV Certificate). En este caso, se supone que la autoridad certificadora ha realizado comprobaciones más exhaustivas de que el certificado pertenece a quien lo solicita. Cuando encontramos uno de dichos certificados en Firefox, el famoso candado se convierte en una barra de color verde como se puede observar en la siguiente imagen:


Apartado 3.2. Ataques a SSL

Visto el proceso de establecimiento de sesión y el uso de claves simétricas para cifrar y autenticar la comunicación usado en SSL, queda claro que una simple escucha de la comunicación no es suficiente para obtener el contenido de la misma. Además, cualquier modificación del tráfico en tránsito debería en principio ser detectada mediante la comprobación de integridad realizada tanto en el cliente como en el servidor. Así pues, existen varios niveles a los que se puede atacar SSL: ataques vía red, ataques al protocolo SSL, ataques a la implementación e incluso ataques a la criptografía en sí.

Si desea una resumen detallado de posibles ataques le recomendamos el resumen A brief chronology of SSL/TLS attacks y el artículo Lessons Learned from previous SSL/TLS attacks. A brief Chronology of attacks and weaknesses de Christopher Meyer y Jörg Schwenk.

Seguidamente se resumen algunos de los más significativos:

Ataques vía red: Man in The Middle

Uno de los ataques de red clásicos es el conocido como ataque de hombre en medio, Man in The Middle (MiTM) en inglés. En este caso, el atacante se sitúa en el medio de la comunicación y es capaz de observar y modificar la misma. Para ello, un atacante puede hacer uso de herramientas que realizan ARP Spoofing (como ettercap o arpspoof), o realizar ataques de envenenamiento DNS. Como hemos visto anteriormente, SSL se protege ante este tipo de ataques mediante el uso de cifrado y mecanismos de comprobación de integridad de los mensajes. Sin embargo, si un atacante se sitúa en el medio justo antes de que se establezca la comunicación, podría establecer una sesión con un certificado falso con el usuario, y una sesión legítima con el servidor web. Con ello, el atacante es capaz de descifrar, modificar y reenviar el tráfico entre ambos destinos. Para ello, se pueden utilizar herramientas como burp proxy o similares. Obviamente, el navegador avisará al usuario de que el certificado no es de confianza. Sin embargo, el usuario puede aceptar el aviso y seguir con la comunicación si así lo desea. Es por ello que, como usuario, es necesario ser consciente de dicha posibilidad y comprobar que los certificados presentados por el navegador son en efecto confiables o abortar la comunicación en caso contrario.

Uso de certificados comodín

En los certificados utilizados para garantizar la autenticidad de los servidores web existe la posibilidad de utilizar comodines dentro del dominio web. Así pues, se pueden generar certificados válidos para cualquier dominio. Obviamente, para generar dicho certificado se necesitaría la colaboración de CAs o el acceso ilegítimo a ellas. Por ejemplo, cabe pensar que agencias de espionaje de determinados gobiernos tengan acceso a este tipo de certificados para realizar labores de vigilancia e investigación. Asimismo, recientemente se ha descubierto un certificado ilegítimo para *.google.com generado mediante un certificado de CA subordinada emitido por TurkTrust, una autoridad certificadora turca.

Ataques a CAs

Durante los últimos años, se han conocido varios ataques a entidades certificadoras que han comprometido la seguridad de SSL. En estos casos, el atacante compromete los sistemas de una CA incluida en las listas de confianza de la mayoría de navegadores y utiliza dicho acceso para generar certificados perfectamente válidos. Una vez los certificados son generados, se puede llevar a cabo un ataque MiTM difícilmente detectable para un navegador. En las referencias de la lección se adjunta el informe forense realizado por Fox IT analizando un ataque de este tipo a la entidad certificadora holandesa DigiNotar.

Ataques a la criptografía: colisiones en funciones resumen

Cuando se realiza una firma digital, generalmente se suele firmar un resumen del mensaje en lugar del mismo mensaje. Dicho resumen se calcula mediante el uso de una función resumen criptográfico (o función hash) como MD5, SHA-1 o la familia de algoritmos SHA-2. Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. Sin embargo, a medida que la ciencia del criptoanálisis avanza, se van encontrando debilidades en este tipo de funciones. En 2008, un grupo de investigadores consiguió crear colisiones en MD5 mediante el uso de mensajes con un prefijo elegido (es decir, que la parte inicial del mensaje puede ser elegida por el atacante) y utilizar dicha técnica para generar dos certificados SSL con el mismo resumen (véase referencias). Uno de dichos certificados apuntaba a un dominio bajo el control de los investigadores, mientras que el otro apuntaba a un dominio víctima, por ejemplo google.com. Puesto que el resumen es el mismo, los investigadores podían enviar el certificado inofensivo para ser firmado por una autoridad de certificación y luego utilizar dicha firma con el certificado fraudulento para realizar ataques.

Ataques lógicos a la implementación

Además de los ataques mencionados, en los últimos años se han publicado ejemplos de ataques a la implementación de SSL en los clientes. Un ejemplo de ellos es el ataque del byte nulo: cuando el navegador encontraba un byte nulo en el nombre común contenido en el certificado, consideraba que ahí acababa el nombre. En cambio, las autoridades certificadoras consideraban el campo entero. Con ello, era posible obtener un certificado con nombre *\0midominio.com, donde \0 representa un byte nulo y midominio.com un dominio bajo el control del atacante. Cuando este certificado es presentado al navegador, éste lo considera un certificado comodín (debido al signo *) y lo acepta como válido. Obviamente, una vez descubiertos y parcheados, este tipo de ataques se acaban volviendo obsoletos. Sin embargo, es importante tener en cuenta su existencia puesto que podríamos estar usando sistemas sin actualizar, o bien sistemas con problemas similares o relacionados.

Ataques laterales a la clave privada

Finalmente, otro punto de ataque es el de conseguir acceso a la clave privada del servidor. Como hemos visto anteriormente, si el servidor ha sido comprometido, la confidencialidad e integridad de los datos no está garantizada incluso si no se conoce la clave privada. Sin embargo, existen formas de obtener la clave privada sin tener acceso directo al servidor donde se encuentra la misma. Para ello, se pueden utilizar un tipo de ataques conocido como ataques laterales (side channel attacks). Uno de los ataques de este tipo más relevantes para servidores web, y en especial para servidores compartidos en los que un mismo hardware se utiliza para virtualizar varios sistemas operativos, lo forman los conocidos como cache timing attacks. Por ejemplo, imaginemos un servicio que utiliza instancias en Amazon EC2 para poder escalar fácilmente el hardware en función de sus necesidades. Todas estas máquinas compartirían una misma clave privada, o varias claves privadas con certificados válidos para el mismo dominio. Si un atacante lograse alquilar una instancia que se ejecutase en una de estas mismas máquinas, podría introducir un proceso con la intención de atacar la clave privada de la instancia vecina. Para ello, la estrategia del proceso atacante consiste en predecir la forma en la que el proceso víctima accede a memoria en función del valor de la clave. El proceso atacante realiza accesos a memoria antes y después del uso de partes de la clave, y mediante medidas de tiempo es capaz de determinar cuáles son los valores de la clave. Para información detallada sobre cómo se implementan este tipo de ataques, se sugiere al lector la lectura de los enlaces reflejados en la sección de referencias.

Apartardo 3.3. Protección ante ataques

En vista de los ataques más comunes ante SSL, existen dos formas principales de protegerse como usuario: limitando la lista de CAs de confianza y/o vigilando los certificados de aquellas páginas webs con las que interactuamos. Puesto que la verificación manual de certificados cada vez que visitamos una página web es una tarea tediosa, en esta sección vamos a ver algunas utilidades que nos pueden ayudar en este cometido.

SSLCop

SSLCop es una herramienta desarrollada con el objetivo de limitar el número de CAs de confianza en sistemas Windows. El concepto básico detrás de esta herramienta es que en general, un usuario español, por ejemplo, no tiene ninguna necesidad de acceder a sitios web con certificados emitidos en Macao. Siguiendo este concepto, la herramienta SSLCop nos permite elegir en qué CAs queremos confiar basándonos en el país de origen de la misma. Cómo se puede ver en esta imagen, la interfaz nos permite seleccionar CAs por países y bloquear aquellos países seleccionados.


Una vez presionado el botón BLOCK!, estas CAs son eliminadas de la lista de CAs de confianza de Windows, que es usada entre otros por Microsoft Internet Explorer y Google Chrome.

Certificate Patrol

Certificate Patrol es una extensión para el navegador Firefox que avisa al usuario cuando el certificado de una página web ha cambiado. Para ello, la primera vez que se accede a una página con la extensión instalada se nos mostrará el certificado y se nos pedirá aceptarlo. En las siguientes conexiones a la misma página web, Certificate Patrol comprobará que el certificado no haya cambiado, y en caso de haberlo hecho nos mostrará las diferencias entre el certificado anterior y el nuevo. Además, la extensión intenta averiguar si había razones para cambiar el certificado (e.g. si el certificado anterior iba a caducar) e intenta aconsejar al usuario. Instalar Certificate Patrol es tan sencillo como abrir el Administrador de complementos de Firefox, vía el menú Herramientas > Complementos. Una vez abierto, podemos realizar una búsqueda por Certificate Patrol y seleccionar Instalar.


Una vez instalado, hará falta reiniciar Firefox. Tras esto, Certificate Patrol está instalado y listo para funcionar. A partir de ahora, al acceder a un sitio web usando HTTPS, Certificate Patrol comprobará si su certificado ha sido almacenado con anterioridad.

Si no es así, nos avisará de que se ha aceptado un nuevo certificado para este servidor mediante una notificación en la misma ventana de Firefox:

En este caso, podemos ver los detalles del certificado o incluso rechazarlo. Hay que tener en cuenta que Certificate Patrol no está completamente integrado con el manejo de certificados del navegador, con lo que no es capaz de bloquear el acceso a páginas web determinadas. Por tanto, si presionamos rechazar simplemente no se almacenará el nuevo certificado, pero accederemos a la página igualmente.

En caso de cambio del certificado, veremos un aviso de Certificate Patrol ofreciendo detalles del certificado actual y el observado anteriormente. La siguiente captura corresponde al aviso obtenido cuando se ha producido un ataque MitM usando burp proxy:

Como se puede ver, en la parte de arriba se nos dice que ha habido cambios y deberíamos tener cuidado. Si inspeccionamos los cambios, vemos que el nuevo certificado está emitido por PortSwigger CA en lugar de Google Internet Authority. Como se ha comentado antes, aunque presionemos Reject (rechazar) el acceso a la página continuará. Así pues, no se debe tomar Certificate Patrol como una herramienta que nos hará inmunes ante ataques, sino más bien como una herramienta para detectar dichos ataques.

Perspectives y Convergence

Un concepto relacionado al anterior, aunque basado en lo que se ha denominado perspectivas de red es implementado por Perspectives y su sucesor, Convergence. En este caso, el usuario define una serie de notarios de red de confianza. Estos notarios de red pueden ser bien sistemas públicos ofreciendo el servicio, o sistemas añadidos por el usuario. La idea en este caso es eliminar la confianza en las listas de CAs fijas en el navegador, y moverla a dichos notarios de red. Cuando el usuario intenta acceder a una página web, realiza una consulta a los notarios. En respuesta a la consulta, los notarios emitirán un voto a favor o en contra del sitio web: nos dirán si ven lo mismo que nosotros, y si creen que el sitio web es legítimo. Si suficientes respuestas son positivas (dependiendo de la configuración), la aplicación determina que el sitio web es legítimo. Perspectives se encuentra actualmente en el repositorio de extensiones de Mozilla Firefox, y por tanto es extremadamente sencillo de instalar. Igual que con Certificate Patrol, se puede acudir al Administrador de complementos y realizar una búsqueda para encontrar la extensión:

Tras reiniciar Firefox, se pueden configurar las preferencias de la utilidad desde el mismo Administrador de complementos. En ellas se encuentra una lista de notarios, así como varias opciones en cuanto al nivel de seguridad requerido (todos los notarios deben estar de acuerdo, una mayoría de ellos debe estar de acuerdo, etc.).



Cuando Perspectives se encuentra activo, el usuario puede ver un pequeño icono con la letra P sobre fondo azul en la barra de navegación. Dicho icono se convierte en un tick sobre fondo verde cuando el sitio web es considerado seguro.


Pulsando sobre dicho icono accedemos a un menú que nos permite, entre otras cosas ver los resultados de las notarías, reportar un ataque, u obtener Ayuda:


Si accedemos a los resultados de las notarías, en el caso de twitter veremos lo siguiente:

Como se puede observar, en este caso todas las notarías han ido observando el mismo certificado desde hace 30 días. En cambio, si accedemos a un sitio web cuyo certificado cambia dependiendo del origen de la petición (por ejemplo Google) veremos un icono con una X sobre fondo rojo y la verificación de las notarías tendrá el siguiente aspecto:


Se puede observar que en este caso nuestro navegador observa un certificado que coincide con el observado por 4 notarías (en verde). En cambio, estas notarías observaron certificados distintos durante los últimos 30 días (amarillo y naranja), y hay otras 4 notarías que en la actualidad observan otro tercer certificado (violeta). Finalmente, cuando nos encontramos ante ataque, veremos que todas las notarías acceden a un certificado distinto al nuestro:


Aquí podemos observar que la llave vista por el navegador no coincide con la vista por ninguna notaría. Es más, en este caso todas ellas observan la misma clave. Por tanto, Perspectives nos permite averiguar si estamos siendo objeto de un ataque comparando nuestra perspectiva de la red con la perspectiva de los notarios.



APARTADO 4. REFERENCIAS

- Firmas digital - http://es.wikipedia.org/wiki/Firma_digital
- Extended Validation Certificate - http://en.wikipedia.org/wiki/Extended_Validation_Certificate
- ettercap - http://ettercap.github.com/ettercap/
- Envenenamiento DNS - http://es.wikipedia.org/wiki/DNS_cache_poisoning
- TurkTrust: Algunas reflexiones sobre el último 'CA Gate' -http://www.securitybydefault.com/2013/01/algunas-reflexiones-sobre-el-ultimo-ca.html
- Informe forense sobre el caso DigiNotar - http://www.rijksoverheid.nl/documenten-en-publicaties/rapporten/2011/09/05/diginotar-public-report-version-1.html
- Proyecto HashClash - http://www.win.tue.nl/hashclash/
- Cache missing for fun and profit - http://www.daemonology.net/papers/htt.pdf
- Cache timing attacks on AES - http://cr.yp.to/antiforgery/cachetiming-20050414.pdf
- SSL Cop - http://www.security-projects.com/?SSLCop
- Convergence - http://convergence.io