<?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>La Comunidad DragonJAR &#187; Formato</title> <atom:link href="http://www.dragonjar.org/tag/formato/feed" rel="self" type="application/rss+xml" /><link>http://www.dragonjar.org</link> <description>Noticias de actualidad y seguridad informática, herramientas de seguridad, documentación y una excelente COMUNIDAD.</description> <lastBuildDate>Sat, 11 Feb 2012 22:13:24 +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>Programación Segura: Problemas de cadena de formato</title><link>http://www.dragonjar.org/programacion-segura-problemas-de-cadena-de-formato.xhtml</link> <comments>http://www.dragonjar.org/programacion-segura-problemas-de-cadena-de-formato.xhtml#comments</comments> <pubDate>Tue, 20 Nov 2007 06:21:38 +0000</pubDate> <dc:creator>DragoN</dc:creator> <category><![CDATA[Artículos sobre seguridad]]></category> <category><![CDATA[Cadenas]]></category> <category><![CDATA[Formato]]></category> <category><![CDATA[Programación]]></category> <category><![CDATA[Segura]]></category><guid
isPermaLink="false">http://www.dragonjar.org/?p=747</guid> <description><![CDATA[Continúa desde “Programación Segura: Desbordamientos del Búfer” Revisión General de los Problemas de cadena de formato. Los problemas de cadena de formato contituyen uno de los pocos ataques realmente nuevos que surgieron en años recientes. Al igual que con muchos problemas de seguridad, la principal causa de los errores de cadena de formato es aceptar [...]]]></description> <content:encoded><![CDATA[<p>Continúa desde “<a
href="../programacion-segura-desbordamientos-del-bufer.xhtml" target="_blank">Programación Segura: Desbordamientos del Búfer</a>”</p><p><strong>Revisión General de los Problemas de cadena de <a
href="http://www.dragonjar.org/tag/formato" class="st_tag internal_tag" rel="tag" title="Entradas etiquetadas con Formato">formato</a>.</strong></p><p>Los problemas de cadena de formato contituyen uno de los pocos ataques realmente nuevos que surgieron en años recientes.<br
/> Al igual que con muchos problemas de seguridad, la principal causa de los errores de cadena de formato es aceptar sin validar la entrada proporcionada por el usuario. En<a
href="http://es.wikipedia.org/wiki/C%2B%2B" target="_blank"> C/C++</a> es posible utilizar errores de cadena de formato para escribir en ubicciones de memoria arbitrarias, y el aspecto mpas peligroso es que esto llega a suceder sin manipular bloques de memoria adyacentes. Esta capacidad de diseminación permite a un atacante eludir protecciones de pila, e incluso modificar partes my pequeñas de memoria. El problema también llega a ocurrir cuando las <a
href="http://www.dragonjar.org/tag/cadenas" class="st_tag internal_tag" rel="tag" title="Entradas etiquetadas con Cadenas">cadenas</a> de formato se leen a partir de una ubicación no confiable que controla el atacante. Este último aspecto del problema tiende a ser más frecuente en sistemas <a
href="http://es.wikipedia.org/wiki/Unix" target="_blank">UNIX</a> y <a
href="http://es.wikipedia.org/wiki/Linux" target="_blank">Linux</a>. En sistemas Windows las tablas de cadena de aplicación suelen mantenerse dentro del progrma ejecutable o de las bibliotecas de vínculo dinámico (<a
href="http://es.wikipedia.org/wiki/Dynamic_Linking_Library" target="_blank">DLL, Dynamic Link Libraries</a>) del recurso. Si un atacante reeescribe el ejecutable principal o de las DLL, tendrá la posibilidad de realizar ataques mucho más directos que con errores de cadena de formato.<span
id="more-747"></span></p><p>Aunque no esté trabajando con C/C++, los ataques de cadena de formato quizá conduzcan a problemas importantes; el más obvio es engañar a los usuarios, pero bajo ciertas circustancias es posible que un atacante lance ataques de creación de script de sitio cruzado o de inyección de SQL, los cuales también se utilizan para corregir o transformar datos.</p><p><strong>Lenguajes Afectados</strong></p><p>El lenguaje más afectado es C/C++. Un ataque exitoso quizá conduzca de manera inmediata a la ejecución de código arbitrario y a revelación de información. Por lo general otros lenguajes no permiten la ejecución de código arbitario, pero, como ya se observó, son proporcionados por entrada del usuario, pero podría serlo si las cadenas de formato se leen a partir de datos manipulados.</p><p><strong>Explicación del problema de cadena de formato</strong></p><p>El formateo de datos para despliegue o almacenamiento tal vez represente una tarea un poco difícil; por tanto, en muchos lenguajes de computadora se incluyen rutinas para reformatear datos con facilidad. En casi todos los lenguajes la información de formato se describe a través de un tipo de cadena, denominada cadena de formato. En realidad, la cadena de formato se define con el uso de lenguaje de procesamiento de datos limitado que está diseñado para facilitar la descripción de formatos de salida. Sin embargo, muchos desarrolladores cometen un sencillo error: utilizan datos de usuarios no confiables como cadena de formato; el resultado es que los atacantes pueden escribir cadenas en el lenguaje de procesamiento de datos para causar muchos problemas.</p><p>El diseño de C/C++ hace que esto sea especialmente peligroso: dificulta la detección de problemas de cadena de formato, y entre las cadenas de formato se incluyen algunos comandos muy peligrosos (en particular %n) que no existen en lenguajes de cadena de formato de algunos otros lenguajes.</p><p>En C/C++ puede declararse una función para que tome un número de variable de argumentos al especificar puntos suspensivos (…) como el último (o único) argumento. El problema es que la función a la que se llama no tiene manera de saber cuántos argumentos se están pasando. El conjunto más común de funciones que toman argumentos de longitud variable es la familia de printf: printf, sprintf, snprintf, vprintf, etc. Las extensas funciones de carácter que realizan la misma función tienen el mismo problema. Veamos un ejemplo:</p><p><em>#include &lt;studio.h&gt;<br
/> int main (int argc, char* argv[])<br
/> {<br
/> if (argc &gt; 1)<br
/> printf(argv[1]);<br
/> return 0;<br
/> }</em></p><p>Algo muy sencillo. Ahora veamos lo que está mal. El programador está esperando que el usuario introduzca algo benigno como <em>Hola mundo</em>. Si lo intenta, obtendrá <em>Hola mundo</em>. Ahora cambiemos un poco la entrada: pruebe <em>%x %x</em>. En un sistema Windows XP con la línea de comandos predeterminada (cmd. exe) , ahora obtendrá lo siguiente:</p><p><em>E:\proyectos\<a
href="http://www.dragonjar.org/tag/programacion" class="st_tag internal_tag" rel="tag" title="Entradas etiquetadas con Programación">programación</a>_<a
href="http://www.dragonjar.org/tag/segura" class="st_tag internal_tag" rel="tag" title="Entradas etiquetadas con Segura">segura</a>\format_bug&gt;format_bug.exe “%x %x”<br
/> 12ffc0 4011e5</em></p><p>Observe que si está ejecutando un sistema operativo diferente o utilizando un interprete de línea de comandos diferente, tal vez necesite realizar algunos cambios para alimentar esta cadena exacta en su programa, y es posible que los resultados sean diferentes. Para facilitar su uso podría colocar los argumentos en una línea de comandos de shell o en un archivo de procesamiento por lotes.</p><p>¿Qúe sucedió? La función de printf tomó una cadena de entrada que hizo que esperara a que se colocaran dos argumentos en la pila antes de llamar a la función. Los especificadores <em>%x</em> le permiten leer la pila, de cuatro en cuatro bytes, hasta donde se desee. No es difícil imaginar que si tuviera una función más compleja que almacenara un secreto en una variable de pila, el atacante tendría la posibilidad de leerlo. Aquí la salida es la dirección de la ubicación de la pila <em>(0×12ffc0)</em>, seguida de la ubicación del código en que se devolverá la función <em>main()</em> . Como se imagina, ambas son piezas de información muy importantes que se filtran al atacante.</p><p>Tal vez ahora se esté preguntando cómo utiliza el atacante un error de cadena de formato para escribir en la memoria. Uno de los especificadores de formato menos utilizados es <em>%n</em>, que escribe el número de caracteres que deben haberse escrito hasta el momento en la dirección de la variable que proporcionó como argumento correspondiente. He aquí cómo debe utilizarse:</p><p><em>unsigned int bytes;<br
/> printf (”%s%n\n”, argv[1], &amp;bytes);<br
/> printf (su entrada fue de %d caracteres de largo\n, bytes”);</em></p><p>La salida sería:</p><p><em>E:\proyectos\programacion_segura\format_buf&gt;format_bug2.exe “alguna salida aleatoria”<br
/> Alguna entrada aleatoria<br
/> Su entrada fue 17 caracteres de largo</em></p><p>En una plataforma con enteros de cuatro bytes el especificador<em> %n</em> escribirá cuatro bytes a la vez, y <em>%hn </em>escribirá dos bytes. Ahora los atacantes sólo tienen que imaginar cómo obtener la dirección que desean en la posición apropiada de la pila y ajustar los especificadores de ancho de campo hasta que el número de bytes escrito sea el que desean.</p><p><strong>C/C++</strong></p><p>A diferencia de muchos otros errores que examinaremos, éste es basatante fácil de localizar como defecto de código. Es muy sencillo:</p><p><em>printf (entrada_usuario);</em><br
/> Es incorrecto, y</p><p><em>printf (”%s”, entrada_usuario);</em><br
/> Es correcto .</p><p><strong>Localización de problemas de cadena de formato</strong></p><p>Cualquier aplicación que tome entrada del usuario y la pase a una función de formateo está en riesgo. Un ejemplo muy frecuente de este problema sucede junto con aplicaciones que registran la entrada de usuario. Además, algunas funciones tal vez implanten formateo de manera interna.<br
/> En C/C++ busque funciones de la familia printf. Entre los problemas que habrá de localizar se encuentran los siguientes:</p><p><em>printf (entrada_usuario) ;<br
/> fprintf (STDOUT, entrada_usuario);</em></p><p>Si se encuentra con una  función con el siguiente aspecto:</p><p><em>fprintf (STDOUT, msg_format, arg1, arg2);</em></p><p>necesitará verificar dónde se almacena la cadena a la que hace referencia msg_formato y si está bien protegida.<br
/> Hay muchas otras llamadas de sistema y <a
href="http://es.wikipedia.org/wiki/Application_Programming_Interface" target="_blank">API</a> que también son vulnerables, syslog es una de ellas. Cuando vea una definición de función que incluya <em>… </em>en la lista de argumentos, esta viendo algo que posiblemente represente un problema.<br
/> Muchos escáneres de código fuente, aun los de léxico como <a
href="http://www.fortifysoftware.com/security-resources/rats.jsp" target="_blank">RATS</a> y <a
href="http://www.dwheeler.com/flawfinder/" target="_blank">Flawfinder</a>, detectan esto. Incluso <a
href="http://www.mirrors.au.wiretapped.net/security/development/auditing/pscan/test.c" target="_blank">PSCAN</a> se diseñó de manera especifica con este propósito.<br
/> Además, existen herramientas de respuesta que se integran en el proceso de compilación; por ejemplo <a
href="http://citeseer.ist.psu.edu/cowan01formatguard.html" target="_blank">FormatGuard</a> de Crispin Cowan.</p><p><strong>Técnicas de prueba para encontrar el problema de cadena de formato</strong></p><p>Pase especificadores de formateo a la aplicación y vea si se regresan valores hexadecimales. Por ejemplo, si tiene una aplicación que espera un nombre de archivo y regresa un mensaje de error que contiene la entrada cuando no se encuentra el archivo, entonces trate de proporcionarle nombres de archivo como <em>NoProbable%x%x.txt</em>. Si obtiene un mensaje de error parecido a las siguientes líneas “<em>NoProbable12fd234104587</em>“, acaba de encontrar una vulnerabilidad de cadena de formato.</p><p><strong>Ejemplos de Problemas de Cadena de Formato </strong></p><p>Entradas en la lista Common Vulnerabilities and Exposures, CVE.</p><p><a
href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2000-0573" target="_blank">CVE-2000-0573</a><br
/> <a
href="http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2000-0844" target="_blank"> CVE-2000-0844</a></p><p><strong>Métodos de prevención</strong></p><p>El primer paso es nunca pasar entradas de usuario directamente a un función de formateo, además de asegurarse de hacerlo en cada nivel de manipulación de salida formateada. Como nota adicional, las funciones de formateo tienen una sobrecarga de trabajo importante. Si está interesado, busque <em>_output</em> en el archivo fuente, tal vez sea conveniente escribir:</p><p><em>fprintf (STDOUT, buf);</em></p><p>la anterior línea de código no es sólo peligrosa, sino que también consume muchos ciclos de CPU adicionales.</p><p>El segundo paso que habrá de darse consiste en asegurar que las cadenas de formato que utiliza su aplicación se lean desde lugares confiables, y que las rutas a las cadenas no sean controladas por el atacante.</p><p><strong>Medidas defensivas adicionales</strong></p><p>Verifique y limite la ubicación a valores válidos. No utilice la familia de funciones printf, si puede evitarlas. Por ejemplo, si está empleando C++, use operadores de flujo:</p><p><em>#include &lt;iostream&gt;<br
/> //…<br
/> std::cout &lt;&lt;entrada_usuario<br
/> //…</em></p><p><strong>Resumen</strong></p><ul><li>Utilice cadenas de formato fijas o cadenas de formato provenientes de una fuente confiable.</li><li>Compruebe y limite los requerimientos del lugar a valores válidos.</li><li>No pase entrada de usuario directamente como la cadena de formato a funciones de formateo.</li><li>Tome en cuenta el uso de lenguajes de más alto nivel que tiendan a ser menos vulnerables a este problema.</li></ul><h3  class="related_post_title">También puede interesarte...</h3><ul
class="related_post"><li><a
href="http://www.dragonjar.org/programacion-segura-desbordamientos-del-bufer.xhtml" title="Programación Segura: Desbordamientos del Búfer ">Programación Segura: Desbordamientos del Búfer </a></li><li><a
href="http://www.dragonjar.org/los-peores-passwords-en-espanol.xhtml" title="Las peores Contraseñas en Español">Las peores Contraseñas en Español</a></li><li><a
href="http://www.dragonjar.org/malas-contrasenas-para-utilizar.xhtml" title="Las Peores 500 Contraseñas de Todos los Tiempos">Las Peores 500 Contraseñas de Todos los Tiempos</a></li><li><a
href="http://www.dragonjar.org/biohacking-una-nueva-era-de-desarrollo-o-de-terror.xhtml" title="BioHacking – ¿Una nueva era de desarrollo? o ¿de terror?">BioHacking – ¿Una nueva era de desarrollo? o ¿de terror?</a></li><li><a
href="http://www.dragonjar.org/busquedas-cifradas-en-google.xhtml" title="Tus busquedas en Google ahora Cifradas">Tus busquedas en Google ahora Cifradas</a></li><li><a
href="http://www.dragonjar.org/rompen-sistema-criptografia-cuantica.xhtml" title="Rompen el primer sistema de criptografía cuántica">Rompen el primer sistema de criptografía cuántica</a></li><li><a
href="http://www.dragonjar.org/curso-de-python-dictado-por-google.xhtml" title="Curso de Python dictado por Google">Curso de Python dictado por Google</a></li><li><a
href="http://www.dragonjar.org/curso-gratis-desarrollo-seguro-aplicaciones-web-google.xhtml" title="Curso sobre desarrollo seguro de aplicaciones web por Google">Curso sobre desarrollo seguro de aplicaciones web por Google</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dragonjar.org/programacion-segura-problemas-de-cadena-de-formato.xhtml/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>80 servicios y herramientas para convertir archivos &#8211; formatos</title><link>http://www.dragonjar.org/80-servicios-y-herramientas-para-convertir-archivos-formatos.xhtml</link> <comments>http://www.dragonjar.org/80-servicios-y-herramientas-para-convertir-archivos-formatos.xhtml#comments</comments> <pubDate>Sat, 18 Aug 2007 06:16:38 +0000</pubDate> <dc:creator>DragoN</dc:creator> <category><![CDATA[Variado]]></category> <category><![CDATA[Archivos]]></category> <category><![CDATA[Convertir]]></category> <category><![CDATA[Formato]]></category><guid
isPermaLink="false">http://www.dragonjar.org/?p=733</guid> <description><![CDATA[La conversión de archivos entre diferentes formatos puede ser una compleja y ardua tarea, especialmente cuando no tenemos a mano las herramientas necesarias para ello. Allí es donde entramos a google y empezamos a buscar desesperadamente ese enlace salvador que no sacará del apuro. La siguiente es una completisima y útil colección de herramientas y [...]]]></description> <content:encoded><![CDATA[<p>La conversión de <a
href="http://www.dragonjar.org/tag/archivos" class="st_tag internal_tag" rel="tag" title="Entradas etiquetadas con Archivos">archivos</a> entre diferentes formatos puede ser una compleja y ardua tarea, especialmente cuando no tenemos a mano las herramientas necesarias para ello. Allí es donde entramos a google y empezamos a buscar desesperadamente ese enlace salvador que no sacará del apuro.<span
id="more-733"></span></p><p>La siguiente es una completisima y útil colección de herramientas y servicios  en línea para la conversión automática de archivos y formatos, incluyendo, imágenes, video, audio, oficina, etc.</p><p>En la lista encontraremos  recursos tan variados, que van desde conversores de código fuente (vb, c#, html, .net, perl, etc), pasando por imágenes (gif, jpg, png, bmp, psd, etc), trabajo de oficina (xls, pfd, doc, ppt), hasta multimedia (dvd, avi, wmv, mpeg, mp4, mov, mp3)…. un largo etc.</p><p><a
href="http://mashable.com/2007/11/05/80-file-conversion-services/" target="_blank">Servicio de conversión de archivos</a></p><h3  class="related_post_title">También puede interesarte...</h3><ul
class="related_post"><li><a
href="http://www.dragonjar.org/parchear-problema-de-seguridad-de-safari-en-iphone-ipod-touch-e-ipad.xhtml" title="Parchear problema de seguridad de Safari en iPhone, iPod Touch e iPad">Parchear problema de seguridad de Safari en iPhone, iPod Touch e iPad</a></li><li><a
href="http://www.dragonjar.org/almacenamiento-online-de-10gb-gratis.xhtml" title="Almacenamiento Online de 10GB Gratis">Almacenamiento Online de 10GB Gratis</a></li><li><a
href="http://www.dragonjar.org/como-realizar-un-borrado-seguro-usando-bleachbit.xhtml" title="Como realizar un borrado seguro usando BleachBit">Como realizar un borrado seguro usando BleachBit</a></li><li><a
href="http://www.dragonjar.org/testdisk-recupera-tus-particiones-y-archivos.xhtml" title="TestDisk &#8211; Recupera tus Particiones y Archivos">TestDisk &#8211; Recupera tus Particiones y Archivos</a></li><li><a
href="http://www.dragonjar.org/como-eliminar-la-contrasena-de-un-pdf.xhtml" title="¿Como Eliminar la Contraseña de un PDF?">¿Como Eliminar la Contraseña de un PDF?</a></li><li><a
href="http://www.dragonjar.org/como-quemar-archivo-dmg-en-windows.xhtml" title="Como quemar un archivo DMG en Windows y GNU Linux">Como quemar un archivo DMG en Windows y GNU Linux</a></li><li><a
href="http://www.dragonjar.org/tip-enviar-archivos-por-ssh-con-rsync.xhtml" title="Tip: Enviar archivos por SSH con rsync">Tip: Enviar archivos por SSH con rsync</a></li><li><a
href="http://www.dragonjar.org/como-archivo-etc-hosts.xhtml" title="Archivo hosts Linux Bloqueo de sitios Web usando el archivo HOSTS">Archivo hosts Linux Bloqueo de sitios Web usando el archivo HOSTS</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dragonjar.org/80-servicios-y-herramientas-para-convertir-archivos-formatos.xhtml/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 10/31 queries in 0.016 seconds using disk: basic
Object Caching 768/798 objects using disk: basic

Served from: www.dragonjar.org @ 2012-02-11 22:24:18 -->
