Title: Desarrollo de aplicaciones seguras con 'NET
1Desarrollo de aplicaciones seguras con .NET
- David Carmona
- davidcsa_at_microsoft.com
- División de Desarrolladores y Plataforma
- Microsoft Ibérica
2Qué vamos a ver?
Aprender y redefinir
Instalación y operaciones
Preguntas sobre seguridad
Security Push
Despliegue
Visión
Criterios aceptación seguridad
Planificación
Estabilización
Pruebas mínimo privilegio
Análisis amenazas
Desarrollo
Pruebas mínima exposición
Pruebas seguridad
Revisión de seguridad del diseño
Revisiones de código
Mejores prácticas de desarrollo
3Errores más comunes
Porcentaje de aplicaciones
Fuente _at_Stake The Security of Applications
4Validació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)
5Validación de la entradaBuffer overruns
Stack
void UnSafe (const char datoSinValidar)
char4
0x01010101
char variableLocal4
int
0x01010101
int otraVariableLocal
Return address
0x0A3BA429
strcpy (variableLocal, datoSinValidar)
6Validació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
7Validació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( serverlo
calhostDatabaseNorthwind user
idsapasswordpassword") string
sqlString"SELECT FROM Orders WHERE
CustomerID'" idCliente "'" SqlCommand cmd
new SqlCommand(sqlString, conn) conn.Open() Sq
lDataReader reader cmd.ExecuteReader() // ...
8Validación de la entrada Inyección SQL
La gente buena introduce VINET
SELECT FROM Orders WHERE CustomerIDVINET'
9Validació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_at_custID" SqlCommand cmd new
SqlCommand(sqlString, conn) cmd.Parameters.Add("_at_
custID", idCliente)
10Validació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
11Validación de la entradaCross-site scripting
- Validar y limpiar cualquier entrada
- Vigilar ltscriptgt, ltobjectgt
- Especialmente la que es mostrada después
- Utilizar HttpOnly en IE6.1
- Aprovechar ASP.NET
- HTMLEncode para limpiar
- ValidateRequest para validar todas las entradas
12Autenticació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
13Autenticació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
14Cifrado 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!
15Cifrado 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
16Sumario
- 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
17Para 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
18davidcsa_at_microsoft.com