Seguridad en Aplicaciones Web 2.0Pablo VíquezNoviembre, 2009
2Acerca de…Pablo ViquezSeniorDeveloper  @ SchematicCo-Fundador de la comunidad Costa Rica PHPwww.pabloviquez.com@pabloviquez
3Agenda Web 2.0, ¿qué es?
 Seguridad, ¿por qué?
 Reglas básicas
 Ataques y vulnerabilidades comunes
 Ejemplos4Web 2.0
5Web 2.0“El término “Web 2.0” es comúnmente asociado con aplicaciones web que facilitan interactivamente el intercambio de información, interoperabilidad, diseño centrado en el usuario y colaboración”
6Web 2.0"Yo creo que Web 2.0 es pura basura, ni siquiera nadie sabe que significa""I think Web 2.0 is of course a piece of jargon, nobody even knows what it means"Tim Berners-Lee
7Web 2.0“No se refiere a un cambio técnico, sino a las maneras en que los desarrolladores y los usuarios hacen uso de las aplicaciones en la web”
8Web 2.0Crear software y distribuirloCrear servicios basados en información
9
10Seguridad
11"70% de los 100 sitios mas populares, han hospedado contenido malicioso ó han contenido redireccionamientospara víctimas de sitios legítimos a sitios maliciosos"(Websense, 2009)
12Seguridad
13Reglas Básicasnuncaconfíeen el usuariofiltre todo el input, limpie todo el outputevite las excusas!piense como hacker!deje que la seguridadsea parte de su diseño
14Ataques y vulnerabilidades comunes
15
16
17SQL InjectionInserción de datos adicionales en un “string” que eventualmente será ejecutado en la base de datos
SQL Injection :: Ejemplo18
SQL Injection :: Ejemplo19$_POST[‘usuario’] = usuario123$_POST[‘clave’] = 123456Página de loginDB
SQL Injection :: Ejemplo$login=$_POST['login'];$password=$_POST['password'];$sql="SELECT * FROM user                WHERE login = '$login‘               AND password = '$password'";20lo anterior dacomoresultado:"SELECT * FROM user          WHERE login = 'admin‘        AND password = '123456’";
SQL Injection :: Ejemplo21
SQL Injection :: Ejemplo22SELECT *  FROM user WHERE login = '$login'AND password = '$password'lo anterior dacomoresultado:SELECT *  FROM user  WHERE login = 'admin'   AND password = '1' OR 1=1 OR ''=''
23SQL InjectionInyección de consultas?val=(DELETE FROM table);Recolección de datosarbitrarios?id=column_nameDenial of Service?val=(BENCHMARK(100000000, MD5(RAND()));Modificación de Datos?val=(UPDATE users SET is_admin=1);
Filtrar la entrada del usuario.addslashes("Admin’ or 1=1");Usar las funciones específicas de la base de datosmysqli_real_escape_string("Admin’ or 1=1");Usarsentenciaspreparadas (prepared statements)24SQL_Injection::Soluciones
25XSS
XSS26
XSSConsiste en inyectar código ejecutable en el navegador.Este ataque puede ser llevado a cabo utilizando:HTMLJavaScriptVBScriptActiveXFlashCualquier otra tecnología que ejecute el cliente27
XSS28
XSS29(link con contenido malicioso)vvVíctimaAtacanteetc…ejecuta contenido maliciosoRoba datos del usuarioSito webcon vulnerabilidad
XSS30
31
32XSShttp://www.apple.com/itunes/affiliates/download/?artistName=MSG1&thumbnailUrl=http://url.jpg&itmsUrl=http://www.url.com&albumName=MSG
33
34
Stored XSS35pone contenido malicioso en el sitioAccesa el sitio con el problemavvVíctimaAtacanteejecuta contenido malicioso y roba los datos del usuarioSito webcon vulnerabilidad
Stored XSS36}
XSS – Robo de sesión37
XSS – Robo de claves38
XSS – Robo de claves39
XSS - Prevención40
XSS - FIEO41
XSS - FIEO42Hola Mundo<script>alert('Hola Mundo');</script>
XSS - FIEO43Hola Mundo<script>alert('Hola Mundo');</script>
44CSRF
CSRF – Como funciona45
46“Cualquier aplicación que acepta pedidos HTTP (HTTP Request) de un usuario autenticado sin tener algún tipo de control para verificar que el pedido HTTP es único a la sesión del usuario, esta expuesto a un ataque.”
CSRF – Ejemplos47Llena el formulario y envía un correo.
CSRF – Ejemplos48<formmethod=“post”action=“email.php”><input type=“hidden”name=“para”value=“soporte@sitio.com” />    ….</form>
CSRF – Ejemplos49Atacante<formmethod=“post”action=“email.php”><input type=“hidden”name=“para”value=“usr@dominio.com” />    …</form>
50CSRF::SolucionesToken de solo 1 uso:
CSRF::Soluciones51$_POST¿Tiene un “token” en la sesión y es válido?AtacantePedido denegado
52AtaquesLógicos
Ataquelógico – Ejemplos53
Ataquelógico – Ejemplos54<form>…<inputtype=“hidden”name=“total”value=“199.00” />…</form>

Seguridad de aplicaciones web 2.0