Defensa contra ataques web comunes Isabel Gomez [email protected] Miguel Jimenez...

22
Defensa contra Defensa contra ataques web comunes ataques web comunes Isabel Gomez Isabel Gomez [email protected] [email protected] Miguel Jimenez Miguel Jimenez [email protected] [email protected] http://blogs.clearscreen.com/migs http://blogs.clearscreen.com/migs

Transcript of Defensa contra ataques web comunes Isabel Gomez [email protected] Miguel Jimenez...

Page 1: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Defensa contra Defensa contra ataques web comunesataques web comunes

Isabel GomezIsabel [email protected]@microsoft.com

Miguel JimenezMiguel [email protected]@ilitia.comhttp://blogs.clearscreen.com/migshttp://blogs.clearscreen.com/migs

Page 2: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Defensa Contra AtaquesDefensa Contra Ataques

Securizar una Aplicación: Validación Securizar una Aplicación: Validación de Datos de Entradade Datos de Entrada

Buffer OverrunBuffer Overrun

Inyección SQLInyección SQL

Cross-Site ScriptingCross-Site Scripting

Robo de SesiónRobo de Sesión

Page 3: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Holística de la seguridadHolística de la seguridad

Servidor Servidor WebWeb

Servidor Servidor de de

AplicacionAplicacioneses

Servidor Servidor de BDde BD

Firew

all

Firew

all

Firew

all

Firew

all

ServidorServidor

ParchesServicios

Protocolos

CuentasFicheros y Directorios

Shares

PuertosRegistro

Auditoría y Logging

RedRed

RouterFirewallSwitch

AplicaciónAplicaciónValidación de INput

AutenticaciónAutorización

Gestión de ConfiguraciónDatos Sensibles

Gestión de SesionesCriptografía

Manipulación de ParámetrosGestión de Excepciones

Auditoría y Logging

Page 4: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Securizar la AplicaciónSecurizar la Aplicación

Validación de Datos de EntradaValidación de Datos de Entrada

AutentificaciónAutentificación

AutorizaciónAutorización

Gestión de ConfiguraciónGestión de Configuración

Datos SensiblesDatos Sensibles

Gestión de SesionesGestión de Sesiones

CriptografíaCriptografía

Manipulación de ParámetrosManipulación de Parámetros

Gestión de ExcepcionesGestión de Excepciones

Auditoría y LoggingAuditoría y Logging

Page 5: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Securizar la AplicaciónSecurizar la Aplicación Validación de Datos de Entrada Validación de Datos de Entrada

Ataques posibles:Ataques posibles:Desbordamiento de bufferDesbordamiento de bufferInyección de códigoInyección de códigoInyección SQLInyección SQLCross-Site Scripting (xss)Cross-Site Scripting (xss)

Entrada de datos:Entrada de datos:Cookies, cabeceras, campos html, controles Cookies, cabeceras, campos html, controles Viewstate,QueryStringViewstate,QueryStringServicios Web/Remoting/DCOMServicios Web/Remoting/DCOMDatos de base de datos, ficheros o fuentes Datos de base de datos, ficheros o fuentes remotasremotas

Siempre dudar de su contenido!!Siempre dudar de su contenido!!Validación de datos en servidorValidación de datos en servidor

Page 6: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

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

Validación de la entradaValidación de la entradaBuffer overrunsBuffer 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 7: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Validación de la entradaValidación de la entradaBuffer overrunsBuffer overruns

Causas más comunesCausas más comunesCopia de cadenasCopia de cadenas

ArraysArrays

Reserva de memoria insuficienteReserva de memoria insuficiente

DefensasDefensasUtilizar código manejadoUtilizar código manejado

Vigilar P/Invoke, código Vigilar P/Invoke, código unsafeunsafe

Usar con cuidado Usar con cuidado strcpystrcpy, , memcpymemcpyMejor equivalentes en Mejor equivalentes en strsafe.hstrsafe.h

Opción compilador C++: /GSOpción compilador C++: /GS

Page 8: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Validación de la entrada Validación de la entrada Inyección SQLInyección SQL

Qué es?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();

// ...

Page 9: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Validación de la entrada Validación de la entrada Inyección SQLInyecció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 10: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Validación de la entradaValidación de la entradaInyección SQLInyección SQL

Utilizar comandos parametrizablesUtilizar comandos parametrizables

Al menos minimizarloAl menos minimizarloValidar entrada en servidorValidar entrada en servidor

Usar cuentas SQL restringidasUsar cuentas SQL restringidas

No volcar mensajes de errorNo volcar mensajes de error

string sqlString="SELECT * FROM Orders WHERE CustomerID=@custID";

SqlCommand cmd = new SqlCommand(sqlString, conn);cmd.Parameters.Add("@custID", idCliente);

Page 11: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Inyección SQLInyección SQL

Page 12: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Validación de la entradaValidación de la entradaCross-site scriptingCross-site scripting

¿Que es XSS?¿Que es XSS?Un agujero de seguridad que permite al Un agujero de seguridad que permite al hacker ejecutar código script en un cliente hacker ejecutar código script en un cliente webweb

Dos entradas principalesDos entradas principalesContempladas (foros, emails, librerías…)Contempladas (foros, emails, librerías…)

Ocultas (querystring, campos HTML…)Ocultas (querystring, campos HTML…)

Efectos habitualesEfectos habitualesModificación del contenidoModificación del contenido

Envío de informaciónEnvío de información

Robo de sesiónRobo de sesión

Page 13: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Validación de la entradaValidación de la entradaAnatomía de una ataque XSSAnatomía de una ataque XSS

HackerHacker VictimaVictima

Sitio WebSitio Web

1.1. Envia correo al Envia correo al usuario con link a usuario con link a un sitio inocenteun sitio inocente 2. El usuario 2. El usuario

visita el visita el sitio websitio web

3. En el contexto del 3. En el contexto del usuario, el sitio envia usuario, el sitio envia datos a traves de un datos a traves de un

post malformadopost malformado

Page 14: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Validación de la entradaValidación de la entradaTipos de Cross-site scriptingTipos de Cross-site scripting

Tipo 0 – Local ó DOM-basedTipo 0 – Local ó DOM-basedUn script local accede a parametros request de la Un script local accede a parametros request de la

URL y los utiliza para construir código script.URL y los utiliza para construir código script.

Tipo 1 – No Persistente ó ReflejadaTipo 1 – No Persistente ó ReflejadaSe utilizan l os datos de entrada de formularios Se utilizan l os datos de entrada de formularios

para construir scripts, permitiendo la inyección para construir scripts, permitiendo la inyección de código.de código.

Tipo 2 – Persistente ó Segundo OrdenTipo 2 – Persistente ó Segundo OrdenEs la más poderosa. Los datos se almacenan en Es la más poderosa. Los datos se almacenan en

una bbdd y posteriormente se muestran a los una bbdd y posteriormente se muestran a los usuarios, inyectando el código continuamente.usuarios, inyectando el código continuamente.

Page 15: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Cross-site scriptingCross-site scripting

Page 16: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Validación de la entradaValidación de la entradaProtección contra Cross-site scriptingProtección contra Cross-site scripting

Validar y limpiar cualquier entradaValidar y limpiar cualquier entradaVigilar <script>, <object>…Vigilar <script>, <object>…

Especialmente la que es mostrada despuésEspecialmente la que es mostrada después

Utilizar Utilizar HttpOnlyHttpOnly en IE6.1 en IE6.1

Aprovechar ASP.NETAprovechar ASP.NETHTMLEncode para limpiarHTMLEncode para limpiar

ValidateRequest para validar todas las ValidateRequest para validar todas las entradasentradas

Page 17: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Autenticación falseableAutenticación falseableRobos de passwordsRobos de passwords

Nunca enviar por canales insegurosNunca enviar por canales insegurosCuidado con RPC, RemotingCuidado con RPC, Remoting

Proteger su almacenamientoProteger su almacenamientoEstablecer políticasEstablecer políticas

Utilizar hash con Utilizar hash con saltsalt

PasswordPassword

SHA1CryptoServiceProvider.ComputeHash

SaltSalt

HashHash

Page 18: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Autenticación falseableAutenticación falseableModificación de ticketModificación de ticket

ASP.NET utiliza tickets en forma de URL o ASP.NET utiliza tickets en forma de URL o cookiecookie

Robo de cookieRobo de cookieCuidado con XSSCuidado con XSS

Usar Usar RequireSSL y !PersistentRequireSSL y !Persistent

Modificación de cookieModificación de cookieSi contiene información del usuarioSi contiene información del usuario

Utilizar MACUtilizar MAC

Page 19: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Cookie TamperingCookie Tampering

Page 20: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

SumarioSumario

La gran mayoría de las aplicaciones La gran mayoría de las aplicaciones tienen agujeros de seguridadtienen agujeros de seguridad

Reglas de protecciónReglas de protecciónValidación de entradaValidación de entrada

Evitar SQL dinámicoEvitar SQL dinámico

Aplicar Encoding a toda la salidaAplicar Encoding a toda la salida

Ejecutar con los mínimos privilegiosEjecutar con los mínimos privilegios

Cifrar los secretos (connstr, pass’s, etc.)Cifrar los secretos (connstr, pass’s, etc.)

Minimizar la superficie de exposiciónMinimizar la superficie de exposición

Y si fallamos, hacerlo de modo privadoY si fallamos, hacerlo de modo privado

Page 21: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Próximas accionesPróximas acciones

8 Junio Evento Windows Workflow 8 Junio Evento Windows Workflow Mad.nugMad.nug

13 Junio. Seguridad Práctica para 13 Junio. Seguridad Práctica para EmpresasEmpresas

Hacking Web SitesHacking Web Sites

http://www.microsoft.com/spain/technethttp://www.microsoft.com/spain/technet

Page 22: Defensa contra ataques web comunes Isabel Gomez Isabelg@microsoft.com Miguel Jimenez miguel@ilitia.com .

Isabel Gomez - MicrosoftIsabel Gomez - [email protected]@microsoft.com

Miguel Jiménez – Ilitia / MAD.NUGMiguel Jiménez – Ilitia / [email protected]@ilitia.com