Este post es una
recopilación de herramientas de seguridad informática para el
protocolo SSL. En concreto para tres tipos de técnicas: MITM
(man-in-the-middle), Test de penetración y Hardening.
MITM (man-in-the-middle):
Para
realizar la técnica de MiTM en SSL las herramientas: SSL Diagnos,
Sslstrip, SSLsplit. y LittleBlackBox.
SSL
Diagnos.
Diseñada para probar la seguridad de SSL y
obtener información acerca de los protocolos SSL (pct, SSL2, SSL3,
tls, DTLS) y conjuntos de cifrado utilizados en un servidor. También
puede ser utilizado para probar y valorar el nivel de seguridad de
los cifrados en clientes SSL.
Cuenta con un apoyo específico
para los protocolos POP3S, SIP, SMTP y FTPS. Por otra parte incluye
una herramienta independiente, SSLPressure, para comprobar todo el
espectro de posibles protocolos SSL en un servidor.
SSL
Diagnos se puede utilizar para probar el protocolo SSL en servidores
Microsoft SQL Server y también permite realizar MitM en conexiones
cliente servidor de Microsoft SQL Server.
Entre sus
características destaca:
-
Incluye calificación de nivel
de seguridad de cifrado SSL para el servidor y los clientes.
-
Test de cifrado SSL en: HTTPS,
SMTP, SIP, POP3S, FTPS.
-
Puede ser utilizado para
OWASP-CM-001.
-
Utiliza OpenSSL para probar
SSL2, SSL3, TLS, DTLS, FTPS.
-
Pruebas de renegociación y
disponibilidad de extensión de renegociación tls.
-
Las pruebas específicas para la mitigación de BEAST
(CVE-2011-3389). Comprobación específicamente de la mitigación
para Windows y OpenSSL.
Ejemplos básicos de empleo:
Obtener ayuda de uso del
comando:
ssldiagnos.exe –help
Prueba el
anfitrión www.hostname.org utilizando el puerto 443 (que es el valor
predeterminado) y prueba enviar/recibir:
ssldiagnos.exe -t
www.hostname.org --testsend -p 443
Prueba todos los tipos
de negociación de cifrado SSL2 y SSL3 en
192.168.1.1:
sslpressure.exe -t 192.168.1.1
Más
información y descarga de SSL
Diagnos:
http://ssldiagnos.sourceforge.net/
Sslstrip.
Una herramienta para realizar ataques MITM en SSL, capaz de
secuestrar el tráfico HTTPS de forma transparente en una red, ver
los enlaces HTTPS, y a continuación, asignar esos vínculos a
cualquiera semejanza de enlaces HTTP o HTTPS. También es compatible
con los modos de suministro: de un favicon que se parece a un icono
de bloqueo, login selectivo y negación de la sesión.
Desempaquetar:
tar zxvf
sslstrip-0.5.tar.gz
Instalación:
Se requiere Python
2.5 o más reciente, junto con el módulo de python ‘twisted’.
sudo
apt-get install python-twisted-web
Ejecutar:
sudo
python setup.py install
Sslstrip se puede ejecutar
desde el directorio sin necesidad de instalación. Sólo se tiene que
ejecutar 'python sslstrip.py -h' para obtener opciones de línea de
comandos.
Para poner en marcha el ataque MITM en SSL, se
siguen los siguientes pasos:
1) Poner la máquina en modo de
transmisión (como root):
echo " 1 "> /
proc/sys/net/ipv4/ip_forward
2) Configuración iptables
para interceptar las peticiones HTTP (como root) :
iptables -t
nat -A PREROUTING -p tcp - destination-port 80 -j REDIRECT - to- port
8080
3) Ejecutar sslstrip con las opciones de línea de
comandos:
python sslstrip.py - 8080
4) Ejecutar
arpspoof para redirigir el tráfico de la victima la máquina
atacante (como root):
arpspoof -i -t <dispositivo de red>
<ip destino a atacar> <ip del router>
Más
información y descarga de
sslstrip:
https://github.com/moxie0/sslstrip
SSLsplit.
Es una herramienta para ataques MITM (man-in- the-middle)
en conexiones de red cifradas en SSL / TLS. Las conexiones se
interceptan de forma transparente a través de un motor de traducción
de dirección de red redirigido a SSLsplit. La herramienta termina
SSL / TLS e inicia una nueva conexión SSL / TLS con la dirección
original de destino, mientras se registran todos los datos
transmitidos. SSLsplit está destinado al análisis forense de red y
pruebas de penetración.
SSLsplit trabaja con los protocolo
TCP, SSL, HTTP y HTTPS, a través de IPv4 e IPv6 . Para las
conexiones SSL y HTTPS, genera certificados X509v3 sobre la marcha,
con base en el certificado de servidor original Subject DN y
extensión subjectAltName . SSLsplit apoya plenamente Name Server
Indicación (SNI ) y es capaz de trabajar con RSA , DSA y las claves
ECDSA, DHE y Suites de cifrado ECDHE. SSLsplit también pueden usar
certificados existentes del que se disponga la clave privada, en
lugar de generarlo. También soporta certificados NC NULL -prefix y
puede denegar las solicitudes de OCSP de forma genérica. Elimina las
cabeceras de respuesta HPKP con el fin de evitar el bloqueo de clave
pública.
SSLsplit depende del OpenSSL y bibliotecas 2.x
libevent. La instalación depende de GNU make y un ambiente POSIX.2
en `PATH '. Las pruebas unitarias opcionales dependen de la
biblioteca de verificación.
SSLsplit actualmente soporta los
siguientes sistemas operativos y mecanismos de NAT:
-
FreeBSD: rdr pf y desviar a ,
ipfw fwd , rdr ipfilter.
-
OpenBSD : pf rdr -to y
divert-to.
-
Linux: REDIRECT netfilter y
TPROXY.
-
Mac OS X : ipfw rdr fwd y pf ( experimental).
Instalación:
Para descargar
y compilar SSLsplit, se ejecutan los siguientes comandos:
wget
http://mirror.roe.ch/rel/sslsplit/sslsplit-0.4.7.tar.bz2
bunzip2
sslsplit-0.4.7.tar.bz2
tar xvf sslsplit-0.4.7.tar
cd
sslsplit-0.4.7
make
apt- get install libssl-dev
libevent-dev
mkdir /tmp/sslsplit
El directorio temporal
creado en /tmp/sslsplit más tarde se utiliza para vaciar el archivo
de registro de conexión y los datos brutos de los sockets SSL
entrantes y salientes.
SSLsplit actua como un intermediario
para conexiones SSL , debe ser capaz de generar y firmar los
certificados que recibe la víctima. Para ello, la víctima debe
tener certificado de CA raíz del atacante. En función del tipo de
cliente (navegador de web , un teléfono móvil ) , la instalación
de certificados raíz difiere un poco.
Si aún no dispone de
una clave privada de la CA autofirmado y el certificado, puede
generar uno usando los siguientes comandos:
openssl genrsa
-out ca1.key 4096
openssl req -new -x509 -days 1826 -key ca1.key
-out ca2.crt
El primer comando genera una clave privada
RSA de 4096 bits en formato PEM (ca1.key ), y el segundo comando usa
su clave privada para generar un certificado raíz CA autofirmado (
ca2.crt ) . Más tarde ambos son necesarios por SSLsplit, pero sólo
el archivo del certificado tiene que ser instalado en el navegador o
el sistema operativo de la víctima.
Desviar
tráfico:
Ejecutar arpspoof para redirigir el tráfico de la
víctima a la máquina atacante (como root):
arpspoof -i -t
<dispositivo de red> <ip destino a atacar> <ip del
router>
En este caso SSLsplit va a correr en dos
puertos : 8080 para las conexiones TCP que no son SSL , tales como
HTTP , SMTP o FTP, y 8443 para las conexiones SSL tales como SMTP
sobre SSL , HTTPS, etc. Se utiliza el NAT de iptables con el
fin de enviar los paquetes que llegan a la máquina del atacante a
estos puertos internos.
sysctl -w=1
net.ipv4.ip_forward
iptables -t nat -F
iptables -t nat -A
PREROUTING -p tcp - dport 80 -j REDIRECT - to-ports 8080
iptables
-t nat -A PREROUTING -p tcp - dport 443- j REDIRECT - to-ports
8443
iptables -t nat -A PREROUTING -p tcp - dport 587- j REDIRECT
- to-ports 8443
iptables -t nat -A PREROUTING -p tcp - dport 465-
j REDIRECT - to-ports 8443
En este ejemplo, ciertos
paquetes se redirigen al puerto local 8080 y 8443. Paquetes para el
tráfico de texto plano en los puertos HTTP ( 80 ), se
redirigen al puerto 8080 , y los paquetes para el tráfico basado en
SSL en los puertos HTTPS ( 443 ), SMTP a través de SSL ( 465 y 587 )
son redirigidos al puerto 8443.
Ejecutar SSLsplit:
Una
vez que el reenvío de IP está activo y los paquetes se está
remitiendo a los puertos pertinentes, puede empezar SSLsplit . Para
el caso de este ejemplo, una configuración de parámetro ajustada al
caso sería algo como esto:
./sslsplit
- D
-l
connections.log
-j /tmp/sslsplit/
-S logdir /
-k
ca1.key
-C ca2.crt
ssl 0.0.0.0 8443
tcp 0.0.0.0 8080
Este
comando inicia SSLsplit en modo de depuración (-D) y da salida de
los intentos de conexión en el archivo de registro "connections.log"
(-l) . El contenido real de las conexiones se escribe en el
directorio "/tmp/sslsplit/logdir/" (-j y -S) cada
flujo TCP entrante/saliente de cada conexión en un archivo separado.
Más información y
descarga:
https://github.com/droe/sslsplit
LittleBlackBox.
Muchos
dispositivos de red, utilizan para cifrar sus conexiones SSL, llaves
hard-coded almacenadas en su firmware, de esta forma, dos routers que
tengan el mismo firmware utilizaran las mismas llaves para cifrar sus
conexiones SSL. Esto significa que si capturamos la llave privada del
firmware es posible descifrar todo el trafico encriptado en
SSL.
Existe una herramienta llamada LittleBlackBox que
contiene una base de datos donde se correlacionan llaves privadas de
SLL, con sus respectivos certificados públicos, que corresponden a
determinado hardware. Esta base de datos incluye más de 2 millones
llaves privadas tanto de SSL como de SSH.
Con esta herramienta
es posible identificar un dispositivo de red por su certificado
público SSL. Además, dado un certificado público, la herramienta
busca en la base de datos para considerar si tiene una llave privada
correspondiente; si es así, la llave privada se puede utilizar con:
Wireshark o SSLsniff, para descifrar tráfico o para realizar ataques
de MITM.
Con LittleBlackBox podemos auditar la seguridad del
cifrado SSL que utilizan nuestros dispositivos de red. Para mejorar
la seguridad de cifrado SSL de nuestros dispositivos de red lo mejor
es cambiar los certificados SSL que utilizan por defecto (esta medida
es posible en muchos dispositivos).
Más información y
descarga de
LittleBlackBox:
http://code.google.com/p/littleblackbox/
Más
información y descarga de Wireshark:
http://www.wireshark.org
Más
información y descarga de
SSLsniff:
http://www.thoughtcrime.org/software/sslsniff/
Test
de penetración:
Para realizar test de
penetración en el protocolo SSL las herramienas: SSLSmart,
SSLDigger, SSLScan y SSL Audit.
SSLSmart.
Ofrece
una amplia gama de características para mejorar la eficiencia de las
pruebas y reducir los falsos positivos. Durante el saludo inicial
SSL, el servidor web y el navegador negocian el conjunto de cifrado
que se utilizará para el canal de comunicación. Si tanto el
navegador y el servidor soportan un juego de cifrado común, se
establece un canal de comunicación para la transferencia de datos.
Si no, el resultado final es uno de los dos escenarios siguientes:
-
El servidor Web finaliza la
conexión durante el saludo inicial y no se transfieren datos.
-
Servidor Web completa los datos mínimos del apretón de
manos, transfiere en forma de una página de error y termina la
conexión. Cualquier futuro intento con estos conjuntos de cifrado
no compatibles, se encuentran con el mismo resultado.
Dado que se establece una conexión
SSL completa y los datos se transfieren en el segundo escenario
anterior, la mayoría de las herramientas de prueba de SSL
(incluyendo escáneres comerciales) pueden concluir falsamente, que
el conjunto de cifrado es compatible. Por tanto, es importante, que
los que testean las vulnerabilidades puedan ver la respuesta del
servidor real para cada conjunto de cifrado.
SSLSmart ofrece
dos tipos diferentes de análisis para investigar y eliminar los
falsos positivos debido a este comportamiento:
Content Scan
(por defecto):
Respuesta del servidor exacta que se puede ver en
HTML y Textforms para cada suite de cifrado seleccionada para la URL
a probar.
Connect Scan:
Se centra sólo en el éxito o el
fracaso de conexión de socket SSL con varios conjuntos de cifrado.
Este comportamiento no ofrece ninguna ventaja sobre las herramientas
de prueba SSL existentes y por lo tanto, es propenso a tener
problemas similares con los falsos positivos. Sin embargo, esta
exploración es más rápida y consume menos recursos de red y
CPU.
Más información y descarga de
SSLSmart:
http://www.mcafee.com/us/downloads/free-tools/sslsmart.aspx
SSLDigger.
Es
una herramienta para evaluar la seguridad de los servidores SSL
mediante pruebas de los cifrados soportados.
Características:
Soporte completo usando el control
del navegador Microsoft Internet Explorer.
Apoyo para el
funcionamiento de la herramienta en el modo por lotes, para operar en
varios sitios al mismo tiempo. Una función muy útil para probar un
gran número de sitios web . La entrada para que la herramienta
procese, se proporciona, en este caso a través de un archivo de
texto. El contenido de este archivo es simplemente los sitios web
separados en líneas.
La herramienta es compatible con la
presentación de informes en tres formatos diferentes. Un formato
XML, que es compatible para proporcionar acceso a los datos brutos
recogidos . El formato CSV, que permite al usuario abrir el informe
en un programa de hoja de cálculo. El formato más gráfico es el
código HTML, un informe que proporciona enlaces a las URLs que se
han probado.
Más información y descarga de
SSLDigger:
http://www.mcafee.com/us/downloads/free-tools/ssldigger.aspx
SSLScan.
Sirve
para comprobar el tipo de cifrado SSL que utiliza un servicio. Es una
herramienta para Linux que necesita el compilador GNU para C y la
libreria OpenSSL.
Modo de empleo:
Comando:
sslscan
[opciones] [host: puerto]
Opciones:
--targets=
Sirve para pasarle un archivo que contiene una lista de host para
chequear. Los host se pueden suministrar con puertos puertos (es
decir host: puerto).
--no-failed
No muestra los tipos de
cifrado que no acepta el host.
--ssl2
Comprueba solamente
el cifrado SSLv2.
--ssl3
Comprueba solamente el cifrado
SSLv3.
--tls1
Comprueba solamente el cifrado TLSv1.
--pk=
Sirve para pasarle un archivo PKCS#12.
--pkpass=
La
contraseña para PKCS#12.
--certs=
Pasarle un archivo que
contiene PEM/ASN1.
--starttls
Introducir un STARTTLS para
servicios smtp.
--HTTP
Prueba una conexión del HTTP.
--
bugs
Buscar bugs en SLL.
--xml=
Mostrar resultados de
la salida en archivo de XML.
Más información y descarga de
SSLScan:
https://www.titania.co.uk/index.php?option=com_content&view=article&id=56&Itemid=68
SSL
Audit.
Es otra herramienta para comprobar el tipo de
cifrado SSL. Que incorpora posibilidades de Fingerprint para
identificar el motor SLL del servidor, esta última opción es
experimental y según el autor reporta falsos
positivos.
Identifica:
• IIS7.5 (Schannel).
•
IIS7.0 (Schannel).
• IIS 6.0 (Schannel).
• Apache
(Openssl).
• Apache (NSS).
• Certicom.
• RSA
BSAFE.
Documentación de SSL
Audit:
http://www.g-sec.lu/sslaudit/documentation.pdf
Descarga
de SSL
Audit:
http://www.g-sec.lu/sslaudit/sslaudit.zip
Hardening:
Dos
aplicaciones una para Windows Harden SSL/TLS y otra para Linux
Duraconf.
Harden SSL/TLS.
Una aplicación
que permite mejorar la seguridad de SSL/TLS de las versiones de
Windows 2000, 2003, 2008, 2008 R2, XP, Vista y 7. Esta aplicación
permite establecer a nivel local y remota políticas basadas en
permitir o denegar ciertos hashes o conjuntos de cifrado, establecer
prioridades y modificar parámetros de la caché de sesión
TLS.
Harden SSL / TLS permite realizar políticas específicas
de ajuste con respecto a los cifrados y los protocolos que estén
disponibles para aplicaciones que utilizan el interfaz SCHANNEL de
criptografía, ya sean aplicaciones cliente o servidor. Una gran
cantidad de aplicaciones de Windows utilizan esta interfaz, por
ejemplo: Google Chrome, Safari de Apple… Al cambiar la
configuración indirectamente se puede controlar que cifrados pueden
utilizar estas aplicaciones. Teniendo en cuenta que una aplicación
puede solicitar un conjunto específico de sistemas de cifrado, y si
se ha desactivado este conjunto ya no puede usarlo.
En el modo avanzado de esta aplicación permite:
Habilitar
el modo ECC P521; Microsoft eliminó el modo ECC P521 después de
Vista y Server 2008, esta opción permite volver a habilitar y volver
a introducir el modo ECC P521 para Windows 7 y Server 2008R2.
Habilitar soporte módulo 1; Cuando un servidor Web utiliza
un certificado con un exponente 1 de clave pública RSA, el exponente
de la clave privada también se pone a 1. Si estas condiciones están
presentes, la conexión no tiene la seguridad de encriptación. Al
habilitar esta se configura el cliente para permitir una conexión a
un servidor Web que utiliza un certificado con un exponente 1 de
clave pública RSA.
Modificar el tiempo de la cache TLS /
SSL; Una de las razones para cambiar el valor predeterminado de la
caché de sesión SSL es obligar al cliente a autenticar con más
frecuencia. El frecuente almacenamiento en caché es útil a veces,
por ejemplo, si se desea reducir el esfuerzo computacional o si se
sabe que el cliente está utilizando una tarjeta inteligente y desea
que la página web sea accesible sólo cuando el usuario inserta la
tarjeta inteligente en el lector.
Tamaño de la cache TLS /
SSL; IIS mantiene los objetos en memoria para el seguimiento de cada
conexión a la web de entrada. Después de cinco minutos de tiempo de
inactividad, estos objetos son destruidos para reclamar los recursos.
Durante este proceso, IIS purga el ID de sesión SSL / TLS de la
tabla sesión ID de la caché del sistema operativo. IIS también
purga toda la información de conexión que se negocia entre el
cliente y el servidor. Cuando un cliente intenta reanudar una sesión
de SSL / TLS mediante el identificador de sesión anterior, el
servidor no puede encontrar la información de conexión en la
memoria caché. Por lo tanto, el cliente debe renegociar la conexión.
Además, el cliente debe obtener un nuevo identificador de sesión.
El aumento del tamaño de la caché puede reducir la carga de la CPU,
pero aumenta el uso de memoria, cada elemento de caché de la sesión
normalmente requiere de 2 a 4 Kb de memoria.
Más información
de Harden SSL /
TLS:
http://www.g-sec.lu/sslharden/documentation.pdf
Descarga
de Harden SSL /
TLS:
http://www.g-sec.lu/sslharden/HardenSSL.zip
Duraconf.
Una
colección de archivos de configuración para hardening de servicios
SSL/TLS en Linux. Desafortunadamente, no es posible implementar una
configuración de cifrado optimo para todas las aplicaciones. Hay
muchos programas diferentes que aplican diferentes versiones de
bibliotecas que tienen diferentes sistemas de cifrado. De hecho, a
diferentes versiones del mismo programa pueden estar vinculados
contra diferentes bibliotecas que tienen diferentes sistemas de
cifrado. Pero si es posible afinar la configuración con Duraconf que
posee archivos de configuraciones especificas para los servicios SSL:
-
varnish.
-
stunnel.
-
ejabberd.
-
MTAs (postfix, exim, etc.).
-
IPSec.
-
imap/pop (courier/dovecot).
-
openssh.
Más información y descarga de
Duraconf:
https://github.com/ioerror/duraconf
Publicado por Álvaro
Paz