Вы находитесь на странице: 1из 22

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
Holística de la seguridad
Aplicación
Gestión de Sesiones
Validación de INput
Criptografía
Autenticación
Manipulación de Parámetros
Autorización
Gestión de Excepciones
Gestión de Configuración
Auditoría y Logging
Datos Sensibles

Red
Firewall

Firewall
Servidor
Router Servidor de Servidor
Firewall
Switch
Web Aplicacion de BD
es

Servidor
Puertos
Cuentas
Parches Registro
Ficheros y
Servicios Auditoría y
Directorios
Protocolos Logging
Shares
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
Validación de la entrada
Buffer overruns

void UnSafe (const char* datoSinValidar) Stack


{
0x01010101
char[4]
char variableLocal[4];
int otraVariableLocal; 0x01010101
int

strcpy (variableLocal, datoSinValidar); Return


0x0A3BA429
address
}

PUSH 0x00001234 0x01 0x01 0x01 0x01 datoSinValidar


PUSH [0x0A2EF4D9] 0x01 0x01 0x01 0x01
0x0A 0x3B 0xA4 0x29
CALL 0x0A3BA78C
0x00 0x14 0x5B 0xB1
0xDA 0xC1 0x42 ...
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
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();

// ...
Validación de la entrada
Inyección SQL

La gente buena introduce VINET


SELECT * FROM
Orders WHERE
CustomerID=‘VINET'

Los
Los malos
Losmalísimos
@*^# VINET’
VINET’;exec
VINET’;
OR DROP
1=1xp_cmdshell
--TABLE ORDERS
‘format
-- C:
SELECT
SELECT
* FROM
* FROM
Orders
Orders
WHERE
WHERE CustomerID=
CustomerID=‘VINET‘OR
CustomerID=‘VINET‘;
‘VINET‘;exec xp_cmdshell
DROP
1=1 --’
TABLE
‘format
ORDERS
C:’--’
Validación de la entrada
Inyección SQL
Utilizar comandos parametrizables
string sqlString="SELECT * FROM Orders
WHERE CustomerID=@custID";

SqlCommand cmd = new SqlCommand(sqlString, conn);


cmd.Parameters.Add("@custID", idCliente);

Al menos minimizarlo
Validar entrada en servidor
Usar cuentas SQL restringidas
No volcar mensajes de error
Inyección SQL
Validación de la entrada
Cross-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
Validación de la entrada
Anatomía de una ataque XSS

Hacker Victima
1. 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 Sitio Web
post malformado
Validación de la entrada
Tipos 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.
Cross-site scripting
Validación de la entrada
Protecció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 falseable
Robos 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 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
Cookie Tampering
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

Вам также может понравиться