220 likes | 441 Views
Defensa contra ataques web comunes. Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com http://blogs.clearscreen.com/migs. Defensa Contra Ataques. Securizar una Aplicación: Validación de Datos de Entrada Buffer Overrun Inyección SQL Cross-Site Scripting Robo de Sesión.
E N D
Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com http://blogs.clearscreen.com/migs
Defensa Contra Ataques • Securizar una Aplicación: Validación de Datos de Entrada • Buffer Overrun • Inyección SQL • Cross-Site Scripting • Robo de Sesión
Aplicación Validación de INput Autenticación Autorización Gestión de Configuración Datos Sensibles Gestión de Sesiones Criptografía Manipulación de Parámetros Gestión de Excepciones Auditoría y Logging Firewall Servidor Web Firewall Servidor de Aplicaciones Servidor de BD Holística de la seguridad Red Router Firewall Switch Servidor Parches ServiciosProtocolos Cuentas Ficheros y Directorios Shares Puertos Registro Auditoría y Logging
Securizar la Aplicación • Validación de Datos de Entrada • Autentificación • Autorización • Gestión de Configuración • Datos Sensibles • Gestión de Sesiones • Criptografía • Manipulación de Parámetros • Gestión de Excepciones • Auditoría y Logging
Securizar la Aplicación Validación de Datos de Entrada • Ataques posibles: • Desbordamiento de buffer • Inyección de código • Inyección SQL • Cross-Site Scripting (xss) • Entrada de datos: • Cookies, cabeceras, campos html, controles Viewstate,QueryString • Servicios Web/Remoting/DCOM • Datos de base de datos, ficheros o fuentes remotas • Siempre dudar de su contenido!! • Validación de datos en servidor
datoSinValidar 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x0A 0x3B 0xA4 0x29 0x00 0x14 0x5B 0xB1 0xDA 0xC1 0x42 ... PUSH 0x00001234 PUSH [0x0A2EF4D9] CALL 0x0A3BA78C Validación de la entradaBuffer overruns Stack void UnSafe (const char* datoSinValidar) char[4] 0x01010101 { char variableLocal[4]; 0x01010101 int int otraVariableLocal; Return address 0x0A3BA429 strcpy (variableLocal, datoSinValidar); }
Validación de la entradaBuffer overruns • Causas más comunes • Copia de cadenas • Arrays • Reserva de memoria insuficiente • Defensas • Utilizar código manejado • Vigilar P/Invoke, código unsafe • Usar con cuidado strcpy, memcpy • Mejor equivalentes en strsafe.h • Opción compilador C++: /GS
Validación de la entrada Inyección SQL • Qué es? SqlConnection conn= new SqlConnection( “server=localhost;Database=Northwind” + “user id=sa;password=pass*word;"); string sqlString="SELECT * FROM Orders WHERE “ + “CustomerID='" + idCliente + "'"; SqlCommand cmd = new SqlCommand(sqlString, conn); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); // ...
Los malos VINET’ OR 1=1 -- Los @*^#VINET’;exec xp_cmdshell ‘format C: Los malísimos VINET’; DROP TABLE ORDERS -- SELECT * FROM Orders WHERE CustomerID=‘VINET‘OR 1=1 --’ SELECT * FROM Orders WHERE CustomerID= ‘VINET‘;exec xp_cmdshell ‘format C:’ SELECT * FROM Orders WHERE CustomerID=‘VINET‘; DROP TABLE ORDERS --’ Validación de la entrada Inyección SQL La gente buena introduce VINET SELECT * FROM Orders WHERE CustomerID=‘VINET'
Validación de la entradaInyección SQL • Utilizar comandos parametrizables • Al menos minimizarlo • Validar entrada en servidor • Usar cuentas SQL restringidas • No volcar mensajes de error string sqlString="SELECT * FROM Orders WHERE CustomerID=@custID"; SqlCommand cmd = new SqlCommand(sqlString, conn); cmd.Parameters.Add("@custID", idCliente);
Validación de la entradaCross-site scripting • ¿Que es XSS? • Un agujero de seguridad que permite al hacker ejecutar código script en un cliente web • Dos entradas principales • Contempladas (foros, emails, librerías…) • Ocultas (querystring, campos HTML…) • Efectos habituales • Modificación del contenido • Envío de información • Robo de sesión
Envia correo al usuario con link a un sitio inocente 2. El usuario visita el sitio web 3. En el contexto del usuario, el sitio envia datos a traves de un post malformado Validación de la entradaAnatomía de una ataque XSS Victima Hacker Sitio Web
Validación de la entradaTipos de Cross-site scripting • Tipo 0 – Local ó DOM-based Un script local accede a parametros request de la URL y los utiliza para construir código script. • Tipo 1 – No Persistente ó Reflejada Se utilizan l os datos de entrada de formularios para construir scripts, permitiendo la inyección de código. • Tipo 2 – Persistente ó Segundo Orden Es la más poderosa. Los datos se almacenan en una bbdd y posteriormente se muestran a los usuarios, inyectando el código continuamente.
Validación de la entradaProtección contra Cross-site scripting • Validar y limpiar cualquier entrada • Vigilar <script>, <object>… • Especialmente la que es mostrada después • Utilizar HttpOnly en IE6.1 • Aprovechar ASP.NET • HTMLEncode para limpiar • ValidateRequest para validar todas las entradas
Autenticación falseableRobos de passwords • Nunca enviar por canales inseguros • Cuidado con RPC, Remoting • Proteger su almacenamiento • Establecer políticas • Utilizar hash con salt Password Salt SHA1CryptoServiceProvider.ComputeHash Hash
Autenticación falseableModificación de ticket • ASP.NET utiliza tickets en forma de URL o cookie • Robo de cookie • Cuidado con XSS • Usar RequireSSL y !Persistent • Modificación de cookie • Si contiene información del usuario • Utilizar MAC
Sumario • La gran mayoría de las aplicaciones tienen agujeros de seguridad • Reglas de protección • Validación de entrada • Evitar SQL dinámico • Aplicar Encoding a toda la salida • Ejecutar con los mínimos privilegios • Cifrar los secretos (connstr, pass’s, etc.) • Minimizar la superficie de exposición • Y si fallamos, hacerlo de modo privado
Próximas acciones • 8 Junio Evento Windows Workflow Mad.nug • 13 Junio. Seguridad Práctica para Empresas • Hacking Web Sites • http://www.microsoft.com/spain/technet
Isabel Gomez - Microsoft isabelg@microsoft.com Miguel Jiménez – Ilitia / MAD.NUG miguel@ilitia.com