desarrollo de aplicaciones seguras con.net david carmona [email protected] división de...

18
Desarrollo de aplicaciones seguras con .NET David Carmona [email protected] División de Desarrolladores y Plataforma Microsoft Ibérica

Upload: francisca-serbin

Post on 03-Jan-2015

12 views

Category:

Documents


0 download

TRANSCRIPT

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

Desarrollo de aplicaciones seguras con .NET

David Carmona

[email protected]

División de Desarrolladores y Plataforma

Microsoft Ibérica

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

¿Qué vamos a ver?Preguntas sobre Preguntas sobre

seguridadseguridadPreguntas sobre Preguntas sobre

seguridadseguridad

Análisis Análisis amenazasamenazasAnálisis Análisis

amenazasamenazas

Criterios Criterios aceptación aceptación seguridadseguridad

Criterios Criterios aceptación aceptación seguridadseguridad

Revisión de Revisión de seguridad del seguridad del

diseñodiseño

Revisión de Revisión de seguridad del seguridad del

diseñodiseño

Mejores Mejores prácticas de prácticas de desarrollodesarrollo

Mejores Mejores prácticas de prácticas de desarrollodesarrollo

Pruebas Pruebas seguridadseguridadPruebas Pruebas

seguridadseguridad

Pruebas mínimo Pruebas mínimo privilegioprivilegio

Pruebas mínimo Pruebas mínimo privilegioprivilegio

Security PushSecurity PushSecurity PushSecurity Push

Instalación y Instalación y operacionesoperacionesInstalación y Instalación y operacionesoperaciones

Aprender y Aprender y redefinirredefinir

Aprender y Aprender y redefinirredefinir

Revisiones de Revisiones de códigocódigo

Revisiones de Revisiones de códigocódigo

Pruebas mínima Pruebas mínima exposiciónexposición

Pruebas mínima Pruebas mínima exposiciónexposición

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

Errores más comunes

Fuente @Stake The Security of ApplicationsFuente @Stake The Security of Applications

Porcentaje de aplicacionesPorcentaje de aplicaciones

Cifrado débilCifrado débil2424%%

Autenticación falseableAutenticación falseable 6262%%

Validación de entrada vulnerableValidación de entrada vulnerable 7171%%

Algún error de seguridadAlgún error de seguridad 100100%%

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

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)

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

PUSH 0x00001234PUSH 0x00001234PUSH [0x0A2EF4D9]PUSH [0x0A2EF4D9]CALL 0x0A3BA78CCALL 0x0A3BA78C

Validación de la entradaBuffer overruns

void UnSafe (const char* datoSinValidar)

{

int otraVariableLocal;

strcpy (variableLocal, datoSinValidar);

}

char variableLocal[4];

Stack

char[4]

int

Return address

0x01 0x01 0x01 0x010x01 0x01 0x01 0x010x01 0x01 0x01 0x010x01 0x01 0x01 0x010x0A 0x3B 0xA4 0x290x0A 0x3B 0xA4 0x290x00 0x14 0x5B 0xB10x00 0x14 0x5B 0xB10xDA 0xC1 0x42 ... 0xDA 0xC1 0x42 ...

datoSinValidar

0x01010101

0x01010101

0x0A3BA429

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

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

Habilitar switch /GS

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

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();

// ...

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

Validación de la entrada Inyección SQL

SELECT * FROM Orders WHERE CustomerID=‘VINET'

La gente buena introduce La gente buena introduce VINETVINET

SELECT * FROM Orders WHERE CustomerID=‘VINET‘OR 1=1 --’

Los malos Los malos VINET’ OR 1=1 --VINET’ OR 1=1 --

SELECT * FROM Orders WHERE CustomerID=‘VINET‘; DROP TABLE ORDERS --’

Los malísimos Los malísimos VINET’; DROP TABLE ORDERS --VINET’; DROP TABLE ORDERS --

SELECT * FROM Orders WHERE CustomerID=‘VINET‘;exec xp_cmdshell ‘format C:’

Los @*^#Los @*^# VINET’;exec xp_cmdshell ‘format C:VINET’;exec xp_cmdshell ‘format C:

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

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);

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

Validación de la entradaCross-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

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

Validación de la entradaCross-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

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

Autenticación falseableRobos de passwords Nunca enviar por canales inseguros

Cuidado con RPC, Remoting

Proteger su almacenamiento Establecer políticas Utilizar hash con salt

PasswordPassword

SHA1CryptoServiceProvider.ComputeHash

SaltSalt

HashHash

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

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

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

Cifrado débilDefensas 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!

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

Cifrado débilAlgoritmos 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

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

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

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

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