La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Desarrollo de aplicaciones seguras con.NET David Carmona División de Desarrolladores y Plataforma Microsoft Ibérica.

Presentaciones similares


Presentación del tema: "Desarrollo de aplicaciones seguras con.NET David Carmona División de Desarrolladores y Plataforma Microsoft Ibérica."— Transcripción de la presentación:

1 Desarrollo de aplicaciones seguras con.NET David Carmona davidcsa@microsoft.com División de Desarrolladores y Plataforma Microsoft Ibérica

2 ¿Qué vamos a ver? Preguntas sobre seguridad Análisis amenazas Criterios aceptación seguridad Revisión de seguridad del diseño Mejores prácticas de desarrollo Pruebas seguridad Pruebas mínimo privilegio Security Push Instalación y operaciones Aprender y redefinir Revisiones de código Pruebas mínima exposición

3 Errores más comunes Fuente @Stake The Security of Applications Porcentaje de aplicaciones Cifrado débil 24% Autenticación falseable 62% Validación de entrada vulnerable 71% Algún error de seguridad 100%

4 Validación de la entrada Identificar posibles entradas Campos HTML, controles WinForms Servicios Web / Remoting / DCOM QueryString, Cookies, Viewstate ¡¡ Nunca confiar en su contenido !! Validar en servidor Buffer overruns Inyección SQL Cross-site scripting (XSS)

5 PUSH 0x00001234 PUSH [0x0A2EF4D9] CALL 0x0A3BA78C Validación de la entrada Buffer overruns void UnSafe (const char* datoSinValidar) { int otraVariableLocal; strcpy (variableLocal, datoSinValidar); } char variableLocal[4]; Stack char[4] int Return address 0x01 0x01 0x01 0x01 0x0A 0x3B 0xA4 0x29 0x00 0x14 0x5B 0xB1 0xDA 0xC1 0x42... datoSinValidar 0x01010101 0x0A3BA429

6 Validación de la entrada Buffer 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 Habilitar switch /GS

7 Validación de la entrada Inyección SQL Control del criterio de una sentencia SQL desde algún parámetro de entrada 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(); //...

8 Validación de la entrada Inyección SQL SELECT * FROM Orders WHERE CustomerID=VINET' La gente buena introduce VINET SELECT * FROM Orders WHERE CustomerID=VINETOR 1=1 -- Los malos VINET OR 1=1 -- SELECT * FROM Orders WHERE CustomerID=VINET; DROP TABLE ORDERS -- Los malísimos VINET; DROP TABLE ORDERS -- SELECT * FROM Orders WHERE CustomerID= VINET;exec xp_cmdshell format C: Los @*^# VINET;exec xp_cmdshell format C:

9 Validación de la entrada Inyecció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);

10 Validación de la entrada Cross-site scripting Agujeros que permiten 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

11 Validación de la entrada Cross-site scripting Validar y limpiar cualquier entrada Vigilar, … Especialmente la que es mostrada después Utilizar HttpOnly en IE6.1 Aprovechar ASP.NET HTMLEncode para limpiar ValidateRequest para validar todas las entradas

12 Autenticación falseable Robos de passwords Nunca enviar por canales inseguros Cuidado con RPC, Remoting Proteger su almacenamiento Establecer políticas Utilizar hash con salt Password SHA1CryptoServiceProvider.ComputeHash Salt Hash

13 Autenticación falseable Modificació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

14 Cifrado débil Defensas Mejor sin secretos Utilizar hash Usar autenticación integrada Si los hay mejor en servidor No almacenar en querystring, campos ocultos, viewstate, … En cualquier caso usar siempre cifrado ¡Nunca uno propio!

15 Cifrado débil Algoritmos de cifrado El punto débil está en la clave Para no trastear con ella… Cifrar con certificado digital Acceso controlado por Windows Usar DPAPI Clave controlada por Windows Dispositivos hardware

16 Sumario La gran mayoría de las aplicaciones tienen agujeros de seguridad ¿Y la tuya? La regla del 20 / 80 Validación de entrada Autenticación Cifrado El 100% está en el resto del ciclo de vida

17 Para saber más Seminarios de seguridad TechNet Security Day Barcelona 5 febrero Madrid 12 febrero Guías de arquitectura (PAGs) http://msdn.microsoft.com/architecture/application/default.aspx Ms Press Writing Secure Code

18 davidcsa@microsoft.com


Descargar ppt "Desarrollo de aplicaciones seguras con.NET David Carmona División de Desarrolladores y Plataforma Microsoft Ibérica."

Presentaciones similares


Anuncios Google