<?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>AmarellOcio &#187; Damián</title>
	<atom:link href="http://blog.amarello.com.mx/author/elessar/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.amarello.com.mx</link>
	<description>Tecnologías de información, seguridad, ciencia y entretenimiento</description>
	<lastBuildDate>Fri, 26 Aug 2011 16:55:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>¿Cómo se realizará el rescate de los mineros?</title>
		<link>http://blog.amarello.com.mx/2010/08/30/%c2%bfcomo-se-realizara-el-rescate-de-los-mineros/</link>
		<comments>http://blog.amarello.com.mx/2010/08/30/%c2%bfcomo-se-realizara-el-rescate-de-los-mineros/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 19:14:03 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Ciencia]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/?p=931</guid>
		<description><![CDATA[Es muy sonado el reciente caso de los mineros que quedaron atrapados en Chile. Pero ¿sabemos cómo se hace un rescate de este tipo? ¿cuánto esfuerzo requiere? En la siguiente animación se pueden seguir las proyección de los pasos a seguir para lograr el rescate: Rescate de los mineros chilenos atrapados bajo tierra]]></description>
			<content:encoded><![CDATA[<p>Es muy sonado el reciente caso de los mineros que quedaron atrapados en Chile. Pero ¿sabemos cómo se hace un rescate de este tipo? ¿cuánto esfuerzo requiere?</p>
<p>En la siguiente animación se pueden seguir las proyección de los pasos a seguir para lograr el rescate:</p>
<p><a href="http://www.elmundo.es/elmundo/2010/graficos/ago/s3/mineros.html">Rescate de los mineros chilenos atrapados bajo tierra</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2010/08/30/%c2%bfcomo-se-realizara-el-rescate-de-los-mineros/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vulnerabilidad LNK</title>
		<link>http://blog.amarello.com.mx/2010/07/22/vulnerabilidad-lnk/</link>
		<comments>http://blog.amarello.com.mx/2010/07/22/vulnerabilidad-lnk/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 15:39:38 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Seguridad en Información]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/?p=924</guid>
		<description><![CDATA[El 17 de junio de 2010 se descubrió una vunerabilidad 0-day que afecta a todas las versiones de Windows. Lo terrible del asunto es que se descubrió después de que ya estaba siendo explotada por un troyano cuyo fin era el espionaje industrial. La noticia saltó a los medios especializados el 16 de julio. Los [...]]]></description>
			<content:encoded><![CDATA[<p>El 17 de junio de 2010 se descubrió una vunerabilidad 0-day que afecta a todas las versiones de Windows. Lo terrible del asunto es que se descubrió después de que ya estaba siendo explotada por un troyano cuyo fin era el espionaje industrial.</p>
<p>La noticia saltó a los medios especializados el 16 de julio. Los primeros detalles indicaban que la vulnerabilidad permitía a un atacante ejecutar automáticamente código al insertar un medio extraíble en el sistema. La crónica y más detalles se puede encontrar aquí:</p>
<p><a href="http://www.hispasec.com/unaaldia/4283/interesante-peligroso-troyano-que-aprovecha-interesant">Interesante (y peligroso) troyano que aprovecha un interesante (y peligroso) 0 day en Microsoft Windows</a></p>
<p>Ahora el código es <a href="http://www.hispasec.com/unaaldia/4285/hace-publico-exploit-ultima-grave-vulnerabili">público</a> y ni lentos ni perezosos ya lo incluyeron en la <a href="http://www.kungfoosion.com/2010/07/explotando-lnk-con-metasploit.html">archiconocida suite MetaSploit</a>. Aunque ya es posible <a href="http://www.securitybydefault.com/2010/07/solucion-la-vulnerabilidad-lnk-de.html">mitigarlo</a> mediante una Directiva de Seguridad Local, Microsoft no ha publicado aún ningún parche.</p>
<p>Gracias a <a href="http://elladodelmal.blogspot.com/2010/07/el-post-del-lnk-porque-tu-lo-has-pedido.html">Un informático en el lado del mal</a> por la recopilación de fuentes.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2010/07/22/vulnerabilidad-lnk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autenticación segura sin SSL/TLS</title>
		<link>http://blog.amarello.com.mx/2010/06/12/autenticacion-segura-sin-ssl-tls/</link>
		<comments>http://blog.amarello.com.mx/2010/06/12/autenticacion-segura-sin-ssl-tls/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 23:34:51 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Algoritmia y programación]]></category>
		<category><![CDATA[Aplicaciones Web]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Seguridad en Información]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/?p=867</guid>
		<description><![CDATA[Muchas veces no es necesario o es demasiado cifrar toda la comunicación entre el cliente y el servidor, por razones de performance o por el sobrecosto de implementar un esquema de PKI (Public Key Infraestructure) para usar SSL/TLS. Pero siempre hay algo que es necesario proteger por seguridad: las credenciales de autenticación del usuario. Por [...]]]></description>
			<content:encoded><![CDATA[<p>Muchas veces no es necesario o es demasiado cifrar toda la comunicación entre el cliente y el servidor, por razones de performance o por el sobrecosto de implementar un esquema de PKI (Public Key Infraestructure) para usar SSL/TLS. Pero siempre hay algo que es necesario proteger por seguridad: las credenciales de autenticación del usuario. Por lo que en este post explicaré cómo se puede hacer una autenticación sin enviar esa información (no, no es telepatía).</p>
<p><strong>Protocolos de conocimiento cero (ZKP)</strong></p>
<p>Sabemos que sin un esquema de cifrado de llave pública es trivial para un atacante interceptar la información que se envía entre el cliente y el servidor, pero el sistema debe tener alguna manera de autenticar a los usuarios del sistema. Necesitamos enviar algo que si un atacante intercepta no pueda utilizar para autenticarse. Esto se conoce como un <em>protocolo de conocimiento cero</em> (<a href="http://en.wikipedia.org/wiki/Zero-knowledge_proof">Zero-knowledge proof</a>), y en palabras coloquiales significa: &#8220;probar que poseemos cierta información sin revelar esa información&#8221;.</p>
<p>Como comúnmente la única información que queremos &#8220;probar que poseemos pero no queremos revelar&#8221; es la contraseña, voy a explicar el esquema que usa MySQL para implementar su autenticación de usuarios. Los detalles no están explicados de manera formal en la documentación de MySQL pero alguien se tomó el tiempo de leer el código fuente y explicar cómo funciona (<a href="http://blog.vorant.com/2006/03/mysql-41x-authentication-internals.html">MySQL 4.1.x authentication internals</a>).</p>
<p><strong>¿Cómo se almacenan las contraseñas?</strong></p>
<p>Lo primero que hay que tener en cuenta es que, siguiendo los principios básicos de almacenamiento seguro de contraseñas, éstas se almacenan en el sistema sólo como un <em>hash criptográfico</em>. Que tiene la propiedad de ser <strong>prácticamente irreversible</strong> y <strong>prácticamente único</strong>. Por lo que esta es la primera parte del ZKP, ya que sólo quien conozca la contraseña podrá generar el <em>hash criptográfico</em> que le pertenece.</p>
<p>Desde MySQL 4.1 las contraseñas de usuario están almacenadas en la tabla &#8220;mysql.user&#8221; en la columna &#8220;Password&#8221; de la siguiente manera: <img src='http://s.wordpress.com/latex.php?latex=SHA1%28SHA1%28password%29%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='SHA1(SHA1(password))' title='SHA1(SHA1(password))' class='latex' />. Donde <img src='http://s.wordpress.com/latex.php?latex=SHA1&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='SHA1' title='SHA1' class='latex' /> es el <em>hash criptográfico</em> <a href="http://en.wikipedia.org/wiki/SHA-1">SHA-1</a>.</p>
<p><strong>La transmisión</strong></p>
<p>Si cada vez que el cliente se quiera autenticar sólo transmitiera <img src='http://s.wordpress.com/latex.php?latex=SHA1%28SHA1%28password%29%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='SHA1(SHA1(password))' title='SHA1(SHA1(password))' class='latex' />, cumpliría con el principio de no revelar la contraseña, pero un atacante podría capturar y enviar después <img src='http://s.wordpress.com/latex.php?latex=SHA1%28SHA1%28password%29%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='SHA1(SHA1(password))' title='SHA1(SHA1(password))' class='latex' /> para  autenticarse exitosamente aún sin conocer la contraseña. Por lo que necesitamos agregar más cosas al protocolo para que la información que transmite el cliente sólo sea útil para un intento de autenticación.</p>
<p>Este sería el esquema cliente-servidor para la transmisión:</p>
<ol>
<li>Se inicia el intento de autenticación</li>
<li>El servidor genera una cadena aleatoria <img src='http://s.wordpress.com/latex.php?latex=salt&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='salt' title='salt' class='latex' /> y se la transmite al cliente.</li>
<li>El cliente calcula <img src='http://s.wordpress.com/latex.php?latex=S_1%20%3D%20SHA1%28pass%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S_1 = SHA1(pass)' title='S_1 = SHA1(pass)' class='latex' />, <img src='http://s.wordpress.com/latex.php?latex=S_2%20%3D%20SHA1%28S_1%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S_2 = SHA1(S_1)' title='S_2 = SHA1(S_1)' class='latex' /> y <img src='http://s.wordpress.com/latex.php?latex=S_3%20%3D%20SHA1%28salt%2BS_2%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S_3 = SHA1(salt+S_2)' title='S_3 = SHA1(salt+S_2)' class='latex' /> (aqui <img src='http://s.wordpress.com/latex.php?latex=%2B&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='+' title='+' class='latex' /> significa concatenación).</li>
<li>Finalmente el cliente transmite <img src='http://s.wordpress.com/latex.php?latex=M%20%3D%20S_3%20%5Coplus%20S_1&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='M = S_3 \oplus S_1' title='M = S_3 \oplus S_1' class='latex' />. (aquí <img src='http://s.wordpress.com/latex.php?latex=%5Coplus&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\oplus' title='\oplus' class='latex' /> significa bitwise XOR)</li>
</ol>
<p><strong>Autenticación</strong></p>
<p>El servidor sólo conoce <img src='http://s.wordpress.com/latex.php?latex=H%20%3D%20SHA1%28SHA1%28password%29%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='H = SHA1(SHA1(password))' title='H = SHA1(SHA1(password))' class='latex' />, que está almacenado en la tabla de usuarios, y <img src='http://s.wordpress.com/latex.php?latex=salt&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='salt' title='salt' class='latex' />. Para autenticar hace lo siguiente:</p>
<ol>
<li>Calcula  <img src='http://s.wordpress.com/latex.php?latex=S%27_3%20%3D%20SHA1%28salt%2BH%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S&#039;_3 = SHA1(salt+H)' title='S&#039;_3 = SHA1(salt+H)' class='latex' />.</li>
<li>Calcula  <img src='http://s.wordpress.com/latex.php?latex=S%27_1%20%3D%20M%5Coplus%20S%27_3&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S&#039;_1 = M\oplus S&#039;_3' title='S&#039;_1 = M\oplus S&#039;_3' class='latex' />.</li>
<li>Calcula <img src='http://s.wordpress.com/latex.php?latex=S%27_2%20%3D%20SHA1%28S%27_1%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S&#039;_2 = SHA1(S&#039;_1)' title='S&#039;_2 = SHA1(S&#039;_1)' class='latex' />.</li>
<li>Sólo si <img src='http://s.wordpress.com/latex.php?latex=H%3DS%27_2&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='H=S&#039;_2' title='H=S&#039;_2' class='latex' /> la autenticación es exitosa.</li>
</ol>
<p><strong>Observaciones</strong></p>
<p>Nunca se transmite <img src='http://s.wordpress.com/latex.php?latex=S_2&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S_2' title='S_2' class='latex' /> ni <img src='http://s.wordpress.com/latex.php?latex=S_1&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S_1' title='S_1' class='latex' />, por lo que la fortaleza está en que este ZKP verifica que el cliente conoce <img src='http://s.wordpress.com/latex.php?latex=SHA1%28password%29%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='SHA1(password))' title='SHA1(password))' class='latex' /> y <img src='http://s.wordpress.com/latex.php?latex=SHA1%28SHA1%28password%29%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='SHA1(SHA1(password))' title='SHA1(SHA1(password))' class='latex' /> pero sin revelar esa información, y que sería casi imposible que un atacante poseyera sin conocer <img src='http://s.wordpress.com/latex.php?latex=password&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='password' title='password' class='latex' />.</p>
<p>También hay que observar que <img src='http://s.wordpress.com/latex.php?latex=salt&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='salt' title='salt' class='latex' /> es una cadena única por cada intento de autenticación, o sea que esa cadena siempre está cambiando.</p>
<p><strong>Implementación</strong></p>
<p>Próximamente trabajaremos en una implementación de este esquema para aplicaciones web usando JavaScript y PHP, que publicaremos bajo licencia LGPL.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2010/06/12/autenticacion-segura-sin-ssl-tls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Malware en Linux</title>
		<link>http://blog.amarello.com.mx/2009/12/09/malware-en-linux/</link>
		<comments>http://blog.amarello.com.mx/2009/12/09/malware-en-linux/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 05:52:56 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/?p=863</guid>
		<description><![CDATA[Recientemente se descubrió un malware para Linux. Alojado en una página muy popular de descargas de temas para Gnome. Este malware viene incorporado en un screensaver contenido en un paquete .deb que requiere privilegios de administrador para instalarse. Específicamente es un troyano diseñado para formar parte de una Botnet y hacer ataques DDoS. Las instrucciones [...]]]></description>
			<content:encoded><![CDATA[<p>Recientemente <a href="http://www.omgubuntu.co.uk/2009/12/malware-found-in-screensaver-for-ubuntu.html">se descubrió</a> un malware para Linux. Alojado en una página muy popular de descargas de temas para Gnome.</p>
<p>Este malware viene incorporado en un screensaver contenido en un paquete .deb que requiere privilegios de administrador para instalarse. Específicamente es un troyano diseñado para formar parte de una Botnet y hacer ataques DDoS. </p>
<p>Las instrucciones para eliminarlo revelan dónde se instala y cómo se autoejecuta:</p>
<p><code>sudo rm -f /usr/bin/Auto.bash /usr/bin/run.bash /etc/profile.d/gnome.sh index.php run.bash &#038;&#038; sudo dpkg -r app5552</code></p>
<p>Hace tiempo reflexioné sobre este futuro poco alentador en un artículo sobre <a href="http://blog.amarelloartis.com/2008/01/11/%C2%BFque-no-hay-virus-en-mac-ya-veremos/">un troyano en mac</a>. Lo que me lleva a hacer una reflexión que me gustaría que todos los linuxeros nos hiciéramos: ¿cuántas veces has revisado lo que hace e instala un paquete .deb antes de ponerle tu contraseña de administrador?</p>
<p>Eso de creernos invulnerables por usar Linux o Mac OS pronto va a dar frutos, y son frutos podridos. Si se le sigue diciendo a la gente, sistemáticamente, que es <a href="http://blog.amarelloartis.com/2007/01/17/porque-no-hay-virus-en-linux-unix-ni-mac-os-x/">invulnerable al malware</a> es casi seguro que caiga en un engaño por exceso de confianza. También pasó con el troyano que venía en la <a href="http://blog.amarelloartis.com/2009/01/24/nuevo-trojano-en-iwork%C2%B409-de-bitorrent/">versión de bittorrent de iWork</a> y quién sabe cuántos aún sigan infectados.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2009/12/09/malware-en-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compara el costo de vivir en un país diferente</title>
		<link>http://blog.amarello.com.mx/2009/11/23/compara-el-costo-de-vivir-en-un-pais-diferente/</link>
		<comments>http://blog.amarello.com.mx/2009/11/23/compara-el-costo-de-vivir-en-un-pais-diferente/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 02:02:34 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/?p=860</guid>
		<description><![CDATA[Cuando planeamos un viaje largo, una estancia universitaria o simplemente tenemos curiosidad económica, es bastante difícil comparar efectivamente la diferencia de precios sin caer en el error de darle demasiada importancia a la evidencia anecdótica de alguien que viajó a ese lugar o extrapolar experencias propias. Para hacer este tipo de cuestiones existe un sitio [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando planeamos un viaje largo, una estancia universitaria o simplemente tenemos curiosidad económica, es bastante difícil comparar efectivamente la diferencia de precios sin caer en el error de darle demasiada importancia a la evidencia anecdótica de alguien que viajó a ese lugar o extrapolar experencias propias.</p>
<p>Para hacer este tipo de cuestiones existe un sitio que nos permite hacer una comparación general de precio en diferentes cosas: restaurantes, productos básicos, transporte, renta de departamentos, gasolina, internet y telefonía. El sitio es:</p>
<p><a href="http://www.numbeo.com/cost-of-living/compare_countries.jsp">http://www.numbeo.com/cost-of-living/compare_countries.jsp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2009/11/23/compara-el-costo-de-vivir-en-un-pais-diferente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial de exploits y shellcodes</title>
		<link>http://blog.amarello.com.mx/2009/11/12/tutorial-de-exploits-y-shellcodes/</link>
		<comments>http://blog.amarello.com.mx/2009/11/12/tutorial-de-exploits-y-shellcodes/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 01:02:30 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Seguridad en Información]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/?p=853</guid>
		<description><![CDATA[Normalmente cuando uno busca información sobre exploits y shellcodes es frustrante darse cuenta que mucha de la información está bastante desactualizada y muchas veces no se explican a detalle ciertos pasos que para un novato son un reto resolver cuando se quiere llevar a la práctica lo aprendido. Hoy encuentro una serie de posts referentes [...]]]></description>
			<content:encoded><![CDATA[<p>Normalmente cuando uno busca información sobre exploits y shellcodes es frustrante darse cuenta que mucha de la información está bastante desactualizada y muchas veces no se explican a detalle ciertos pasos que para un novato son un reto resolver cuando se quiere llevar a la práctica lo aprendido.</p>
<p>Hoy encuentro una serie de posts referentes a un exploit en concreto en donde explican con cierto grado de detalle los pasos concretos a seguir y los conceptos que hay detrás de un exploit por stack overflow para la aplicación <em>Easy RM to MP3 Conversion Utility</em>.</p>
<p><a href="http://www.corelan.be:8800/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/">Exploit writing tutorial part 1 : Stack Based Overflows</a></p>
<p><a href="http://www.corelan.be:8800/index.php/2009/07/23/writing-buffer-overflow-exploits-a-quick-and-basic-tutorial-part-2/" title="Exploit writing tutorial part 2 : Stack Based Overflows – jumping to shellcode">Exploit writing tutorial part 2 : Stack Based Overflows – jumping to shellcode</a></p>
<p><a href="http://www.corelan.be:8800/index.php/2009/09/05/exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-basic-exploit-development/" title="Exploit writing tutorial part 5 : How debugger modules &amp; plugins can speed up basic exploit development">Exploit writing tutorial part 5 : How debugger modules &amp; plugins can speed up basic exploit development</a></p>
<p><a href="http://www.corelan.be:8800/index.php/2009/07/25/writing-buffer-overflow-exploits-a-quick-and-basic-tutorial-part-3-seh/" title="Exploit writing tutorial part 3 : SEH Based Exploits">Exploit writing tutorial part 3 : SEH Based Exploits</a></p>
<p><a href="http://www.corelan.be:8800/index.php/2009/09/21/exploit-writing-tutorial-part-6-bypassing-stack-cookies-safeseh-hw-dep-and-aslr/" title="Exploit writing tutorial part 6 : Bypassing Stack Cookies, SafeSeh, HW DEP and ASLR">Exploit writing tutorial part 6 : Bypassing Stack Cookies, SafeSeh, HW DEP and ASLR</a></p>
<p><a href="http://www.corelan.be:8800/index.php/2009/07/28/seh-based-exploit-writing-tutorial-continued-just-another-example-part-3b/" title="Exploit writing tutorial part 3b : SEH Based Exploits – just another example">Exploit writing tutorial part 3b : SEH Based Exploits – just another example</a></p>
<p><a href="http://www.corelan.be:8800/index.php/2009/08/12/exploit-writing-tutorials-part-4-from-exploit-to-metasploit-the-basics/" title="Exploit writing tutorial part 4 : From Exploit to Metasploit – The basics">Exploit writing tutorial part 4 : From Exploit to Metasploit – The basics</a></p>
<p><a href="http://www.corelan.be:8800/index.php/2009/11/06/exploit-writing-tutorial-part-7-unicode-from-0x00410041-to-calc/" title="Exploit writing tutorial part 7 : Unicode – from 0×00410041 to calc">Exploit writing tutorial part 7 : Unicode – from 0×00410041 to calc</a></p>
<p>Y sigue actualizándose.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2009/11/12/tutorial-de-exploits-y-shellcodes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desmitificando RSA de 1025 bits</title>
		<link>http://blog.amarello.com.mx/2009/03/13/desmitificando-rsa-de-1025-bits/</link>
		<comments>http://blog.amarello.com.mx/2009/03/13/desmitificando-rsa-de-1025-bits/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 14:54:47 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Algoritmia y programación]]></category>
		<category><![CDATA[Matemáticas]]></category>
		<category><![CDATA[Seguridad en Información]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/?p=746</guid>
		<description><![CDATA[Cuando se habla de RSA, se suele especular o fantasear sobre supuesta tecnología ultrasecreta que pudieran tener las agencias de seguridad de los gobiernos de naciones poderosas como Rusia, China o EEUU. Sobre todo se especula que los módulos de 1024 bits podría ya ser factorizables en tiempos razonables. Por lo que muchos, incluyéndome, se [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando se habla de RSA, se suele especular o fantasear sobre supuesta tecnología ultrasecreta que pudieran tener las agencias de seguridad de los gobiernos de naciones poderosas como Rusia, China o EEUU. Sobre todo se especula que los módulos de 1024 bits podría ya ser factorizables en tiempos razonables. Por lo que muchos, incluyéndome, se preguntan ¿entonces de cuántos bits debería generar mis llaves si mis temores fueran ciertos?</p>
<p>El NIST, la agencia encargada de definir los estándares tecnológicos para las agencias federales de EEUU, <a href="http://csrc.nist.gov/publications/nistpubs/800-57/SP800-57-Part1.pdf">establece</a> que la información con vigencia menor a 2010 debe usar al menos 1024 bits, con vigencia menor a 2030 deberá usar al menos 2048 bits y con vigencia mayor a 2030 deberá usar 3072.</p>
<p>Bruce Scheiner por otro lado en 2002 <a href="http://www.schneier.com/crypto-gram-0204.html#3">ratificó</a> una tabla publicada anteriormente por él mismo en donde establece los bits recomendados según seas un individuo, una corporación o el gobierno. Ahí estipula que para 2005 los individuos ya deberían usar llaves de 1280 bits, y el gobierno ya debería estar usando 2048 bits.</p>
<p>Algunos más &#8220;inteligentes&#8221; que los anteriores, dicen que todos exageran, y recomiendan 1025 bits, razonando superfluamente que eso duplica la complejidad de la factorización. Ese razonamieto surge de pensar que el mejor algoritmo de factorización es por &#8220;fuerza bruta&#8221; sobre los posibles factores, probando todos los números entre <img src='http://s.wordpress.com/latex.php?latex=2%5E%7B511%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='2^{511}' title='2^{511}' class='latex' /> y <img src='http://s.wordpress.com/latex.php?latex=2%5E%7B512%7D-1&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='2^{512}-1' title='2^{512}-1' class='latex' /> para factorizar un módulo de 1024 bits, pues sus factores primos son de 512 bits.</p>
<p>La realidad es otra, y desde hace tiempo, desde Fermat de hecho, existen métodos sublineales de factorización de enteros respecto al tamaño del entero y los mismos algoritmos son subexponenciales respecto al número de bits del entero. Por lo que aumentar un bit la llave no es tan drástico como aumentarlo en otros algoritmos como AES, como no es tan drástico multiplicar por dos el tamaño del entero, pues eso no duplicaría el tiempo necesariamente. ¿Pero qué tanto aumenta el tiempo un bit más?</p>
<p><strong>Criba General de Campos Numéricos (GNFS)</strong></p>
<p>GNFS es el mejor algoritmo de factorización de enteros, conocido a la fecha, para enteros de 130 digitos al menos (que son aproximadamente 432 bits). En 2005 el algoritmo se utilizó para romper el récord de factorización RSA para un entero de 640 bits, hazaña que fue llevada acabo por un equipo de investigación alemán. Lo interesante de este algoritmo es su complejidad, y en base a ella voy a realizar algunos cálculos para esclarecer qué tan fuerte es aumentar un bit más a un módulo RSA. </p>
<p>La complejidad del algoritmo está dada por</p>
<img src='http://s.wordpress.com/latex.php?latex=O%5Cleft%28%5Cdisplaystyle%20e%5E%7B%5Cdisplaystyle%20%5Cleft%28c%2Bo%281%29%5Cright%29ln%20%28n%29%5E%7B1%2F3%7Dln%28ln%28n%29%29%5E%7B2%2F3%7D%20%7D%5Cright%29%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='O\left(\displaystyle e^{\displaystyle \left(c+o(1)\right)ln (n)^{1/3}ln(ln(n))^{2/3} }\right) ' title='O\left(\displaystyle e^{\displaystyle \left(c+o(1)\right)ln (n)^{1/3}ln(ln(n))^{2/3} }\right) ' class='latex' />
<p>donde <img src='http://s.wordpress.com/latex.php?latex=c&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='c' title='c' class='latex' /> es una constante dada por la heurística utilizada en el algoritmo y <img src='http://s.wordpress.com/latex.php?latex=n&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='n' title='n' class='latex' /> es el número a factorizar (no los bits del número). <a href="http://en.wikipedia.org/wiki/Carl_Pomerance">Carl Pomerance</a>, creador del segundo mejor método de factorización, <a href="http://www.ams.org/notices/199612/pomerance.pdf">indica</a> que en este caso <img src='http://s.wordpress.com/latex.php?latex=c%20%3D%20%5Cleft%28%20%7B%5Cfrac%7B64%7D%7B9%7D%7D%5Cright%29%5E%7B1%2F3%7D%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='c = \left( {\frac{64}{9}}\right)^{1/3} ' title='c = \left( {\frac{64}{9}}\right)^{1/3} ' class='latex' />. Por otro lado tenemos que <img src='http://s.wordpress.com/latex.php?latex=o%281%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='o(1)' title='o(1)' class='latex' /> es una función asintótica que tiende a cero, por lo que para los cálculos se va a considerar como cero, pues Pomerance así lo toma.</p>
<p>Teniendo eso, lo que se puede hacer ahora es calcular el tiempo del algoritmo para factorizar un número de 1024 bits y comprarlo respecto al tiempo para factorizar uno de 1025 bits. Por lo que vamos a denotar <img src='http://s.wordpress.com/latex.php?latex=T_%7B1024%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='T_{1024}' title='T_{1024}' class='latex' /> al tiempo de 1024 bits y <img src='http://s.wordpress.com/latex.php?latex=T_%7B1025%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='T_{1025}' title='T_{1025}' class='latex' /> al tiempo de 1025 bits. </p>
<p>Sabemos que un número de 1024 bits se aproxima a <img src='http://s.wordpress.com/latex.php?latex=2%5E%7B1024%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='2^{1024}' title='2^{1024}' class='latex' /> y uno de 1025 bits a <img src='http://s.wordpress.com/latex.php?latex=2%5E%7B1025%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='2^{1025}' title='2^{1025}' class='latex' />, por lo que se van a tomar esas aproximaciones para simplificar la exponenciación. Tenemos entonces que</p>
<img src='http://s.wordpress.com/latex.php?latex=%5Cdisplaystyle%5Cdfrac%7B%5Cdisplaystyle%20T_%7B1025%7D%7D%7B%5Cdisplaystyle%20T_%7B1024%7D%7D%20%3D%20%5Cdisplaystyle%5Cdfrac%20%7Bk%20e%5E%7B%5Cdisplaystyle%20c%20%28ln%20%282%5E%7B1025%7D%29%5E%7B1%2F3%7Dln%28ln%282%5E%7B1025%7D%29%29%5E%7B2%2F3%7D%29%20%7D%20%7D%20%7Bk%20e%5E%7B%5Cdisplaystyle%20c%20%28ln%20%282%5E%7B1024%7D%29%5E%7B1%2F3%7Dln%28ln%282%5E%7B1024%7D%29%29%5E%7B2%2F3%7D%29%20%7D%7D%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\displaystyle\dfrac{\displaystyle T_{1025}}{\displaystyle T_{1024}} = \displaystyle\dfrac {k e^{\displaystyle c (ln (2^{1025})^{1/3}ln(ln(2^{1025}))^{2/3}) } } {k e^{\displaystyle c (ln (2^{1024})^{1/3}ln(ln(2^{1024}))^{2/3}) }} ' title='\displaystyle\dfrac{\displaystyle T_{1025}}{\displaystyle T_{1024}} = \displaystyle\dfrac {k e^{\displaystyle c (ln (2^{1025})^{1/3}ln(ln(2^{1025}))^{2/3}) } } {k e^{\displaystyle c (ln (2^{1024})^{1/3}ln(ln(2^{1024}))^{2/3}) }} ' class='latex' />
<p>donde <img src='http://s.wordpress.com/latex.php?latex=k&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='k' title='k' class='latex' /> es la constante de la notación asintótica. </p>
<p>Por lo tanto tenemos que </p>
<img src='http://s.wordpress.com/latex.php?latex=%5Cfrac%7BT_%7B1025%7D%7D%7BT_%7B1024%7D%7D%20%3D%201.0259%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\frac{T_{1025}}{T_{1024}} = 1.0259 ' title='\frac{T_{1025}}{T_{1024}} = 1.0259 ' class='latex' />
<p>Que es muy poco. Pues si el gobierno de algún país contara con los recursos para romper un módulo de 1024 bits en 24 semanas (6 meses), entonces romper uno de 1025 bits les llevaría casi 25 semanas. Esto en el mejor caso, puesto que la complejidad del algoritmo está dada en notación O, así que el algoritmo podría comportarse aún mejor de lo estimado y ser más rápido.</p>
<p>Si hacemos lo mismo y comparamos un módulo de 1024 respecto a uno de 1280, tenemos que <img src='http://s.wordpress.com/latex.php?latex=%5Cfrac%7BT_%7B1280%7D%7D%7BT_%7B1024%7D%7D%20%3D%20447.43&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\frac{T_{1280}}{T_{1024}} = 447.43' title='\frac{T_{1280}}{T_{1024}} = 447.43' class='latex' />. Que es bastante decente, y suponiendo que se pudiera factorizar el módulo de 1024 en una semana, entonces tardarían 8 años y medio en factorizar el de 1280; lo que le da bastante más confiabilidad a ese módulo que a uno de 1025. Aunque un cálculo más correcto sería considerando una ecuación diferencial porque la capacidad de cálculo no va a permanecer 8 años igual, va a ir aumentando.</p>
<p><strong>Pragmáticamente hablando</strong></p>
<p>Seguramente alguno va a desconfiar de este análisis, y necesitará una prueba más terrenal, sin tanta matemática. En ese caso lo invito a bajar un paquete que tenga implementado el algoritmo y factorice un número de unos 450 bits, que se puede hacer en un tiempo bastante decente (unos minutos) y vaya aumentando de bit en bit, para comparar los tiempos. Implementaciones hay varias y se pueden encontrar en la página de la <a href="http://en.wikipedia.org/wiki/General_number_field_sieve">wikipedia sobre GNFS.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2009/03/13/desmitificando-rsa-de-1025-bits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La información sobreescrita no se puede recuperar, punto final</title>
		<link>http://blog.amarello.com.mx/2009/01/19/la-informacion-sobreescrita-no-se-puede-recuperar-punto-final/</link>
		<comments>http://blog.amarello.com.mx/2009/01/19/la-informacion-sobreescrita-no-se-puede-recuperar-punto-final/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 18:50:06 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/?p=639</guid>
		<description><![CDATA[Hace unos días justamente, saltó a la duda si la información sobreescrita se podía recuperar con técnicas físicas, ya que con software es imposible. No pude resolver mi duda ya que desconozco los recursos con los que cuentan las empresas profesionales de recuperación de información; pero hoy leo que en el ICISS (International Conference on [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos días justamente, saltó a la duda si la información sobreescrita se podía recuperar con técnicas físicas, ya que con software es imposible. No pude resolver mi duda ya que desconozco los recursos con los que cuentan las empresas profesionales de recuperación de información; pero hoy leo que en el ICISS (International Conference on Information Systems Security) 2008, un equipo de investigación publicó un artículo en donde le pone punto final al asunto, y la conclusión a la que llegó es que: recuperar información sobreescrita es prácticamente imposible.</p>
<p>La leyenda urbana de que es inseguro borrar información sobreescribiéndola una vez siempre se escuchó de boca en boca, y se tomaba como un dogma de fe. Las herramientas de borrado seguro de información y los estándares de seguridad, dicen que para borrar información de manera segura se tienen que sobreescribir todos los bits 25 veces o más; lo que requiere tiempo y es simplemente una pérdida de tiempo.</p>
<p>Como bien es sabido mediante software la información sobreescrita no se puede recuperar, pero mediante hardware queda la duda. Por ello para desfalcar el mito, Craig Wright, experto en forensia, y su equipo, hicieron un estudio para analizar varios discos duros de distinta manufactura y edad. El estudio consistió en sobreescribir la información en condiciones controladas y luego estudiar las superficies de los platos con un <strong>Microscopio de Fuerzas Magnéticas</strong>. Así llegaron a la conclusión de que recuperar la información después de una sola sobreescritura tiene una probabilidad que tiende a cero; y, se habla en términos de probabilidad porque reconstruir un bit tiene una probabilidad de 56% y reconstruir un byte completo 0.97%; esto con discos nuevecitos. Pero la prueba más interesante, que fue llenar 32 veces el disco usando <em>dd</em> con <em>/dev/random</em>, para simular un disco usado, y luego sobreescribiendo todo con <em>/dev/zero</em>, arrojó aún menos probabilidad de recuperación.</p>
<p>Así que para borrar un disco duro ya no habrá que reformatear muchas veces el disco, ni comprar herramientas especializadas. Con una distribución Linux live, y un simple <em>dd if=/dev/zero of=/dev/sda</em> será suficiente. Pero si todavía no tienes confianza y crees que rasurarse muchas veces hace salir más barba o que las probabilidades son engañosas, aunque OpenSSL <a href="http://www.openssl.org/docs/crypto/BN_generate_prime.html">usa una prueba probabilística de primalidad</a>, puedes usar <em>/dev/urandom</em>. Hacer más y perder tu tiempo ya es simplemente ser supersticioso.</p>
<p><a href="http://sansforensics.wordpress.com/2009/01/15/overwriting-hard-drive-data/">[Resumen del artículo original]</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2009/01/19/la-informacion-sobreescrita-no-se-puede-recuperar-punto-final/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>El supuesto último gran fallo de Internet del 2008</title>
		<link>http://blog.amarello.com.mx/2008/12/31/el-supuesto-ultimo-gran-fallo-de-internet-del-2008/</link>
		<comments>http://blog.amarello.com.mx/2008/12/31/el-supuesto-ultimo-gran-fallo-de-internet-del-2008/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 18:22:21 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Seguridad en Información]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/?p=577</guid>
		<description><![CDATA[Desde hace dos días he leído toda clase de barbaridades acerca del supuesto &#8220;más grande ataque a la infraestuctura de internet&#8221; de los últimos tiempos. Además de desacertado (pues ya se había previsto) es completamente amarillista llamarlo así, al día de hoy (31 de diciembre) los investigadores que publicaron el ataque informan que el problema [...]]]></description>
			<content:encoded><![CDATA[<p>Desde hace dos días he leído toda clase de barbaridades acerca del supuesto &#8220;más grande ataque a la infraestuctura de internet&#8221; de los últimos tiempos. Además de desacertado (pues ya se había previsto) es completamente amarillista llamarlo así, al día de hoy (31 de diciembre) los investigadores que publicaron el ataque informan que el problema ha sido corregido por VeriSign y los potenciales afectados han sido informados.</p>
<p>He aquí de algunos titulares amarillistas que he encontrado:</p>
<p><a rel="nofollow" href="http://barrapunto.com/articles/08/12/30/1553234.shtml">Vulnerabilidad en la infraestructura de clave pública </a><br />
<a rel="nofollow" href="http://www.theinquirer.es/2008/12/31/el-algoritmo-md5-en-peligro.html">El algoritmo MD5, en peligro</a><br />
<a rel="nofollow" href="http://www.astalavista.com/index.php?section=blog&#038;cmd=details&#038;id=4268">Researchers hack VeriSign&#8217;s SSL scheme for securing Web sites</a><br />
<a rel="nofollow" href="http://meneame.net/story/como-unos-hackers-rompieron-seguridad-ssl-usando-200-ps3">Cómo unos hackers rompieron la seguridad del SSL usando 200 PS3</a></p>
<p>Hasta sitios que considero de respeto, como Astalavista, cayeron en el juego. Yo preferí leer el <a href="http://www.win.tue.nl/hashclash/rogue-ca/">reporte orginal</a> de los investigadores e informar breve pero verdaderamente el ataque que realizaron.</p>
<p><strong>Breve introducción</strong></p>
<p>Como <a href="http://blog.amarelloartis.com/2007/09/21/autoridades-certificadoras-certificados-de-seguridad/">alguna vez explicamos</a>, una parte de la seguridad en Internet se basa en el uso de certificados digitales, que dan certeza sobre la identidad de un servidor en Internet. Un equipo de investigadores recientemente publicó una demostración de un ataque que permitió falsificar indetectablemente un certificado digital, firmado por la empresa RapidSSL (filial de VeriSign), y que los navegadores aceptan como parte del círculo de confianza.</p>
<p>El ataque fue factible porque la empresa RapidSSL generaba las firmas digitales, de sus certificados digitales, usando el esquema &#8216;MD5 con RSA&#8217;. El algoritmo MD5 ya se considera inseguro desde hace largo tiempo. Anteriormente se han realizado demostraciones impresionantes, por ejemplo el famoso caso de <a href="http://www.win.tue.nl/hashclash/Nostradamus/">Nostradamus</a> en donde generaron distintos archivos PDF que tenían el mismo hash MD5. Además <a href="http://en.wikipedia.org/wiki/X.509#Security">desde 2005</a> ya se había publicado un artículo en donde se exponía cómo usar colisiones MD5 para generar dos certificados digitales distintos que produjeran el mismo hash.</p>
<p><strong>El ataque</strong></p>
<p>Lo que hicieron estos investigadores, para falsificar el certificado, fueron principalmente dos cosas: predecir probabilísticamente cuál iba a ser el siguiente número de serie (del certificado generado por RapidSSL) y generar una llave pública que ocasionara colisiones MD5. La parte más dificil fue construir una llave pública que ocasionara colisiones y construir la llave privada a partir de la llave pública, pues es necesario firmar con la llave privada la petición de un certificado. Se requirió el poder de un clúster de 200 PS3 para hacer los cálculos, además de gastar 657 dólares en la compra de certificados para poder predecir el número de serie.</p>
<p>El alcance de este ataque, como bien dicen ellos, está limitado para aquellas CA (Autoridades Certificadoras) que generen certificados firmados con MD5, y la gran mayoría actualmente firma con SHA-1. Aunque SHA-1 ya no se considera seguro no se conocen ataques de este tipo, pero ellos recomiendan que se use al menos SHA-2 para generar las firmas, porque puede ser que en poco tiempo empiecen a surgir ataques parecidos a los de MD5 y sí va a ser entonces un problema grave para todo el mundo. </p>
<p>En el <a href="http://www.win.tue.nl/hashclash/rogue-ca/">artículo original</a> se puede encontrar el certificado y una página web de muestra para ver el certificado en funcionamiento. Pero los investigadores se cuidaron de que nadie le dé mal uso a su trabajo, por lo que hicieron que el certificado expirara en 2004 y no publicaron la llave privada. Potencialmente, si se pudiera llevar a cabo este ataque para cualquier certificado, cualquiera podría falsificar la conexión segura de un banco (por ejemplo) y de manera indetectable si se combina con un <em>DNS poisoning</em> o <em>pharming</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2008/12/31/el-supuesto-ultimo-gran-fallo-de-internet-del-2008/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ext4</title>
		<link>http://blog.amarello.com.mx/2008/12/29/ext4/</link>
		<comments>http://blog.amarello.com.mx/2008/12/29/ext4/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 18:23:34 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/?p=554</guid>
		<description><![CDATA[Como mencioné en una entrada anterior , Ext4 ya está listo para sustituir a Ext3 y el kernel más nuevo de Linux ya incluye soporte estable para él. Los sistemas de archivos Extended (Ext, Ext2,&#8230;) han sido históricamente usados por defecto en sistemas Linux y son herederos de los viejos sistemas de archivos Unix; aunque [...]]]></description>
			<content:encoded><![CDATA[<p>Como mencioné en una <a href="http://blog.amarelloartis.com/2008/12/25/nuevo-kernel-linux-2628/">entrada anterior </a>, Ext4 ya está listo para sustituir a Ext3 y el kernel más nuevo de Linux ya incluye soporte estable para él. Los sistemas de archivos Extended (Ext, Ext2,&#8230;) han sido históricamente usados por defecto en sistemas Linux y son herederos de los viejos sistemas de archivos Unix; aunque Linux soporta otros sistemas de archivos más modernos como ReiserFS y XFS. En esta entrada voy a explicar a grandes rasgos las mejoras de Ext4 respecto a Ext3.</p>
<p>Ext3 supuso una mejora respecto a Ext2 al introducir <em>journaling</em>. El <em>journaling</em> es una técnica mediante la cual se lleva un registro de las actividades en el sistema de archivos y facilita la recuperación del sistema de archivos después de una interrupción abrupta (como una falla eléctrica). Cuando se borra un archivo ocurren dos procesos principales: eliminación de la entrada del directorio que lo contiene y marcado de los bloques ocupados como bloques libres en el mapa de bloques; si no se completan los dos procesos el sistema de archivos puede quedar en un estado inconsistente; además detectar y recuperarse del fallo puede toma mucho tiempo, pero con <em>journaling</em> esto se puede hacer de manera más eficiente y segura.</p>
<p>No me voy a centrar en datos sensacionalistas sobre el tamaño de archivos que ahora soporta, o la cantidad de archivos que puede contener cada directorio, ya que eso NO es un diferenciador importante a la hora de comparar sistemas de archivos. Quiero enumerar las nuevas características y mejoras conceptuales que se introdujeron:</p>
<ul>
<li><strong>Extents:</strong> Los sistemas de archivos derivados  de Unix (como Ext3) mantienen un esquema de mapeo de bloques para llevar el rastreo de bloques que pertecen a un archivo, por ejemplo un i-nodo mantiene una lista de bloques de un archivo. Para archivos grandes esto es ineficiente en tiempo y espacio pues el mapa de bloques es enorme, ya que los bloques son de tamaño fijo. Un <em>extent</em> es básicamente un espacio de bloques físicamente adyacentes que ahora se puede utilizar en el mapeo de un archivo; esto mejora el rendimiento, reduce el espacio y reduce la fragmentación.</li>
<li><strong>Alojamiento multibloque:</strong> Cuando Ext3 quiere escribir información a disco, el alojador de bloques decide qué bloques libres van a ser usados para escribir los datos. El problema es que el sistema de Ext3 sólo permite alojar un bloque (4 Kb) a la vez; esto no sólo es ineficiente para el tamaño de los archivos que se manejan actualmente, también impide que se pueda optimizar la asignación de bloques pues el alojador de bloques no sabe de qué tamaño es todo lo que se va a escribir. Con el alojamiento multibloque se pueden pedir muchos bloques al mismo tiempo. Esta característica ayuda a reducir la fragmentación.</li>
<li><strong>Alojamiento retartado:</strong> Esta característica ya viene incluida en sistemas de archivos modernos como XFS, ZFS y Reiser, y consiste en retardar el alojamiento de bloques lo más posible. Lo que pasa actualmente es que cuando un proceso pide escribir a disco, inmediatamente se asigna el bloque al que se va a escribir, aún si la información va a estar en caché un tiempo o si se va esperar un tiempo antes de escribir. Este método trae desventajas como cuando un proceso está escribiendo un <em>stream</em>, ya que no se sabe de qué tamaño va a ser el archivo finalmente. El alojamiento retardado asigna los bloques hasta que realmente se va a escribir a disco, lo que permite optimizar el alojamiento. Esta característica se combina perfectamente con las dos anteriores: extents y alojamiento multibloque; para mejorar el rendimiento y la fragmentación.</li>
<li><strong>Defragmentación al vuelo: </strong> Aunque con las características anteriores la fragmentación se va a reducir en la mayoría de lo casos, ahora existe la opción de defragmentar el sistema de archivos al vuelo. Esto porque en sistemas de alta concurrencia la fragmentación es un gran problema y la leyenda urbana de que Ext3 se fragmenta poco es completamente falsa para un sistema de mediana concurrencia al disco duro. Esta característica no está disponible todavía en el kernel (2.6.28) pero existe una herramienta llamada <em>e4defrag</em> por el momento.</li>
<li><strong>Prealojamiento persistente: </strong>Cuando una aplicación necesite reservar espacio en disco pero todavía no tenga los datos que se van a escribir, se puede prealojar el espacio en el sistema de archivos; esto es que se construyan las estructuras internas del sistema de archivos y se reserven los bloques necesarios. Por ejemplo lo que hacen los clientes P2P es escribir un archivo relleno de ceros del tamaño del archivo que van a bajar, pero esto es sucio e ineficiente. Con el prealojamiento este problema se soluciona y además se reduce la posibilidad de fragmentación.</li>
</ul>
<p>Además se introdujeron otras mejoras en los i-nodos y en el <em>journal</em>. Un efecto colateral con todas las mejoras es que el <em>fsck</em> ahora va a ser mucho más rápido, por lo que ya no tendremos que desesperarnos cada vez que nuestro Debian necesite hacer un chequeo de disco.</p>
<p><a href="http://kernelnewbies.org/Ext4"><br />
[Fuente]</a></p>
<p><a href="http://en.wikipedia.org/wiki/Journaling_file_system">[Fuente2]</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2008/12/29/ext4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

