<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HiperGalaxia &#187; Seguridad</title>
	<atom:link href="http://www.hipergalaxia.org/blog/tag/seguridad/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hipergalaxia.org/blog</link>
	<description>El conocimiento, la frontera final.</description>
	<lastBuildDate>Thu, 09 Feb 2012 07:23:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Construír e instalar Firesheep en GNU/Linux Ubuntu 10.10</title>
		<link>http://blog.jorgeivanmeza.com/2010/11/construir-e-instalar-firesheep-en-gnulinux-ubuntu-10-10/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=construir-e-instalar-firesheep-en-gnulinux-ubuntu-10-10</link>
		<comments>http://blog.jorgeivanmeza.com/2010/11/construir-e-instalar-firesheep-en-gnulinux-ubuntu-10-10/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=construir-e-instalar-firesheep-en-gnulinux-ubuntu-10-10#comments</comments>
		<pubDate>Thu, 25 Nov 2010 03:54:27 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[10.10]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Firesheep]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Linux/Solaris/BSD]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=12366</guid>
		<description><![CDATA[Introducción. Firesheep es un plugin de Firefox que permite fácilmente secuestrar sesiones HTTP en ciertas condiciones y de ciertas aplicaciones web gracias a que estas utilizan el protocolo seguro de transporte HTTPS únicamente durante la autenticación, transmitiendo el resto de la información plana permitiendo que otros usuarios se apoderen de la información de la sesión [...]]]></description>
			<content:encoded><![CDATA[<h2>Introducción.</h2><p><a href="http://codebutler.com/firesheep" ></a><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/firesheep.jpg"><img class="alignleft size-full wp-image-12368" title="firesheep" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/firesheep.jpg" alt="" width="140" height="140" /></a>Firesheep es un <em>plugin</em> de Firefox que permite fácilmente secuestrar sesiones HTTP en ciertas condiciones y de ciertas aplicaciones web gracias a que estas utilizan el protocolo seguro de transporte HTTPS únicamente durante la autenticación, transmitiendo el resto de la información plana permitiendo que otros usuarios se apoderen de la información de la sesión de usuario y puedan acceder a sitios como Facebook, Twitter y blogs de WordPress entre otros con las credenciales del usuario afectado.  Esto es notoriamente grave en las inalámbricas públicas que pueden ser accedidas sin autenticación alguna.</p><p>La solución a esta debilidad de las aplicaciones web será entonces utilizar el protocolo HTTPS durante toda la sesión del usuario, no sólamente durante la autenticación como estas aplicaciones afectadas hacen actualmente.  Como protección desde el lado del usuario es posible utilizar <em>plugins</em> como <a href="https://www.eff.org/https-everywhere" >HTTPS Everywhere</a> que obligan al navegador a utilizar el protocolo HTTPS todo el tiempo que se acceda a determinados sitios web.  De igual manera han aparecido aplicaciones que prometen detectar y combatir el uso de Firesheep en las redes y con las que estaré experimentando próximamente.</p><p>Actualmente este <em>plugin</em> puede <a href="http://codebutler.github.com/firesheep/" >descargarse para Firefox bajo Windows y OSX</a>, la versión para Linux no se encuentra actualmente disponible, sin embargo como el proyecto es de código abierto es muy fácil obtener el código y compilarlo para esta plataforma tal y como se describe a continuación.</p><h2>Construír el software.</h2><h3>Instalar <em>git</em>.</h3><p>El cliente de git es necesario para acceder al código fuente del <em>plugin</em> que se encuentra almacenado en un <a href="https://github.com/codebutler/firesheep" >repositorio de GitHub</a>.</p><p><span style="font-family: courier new,courier;">$ sudo aptitude install git-core</span></p><h3>Obtener el código fuente.</h3><p><span style="font-family: courier new,courier;">$ mkdir /tmp/firesheep &amp;&amp; cd /tmp/firesheep</span></p><p><span style="font-family: courier new,courier;">$ git clone https://github.com/codebutler/firesheep.git</span></p><p><span style="font-family: courier new,courier;">$ cd firesheep</span></p><p><span style="font-family: courier new,courier;">$ git submodule update --init</span></p><h3>Instalar las dependencias.</h3><p>Estos paquetes son necesarios para la construcción del <em>plugin</em> a partir de su código fuente.</p><p><span style="font-family: courier new,courier;">$ sudo apt-get install autoconf libtool libpcap-dev libboost-all-dev libhal-dev xulrunner-1.9.2-dev</span></p><h3>Construír el <em>plugin</em>.</h3><p><span style="font-family: courier new,courier;">$ ./autogen.sh </span></p><p><span style="font-family: courier new,courier;">$ make</span></p><h2>Instalar el software.</h2><p>Desde Firefox elija la opción de abrir un archivo (CTRL+O).</p><p style="padding-left: 30px;">File &gt; Open File...</p><p>Y seleccione el archivo <span style="font-family: courier new,courier;">/tmp/firesheep/firesheep/build/firesheep.xpi</span>.</p><h2>Usar el software.</h2><p>Una vez activado el <em>plugin</em> este puede visualizarse como una barra lateral mediante View &gt; Firesheep o la combinación de teclas CTRL+SHIFT+S.</p><div id="attachment_12369" class="wp-caption aligncenter" style="width: 699px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/Firesheep-Mozilla-Firefox_006.png"><img class="size-full wp-image-12369" title="Firesheep - Mozilla Firefox_006" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/Firesheep-Mozilla-Firefox_006.png" alt="Firesheep en Ubuntu 10.10" width="689" height="528" /></a><p class="wp-caption-text">Firesheep en Ubuntu 10.10</p></div><p>Su uso es muy sencillo, simplemente presione el botón <em>Start capturing</em> y espere a que la aplicación capture la información de las sesiones en la red, las cuales aparecerán en la barra lateral situada al lado izquierdo.</p><h2>Enlaces.</h2><ul><li>Firesheep plugin.<br /> <a href="http://codebutler.com/firesheep" >http://codebutler.com/firesheep</a></li><li>Firesheep en GitHub<br /> <a href="https://github.com/codebutler/firesheep" >https://github.com/codebutler/firesheep</a></li><li>Firesheep: Add-on the Firefox que permite el hijacking de sessiones HTTP<br /> <a href="http://blogs.eset-la.com/laboratorio/2010/10/27/firesheep-add-on-the-firefox-que-permite-el-hijacking-de-sessiones-http/" >http://blogs.eset-la.com/laboratorio/2010/10/27/firesheep-add-on-the-firefox-que-permite-el-hijacking-de-sessiones-http/</a></li><li>HTTPS Everywhere, Firefox plugin.<br /> <a href="https://www.eff.org/https-everywhere" >https://www.eff.org/https-everywhere</a></li></ul><p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://blog.jorgeivanmeza.com/2010/11/construir-e-instalar-firesheep-en-gnulinux-ubuntu-10-10/&amp;layout=box_count&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=65&amp;font=lucida+grande' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:450px; height:65px'></iframe></p><fb:share -button href="http://blog.jorgeivanmeza.com/2010/11/construir-e-instalar-firesheep-en-gnulinux-ubuntu-10-10/" type="box_count"></fb:share>]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2010/11/construir-e-instalar-firesheep-en-gnulinux-ubuntu-10-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar un firewall personal en GNU/Linux Ubuntu 10.10</title>
		<link>http://blog.jorgeivanmeza.com/2010/11/instalar-un-firewall-personal-en-gnulinux-ubuntu-10-10/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=instalar-un-firewall-personal-en-gnulinux-ubuntu-10-10</link>
		<comments>http://blog.jorgeivanmeza.com/2010/11/instalar-un-firewall-personal-en-gnulinux-ubuntu-10-10/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=instalar-un-firewall-personal-en-gnulinux-ubuntu-10-10#comments</comments>
		<pubDate>Tue, 02 Nov 2010 19:16:54 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[gufw]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Linux/Solaris/BSD]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[ufw]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=11310</guid>
		<description><![CDATA[Introducción. A pesar de las apariencias iniciales, Ubuntu si incluye un firewall sólo que este no incluye reglas ya que por defecto no vienen servicios abiertos.  El firewall incluído es Netfilter y para él se incluye además una herramienta que facilita su administración llamada Uncomplicated Firewall (ufw). Esta herramienta es muy sencilla de usar, sin [...]]]></description>
			<content:encoded><![CDATA[<h2>Introducción.</h2><p><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/gufw_logo.png"><img class="alignleft size-full wp-image-11311" title="gufw_logo" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/gufw_logo.png" alt="" width="55" height="55" /></a>A pesar de las apariencias iniciales, Ubuntu si incluye un firewall sólo que este no incluye reglas ya que por defecto no vienen servicios abiertos.  El firewall incluído es <a href="http://www.netfilter.org/" >Netfilter</a> y para él se incluye además una herramienta que facilita su administración llamada <a href="https://wiki.ubuntu.com/UncomplicatedFirewall" >Uncomplicated Firewall (<span style="font-family: courier new,courier;">ufw</span>)</a>.</p><p>Esta herramienta es muy sencilla de usar, sin embargo es de línea de comando y esto en algunas ocasiones la hace mas compleja de utilizar.  Para esto se incluye en los repositorios de Ubuntu a <span style="font-family: courier new,courier;"><a href="http://gufw.tuxfamily.org/" >gufw</a></span> el cual es un <em>front-end</em> grafico para <span style="font-family: courier new,courier;">ufw</span>.</p><h2>Instalación y ejecución de <em>gufw</em>.</h2><p><span style="font-family: courier new,courier;">$ sudo aptitude install gufw</span></p><p>Para ejecutarlo acceda a la aplicación a través de los siguientes menúes.</p><p style="padding-left: 30px;"><strong>System</strong> &gt; <strong>Administration</strong> &gt; <strong>Firewall Configuration</strong>.</p><h2>Funcionalidades de <em>gufw</em>.</h2><p>En la ventana inicial de la aplicación es posible activarlo y desactivarlo, definir las políticas generales de entrada y salida, y las reglas o excepciones específicas.</p><div id="attachment_11312" class="wp-caption aligncenter" style="width: 408px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/Firewall_001.png"><img class="size-full wp-image-11312" title="Firewall_001" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/Firewall_001.png" alt="Ventanan inicial de gufw" width="398" height="368" /></a><p class="wp-caption-text">Ventanan inicial de gufw</p></div><p>Generalmente la política utilizada es <em>nada entra-todo sale</em>, es decir, se confía en el uso que las aplicaciones de la máquina va a hacer de la red.  Una aproximación mas segura sería la mas restrictiva de <em>nada entra-nada sale</em> pero sería necesario especificar uno a uno los sitios a los cuales se realizará conexión (incluyendo los sitios web!) así como efectivamente será necesario hacerlo para las conexiones entrantes.</p><p>Las reglas pueden crearse utilizando tres aproximaciones que van desde la mas simple en la que se eligen aplicaciones o servicios predefinidos, pasando por una intermedia en la que es posible especificar puertos y o eligiendo una opción avanzada con la cual no solo es posible elegir puertos sino que también es posible establecer rangos de direcciones IP.</p><div id="attachment_11313" class="wp-caption aligncenter" style="width: 594px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/Add-Rule_002.png"><img class="size-full wp-image-11313" title="Add Rule_002" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/Add-Rule_002.png" alt="Creación de reglas con gufw" width="584" height="195" /></a><p class="wp-caption-text">Creación de reglas con gufw</p></div><p>También es posible verificar el registro del servicio del cual puede determinarse su nivel de profundidad.</p><div id="attachment_11314" class="wp-caption aligncenter" style="width: 600px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/Log_003.png"><img class="size-full wp-image-11314" title="Log_003" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/Log_003.png" alt="Registro de eventos con gufw" width="590" height="292" /></a><p class="wp-caption-text">Registro de eventos con gufw</p></div><h2>Conclusión.</h2><p>Existen otras soluciones de firewall para Linux mas elaboradas que <span style="font-family: courier new,courier;">ufw</span> (como por ejemplo <a href="http://www.zentyal.org/" >Zentyal</a>, antes <em>ebox</em>), sin embargo su combinación con <span style="font-family: courier new,courier;">gufw</span> es suficiente para las necesidades de filtrado de la mayoría de los escritorios.</p><h2>Enlaces.</h2><ul><li>Firewall en Ubuntu Documentation.<br /> <a href="https://help.ubuntu.com/10.10/serverguide/C/firewall.html" >https://help.ubuntu.com/10.10/serverguide/C/firewall.html</a></li><li>Uncomplicated Firewall.<br /> <a href="https://wiki.ubuntu.com/UncomplicatedFirewall" >https://wiki.ubuntu.com/UncomplicatedFirewall</a></li><li>ufw en LaunchPad.<br /> <a href="https://launchpad.net/ufw" >https://launchpad.net/ufw</a></li><li>Gufw easy to use Ubuntu Firewall.<br /> <a href="http://gufw.tuxfamily.org/" >http://gufw.tuxfamily.org/</a></li></ul> ]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2010/11/instalar-un-firewall-personal-en-gnulinux-ubuntu-10-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cifrado y descifrado asimétrico con RSA utilizando C#/Mono</title>
		<link>http://blog.jorgeivanmeza.com/2010/11/cifrado-y-descifrado-asimetrico-con-rsa-utilizando-cmono/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cifrado-y-descifrado-asimetrico-con-rsa-utilizando-cmono</link>
		<comments>http://blog.jorgeivanmeza.com/2010/11/cifrado-y-descifrado-asimetrico-con-rsa-utilizando-cmono/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cifrado-y-descifrado-asimetrico-con-rsa-utilizando-cmono#comments</comments>
		<pubDate>Tue, 02 Nov 2010 02:58:36 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[asimétrico]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[cifrado]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[Linux/Solaris/BSD]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[RSA]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=11295</guid>
		<description><![CDATA[Introducción. En criptografía, RSA (Rivest, Shamir y Adleman) es un sistema criptográfico de clave pública desarrollado en 1977. En la actualidad, RSA es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. La seguridad de este algoritmo radica en el problema de la factorización de [...]]]></description>
			<content:encoded><![CDATA[<h2>Introducción.</h2><p style="padding-left: 30px;">En criptografía, RSA (Rivest, Shamir y Adleman) es un sistema criptográfico de clave pública desarrollado en 1977. En la actualidad, RSA es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente.</p><p style="padding-left: 30px;">La seguridad de este algoritmo radica en el problema de la factorización de números enteros. Los mensajes enviados se representan mediante números, y el funcionamiento se basa en el producto, conocido, de dos números primos grandes elegidos al azar y mantenidos en secreto. Actualmente estos primos son del orden de 10200, y se prevé que su tamaño aumente con el aumento de la capacidad de cálculo de los ordenadores.</p><p style="padding-left: 30px;">Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.</p><p style="padding-left: 30px;">Se cree que RSA será seguro mientras no se conozcan formas rápidas de descomponer un número grande en producto de primos. La computación cuántica podría proveer de una solución a este problema de factorización.</p><p style="text-align: right;">Tomado del artículo <a href="http://es.wikipedia.org/wiki/RSA" >RSA</a> de Wikipedia.</p><h2>Implementación.</h2><p>La aplicación de demostración de esta técnica requiere del uso de por lo menos los siguientes <em>namespaces</em>.</p><pre class="c#">using System;
using System.IO;
using System.Security;
using System.Security.Cryptography;</pre><h3>Proveedor del servicio de cifrado RSA.</h3><p>El núcleo de la implementación es el objeto <span style="font-family: 'courier new', courier;">RSACryptoServiceProvider</span> que realiza las labores de cifrado/descifrado de información.</p><pre class="c#">public static RSACryptoServiceProvider rsa;</pre><h3>Establecer los valores iniciales del servicio.</h3><p>En este punto se establecen los valores iniciales de configuración del servicio, los cuales son en su mayoría opcionales, y se instancia el objeto mencionado anteriormente.</p><pre class="c#">const string CONTAINER_NAME = "ContenedorRSA";
CspParameters cspParams;
cspParams = new CspParameters(1);	// PROV_RSA_FULL
cspParams.Flags = CspProviderFlags.UseDefaultKeyContainer;
cspParams.KeyContainerName = CONTAINER_NAME;
// Instanciar el algoritmo de cifrado RSA
rsa = new RSACryptoServiceProvider(cspParams);</pre><h3>Generar las llaves.</h3><p>En esta etapa se crea una pareja de llaves: pública y privada, para las labores de cifrado.  Estas se almacenan por conveniencia en formato XML en los archivos <span style="font-family: 'courier new', courier;">llave_publica.xml</span> y <span style="font-family: 'courier new', courier;">llave_privada.xml</span> correspondientemente.</p><pre class="c#">// Generar y almacenar la llave pública
writer = new StreamWriter(@"llave_publica.xml");
string publicOnlyKeyXML = rsa.ToXmlString(false);
writer.Write(publicOnlyKeyXML);
writer.Close();
// Generar y almacenar la llave privada
writer = new StreamWriter(@"llave_privada.xml");
string publicPrivateKeyXML = rsa.ToXmlString(true);
writer.Write(publicPrivateKeyXML);
writer.Close();</pre><h3>Cargar las llaves.</h3><p>Una vez que han sido creadas y almacenadas las llaves, estas no deben ser creadas nuevamente.  Para su uso se cargan desde los correspondientes archivos XML y se asocian con el proveedor de cifrado.</p><pre class="c#">// Cargar y asociar la llave pública al proveedor de cifrado
StreamReader reader = new StreamReader(@"llave_publica.xml");
string publicOnlyKeyXML = reader.ReadToEnd();
rsa.FromXmlString(publicOnlyKeyXML);
reader.Close();
// Cargar y asociar la llave privada (y pública) al proveedor de cifrado
StreamReader reader = new StreamReader(@"llave_privada.xml");
string publicPrivateKeyXML = reader.ReadToEnd();
rsa.FromXmlString(publicPrivateKeyXML);
reader.Close();</pre><h3>Cifrar la información.</h3><p>Para realizar el <em>cifrado</em> de los datos es necesario contar con la <em>llave pública</em> del destinatario.</p><pre class="c#">cargarLlavePublica();
// Convertir el texto a cifrar (plano) a su representación en bytse
byte[] textoPlanoBytes = System.Text.Encoding.UTF8.GetBytes(textoPlano);
// Realizar el proceso de cifrado
byte[] textoCifradoBytes = rsa.Encrypt(textoPlanoBytes, false);
// Convertir el mensaje cifrado a su representación en cadena
string MensajeCifrado = Convert.ToBase64String(textoCifradoBytes);</pre><h3>Descifrar la información.</h3><p>Para <em>descifrar</em> los datos y obtener el mensaje original es necesario contar con la <em>llave privada</em> del destinatario del mensaje.</p><pre class="c#">cargarLlavePrivada();
// Convertir el texto cifrado a su representación en bytse
byte[] textoCifradoBytes = Convert.FromBase64String(textoCifrado);
// Realizar el proceso de descifrado
byte[] textoPlanoBytes = rsa.Decrypt(textoCifradoBytes, false);
// Convertir el mensaje descifrado a su representación en cadena
string MensajeDescifrado = System.Text.Encoding.UTF8.GetString(textoPlanoBytes);</pre><h2>Aplicación de demostración.</h2><div id="attachment_11297" class="wp-caption aligncenter" style="width: 691px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/MonoDevelop-External-Console_004.png"><img class="size-full wp-image-11297" title="MonoDevelop External Console_004" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/11/MonoDevelop-External-Console_004.png" alt="Aplicación de demostración del uso del algoritmo " width="681" height="208" /></a><p class="wp-caption-text">Aplicación de demostración del uso del algoritmo RSA</p></div><p><span style="font-family: 'courier new', courier;">$ gmcs &#8220;/out:RSASample.exe&#8221; &#8220;/r:/usr/lib/mono/2.0/System.dll&#8221; /t:exe &#8220;RSASample/Main.cs&#8221;</span></p><h2>Enlaces.</h2><ul><li>Aplicación de demostración de cifrado asimétrico con RSA.<br /> <a href="http://demo.jorgeivanmeza.com/NET/RSASample/" > http://demo.jorgeivanmeza.com/NET/RSASample/</a></li><li>RSA en Wikipedia.<br /> <a href="http://es.wikipedia.org/wiki/RSA" > http://es.wikipedia.org/wiki/RSA</a></li><li>RSACryptoServiceProvider Class.<br /> <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.aspx" > http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.aspx</a></li></ul> ]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2010/11/cifrado-y-descifrado-asimetrico-con-rsa-utilizando-cmono/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cifrado y descifrado simétrico con Rijndael (AES) utilizando C#/Mono</title>
		<link>http://blog.jorgeivanmeza.com/2010/10/cifrado-y-descifrado-simetrico-con-rijndael-aes-utilizando-cmono/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cifrado-y-descifrado-simetrico-con-rijndael-aes-utilizando-cmono</link>
		<comments>http://blog.jorgeivanmeza.com/2010/10/cifrado-y-descifrado-simetrico-con-rijndael-aes-utilizando-cmono/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cifrado-y-descifrado-simetrico-con-rijndael-aes-utilizando-cmono#comments</comments>
		<pubDate>Sun, 31 Oct 2010 23:07:54 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[AES]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[cifrado]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[Linux/Solaris/BSD]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[Rijndael]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[simétrico]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=11068</guid>
		<description><![CDATA[Introducción. Advanced Encryption Standard (AES), también conocido como Rijndael (pronunciado &#8220;Rain Doll&#8221; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos [...]]]></description>
			<content:encoded><![CDATA[<h2>Introducción.</h2><div style="padding-left: 30px;"><p><strong>Advanced Encryption Standard (AES)</strong>, también conocido como <strong>Rijndael</strong> (pronunciado &#8220;<em>Rain Doll</em>&#8221; en inglés), es un esquema de <strong>cifrado por bloques</strong> adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años.  Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en <strong>criptografía simétrica</strong>.</p><p>El cifrador fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y enviado al proceso de selección AES bajo el nombre &#8220;Rijndael&#8221;.</p></div><p style="text-align: right;">Tomado del artículo <em><a href="http://es.wikipedia.org/wiki/Rijndael" >Advanced Encryption Standard</a></em> de Wikipedia.</p><h2>Implementación con <em>strings</em>.</h2><p>La aplicación de demostración de esta técnica requiere del uso de por lo menos los siguientes <em>namespaces</em>.</p><pre class="c#">using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;</pre><h3>Establecer la <em>clave</em> y el <em>vector de inicio</em>.</h3><p>Estos valores pueden ser especificados manualmente o de manera automática por el <em>framework</em>.  La implementación para permitir que se definan automáticamente estos valores es la siguiente.</p><pre class="c#">Rijndael rijndael = Rijndael.Create();
byte[] key = rijndael.Key;
byte[] iv  = rijndael.IV;</pre><p>Es posible forzar la generación de nuevas claves y nuevos vectores de inicio para el algoritmo utilizando los métodos <span style="font-family: 'courier new', courier;">rijndael.GenerateKey()</span> y <span style="font-family: 'courier new', courier;">rijndael.GenerateIV()</span> respectivamente.</p><p>Si por el contrario se desea especificar estos valores manualmente su implementación es la siguiente siendo <span style="font-family: 'courier new', courier;">strKey</span> y <span style="font-family: 'courier new', courier;">strIv</span>, la clave y el vector de inicialización como cadenas de texto.</p><pre class="c#">byte[] key = UTF8Encoding.UTF8.GetBytes(strKey);
byte[] iv  = UTF8Encoding.UTF8.GetBytes(strIv);</pre><p>Especificando estos valores manualmente es necesario garantizar que sus longitudes sean válidas para el algoritmo.  En este caso se utilizará una longitud de clave de 32 bits y una longitud de vector de inicio de 16 bits.</p><pre class="c#">int keySize = 32;
int ivSize = 16;
Array.Resize(ref key, keySize);
Array.Resize(ref iv, ivSize);</pre><h3>Cifrado de cadenas de texto.</h3><p>Para cifrar la información se requiere de los siguientes parámetros.</p><ol><li>Cadena de texto con los datos a cifrar.</li><li>Clave.</li><li>Vector de inicio.</li></ol><p>El proceso retornará finalmente una cadena de texto con los datos cifrados.</p><pre class="c#">/**
 * Cifra una cadena texto con el algoritmo de Rijndael
 *
 * @param	plainMessage	mensaje plano (sin cifrar)
 * @param	Key		        clave del cifrado para Rijndael
 * @param	IV		        vector de inicio para Rijndael
 * @return	string		        texto cifrado
 */
public static string encryptString(String plainMessage, byte[] Key, byte[] IV)
{
    // Crear una instancia del algoritmo de Rijndael
    Rijndael RijndaelAlg = Rijndael.Create();
    // Establecer un flujo en memoria para el cifrado
    MemoryStream memoryStream = new MemoryStream();
    // Crear un flujo de cifrado basado en el flujo de los datos
    CryptoStream cryptoStream = new CryptoStream(memoryStream,
                                                 RijndaelAlg.CreateEncryptor(Key, IV),
                                                 CryptoStreamMode.Write);
    // Obtener la representación en bytes de la información a cifrar
    byte[] plainMessageBytes = UTF8Encoding.UTF8.GetBytes(plainMessage);
    // Cifrar los datos enviándolos al flujo de cifrado
    cryptoStream.Write(plainMessageBytes, 0, plainMessageBytes.Length);
    cryptoStream.FlushFinalBlock();
    // Obtener los datos datos cifrados como un arreglo de bytes
    byte[] cipherMessageBytes = memoryStream.ToArray();
    // Cerrar los flujos utilizados
    memoryStream.Close();
    cryptoStream.Close();
    // Retornar la representación de texto de los datos cifrados
    return Convert.ToBase64String(cipherMessageBytes);
}</pre><h3>Descifrado de cadenas de texto.</h3><p>El proceso inverso, el de descifrado, se realiza de manera antagónica.  Para hacerlo es necesario contar con los siguientes parámetros.</p><ol><li>Cadena de texto con los datos cifrados.</li><li>Clave.</li><li>Vector de inicio.</li></ol><p>El proceso retornará finalmente una cadena de texto con los datos descifrados.</p><pre class="c#">/**
 * Descifra una cadena texto con el algoritmo de Rijndael
 *
 * @param	encryptedMessage	mensaje cifrado
 * @param	Key			clave del cifrado para Rijndael
 * @param	IV			vector de inicio para Rijndael
 * @return	string			texto descifrado (plano)
 */
public static string decryptString(String encryptedMessage, byte[] Key, byte[] IV)
{
    // Obtener la representación en bytes del texto cifrado
    byte[] cipherTextBytes = Convert.FromBase64String(encryptedMessage);
    // Crear un arreglo de bytes para almacenar los datos descifrados
    byte[] plainTextBytes = new byte[cipherTextBytes.Length];
    // Crear una instancia del algoritmo de Rijndael
    Rijndael RijndaelAlg = Rijndael.Create();
    // Crear un flujo en memoria con la representación de bytes de la información cifrada
    MemoryStream memoryStream = new MemoryStream(cipherTextBytes);
    // Crear un flujo de descifrado basado en el flujo de los datos
    CryptoStream cryptoStream = new CryptoStream(memoryStream,
                                                 RijndaelAlg.CreateDecryptor(Key, IV),
                                                 CryptoStreamMode.Read);
    // Obtener los datos descifrados obteniéndolos del flujo de descifrado
    int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
    // Cerrar los flujos utilizados
    memoryStream.Close();
    cryptoStream.Close();
    // Retornar la representación de texto de los datos descifrados
    return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
}</pre><h2>Implementación con archivos.</h2><p>El cifrado y descifrado de mensajes en archivos se realiza de manera similar al expuesto anteriormente con cadenas, sin embargo varían los flujos (<em>streams</em>) utilizados para obtener y dirigir el flujo de la información.</p><h3>Cifrado a archivos.</h3><pre class="c#">/**
 * Cifra una cadena texto con el algoritmo de Rijndael y lo almacena en un archivo
 *
 * @param	plainMessage	mensaje plano (sin cifrar)
 * @param	filename	        nombre del archivo donde se almacenará el mensaje cifrado
 * @param	Key		        clave del cifrado para Rijndael
 * @param	IV		        vector de inicio para Rijndael
 * @return	void
 */
public static void encryptToFile(String plainMessage, String filename, byte[] Key, byte[] IV)
{
    // Crear un flujo para el archivo a generarse
    FileStream fileStream = File.Open(filename, FileMode.OpenOrCreate);
    // Crear una instancia del algoritmo Rijndael
    Rijndael RijndaelAlg = Rijndael.Create();
    // Crear un flujo de cifrado basado en el flujo de los datos
    CryptoStream cryptoStream = new CryptoStream(fileStream,
                                                 RijndaelAlg.CreateEncryptor(Key, IV),
                                                 CryptoStreamMode.Write);
    // Crear un flujo de escritura basado en el flujo de cifrado
    StreamWriter streamWriter = new StreamWriter(cryptoStream);
    // Cifrar el mensaje a través del flujo de escritura
    streamWriter.WriteLine(plainMessage);
    // Cerrar los flujos utilizados
    streamWriter.Close();
    cryptoStream.Close();
    fileStream.Close();
}</pre><h3>Descifrado de archivos.</h3><pre class="c#">/**
 * Descifra el contenido de un archivo con el algoritmo de Rijndael y lo retorna
 * como una cadena de texto plano
 *
 * @param	filename		nombre del archivo donde se encuentra el mensaje cifrado
 * @param	Key			clave del cifrado para Rijndael
 * @param	IV			vector de inicio para Rijndael
 * @return	string			mensaje descifrado (plano)
 */
public static string decryptFromFile(String filename, byte[] Key, byte[] IV)
{
    // Crear un flujo para el archivo a generarse
    FileStream fileStream = File.Open(filename, FileMode.OpenOrCreate);
    // Crear una instancia del algoritmo Rijndael
    Rijndael RijndaelAlg = Rijndael.Create();
    // Crear un flujo de cifrado basado en el flujo de los datos
    CryptoStream cryptoStream = new CryptoStream(fileStream,
                                                 RijndaelAlg.CreateDecryptor(Key, IV),
                                                 CryptoStreamMode.Read);
    // Crear un flujo de lectura basado en el flujo de cifrado
    StreamReader streamReader = new StreamReader(cryptoStream);
    // Descifrar el mensaje a través del flujo de lectura
    string plainMessage = streamReader.ReadLine();
    // Cerrar los flujos utilizados
    streamReader.Close();
    cryptoStream.Close();
    fileStream.Close();
    return plainMessage;
}</pre><h2>Aplicación de demostración.</h2><p>La <a href="http://demo.jorgeivanmeza.com/NET/Rijndael-AES-Sample/" >aplicación de demostración</a> incluye los conceptos y el código expuestos en este artículo.  Con ella es posible cifrar y descifrar un mensaje que consiste en una cadena de texto arbitraria en memoria y en un archivo.</p><div id="attachment_11136" class="wp-caption aligncenter" style="width: 699px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/10/MonoDevelop-External-Console_003.png"><img class="size-full wp-image-11136" title="MonoDevelop External Console_003" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/10/MonoDevelop-External-Console_003.png" alt="Aplicación de demostración del uso del algoritmo Rijndael" width="689" height="191" /></a><p class="wp-caption-text">Aplicación de demostración del uso del algoritmo Rijndael</p></div><h3>Construír la aplicación.</h3><p>La aplicación de demostración puede construírse utilizando la solución incluída en la distribución con MonoDevelop o Visual Studio.  También es posible construírla desde línea de comando (Mono) mediante la siguiente instrucción.</p><p><span style="font-family: 'courier new', courier;">$ gmcs &#8220;/out:RijndaelSample.exe&#8221; &#8220;/r:/usr/lib/mono/2.0/System.dll&#8221; /t:exe &#8220;RijndaelSample/Main.cs&#8221;</span></p><h2>Enlaces.</h2><ul><li>Aplicación de demostración del cifrado Rijndael (AES) de cadenas y archivos.<br /> <a href="http://demo.jorgeivanmeza.com/NET/Rijndael-AES-Sample/" > http://demo.jorgeivanmeza.com/NET/Rijndael-AES-Sample/</a></li><li>Advanced Encryption Standard &#8211; AES (Rijndael).<br /> <a href="http://es.wikipedia.org/wiki/Advanced_Encryption_Standard" > http://es.wikipedia.org/wiki/Advanced_Encryption_Standard</a></li><li>AES Algoritm information.<br /> <a href="http://csrc.nist.gov/archive/aes/rijndael/wsdindex.html" > http://csrc.nist.gov/archive/aes/rijndael/wsdindex.html</a></li><li>Rijndael Class en MSDN.<br /> <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndael.aspx" >http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndael.aspx</a></li><li>How To: Encrypt and Decrypt Data Using a Symmetric (Rijndael) Key (C#/VB.NET).<br /> <a href="http://www.obviex.com/samples/Encryption.aspx" > http://www.obviex.com/samples/Encryption.aspx</a></li></ul> ]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2010/10/cifrado-y-descifrado-simetrico-con-rijndael-aes-utilizando-cmono/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calculando hashes (MD5 y SHA1) con C#/Mono</title>
		<link>http://blog.jorgeivanmeza.com/2010/10/calculando-hashes-md5-y-sha1-con-cmono/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=calculando-hashes-md5-y-sha1-con-cmono</link>
		<comments>http://blog.jorgeivanmeza.com/2010/10/calculando-hashes-md5-y-sha1-con-cmono/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=calculando-hashes-md5-y-sha1-con-cmono#comments</comments>
		<pubDate>Sat, 30 Oct 2010 22:44:37 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Linux/Solaris/BSD]]></category>
		<category><![CDATA[MD5]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[SHA1]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=11042</guid>
		<description><![CDATA[Introducción. Una función de hashing recibe un bloque de datos arbitrarios y genera de manera determinística un arreglo de bytes con el valor de su hash, el cual tiene como característica el ser único para los datos procesados. Los valores de hash tienen múltiples usos, entre ellos se utilizan en la criptografía para garantizar que [...]]]></description>
			<content:encoded><![CDATA[<h2>Introducción.</h2><p>Una función de <em>hashing</em> recibe un bloque de datos arbitrarios y genera de manera determinística un arreglo de bytes con el valor de su <em>hash</em>, el cual tiene como característica el ser único para los datos procesados.</p><p>Los valores de <em>hash</em> tienen múltiples usos, entre ellos se utilizan en la criptografía para garantizar que la información de un mensaje no ha sido modificada.  Con este mismo uso, comúnmente se utiliza para determinar si la descarga de archivos ha sido exitosa o no (<span style="font-family: 'courier new', courier;"><a href="http://en.wikipedia.org/wiki/Md5sum" >md5sum</a></span>).</p><p>Existen varios algortimos de <em>hashing</em>, los mas conocidos son <a href="http://en.wikipedia.org/wiki/MD5" >MD5</a> de 128 bits y <a href="http://en.wikipedia.org/wiki/SHA-1" >SHA1</a> de 160 bits.  El primero de ellos es muy utilizado actualmente, especialmente para el almacenamiento de contraseñas, sin embargo ya no se considera seguro por lo cual es conveniente utilizar el segundo mencionado.</p><h2>Implementación en C#/Mono.</h2><p>Para la implementaciones que se describen a continuación se utilizaron los siguientes <em>namespaces</em>.</p><pre class="c#">using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;</pre><h3>Calcular el <em>hash</em> de una cadena.</h3><p>El primer paso es crear instancias de los algoritmos de <em>hashing</em>.</p><pre class="c#">HashAlgorithm md5  = HashAlgorithm.Create("MD5");
HashAlgorithm sha1 = HashAlgorithm.Create("SHA1");</pre><p>Posteriormente se calcula el valor del <em>hash</em> de la cadena texto (<span style="font-family: 'courier new', courier;">text</span>) especificada.</p><pre class="c#">Byte[] md5Data  = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(text));
Byte[] sha1Data = sha1.ComputeHash(UTF8Encoding.UTF8.GetBytes(text));</pre><p>Finalmente su valor puede ser manipulado o entregado al usuario.</p><pre class="c#">Console.WriteLine("MD5:  " + BitConverter.ToString(md5Data).Replace("-", ""));
Console.WriteLine("SHA1: " + BitConverter.ToString(sha1Data).Replace("-", ""));</pre><h3>Calcular el <em>hash</em> de un archivo.</h3><p>El procedimiento es muy similar al cálculo de <em>hash</em> de una cadena, pero a diferencia de este, los datos provienen de un flujo de archivo al cual se le calcula su valor.</p><pre class="c#">FileStream fs = File.OpenRead(filename);
md5Data  = md5.ComputeHash(fs);
sha1Data = sha1.ComputeHash(fs);
fs.Close ();</pre>]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2010/10/calculando-hashes-md5-y-sha1-con-cmono/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Verificar la seguridad de las contraseñas de GNU/Linux con John the Ripper</title>
		<link>http://blog.jorgeivanmeza.com/2010/10/verificar-la-seguridad-de-las-contrasenas-de-gnulinux-con-john-the-ripper/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=verificar-la-seguridad-de-las-contrasenas-de-gnulinux-con-john-the-ripper</link>
		<comments>http://blog.jorgeivanmeza.com/2010/10/verificar-la-seguridad-de-las-contrasenas-de-gnulinux-con-john-the-ripper/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=verificar-la-seguridad-de-las-contrasenas-de-gnulinux-con-john-the-ripper#comments</comments>
		<pubDate>Sat, 30 Oct 2010 01:40:54 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[contraseña]]></category>
		<category><![CDATA[fuerza bruta]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[JohnTheRipper]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Linux/Solaris/BSD]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=10990</guid>
		<description><![CDATA[Introducción. Una de las primeras cosas que debemos verificar quienes estamos preocupados por la seguridad de los servidores y aplicaciones es la seguridad de las contraseñas que eligen y utilizan a diario los usuarios.  A nivel de aplicación y de sistema operativo se establecen políticas que les obligan a los usuarios a elegir combinaciones de [...]]]></description>
			<content:encoded><![CDATA[<h2>Introducción.</h2><p><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/10/jack.jpg"><img class="alignleft size-full wp-image-10991" title="jack" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/10/jack.jpg" alt="" width="94" height="169" /></a>Una de las primeras cosas que debemos verificar quienes estamos preocupados por la seguridad de los servidores y aplicaciones es la seguridad de las contraseñas que eligen y utilizan a diario los usuarios.  A nivel de aplicación y de sistema operativo se establecen políticas que les obligan a los usuarios a elegir combinaciones de caracteres con una confiabilidad que consideramos suficiente.  Pero cuan seguras son realmente esas claves ?</p><p><strong>John the Ripper</strong> es una aplicación que pretende averiguar las contraseñas a través de un ataque de fuerza bruta.  Para esto es necesario contar con acceso a la base de datos de los usuarios (<span style="font-family: 'courier new', courier;">/etc/passwd</span>) y de las contraseñas cifradas (<span style="font-family: 'courier new', courier;">/etc/shadow</span>) del sistema operativo.  Su uso es muy simple y como se mencionó anteriormente, es muy útil para establecer si las contraseñas son fáciles de establecer o no mediante este tipo de ataques.</p><h2>Instalación en Ubuntu.</h2><p>Simplemente es necesario instalar el paquete que se encuentra en los repositorios estándar.</p><p><span style="font-family: 'courier new', courier;">$ sudo aptitude install john</span></p><h2>Utilizar JTR.</h2><p>El primer paso consiste en generar un archivo intermedio entre la lista de usuarios y sus contraseñas cifradas.</p><p><span style="font-family: 'courier new', courier;">$ sudo unshadow /etc/passwd /etc/shadow &gt; usuarios.db</span></p><p>A continuación se inicia el proceso de verificación de contraseñas por fuerza bruta.</p><p><span style="font-family: 'courier new', courier;">$ john usuarios.db</span></p><p>Este proceso puede tomar una cantidad considerable de tiempo y recursos de procesamiento.  En cualquier momento es posible consultar las contraseñas que ya han sido determinadas y la cantidad de contraseñas pendientes mediante la siguiente instrucción.</p><p><span style="font-family: 'courier new', courier;">$ john -show usuarios.db</span></p><p>Es posible continuar con una sesión previa que fue interrumpida ubicándose en el mismo directorio donde se encuentra el archivo de datos y ejecutando la siguiente instrucción.</p><p><span style="font-family: 'courier new', courier;">$ john -restore</span></p><p>La información del proceso y las contraseñas encontradas se almacenan bajo la ruta <span style="font-family: 'courier new', courier;">~/.john</span>.</p><h2>Enlaces.</h2><ul><li>John the Ripper password cracker.<br /> <a href="http://www.openwall.com/john/" >http://www.openwall.com/john/</a></li><li>Artículo en Wikipedia.<br /> <a href="http://es.wikipedia.org/wiki/John_the_Ripper">http://es.wikipedia.org/wiki/John_the_Ripper</a></li></ul> ]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2010/10/verificar-la-seguridad-de-las-contrasenas-de-gnulinux-con-john-the-ripper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Establecer una conexión web segura con un sitio web sin HTTPS a través de un tunel SSH con GNU/Linux</title>
		<link>http://blog.jorgeivanmeza.com/2010/09/establecer-una-conexion-web-segura-con-un-sitio-web-sin-https-a-traves-de-un-tunel-ssh-con-gnulinux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=establecer-una-conexion-web-segura-con-un-sitio-web-sin-https-a-traves-de-un-tunel-ssh-con-gnulinux</link>
		<comments>http://blog.jorgeivanmeza.com/2010/09/establecer-una-conexion-web-segura-con-un-sitio-web-sin-https-a-traves-de-un-tunel-ssh-con-gnulinux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=establecer-una-conexion-web-segura-con-un-sitio-web-sin-https-a-traves-de-un-tunel-ssh-con-gnulinux#comments</comments>
		<pubDate>Mon, 20 Sep 2010 21:09:16 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux/Solaris/BSD]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[SOCS]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Tunel]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=9050</guid>
		<description><![CDATA[Introducción. A pesar de que el hosting donde se almacena mi blog no cuenta con certificados SSL para poder implementar HTTPS siempre me había preguntado si era posible realizar conexiones seguras con ese servidor específico para realizar ciertas transacciones, es decir, me importaba especialmente mi acceso de administrador cuando debía ingresar mi nombre de usuario [...]]]></description>
			<content:encoded><![CDATA[<h2>Introducción.</h2>
<p>A pesar de que el hosting donde se almacena mi blog no cuenta con certificados SSL para poder implementar HTTPS siempre me había preguntado si era posible realizar conexiones seguras con ese servidor específico para realizar ciertas transacciones, es decir, me importaba especialmente mi acceso de administrador cuando debía ingresar mi nombre de usuario y contraseña para autenticarme ya que mediante el HTTP estas viajan planas (sin cifrado).</p>
<p>Ya que por estos días he vuelto a escribir acerca del protocolo SSH, me doy por fin la tarea de detallar este procedimiento, que a través de un túnel SSH con el servidor permite establecer conexiones seguras y temporales con el mismo.</p>
<h2>Precondiciones.</h2>
<ul>
<li>El servidor cuenta, además del servicio HTTP, con el servicio de SSH.</li>
<li>El usuario cuenta con una cuenta de usuario y contraseña válidas para acceder al servidor a través de SSH.</li>
<li>La conexión se considera segura hasta el servidor que se contacta (el hosting del blog en mi caso), si se acceden sitios mas allá de él la transmisión será insergura.</li>
<li>El cliente cuenta con un navegador web que permita configurar su proxy.  Se recomienda utilizar <a href="http://www.getifrefox.com/" >Firefox</a>.</li>
</ul>
<h2>Procedimiento.</h2>
<h3>Establecer el túnel seguro.</h3>
<p>En esta etapa inicial se crea un túnel SSH entre el equipo cliente y el servidor (que almacena el blog).</p>
<p><span style="font-family: courier new,courier;">$ ssh -fND 4711 usuario@mi.blog.com</span></p>
<p>El túnel se conecta del lado del cliente mediante el puerto <span style="font-family: courier new,courier;">4711</span> (definido por el usuario).  La instrucción <span style="font-family: courier new,courier;">ssh</span> es enviada automáticamente a <em>background </em>después de realizarse la autenticación (normalmente basada en nombre de usuario y contraseña).  Si desea evitar este comportamiento, remueva el parámetro <span style="font-family: courier new,courier;">-f </span>de la instrucción.</p>
<h3>Configurar a Firefox para utilizar el túnel.</h3>
<p>Es necesario indicarle a Firefox que enrrute el tráfico de información a través del túnel recién creado.  Para hacer esto es necesario acceder a las preferencias de red mediante los menúes <strong>Edit</strong> &gt; <strong>Preferences</strong> y allí activar la sección <strong>Advanced</strong> (parte superior) y presionar el botón <strong>Settings</strong> en la pestaña <strong>Network</strong> (parte media).</p>
<div id="attachment_9051" class="wp-caption aligncenter" style="width: 455px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/09/Connection-Settings_031.png"><img class="size-full wp-image-9051" title="Connection Settings_031" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/09/Connection-Settings_031.png" alt="" width="445" height="475" /></a><p class="wp-caption-text">Configuración de conexión de Firefox</p></div>
<p>En el diálogo de configuración de conexiones seleccione la opción <strong>Manual proxy configuration</strong> y especifique la dirección <span style="font-family: courier new,courier;">127.0.0.1</span> como <strong>SOCKS Host</strong> y <span style="font-family: courier new,courier;">4711</span> como <strong>Port</strong>.  Este último valor deberá coincidir con el utilizado durante el establecimiento del túnel.</p>
<p>Una <span style="text-decoration: underline;">alternativa</span> mas flexible a esta es el uso de <a href="http://getfoxyproxy.org/" >FoxyProxy</a>, un <em>plugin</em> para Firefox que permite manipular sus <em>proxies</em> de una forma mas eficiente.  Presione <span style="font-family: courier new,courier;">CTRL+F2</span> para acceder a la configuración de este <em>plugin</em>, presione el botón <strong>Add New Proxy</strong> e ingrese la información del túnel.</p>
<div id="attachment_9052" class="wp-caption aligncenter" style="width: 562px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/09/FoxyProxy-Basic-Proxy-Settings_032.png"><img class="size-full wp-image-9052" title="FoxyProxy Basic - Proxy Settings_032" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/09/FoxyProxy-Basic-Proxy-Settings_032.png" alt="" width="552" height="341" /></a><p class="wp-caption-text">FoxyProxy plugin, Proxy Settings</p></div>
<h3>Configurar a Firefox para incluír las peticiones de DNS a través del túnel (opcional).</h3>
<p>Hasta este punto la comunicación entre el cliente y el servidor, a pesar de que se realiza utilizando el protocolo HTTP, se realiza de manera cifrada ya que se hace utilizando el túnel SSH.  Por fuera de esta comunicación quedan las solicitudes para resolver nombres a través del servicio DNS que hace el cliente antes de transmitir la información a través del túnel.  Esto probablemente no sea un riesgo significativo de seguridad pero enrrutarlas a través del túnel confiere un poco mas de privacidad, al menos a nivel de la LAN ya que no será posible identificar localmente esta información mediante el uso de un <em>sniffer</em>.</p>
<p>Por suerte Firefox permite configurarse para incluír las peticiones al DNS a través de un <em>proxy SOCKS</em>, el cual en este caso es el túnel SSH.  Para hacer esto es necesario acceder al siguiente URL en el navegador: <span style="font-family: courier new,courier;">about:config</span>.</p>
<div id="attachment_9053" class="wp-caption aligncenter" style="width: 698px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/09/Selection_034.png"><img class="size-full wp-image-9053" title="Selection_034" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/09/Selection_034.png" alt="" width="688" height="257" /></a><p class="wp-caption-text">Opciones de configuración de Firefox relacionadas con proxies.</p></div>
<p>Finalmente ubique la variable <span style="font-family: courier new,courier;">network.proxy.socks_remote_dns</span> y modifique su valor a <span style="font-family: courier new,courier;">true</span>.</p>
<p>Si utiliza FoxyProxy puede realizar esta configuración por <em>proxy</em> ingresando a la configuración del <em>proxy</em> elegido (<em>Proxy Settings</em>) y seleccionando la casilla de verificación <span style="font-family: courier new,courier;">Perform remote DNS lookups on hostnames loading through this proxy</span> en la pestaña <span style="font-family: courier new,courier;">General</span>.</p>
<h2>Finalizar el túnel.</h2>
<p>Para terminar la existencia del túnel simplemente finalice la aplicación de <span style="font-family: courier new,courier;">ssh</span>, ya sea terminando la aplicación con <span style="font-family: courier new,courier;">CTRL+C</span> (si no estaba en <em>background</em>) o matando su proceso mediante el comando <span style="font-family: courier new,courier;">kill</span>.</p>
<p>Recuerde ajustar nuevamente el <em>proxy</em> activo en Firefox para continuar utilizando el tipo de conexión habitual en su equipo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2010/09/establecer-una-conexion-web-segura-con-un-sitio-web-sin-https-a-traves-de-un-tunel-ssh-con-gnulinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problemas de autenticación/autorización de un 3Com OfficeConnect Wireless Router</title>
		<link>http://blog.jorgeivanmeza.com/2010/01/problemas-de-autenticacionautorizacion-de-un-3com-officeconnect-wireless-router/</link>
		<comments>http://blog.jorgeivanmeza.com/2010/01/problemas-de-autenticacionautorizacion-de-un-3com-officeconnect-wireless-router/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 05:22:02 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[3Com]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Router]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Vulnerabilidad]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=2351</guid>
		<description><![CDATA[Introducción.
El viernes pasado mientras aprendía acerca de Team Software Process se me ocurrió echar una mirada para intentar encontrar la dirección del filtro de contenido de la red que en la que estaba que la hacía prácticamente inútil bloqueando la mayoría de los sitios web de interés general.
Un traceroute de los sitios bloqueados no me [...]]]></description>
			<content:encoded><![CDATA[<h2>Introducción.</h2>
<p><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/01/prd_lg_3crwe554g72.gif"><img class="alignleft size-full wp-image-2352" title="prd_lg_3crwe554g72" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/01/prd_lg_3crwe554g72.gif" alt="" width="210" height="119" /></a>El viernes pasado mientras aprendía acerca de <a href="http://en.wikipedia.org/wiki/Team_Software_Process" >Team Software Process</a> se me ocurrió echar una mirada para intentar encontrar la dirección del filtro de contenido de la red que en la que estaba que la hacía prácticamente inútil bloqueando la mayoría de los sitios web de interés general.</p>
<p>Un <em>traceroute</em> de los sitios bloqueados no me mostró la ubicación que quería, sólo permitía llegar hasta el enrrutador inalámbrico que me estaba permitiendo acceder a la red LAN.  Decepcionado terminé saludándolo para darme cuenta de un problema de seguridad que ocultaba.</p>
<h2>Conociendo al dispositivo.</h2>
<p>Inicialmente no me dijo mucho, sólo que aparentemente era un dispositivo 3Com (o al menos su interfaz de red lo era).</p>
<p><span style="font-family: courier new,courier;">$ sudo nmap -sA -O 192.168.2.1</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">Starting Nmap 5.00 ( http://nmap.org ) at 2010-01-16 08:10 COT<br />
All 1000 scanned ports on 192.168.2.1 are unfiltered<br />
MAC Address: </span><span style="font-family: courier new,courier;">00:FF:C1:4D:FF:EE</span><span style="font-family: courier new,courier;"><span style="font-family: courier new,courier;"> (<strong><span style="color: #ff0000;">3co</span></strong></span><strong><span style="color: #ff0000;">m Europe</span></strong>)<br />
Too many fingerprints match this host to give specific OS details<br />
Network Distance: 1 hop</span></p>
<p>Posteriormente lo confirmé al ver que el dispositivo 3Com ejecutaba aparentemente una versión de Linux con el kernel 2.6 lo cual es relativamente reciente.</p>
<p><span style="font-family: courier new,courier;">$ sudo nmap -sS -O 192.168.2.1</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">Starting Nmap 5.00 ( http://nmap.org ) at 2010-01-16 08:09 COT<br />
Interesting ports on 192.168.2.1:<br />
Not shown: 998 closed ports<br />
PORT   STATE SERVICE<br />
53/tcp open  domain<br />
<span style="color: #ff0000;"><strong>80/tcp open  http</strong></span><br />
MAC Address: 00:FF:C1:4D:FF:EE (<strong><span style="color: #ff0000;">3com Europe</span></strong>)<br />
Device type: general purpose<br />
<span style="color: #ff0000;"><strong>Running: Linux 2.6.X<br />
OS details: Linux 2.6.22</strong></span><br />
Network Distance: 1 hop</span></p>
<p>También se hizo evidente que el dispositivo permitía su administración a través de web (puerto 80).</p>
<p>Accediendo a el dispositivo utilizando un navegador web encontré que era finalmente un <strong>3Com OfficeConnect Wireless 11g</strong>.  Sabiendo esto investigué un poco si había problemas conocidos con este dispositivo.</p>
<h2>La vulnerabilidad.</h2>
<p>Resulta que estos dispositivos manejan incorrectamente la autenticación/autorización de su módulo web de administración, protegiendo correctamente a las páginas pero permitiendo el acceso directo a los CGIs.  Esto unido a que el método de copia de seguridad de la configuración del router genera un archivo (<span style="font-family: courier new,courier;">config.bin</span>) con esta información y lo almacena en su memoria interna para que el administrador lo descargue, termina convirtiéndose en un grave problema de seguridad.</p>
<p>El archivo puede descargarse mediante un CGI llamado <span style="font-family: courier new,courier;">SaveCfgFile</span> así que para obtenerlo sólo es necesario acceder a él mediante un navegador web.</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">http://192.168.2.1/SaveCfgFile.cgi</span></p>
<p>El archivo contiene <span style="text-decoration: underline;">toda</span> la configuración del enrrutador, incluyendo su información de red y contraseñas de administración!</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">&#8230;<br />
httpd_username=admin<br />
httpd_password=admin<br />
&#8230;<br />
mradius_username=admin<br />
mradius_password=admin<br />
mradius_secret=mradius1218<br />
mradius_port=1812<br />
&#8230;<br />
http_username=admin<br />
login_password=admin<br />
http_passwd=admin<br />
&#8230;</span></p>
<h2>Conclusiones.</h2>
<p>Esta vulnerabilidad fue reportada a 3Com por Luca Carettoni de ikkisoft.com en diciembre de 2008 y fue conocida por el público en general en febrero del 2009.</p>
<p>Supongo que desde hace tanto tiempo para acá 3Com ya ha solucionado esta vulnerabilidad y se encuentra disponible una actualización del firmware que la soluciona.</p>
<p>Debe tenerse especial cuidado en los dispositivos que tengan la opción de <em>Remote Administration</em> activa ya que esta vulnerabilidad podrá ser explotada desde Internet.</p>
<h2>Enlaces.</h2>
<ul>
<li>3Com OfficeConnect Wireless Cable/DSL Router Authentication Bypass.<br />
<a href="http://packetstormsecurity.org/0902-exploits/LC-2008-05.txt" >http://packetstormsecurity.org/0902-exploits/LC-2008-05.txt</a></li>
<li>3Com® OfficeConnect® Wireless 11g Cable/DSL Gateway.<br />
<a href="http://www.3com.com/products/en_US/detail.jsp?tab=features&amp;sku=3CRWE554G72&amp;pathtype=support" >http://www.3com.com/products/en_US/detail.jsp?tab=features&amp;sku=3CRWE554G72&amp;pathtype=support</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2010/01/problemas-de-autenticacionautorizacion-de-un-3com-officeconnect-wireless-router/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

