WEB HACKING – Clasificación de Ataques web – Parte IV
Los vectores de ataque más utilizados y mejor aprovechados por atacantes en redes como internet, en un gran porcentaje están relacionados con aplicaciones y servidores web vulnerables. Una de las principales razones de esto es lo fácil que es para un atacante acceder a una potencial víctima desde cualquier ordenador conectado y utilizando herramientas tan comunes como un navegador web, además de que en muchas ocasiones por múltiples razones, se le da muy poca importancia a la seguridad de las aplicaciones y esto al final, trae consecuencias muy negativas que suelen traducirse en servidores hackeados. Todo esto no es un secreto para nadie, sin embargo seguimos desarrollando aplicaciones inseguras y por que? Pueden haber muchas razones, sin embargo esto se debe principal, por desconocimiento y falta de interés o motivación para hacer las cosas bien y al hacer las cosas bien me refiero, a que por lo menos, antes de liberar una aplicación en internet que es critica, realizar al menos, una auditoria de seguridad en profundidad.
Los ataques más comunes que pueden ser aprovechadas por los atacantes, se suelen dividir en dos categorías bien definidas: Ataques Directos y ataques Indirectos.
Los ataques directos tienen como objetivo comprometer el servidor web o simplemente interrumpir su funcionamiento total o parcialmente, mientras que los ataques indirectos (también conocidos como client-side attacks) tienen por objetivo utilizar la aplicación web o la infraestructura del servidor como pivote para realizar ataques a sus clientes. Cuando se realizan ataques indirectos (es decir, atacar a los clientes) suele ser llevado a cabo con mayor facilidad que un ataque directo contra el servidor web y también es posible que sea más nefasto, dado que el atacante puede controlar los contenidos que el cliente va a visualizar en su navegador.
Como se puede apreciar, ambas categorías tienen objetivos distintos, sin embargo para un atacante la meta principal siempre va a ser la misma, intentar controlar el servidor web y/o tener el mayor numero de víctimas posible.
Ataques Directos
Este tipo de ataques suelen aprovechar vulnerabilidades conocidas en aplicaciones o servidores web y normalmente tienen un fuerte impacto, aunque no siempre es así, ya que por ejemplo, el mero hecho de escanear un servidor web en busca de vulnerabilidades puede ser considerado un ataque directo, pero su impacto puede ser nulo si no se detecta ninguna. Algunos los ataques, que pueden llevarse a cabo son:
Escaneo de vulnerabilidades en aplicaciones web:
Actualmente hay una gran cantidad de aplicaciones web para casi una infinidad de propósitos, tales como CMS, LMS, CRM, ERP, etc. Dichas aplicaciones suelen sufrir fallos de seguridad que son descubiertos y posteriormente corregidos, sin embargo el tiempo transcurrido entre el descubrimiento de la vulnerabilidad y su posterior corrección suele ser un periodo en el que dicha aplicación se encuentra prácticamente indefensa, es por este motivo que los atacantes (y por supuesto, los sysadmins también) suelen estar siempre al día de las vulnerabilidades “Zero Day” para dichas aplicaciones. En algunos casos, las vulnerabilidades suelen ser tan frecuentes entre diferentes versiones del mismo producto, que suelen desarrollarse herramientas automatizadas que permitan identificar cualquier tipo de vulnerabilidad conocida en una instancia determinada, ejemplos de estos tipos de escáneres los encontramos en aquellos que son de “propósito general” tales como Nikto y algunos módulos de Metasploit Framework.
Como muestra la imagen anterior, Nikto ha revelado una importante vulnerabilidad que afecta principalmente a versiones de ColdFusion 7, 8 y 9.
Otras herramientas como Nmap también son útiles para detectar fugas de información y potenciales vulnerabilidades en el servidor web por medio del uso de scripts en NMAP tal como explique anteriormente en este blog http://thehackerway.com/2011/07/27/tecnicas-de-recoleccion-de-informacion-%E2%80%93-scripting-con-nmap/
En este caso, el uso de algunos de los scripts incluidos en Nmap, nos dan un poco más de información sobre el objetivo que se intenta comprometer, lo que desde luego es muy importante en las primeras etapas de reconocimiento y recolección de información.
Dentro de la sección de escáneres específicos para productos bastante conocidos y utilizados, herramientas como WPScan para sistemas WordPress y JoomblaScan para Joombla son solo algunos casos y nuevamente puede ser muy útil el uso de NMAP y algunos de los scripts incluidos en esta herramienta tales como http-joomla-brute.nse, http-wordpress-brute.nse, http-wordpress-enum.nse y http-wordpress-plugins.nse
En la imagen puede apreciarse el uso de WPScan y la forma en la que logra identificar la versión y posibles vulnerabilidades en una instancia de WordPress.
Por otro lado, no nos podemos olvidar de herramientas tan potentes como W3AF y los módulos auxiliares de escaneo para Metasploit Framework, especialmente el plugin WMAP.
El uso de WMAP puede llevar bastante tiempo, sin embargo es una buena forma de extraer información útil para el análisis y composición del vector de ataque.
Inspección Manual del código fuente de las páginas
Aunque parezca mentira, muchas veces es posible encontrar comentarios en los scripts de JavaScript o directamente en las páginas HTML con información tan importante como nombres de usuarios y contraseñas. Además, también es importante tener presente, cuales ficheros se suben al servidor, ya que puede ocurrir que por error, se suban ficheros fuente con información sensible cuya extensión termina en “~” por ejemplo, “.jsp~”, “.asp~” o “.php~”
Inspección y Manipulación de cabeceras HTTP
Como el lector ya sabe, las cabeceras HTTP permiten intercambiar información entre cliente y servidor web sobre detalles de la transacción HTTP que se lleva a cabo después de enviar una petición (cliente) y emitir una respuesta (servidor). Una practica que se se da con mucha frecuencia (desafortunadamente) es implementar filtros para temas tan importantes como la autenticación y/o autorización de los clientes utilizando como base algunas de las cabeceras HTTP intercambiadas. Por ejemplo, consideremos el siguiente script en PHP:
function ip() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } if ($_POST['data']) { $ip = explode('.', ip()); if ($ip[0] == '1' && $ip[1] == '2' && $ip[2] == '3') { $cmd = $_POST['data']; echo passthru($cmd); exit(); } else { echo "Sorry your IP is not authorized\n"; } }
Este script simplemente obtiene la dirección IP del cliente establecida en alguna de las cabeceras HTTP y permite o deniega la ejecución de un comando enviado por HTTP Post dependiendo de si se encuentra en el rango determinado. Simple y muy peligroso ya que un atacante puede modificar las cabeceras HTTP muy fácilmente utilizando un navegador como el Chrome o la extensión Live HTTP Headers de Firefox y hacer un “spoofing” de la dirección IP, de esta forma se puede hacer pasar por un cliente “legitimo” que cumple con las condiciones exigidas por el script tal como enseña la siguiente imagen.
Aunque las direcciones de atacante y víctima se encuentran ocultas, la imagen anterior enseña perfectamente lo que un atacante puede hacer simplemente con adicionar la cabecera HTTP X-Forwarded-For y establecer una dirección IP que cumpla con el condicional “if” declarado en el script PHP enseñado anteriormente: if ($ip[0] == ’1′ && $ip[1] == ’2′ && $ip[2] == ’3′) dado que el header X-Forwarded-For viene establecido en la petición del cliente, la variable “$ip” tendrá el valor que venga definido en esa cabecera. La cabecera X-Forwarded-For (XFF) en HTTP es el mecanismo por medio del cual, se establece la dirección IP real de un cliente que se conecta a un servidor web por medio de un proxy o un balanceador de carga y aunque es un mecanismo que se encuentra ampliamente difundido y es utilizado con mucha frecuencia, tal como se ha enseñado anteriormente, es un mecanismo que puede ser fácilmente evadido por un atacante. En la próxima publicación, continuaré hablando sobre otros ataques directos (con ejemplos) que pueden resultar devastadores.
Miguel
No hay comentarios.:
Publicar un comentario