{"id":613,"date":"2007-02-13T23:42:35","date_gmt":"2007-02-13T22:42:35","guid":{"rendered":"http:\/\/www.marblestation.com\/blog\/?p=613"},"modified":"2012-04-26T16:53:52","modified_gmt":"2012-04-26T14:53:52","slug":"deteccion-de-riesgos-y-vulnerabilidades-tecnologicos","status":"publish","type":"post","link":"https:\/\/www.marblestation.com\/?p=613","title":{"rendered":"Detecci\u00f3n de riesgos y vulnerabilidades tecnol\u00f3gicas"},"content":{"rendered":"<p>\nEsquema general de pasos a seguir para la detecci&oacute;n de posibles riesgos y vulnerabilidades. Se incluyen algunas recomendaciones generales.<\/p>\n<p><i>Art\u00edculo relacionado: <a href=\"http:\/\/www.marblestation.com\/blog\/?p=614\">Valoraci\u00f3n de riesgos tecnol\u00f3gicos<\/a><\/i><\/p>\n<p>\nBasado en la gu&iacute;a de pruebas de <a href=\"http:\/\/www.owasp.org\">OWASP<\/a> (Open Web Application Security Project).<\/p>\n<p><!--more--><\/p>\n<h3>\u00cdndice<\/h3>\n<p><a href=\"#seccion01\">Obtenci\u00f3n pasiva de informaci\u00f3n<\/a><br \/>\n<a href=\"#seccion02\">L\u00f3gica de la aplicaci\u00f3n<\/a><br \/>\n<a href=\"#seccion03\">Pruebas de autentificaci\u00f3n<\/a><br \/>\n<a href=\"#seccion04\">Gesti\u00f3n de sesiones<\/a><br \/>\n<a href=\"#seccion05\">Validaci\u00f3n de los datos<\/a><br \/>\n<a href=\"#seccion06\">Riesgos referentes a ataques de denegaci\u00f3n de servicio<\/a><br \/>\n<a href=\"#seccion07\">Servicios Web<\/a><br \/>\n<a href=\"#seccion08\">AJAX (Asynchronous JavaScript and XML)<\/a><\/p>\n<h3><a name=\"seccion01\">Obtenci&oacute;n pasiva de informaci&oacute;n:<br \/>\n<\/a><\/h3>\n<p><u>Descubrimiento de aplicaciones:<\/u><\/p>\n<ul>\n<li>\n<p>Detectar puertos abiertos e identificar servicios\/aplicaciones escuchando (seg&uacute;n su \u201cfingerprint\u201d)<\/p>\n<ul>\n<li>\n<p LANG=\"en-GB\">nmap \u2013P0 \u2013sT \u2013sV \u2013p1-65535 192.168.1.100<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Informaci&oacute;n proporcionada\tpor servicios web.<\/p>\n<ul>\n<li>\n<p>telnet XX.XX.XX.XX 80<\/p>\n<\/li>\n<li>\n<p>GET \/ HTTP\/1.0<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><u>C&oacute;digos de error:<\/u><\/p>\n<ul>\n<li>\n<p><span LANG=\"es-ES\">Provocar errores \u201cHTTP 404 \u2013 Not Found\u201d para obtener informaci&oacute;n adicional, por ejemplo:<\/span><\/p>\n<p LANG=\"en-GB\"><i>Not Found<\/i><\/p>\n<p LANG=\"en-GB\"><i>The requested URL<br \/>\n\t\/page.html was not found on this server.<\/i><\/p>\n<p LANG=\"en-GB\"><i>Apache\/2.2.3 (Unix) mod_ssl\/2.2.3 OpenSSL\/0.9.7g  DAV\/2 PHP\/5.1.2 Server at localhost Port 80<\/i><\/p>\n<p LANG=\"en-GB\">\n<\/li>\n<\/ul>\n<p><u>Vulnerabilidades de los servicios:<\/u><\/p>\n<ul>\n<li>\n<p>Comprobar que no existen vulnerabilidades en las versiones de las aplicaciones descubiertas.<\/p>\n<p><u>Comprobaci&oacute;n de la validez de certificados SSL:<\/u><\/p>\n<\/li>\n<li>\n<p>Si se est&aacute;n utilizando conexiones seguras mediante HTTPS, comprobar el certificado del servidor seg&uacute;n los siguientes puntos:<\/p>\n<ul>\n<li>\n<p>Quien firma el certificado.<\/p>\n<\/li>\n<li>\n<p>Fecha de validez (comprobar que no ha caducado)<\/p>\n<\/li>\n<li>\n<p>&iquest;El nombre del certificado corresponde al sitio que estamos accediendo?<\/p>\n<\/li>\n<\/ul>\n<p><u>Acceso directo a los sistemas de almacenamiento de datos:<\/u><\/p>\n<\/li>\n<li>\n<p>&iquest;Es posible acceder a los sistemas de almacenamiento mediante otra aplicaci&oacute;n diferente a la interfaz web?<\/p>\n<\/li>\n<li>\n<p>De ser as&iacute;, &iquest;es posible conectar con los mismos usuarios\/passwords de la interfaz web?<\/p>\n<\/li>\n<li>\n<p>De ser as&iacute;, &iquest;los usuarios mantienen las mismas restricciones sobre la informaci&oacute;n tanto si trabajan sobre interfaz web como directamente sobre los datos?<\/p>\n<p><u>Ficheros\/Directorios no referenciados, backups o tests antiguos:<\/u><\/p>\n<\/li>\n<li>\n<p>Identificar posibles ficheros antiguos, backups o tests comentados en el HTML retornado por el servidor.<\/p>\n<\/li>\n<li>\n<p>Deducir esquema de nombres de las URL<\/p>\n<ul>\n<li>\n<p>Por ejemplo, si tenemos acceso a \u201c\/app\/user\u201d, quiz&aacute;s tambi&eacute;n exista \u201c\/app\/admin\u201d<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Comentarios del c&oacute;digo HTML retornado por el servidor.<\/p>\n<ul>\n<li>\n<p>C&oacute;digo HTML comentado<\/p>\n<\/li>\n<li>\n<p>C&oacute;digo JavaScript que muestra elementos en funci&oacute;n del tipo de usuario (e.g. si el usuario es administrador, mostrar el formulario X)<\/p>\n<\/li>\n<li>\n<p>Formularios HTML con bot&oacute;n submit oculto (posibles antiguos tests)<\/p>\n<\/li>\n<li>\n<p>Fichero \u201c\/robots.txt\u201d<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Comprobar si existen ficheros con extensiones como \u201c.old\u201d, \u201c.bak\u201d, etc\u2026<\/p>\n<\/li>\n<\/ul>\n<h3><a name=\"seccion02\">L&oacute;gica de la aplicaci&oacute;n:<\/a><\/h3>\n<ul>\n<li>\n<p>Comprender la aplicaci&oacute;n mediante manuales, an&aacute;lisis de requerimientos, especificaciones funcionales, etc&#8230;<\/p>\n<\/li>\n<li>\n<p>Creaci&oacute;n de informaci&oacute;n para realizar tests l&oacute;gicos<\/p>\n<\/li>\n<li>\n<p>Desarrollar pruebas:<\/p>\n<ul>\n<li>\n<p>Secuencias de uso no l&oacute;gicas<\/p>\n<\/li>\n<li>\n<p>Introducci&oacute;n de datos incorrectos (n&uacute;meros negativos, letras en campos num&eacute;ricos, etc\u2026)<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3><a name=\"seccion03\">Pruebas de autentificaci&oacute;n:<\/a><\/h3>\n<ul>\n<li>\n<p>Usuarios por defecto o f&aacute;cilmente deducibles.<\/p>\n<ul>\n<li>\n<p>Por ejemplo: \u201cadmin.\u201d, \u201cadministrador\u201d, \u201croot\u201d, \u201csystem\u201d, \u201ctest\u201d\u2026<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Posibilidad de evitar el proceso de autentificaci&oacute;n.<\/p>\n<ul>\n<li>\n<p>Cambiando la URL<\/p>\n<\/li>\n<li>\n<p>Cambiando par&aacute;metros GET o POST<\/p>\n<\/li>\n<li>\n<p>Cambiando valor de cookies<\/p>\n<\/li>\n<li>\n<p>Predicci&oacute;n de la sesi&oacute;n (si esta es secuencial, podr&iacute;amos \u201crobar\u201d sesiones)<\/p>\n<\/li>\n<li>\n<p>SQL Injection<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u201cDirectory Traversal\u201d<\/p>\n<ul>\n<li>\n<p>Identificar cookies y par&aacute;metros GET o POST cuyo valor pueda ser utilizado para abrir y mostrar ficheros (e.g. http:\/\/example.com\/index.php?file=content) e intentar asignar valores como \u201c..\/..\/etc\/passwd\u201d<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3><a name=\"seccion04\">Gesti&oacute;n de sesiones:<br \/>\n<\/a><\/h3>\n<p><u>General:<\/u><\/p>\n<ul>\n<li>\n<p>Cuestiones generales:<\/p>\n<ul>\n<li>\n<p>&iquest;<span LANG=\"es-ES\">El ordenador utilizado para acceder a la web es de uso compartido?<\/span><\/p>\n<\/li>\n<li>\n<p>&iquest;Cuantas sesiones concurrentes puede tener un usuario?<\/p>\n<\/li>\n<li>\n<p>&iquest;Cu&aacute;l es el timeout de desconexi&oacute;n por inactividad?<\/p>\n<\/li>\n<li>\n<p>&iquest;Las sesiones est&aacute;n asociadas a IPs?<\/p>\n<\/li>\n<li>\n<p>&iquest;Existe la funcionalidad \u201crecordar mi usuario\u201d?<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>&iquest;El identificador de sesi&oacute;n se guarda en una cookie, como par&aacute;metro GET (en la URL) o como par&aacute;metro POST (en formularios)?<\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">Analizar la aleatoriedad del identificador de sesi&oacute;n (e.g. &iquest;n&uacute;meros son secuenciales? &iquest;se asigna un identificador diferente despu&eacute;s de cada autentificaci&oacute;n?)<\/span><\/p>\n<\/li>\n<li>\n<p>&iquest;El identificador de sesi&oacute;n es siempre transportado por un canal seguro?<\/p>\n<\/li>\n<li>\n<p>&iquest;Las cookies tiene asignada una fecha de expiraci&oacute;n?<\/p>\n<\/li>\n<li>\n<p>&iquest;Qu&eacute; otras cookies establece la aplicaci&oacute;n?<\/p>\n<\/li>\n<\/ul>\n<p><u><span LANG=\"en-GB\">Cross Site Request Forgeries (Session riding):<\/span><\/u><\/p>\n<ul>\n<li>\n<p><span LANG=\"es-ES\">Una web externa puede contener un enlace oculto (por ejemplo en un tag IMG) que provoque una acci&oacute;n determinada en otra web (http:\/\/ejemplo.com\/borrar?todo=true) donde el usuario este identificador. El atacante debe conocer la URL que provoca la acci&oacute;n.<\/span><\/p>\n<\/li>\n<li>\n<p>En aplicaciones internas de empresas, este ataque puede ser realizado por compa&ntilde;eros o ex-empleados.<\/p>\n<\/li>\n<li>\n<p>Comprobar si la aplicaci&oacute;n web puede verse afectada por esta situaci&oacute;n.<\/p>\n<\/li>\n<li>\n<p>&iquest;Todas las acciones requieren confirmaci&oacute;n?<\/p>\n<\/li>\n<li>\n<p>&iquest;La aplicaci&oacute;n a&ntilde;ade informaci&oacute;n relacionada con la sesi&oacute;n en la URL para evitar este tipo de ataques?<\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">&iquest;Utiliza m&eacute;todos POST en las acciones que realizan modificaciones sobre datos? (Aunque tambi&eacute;n es posible simular mediante javascript por el atacante, es una medida de contenci&oacute;n)<\/span><\/p>\n<\/li>\n<li>\n<p>&iquest;La aplicaci&oacute;n comprueba el Referer? (Aunque el atacante tambi&eacute;n podr&iacute;a manipularlo o hacer que no existe utilizando iframes)<\/p>\n<\/li>\n<\/ul>\n<h3><a name=\"seccion05\">Validaci&oacute;n de los datos:<br \/>\n<\/a><\/h3>\n<p><u>Cross Site Scripting (XSS):<\/u><\/p>\n<ul>\n<li>\n<p><span LANG=\"es-ES\">Un ataque XSS puede ser llevado a cabo mediante: HTML, JavaScript, VBScript, ActiveX, Flash, y otros lenguajes del lado del cliente.<\/span><\/p>\n<\/li>\n<li>\n<p>El objetivo m&aacute;s com&uacute;n es el robo de sesiones abiertas mediante la obtenci&oacute;n del identificador de sesi&oacute;n (guardado en una cookie) y as&iacute; poder acceder a p&aacute;gina que requieran autentificaci&oacute;n.<\/p>\n<\/li>\n<li>\n<p>Para llevarlos a cabo se utilizan par&aacute;metros (GET o POST) o campos (guardados en la BBDD) que son usando para crear una p&aacute;gina de respuesta para el cliente. Por ejemplo, una web que acepte un par&aacute;metro error \u201chttp:\/\/www.example.com\/index.php?error=Conexion\u201d e imprima dicho valor en la p&aacute;gina de respueta.<\/p>\n<\/li>\n<li>\n<p>Identificar este tipo de posible situaci&oacute;n analizando la informaci&oacute;n que se intercambia con el servidor y el c&oacute;digo HTML de respuesta.<\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">Recomendaciones que ayudan a reducir riesgos:<\/span><\/p>\n<ul>\n<li>\n<p><span LANG=\"es-ES\">Codificar\telementos HTML. Por ejemplo, convertir \u201c&lt;script&gt;alert(&#8216;xss&#8217;);&lt;\/script&gt;\u201d en \u201c<\/span><span LANG=\"en-GB\">lt;script&amp;gt;alert(&#8216;xss&#8217;);&amp;lt;\/script&amp;gt;\u201d<\/span><\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">Vigilar lugares donde la anterior medida pueda no ser de utilidad, como por ejemplo si tenemos el siguiente c&oacute;digo \u201c&lt;img\tsrc=&#8217;$url&#8217;&gt;\u201d, podria injectarse \u201cdoesntexist.jpg&#8217; onerror=&#8217;alert(document.cookie)&quot; sin problemas.<\/span><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><u>M&eacute;todos HTTP:<\/u><\/p>\n<ul>\n<li>\n<p><span LANG=\"es-ES\">Un servidor web puede aceptar varios comandos, los m&aacute;s habituales e inofensivos son GET y POST pero el resto podr&iacute;an comprometer la seguridad (HEAD, GET, POST, PUT, DELETE , TRACE, OPTIONS, CONNECT):<\/span><\/p>\n<ul>\n<li>\n<p><span LANG=\"es-ES\">PUT: Permite al cliente subir ficheros. Un atacante podr&iacute;a utilizarlo para subir c&oacute;digo maligno (e.g. un fichero PHP). <\/span>\n\t\t<\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">DELETE: Permite al cliente borrar un fichero en el servidor. <\/span>\n\t\t<\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">CONNECT: Permite utilizar el servidor como proxy. <\/span>\n\t\t<\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">TRACE: Devuelve la cadena de texto que haya sido enviada. Puede ser utilizado para generar un ataque Cross Site Tracing (XST).<\/span><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Identificar los m&eacute;todos soportados:<\/p>\n<p><i><span LANG=\"es-ES\">$ telnet servidor.com 80<\/span><\/i><\/p>\n<p><i>OPTIONS \/ HTTP\/1.0<\/i><\/p>\n<\/li>\n<\/ul>\n<p><u>SQL Injection:<\/u><\/p>\n<ul>\n<li>\n<p><span LANG=\"es-ES\">El objetivo radica en \u201cinyectar\u201d en la base de datos una consulta\/orden SQL creada por el atacante, pudiendo as&iacute; leer\/modificar informaci&oacute;n o cambiar el comportamiento de la aplicaci&oacute;n.<\/span><\/p>\n<\/li>\n<li>\n<p>Por ejemplo, si la aplicaci&oacute;n web realiza la siguiente consulta con par&aacute;metros procedentes de un formulario:<\/p>\n<p LANG=\"en-GB\"><i>SELECT * FROM Users WHERE Username=&#8217;$username&#8217; AND Password=&#8217;$password&#8217;<\/i><\/p>\n<p>Un atacante podria rellenar el formulario indicando los siguientes valores:<\/p>\n<p LANG=\"en-GB\"><i>$username = 1&#8242; or &#8216;1&#8217; = &#8216;1<\/i><\/p>\n<p><i>$password = 1&#8242; or &#8216;1&#8217;\t= &#8216;1<\/i><\/p>\n<\/p>\n<p><span LANG=\"es-ES\">De forma que se ejecutaria:<\/span><\/p>\n<p LANG=\"en-GB\"><i>SELECT * FROM Users WHERE Username= &#8216;1&#8217; OR &#8216;1&#8217; = &#8216;1&#8217; AND Password= &#8216;1&#8217; OR &#8216;1&#8217; = &#8216;1&#8217;<\/i><\/p>\n<p><span LANG=\"es-ES\">Y podr&iacute;a enga&ntilde;ar el sistema de autentificaci&oacute;n.<\/span><\/p>\n<\/li>\n<li>\n<p>Tipos de SQL Injection:<\/p>\n<ul>\n<li>\n<p>Inband: La informaci&oacute;n se obtiene por el mismo canal que se inyecta la sentencia SQL (e.g. inyecci&oacute;n por formulario y presentaci&oacute;n de resultado en la siguiente respuesta HTML)<\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">Out-of-band: La informaci&oacute;n se obtiene por un canal diferente al que se ha usado para inyectar la sentencia SQL (e.g. se inyecta mediante un email y se obtienen a trav&eacute;s de la interfaz web)<\/span><\/p>\n<\/li>\n<li>\n<p>Inferencial: La informaci&oacute;n no llega a traspasarse, pero el atacante es capaz de reconstruir la informaci&oacute;n observando las respuestas del servidor de BBDD.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Para que el ataque sea efectivo la sentencia SQL debe ser correcta, por tanto si la aplicaci&oacute;n web muestra los mensajes de error generados por la BBDD se facilita el ataque. Se recomienda ocultar dichos errores (Blind SQL Injection).<\/p>\n<\/li>\n<li>\n<p>Identificar los puntos donde la aplicaci&oacute;n web realiza consultas a una base de datos (e.g. autentificaci&oacute;n, visualizaci&oacute;n de elementos din&aacute;micos, b&uacute;squedas).<\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">Testear los puntos identificados introduciendo datos (en formularios o modificando par&aacute;metros GET\/POST y cookies) que provoquen errores en la BBDD (e.g. comillas, punto y coma, comentarios &#8211;, operadores l&oacute;gicos AND\/OR).<\/span><\/p>\n<\/li>\n<li>\n<p>Recomendaci&oacute;n:<\/p>\n<ul>\n<li>\n<p>Filtrar los datos recibidos del cliente antes de utilizarlos en sentencias SQL.<\/p>\n<\/li>\n<li>\n<p>Utilizar placeholders si nuestra base de datos lo soporta.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><u>Otros ataques \u201cInjection\u201d:<\/u><\/p>\n<ul>\n<li>\n<p>Los \u201cStored Procedures\u201d de las BBDD tambi&eacute;n pueden verse afectados por SQL Injection.<\/p>\n<\/li>\n<li>\n<p>Si se trabaja con servidores LDAP, es posible que las consultas sean vulnerables a inyecci&oacute;n.<\/p>\n<\/li>\n<li>\n<p><span LANG=\"en-GB\">Sistemas ORM (Object-Relational Managment) como Hibernate, tambi&eacute;n pueden ser vulnerables a SQL Injection.<\/span><\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">Si la informaci&oacute;n es guardad o transportada en XML, tambi&eacute;n puede ser vulnerable a inyecci&oacute;n de datos.<\/span><\/p>\n<\/li>\n<li>\n<p>Si el servidor soporta SSI (Server Side Incluyes), este responder&aacute; a tags del tipo:<\/p>\n<p><i>&lt;!&#8211;#echo var=&quot;DATE_LOCAL&quot; &#8211;&gt;<\/i><\/p>\n<p><i>&lt;!&#8211;#exec cmd=&quot;ls&quot; &#8211;&gt;<\/i><\/p>\n<p><i>&lt;!&#8211;#include virtual=&quot;\/footer.html&quot; &#8211;&gt;<\/i><\/p>\n<\/p>\n<p>Si es posible inyectar este tipo de c&oacute;digo tal y como se lleva a cabo en ataques de Cross Site Scripting, podriamos ejecutar comandos en el servidor.<\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">Inyecci&oacute;n de c&oacute;digo (PHP, ASP) es posible si la aplicaci&oacute;n realiza incluyes de ficheros con el nombre compuesto por datos introducidos por el usuario.<\/span><\/p>\n<\/li>\n<li>\n<p>Si la aplicaci&oacute;n web interactua con servicios SMTP\/IMAP, podr&iacute;a verse afectado por inyecci&oacute;n.<\/p>\n<\/li>\n<li>\n<p><span LANG=\"es-ES\">Si la aplicaci&oacute;n web realiza ejecuciones de comandos que son construidos con datos proporcionados por el cliente, podr&iacute;a inyectarse sentencias para que sean ejecutadas en el sistema (e.g.<br \/>\n\thttp:\/\/sensitive\/cgi-bin\/userData.pl?doc=\/bin\/ls|).<\/span><\/p>\n<\/li>\n<\/ul>\n<h3><a name=\"seccion06\">Riesgos referentes a ataques de denegaci&oacute;n de servicio:<br \/>\n<\/a><\/h3>\n<ul>\n<li>\n<p>Bloqueo de usuarios por intentos de autentificaci&oacute;n fallidos.<\/p>\n<\/li>\n<li>\n<p>Posibilidad de provocar buffers overflows.<\/p>\n<\/li>\n<li>\n<p>Saturaci&oacute;n por carga excesiva de objetos en el servidor.<\/p>\n<\/li>\n<li>\n<p>Provocar una gran cantidad de iteraciones sobre una parte de c&oacute;digo que requiera un uso intensivo de CPU.<\/p>\n<\/li>\n<li>\n<p>Agotar el espacio en disco duro del servidor generando una gran cantidad de informaci&oacute;n en logs o mediante otros ficheros de disco.<\/p>\n<\/li>\n<li>\n<p>Identificar incorrecta liberaci&oacute;n de recursos (e.g. conexiones a BBDD abiertas que no son usadas)<\/p>\n<\/li>\n<li>\n<p>Intentar que el servidor guarde una gran cantidad de informaci&oacute;n en la sesi&oacute;n, agotando la memoria disponible.<\/p>\n<\/li>\n<\/ul>\n<h3><a name=\"seccion07\">Servicios Web:<br \/>\n<\/a><\/h3>\n<ul>\n<li>\n<p>Identificar si existen servicios web (SOAP\/Web services) para analizar los posibles riesgos que puedan implicar.<\/p>\n<\/li>\n<\/ul>\n<h3><a name=\"seccion08\">AJAX (Asynchronous JavaScript and XML):<br \/>\n<\/a><\/h3>\n<ul>\n<li>\n<p><span LANG=\"es-ES\">T&eacute;cnica de desarrollo web que permite la creaci&oacute;n de interficies web con capacidad de respuesta m&aacute;s r&aacute;pida, dado que &uacute;nicamente recarga\/modifica partes de la p&aacute;gina visualizada sin generar una nueva petici&oacute;n completa. Para ello se hace uso del objeto XMLHttpRequest de JavaScript y respuestas codificadas en HTML, XML, JavaScript Object Notation (JSON), etc\u2026<\/span><\/p>\n<\/li>\n<li>\n<p>Las interficies que hacen uso de AJAX pueden ser tambi&eacute;n vulnerables a los ataques anteriormente descritos (XSS, SQL Injection, etc\u2026), dificultando su subsanaci&oacute;n por la propia naturaleza de la tecnolog&iacute;a).<\/p>\n<\/li>\n<li>\n<p>Riesgos:<\/p>\n<ul>\n<li>\n<p>Incremento de las posibilidades de ataque dado el aumento de puntos de entrada a\tasegurar.<\/p>\n<\/li>\n<li>\n<p>Mayor exposici&oacute;n de funciones internas de la aplicaci&oacute;n.<\/p>\n<\/li>\n<li>\n<p>Acceso a recursos de\tterceros sin mecanismos de codificaci&oacute;n y seguridad.<\/p>\n<\/li>\n<li>\n<p>Posibles fallos de protecci&oacute;n de informaci&oacute;n de autentificaci&oacute;n y sesiones.<\/p>\n<\/li>\n<li>\n<p>Mayor riesgo de errores de seguridad, por menor claridad en la l&iacute;nea que separa el c&oacute;digo del lado cliente del lado servidor.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Identificar el framework AJAX que esta siendo utilizado con el objetivo de determinar el tipo de codificaci&oacute;n utilizada para la transmisi&oacute;n de informaci&oacute;n (XML, JSON, etc\u2026).<\/p>\n<\/li>\n<li>\n<p>Identificar en el c&oacute;digo HTML que llamadas se est&aacute;n realizado utilizando AJAX.<\/p>\n<\/li>\n<li>\n<p>Observar mediante un Proxy o sniffer, en que momento se ejecutan dichas llamadas y que tipo de informaci&oacute;n se transmite.<\/p>\n<\/li>\n<li>\n<p>Utilizar depuradores de c&oacute;digo JavaScript en el navegador cliente para determinar posibles errores potenciales.<\/p>\n<\/li>\n<li>\n<p>Basar el estudio de vulnerabilidades en los puntos vistos anteriormente (XSS, SQL Injection, etc\u2026).<\/p>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Esquema general de pasos a seguir para la detecci&oacute;n de posibles riesgos y vulnerabilidades. Se incluyen algunas recomendaciones generales. Art\u00edculo relacionado: Valoraci\u00f3n de riesgos tecnol\u00f3gicos Basado en la gu&iacute;a de pruebas de OWASP (Open Web Application Security Project).<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,6],"tags":[],"class_list":["post-613","post","type-post","status-publish","format-standard","hentry","category-espanyol","category-tecnologia"],"_links":{"self":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/613","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=613"}],"version-history":[{"count":1,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/613\/revisions"}],"predecessor-version":[{"id":1306,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/613\/revisions\/1306"}],"wp:attachment":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}