On Github elcodigok / jornada2013
por Francisco J Capdevila / @pancho_jay y Daniel Maldonado / @elcodigok
Comunmente se utiliza una combinación de las anteriores.
OWASP es un proyecto de código abierto dedicado a determinar y combatir las causas que hacen que el software sea inseguro. La Fundación OWASP es un organismo sin ánimo de lucro que apoya y gestiona los proyectos e infraestructura de OWASP
OWASP desde año 2001 organiza diferentes actividades, reuniones de todos sus miembros, eventos, conferencias de seguridad y fomenta la creación de proyectos para mejorar la seguridad de los sistemas.
Corresponde a la inyección de código, siendo las inyecciones SQL una de las más comunes.
Corresponde al mal manejo de las sesiones en aquellas aplicaciones que utilizan autenticación.
Ocurre cuando existe validación pobre de la información ingresada por el atacante.
Puede derivar en un acceso no autorizado a información crítica debido a errores en el diseño o desarrollo.
Corresponde a configuraciones no adecuadas que pueden impactar en la seguridad de la propia aplicación.
Se refiere a la protección incorrecta de datos críticos tales como, por ejemplo, números de tarjetas de crédito, contraseñas, entre otros.
Corresponde a la falta de controles desde el servidor, permitiendo a un posible atacante acceder a funciones a las que no debería.
Permite a un atacante generar peticiones sobre una aplicación vulnerable a partir de la sesión de la víctima.
Corresponde a la explotación de librerías, frameworks y otros componentes vulnerables por parte de un atacante con el fin de obtener acceso o combinar con otros ataques.
Los atacantes aprovechan el uso de redirecciones de sitios web a otros sitios utilizando información no confiable (untrusted) para redirigir a las víctimas a sitios de phishing o que contienen malware.
Inyección SQL es un método de infiltración de código intruso que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para realizar consultas a una base de datos.
El origen de la vulnerabilidad radica en el incorrecto chequeo y/o filtrado de las variables utilizadas en un programa que contiene, o bien genera, código SQL. Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o script que esté embebido dentro de otro.
"SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario + "';"
' or '1'='1
"SELECT * FROM usuarios WHERE nombre = '' or '1'='1';"
"SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario + "';"
x'; DROP TABLE usuarios; --
"SELECT * FROM usuarios WHERE nombre = 'x'; DROP TABLE usuarios; --';"
Blind SQL Injection también conocido como Inyección de SQL a ciegas. La idea es basarse en los comportamiento de las consultas que pueden dar dos posibles resultados True o False
http://dominio.com/noticia.php?id=2
SELECT titulo, descripcion FROM noticia WHERE ID = 2
http://dominio.com/noticia.php?id=2 and 1=2
SELECT titulo, descripcion FROM noticia WHERE ID = 2 and 1=2
http://dominio.com/noticia.php?id=2 and 1=1
XSS o Cross-Site Scripting permite a una tercera persona inyectar código JavaScript en páginas web.
XSS es un vector de ataque que puede ser utilizado para robar información delicada, secuestrar sesiones de usuario, y comprometer el navegador, subyugando la integridad del sistema. Las vulnerabilidades XSS han existido desde los primeros días de la Web.
<body onload=alert('test1')>
<b onmouseover=alert('Wufff!')>click me!
<img src="http://url.to.file.which/not.exist" onerror=alert(document.cookie);>
<IMG """><SCRIPT>alert("XSS")</SCRIPT>">
</TITLE><SCRIPT>alert("XSS");</SCRIPT>
<A HREF="http://0x42.0x0000066.0x7.0x93/">XSS</A>
Corresponde a configuraciones no adecuadas que pueden impactar en la seguridad de la propia aplicación.
Para ello es necesario aplicar siempre los PRINCIPIOS DE FORTIFICACIÓN DE SISTEMAS.
Un servidor sólo debe exponerse en lo que sea estrictamente necesario para su rol, es decir, un Servidor Web no debe tener cargado el software de impresión y mucho menos ejecutando demonios de servicio de impresión en red.
Todo componente dentro de un sistema debe ejecutarse con los privilegios necesarios para cumplir con su rol y nada más. Un sitio web nunca debe correr como root porque no es necesario para dar servicio y lo único que puede suceder es que un atacante que consiga vulnerar el sitio obtenga esos privilegios de root en el sistema.
Se deben implementar todas las medidas de seguridad que sean posibles teniendo en cuanta dos factores:
Una medida de seguridad no debe anular a otra. El ejemplo más claro de esto es cifrar las comunicaciones e instalar un Sistema de Detección de Intrusiones de Red (NIDS), ya que el segundo no podría detectar ataques por red si se usan los canales cifrados. Las medidas de protección no pueden anular la utilidad de un sistema. Si las medidas de protección hacen que el sistema deje de dar servicio en tiempo útil entonces no son medidas viables.por Francisco J Capdevila / @pancho_jay y Daniel Maldonado / @elcodigok
descripcion
descripcion
descripcion
descripcion
descripcion
descripcion
descripcion
descripcion
descripcion
descripcion
Almacenamiento Inseguro de DatosInformación sensible es almacenada sin protección alguna o bien con seguridad débil.
static public void saveCredentials(Context context, String username, String password) { SharedPreferences credentials = context.getSharedPreferences( "userinfo", Context.MODE_WORLD_READABLE); // MUY MALA IDEA SharedPreferences.Editor editor = credentials.edit(); editor.putString("username", username); // Un poco mejor editor.putString("password", password); editor.putBoolean("remember", true); editor.commit(); }